Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/jarabe/main.py')
-rwxr-xr-xsrc/jarabe/main.py103
1 files changed, 69 insertions, 34 deletions
diff --git a/src/jarabe/main.py b/src/jarabe/main.py
index c56576d..fc64439 100755
--- a/src/jarabe/main.py
+++ b/src/jarabe/main.py
@@ -67,6 +67,12 @@ from jarabe.intro.window import IntroWindow
from jarabe import frame
from jarabe.view.service import UIService
+
+_metacity_process = None
+_window_manager_started = False
+_starting_desktop = False
+
+
def unfreeze_dcon_cb():
logging.debug('STARTUP: unfreeze_dcon_cb')
screen.set_dcon_freeze(0)
@@ -114,9 +120,10 @@ def setup_window_manager():
shell=True):
logging.warning('Can not disable metacity mouse button modifiers')
-def bootstrap():
- setup_window_manager()
+def __window_manager_changed_cb(screen):
+ _check_for_window_manager(screen)
+def _complete_desktop_startup():
launcher.setup()
GObject.idle_add(setup_frame_cb)
@@ -127,28 +134,40 @@ def bootstrap():
GObject.idle_add(setup_file_transfer_cb)
GObject.idle_add(show_software_updates_cb)
- keyboard.setup()
+def _check_for_window_manager(screen):
+ wm_name = screen.get_window_manager_name()
+ if wm_name is None:
+ return
-def setup_fonts():
- client = GConf.Client.get_default()
- face = client.get_string('/desktop/sugar/font/default_face')
- size = client.get_float('/desktop/sugar/font/default_size')
- settings = Gtk.Settings.get_default()
- settings.set_property("gtk-font-name", "%s %f" % (face, size))
+ screen.disconnect_by_func(__window_manager_changed_cb)
-def setup_theme():
- settings = Gtk.Settings.get_default()
- sugar_theme = 'sugar-72'
- if 'SUGAR_SCALING' in os.environ:
- if os.environ['SUGAR_SCALING'] == '100':
- sugar_theme = 'sugar-100'
- settings.set_property('gtk-theme-name', sugar_theme)
- settings.set_property('gtk-icon-theme-name', 'sugar')
+ setup_window_manager()
- icons_path = os.path.join(config.data_path, 'icons')
- Gtk.IconTheme.get_default().append_search_path(icons_path)
+ global window_manager_started
+ window_manager_started = True
+
+ global _starting_desktop
+ if _starting_desktop:
+ _complete_desktop_startup()
+
+def _start_window_manager():
+ global _metacity_process
+
+ _metacity_process = subprocess.Popen(['metacity', '--no-force-fullscreen'])
+
+ screen = Wnck.Screen.get_default()
+ screen.connect('window-manager-changed', __window_manager_changed_cb)
+
+ _check_for_window_manager(screen)
+
+def _stop_window_manager():
+ global _metacity_process
+ _metacity_process.terminate()
+
+def _begin_desktop_startup():
+ global _starting_desktop
+ _starting_desktop = True
-def start_home():
ui_service = UIService()
session_manager = get_session_manager()
@@ -158,21 +177,12 @@ def start_home():
home_window = homewindow.get_instance()
home_window.show()
- screen = Wnck.Screen.get_default()
- screen.connect('window-manager-changed', __window_manager_changed_cb)
- _check_for_window_manager(screen)
-
def __intro_window_done_cb(window):
- start_home()
+ _begin_desktop_startup()
-def __window_manager_changed_cb(screen):
- _check_for_window_manager(screen)
-
-def _check_for_window_manager(screen):
- wm_name = screen.get_window_manager_name()
- if wm_name is not None:
- screen.disconnect_by_func(__window_manager_changed_cb)
- bootstrap()
+ global window_manager_started
+ if window_manager_started:
+ _complete_desktop_startup()
def cleanup_temporary_files():
try:
@@ -197,6 +207,26 @@ def setup_locale():
if timezone is not None and timezone:
os.environ['TZ'] = timezone
+def setup_fonts():
+ client = GConf.Client.get_default()
+ face = client.get_string('/desktop/sugar/font/default_face')
+ size = client.get_float('/desktop/sugar/font/default_size')
+ settings = Gtk.Settings.get_default()
+ settings.set_property("gtk-font-name", "%s %f" % (face, size))
+
+def setup_theme():
+ settings = Gtk.Settings.get_default()
+ sugar_theme = 'sugar-72'
+ if 'SUGAR_SCALING' in os.environ:
+ if os.environ['SUGAR_SCALING'] == '100':
+ sugar_theme = 'sugar-100'
+ settings.set_property('gtk-theme-name', sugar_theme)
+ settings.set_property('gtk-icon-theme-name', 'sugar')
+
+ icons_path = os.path.join(config.data_path, 'icons')
+ Gtk.IconTheme.get_default().append_search_path(icons_path)
+
+
def main():
GLib.threads_init()
Gdk.threads_init()
@@ -205,6 +235,8 @@ def main():
cleanup_temporary_files()
+ _start_window_manager()
+
setup_locale()
client = GConf.Client.get_default()
@@ -225,6 +257,7 @@ def main():
logging.warning('Can not reset cursor')
sound.restore()
+ keyboard.setup()
sys.path.append(config.ext_path)
@@ -233,11 +266,13 @@ def main():
win.connect("done", __intro_window_done_cb)
win.show_all()
else:
- start_home()
+ _begin_desktop_startup()
try:
Gtk.main()
except KeyboardInterrupt:
print 'Ctrl+C pressed, exiting...'
+ _stop_window_manager()
+
main()