69 lines
3 KiB
Text
69 lines
3 KiB
Text
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.
|