From 26ba76b965984ddc8681a3c25ee075a6664c98ef Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Tue, 13 Oct 2009 15:13:30 +0000 Subject: Suppress race condition with Journal appearing on sugar startup #1373 --- diff --git a/bin/sugar-session b/bin/sugar-session index 427eeb8..f06479d 100755..100644 --- a/bin/sugar-session +++ b/bin/sugar-session @@ -19,6 +19,7 @@ import os import sys import time +import subprocess if os.environ.get('SUGAR_LOGGER_LEVEL', '') == 'debug': print '%r STARTUP: Starting the shell' % time.time() @@ -31,6 +32,7 @@ import gconf import gtk import gobject import dbus.glib +import wnck try: import xklavier @@ -136,8 +138,11 @@ def setup_file_transfer_cb(): from jarabe.model import filetransfer filetransfer.init() -def setup_keyboard_cb(gconf_client): +def setup_keyboard_cb(): logging.debug('STARTUP: setup_keyboard_cb') + + gconf_client = gconf.client_get_default() + try: display = gtk.gdk.display_get_default() if display is not None: @@ -176,6 +181,32 @@ def setup_keyboard_cb(gconf_client): except Exception: logging.exception('Error during keyboard configuration') +def setup_window_manager(): + logging.debug('STARTUP: window_manager') + + # have to reset cursor(metacity sets it on startup) + if subprocess.call('echo $DISPLAY; xsetroot -cursor_name left_ptr', shell=True): + logging.warning('Can not reset cursor') + + if subprocess.call('metacity-message disable-keybindings', + shell=True): + logging.warning('Can not disable metacity keybindings') + +def bootstrap(): + setup_window_manager() + launcher.setup() + + gobject.idle_add(unfreeze_dcon_cb) + gobject.idle_add(setup_frame_cb) + gobject.idle_add(setup_keyhandler_cb) + gobject.idle_add(setup_journal_cb) + gobject.idle_add(setup_notification_service_cb) + gobject.idle_add(setup_file_transfer_cb) + gobject.idle_add(show_software_updates_cb) + + if sys.modules.has_key('xklavier'): + gobject.idle_add(setup_keyboard_cb) + def main(): cleanup_logs() logger.start('shell') @@ -200,25 +231,22 @@ def main(): icons_path = os.path.join(config.data_path, 'icons') gtk.icon_theme_get_default().append_search_path(icons_path) - launcher.setup() - + # open homewindow before window_manager to let desktop appear fast home_window = homewindow.get_instance() home_window.show() - gobject.idle_add(unfreeze_dcon_cb) - gobject.idle_add(setup_frame_cb) - gobject.idle_add(setup_keyhandler_cb) - gobject.idle_add(setup_journal_cb) - gobject.idle_add(setup_notification_service_cb) - gobject.idle_add(setup_file_transfer_cb) - gobject.idle_add(show_software_updates_cb) - - if sys.modules.has_key('xklavier'): - gobject.idle_add(setup_keyboard_cb, client) + screen = wnck.screen_get_default() + screen.connect('window-manager-changed', __window_manager_changed_cb) try: gtk.main() except KeyboardInterrupt: print 'Ctrl+C pressed, exiting...' +def __window_manager_changed_cb(screen): + wm_name = screen.get_window_manager_name() + if wm_name is not None: + screen.disconnect_by_func(__window_manager_changed_cb) + bootstrap() + main() diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py index 8693e26..de5a66f 100644 --- a/src/jarabe/model/shell.py +++ b/src/jarabe/model/shell.py @@ -17,7 +17,6 @@ import logging import time -import subprocess import gconf import wnck @@ -323,8 +322,6 @@ class ShellModel(gobject.GObject): self._screen.connect('window-closed', self._window_closed_cb) self._screen.connect('active-window-changed', self._active_window_changed_cb) - self._screen.connect('window-manager-changed', - self.__window_manager_changed_cb) self.zoom_level_changed = dispatch.Signal() @@ -594,21 +591,6 @@ class ShellModel(gobject.GObject): self.notify_launch_failed(activity_id) return False - def __window_manager_changed_cb(self, screen): - wm_name = screen.get_window_manager_name() - if wm_name is not None: - logging.debug('Setup %s wm', wm_name) - self._setup_wm() - - def _setup_wm(self): - # have to reset cursor(metacity sets it on startup) - if subprocess.call('xsetroot -cursor_name left_ptr', shell=True): - logging.warning('Can not reset cursor') - - if subprocess.call('metacity-message disable-keybindings', - shell=True): - logging.warning('Can not disable metacity keybindings') - _model = None -- cgit v0.9.1