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 --- (limited to 'bin') 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() -- cgit v0.9.1