diff options
Diffstat (limited to '')
-rw-r--r-- | gnome-session/README | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/gnome-session/README b/gnome-session/README new file mode 100644 index 0000000..f0bd4cc --- /dev/null +++ b/gnome-session/README @@ -0,0 +1,69 @@ +See also http://live.gnome.org/SessionManagement/NewGnomeSession + +Startup +------- + +main() creates the GsmSession object representing the session (either +failsafe or normal). gsm_session_new() reads the appropriate autostart +and session files to create a list of GsmApps to be started. +(GsmAppAutostart represents an autostarted app, and GsmAppResumed +represents an app resumed from the previous saved session.) + +Startup is divided into 7 phases (GsmManagerPhase): + + * GSM_MANAGER_PHASE_STARTUP covers gnome-session's internal + startup, which also includes starting dbus-daemon (if + it's not already running). Gnome-session starts up those + explicitly because it needs them for its own purposes. + + * GSM_MANAGER_PHASE_EARLY_INITIALIZATION is the first phase of + "normal" startup (ie, startup controlled by .desktop files + rather than hardcoding). It covers the possible installation of + files in $HOME by gnome-initial-setup and must be done before + other components such as gnome-keyring use those files. + + * GSM_MANAGER_PHASE_INITIALIZATION covers low-level stuff like + gnome-settings-daemon helpers, that need to be + running very early (before any windows are displayed). + + Apps in this phase can make use of a D-Bus interface + (org.gnome.SessionManager.Setenv) to set environment variables + in gnome-session's environment. This can be used for things like + $GTK_MODULES, $GNOME_KEYRING_SOCKET, etc + + * GSM_MANAGER_PHASE_WINDOW_MANAGER includes window managers and + compositing managers, and anything else that has to be running + before any windows are mapped + + * GSM_MANAGER_PHASE_PANEL includes anything that permanently takes + up screen real estate (via EWMH struts). This is the first phase + where things actually appear on the screen. + + * GSM_MANAGER_PHASE_DESKTOP includes anything that draws directly + on the desktop (eg, nautilus). + + * GSM_MANAGER_PHASE_APPLICATION is everything else (normal apps, + tray icons, etc) + +For each startup phase, GsmSession launches the appropriate GsmApps. +When apps connect to the XSMP or D-Bus servers, GsmClients are created +and added to the session. The session tries to map these clients to +GsmApps. GsmApps signal when they register (via XSMP or SN) or exit, +and GsmSession uses this to decide when the phase is complete. + +FIXME: after starting the session, we need to run the DiscardCommands +of resumed apps. + + +Running/Shutdown +---------------- + +GSM_MANAGER_PHASE_RUNNING is pretty similar to the old gnome-session; +mostly it just tracks XSMP clients, and watches for +SmRestartImmediately clients exiting (NOTE: THIS DOESN'T HAPPEN YET). + +GsmClient is in theory not XSMP-specific, but it's very very +XSMP-like, and the shutdown procedure is also very XSMP-like. This is +just because there's no way to do XSMP shutdown correctly otherwise. +However, GsmClientDBus will still be able to present a more sane +protocol to its clients than GsmClient presents to it. |