summaryrefslogtreecommitdiffstats
path: root/gnome-session/README
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gnome-session/README69
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.