diff --git a/js/ui/main.js b/js/ui/main.js index 015b4b620..936d74ee4 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -98,19 +98,21 @@ 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 e926ba2e7..7d6b2e4f6 100644 --- a/js/ui/sessionMode.js +++ b/js/ui/sessionMode.js @@ -158,12 +158,7 @@ function listModes() { const SessionMode = new Lang.Class({ Name: 'SessionMode', - _init: function() { - global.connect('notify::session-mode', Lang.bind(this, this._sync)); - this._modes = _modes; - this._modeStack = [DEFAULT_MODE]; - this._sync(); - + init: function() { _getModes(Lang.bind(this, function(modes) { this._modes = modes; let primary = modes[global.session_mode] && @@ -171,6 +166,8 @@ const SessionMode = new Lang.Class({ let mode = primary ? global.session_mode : 'user'; this._modeStack = [mode]; this._sync(); + + this.emit('sessions-loaded'); })); },