diff --git a/js/ui/main.js b/js/ui/main.js index 936d74ee4..015b4b620 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -98,21 +98,19 @@ function start() { Gio.DesktopAppInfo.set_desktop_env('GNOME'); + sessionMode = new SessionMode.SessionMode(); + + // start session after we know what mode we're running in + let signalId = sessionMode.connect('updated', function() { + sessionMode.disconnect(signalId); + startSession(); + }); +} + +function startSession() { shellDBusService = new ShellDBus.GnomeShell(); shellMountOpDBusService = new ShellMountOperation.GnomeShellMountOpHandler(); - sessionMode = new SessionMode.SessionMode(); - sessionMode.connect('sessions-loaded', _sessionsLoaded); - sessionMode.init(); -} - -function _sessionsLoaded() { - sessionMode.connect('updated', _sessionUpdated); - _initializeUI(); - _sessionUpdated(); -} - -function _initializeUI() { // Ensure ShellWindowTracker and ShellAppUsage are initialized; this will // also initialize ShellAppSystem first. ShellAppSystem // needs to load all the .desktop files, and ShellWindowTracker diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js index 7d6b2e4f6..e926ba2e7 100644 --- a/js/ui/sessionMode.js +++ b/js/ui/sessionMode.js @@ -158,7 +158,12 @@ function listModes() { const SessionMode = new Lang.Class({ Name: 'SessionMode', - init: function() { + _init: function() { + global.connect('notify::session-mode', Lang.bind(this, this._sync)); + this._modes = _modes; + this._modeStack = [DEFAULT_MODE]; + this._sync(); + _getModes(Lang.bind(this, function(modes) { this._modes = modes; let primary = modes[global.session_mode] && @@ -166,8 +171,6 @@ const SessionMode = new Lang.Class({ let mode = primary ? global.session_mode : 'user'; this._modeStack = [mode]; this._sync(); - - this.emit('sessions-loaded'); })); },