Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <silbe@activitycentral.com>2011-07-29 20:50:37 (GMT)
committer Sascha Silbe <silbe@activitycentral.com>2011-12-20 12:56:01 (GMT)
commit32feb69b35293c34ef5a9e1889b0e706d4eed525 (patch)
tree6668c694d19c223a0caf266056df8d19dbc60e79
parent02fc210e9368c5b8d295cf5d715a827f7715bb48 (diff)
WIP: Use upstream gnome-session instead the copy shipped by sugar-toolkitgnome-session
sugar-toolkit ships an outdated copy of gnome-session. By using the upstream version instead we can benefit from work done by the GNOME developers, e.g. automatic start of accessibility helpers (and obviously bug fixes). This adds a dependency on gnome-session >= 2.91.4.
-rwxr-xr-xbin/sugar-session7
-rw-r--r--bin/sugar.in4
-rw-r--r--data/Makefile.am6
-rw-r--r--data/metacity-sugar.desktop5
-rw-r--r--data/sugar-session.desktop6
-rw-r--r--data/sugar.session5
-rw-r--r--src/jarabe/controlpanel/gui.py5
-rw-r--r--src/jarabe/model/session.py81
-rw-r--r--src/jarabe/view/buddymenu.py8
-rw-r--r--src/jarabe/view/keyhandler.py2
10 files changed, 52 insertions, 77 deletions
diff --git a/bin/sugar-session b/bin/sugar-session
index 40c9db7..b467c26 100755
--- a/bin/sugar-session
+++ b/bin/sugar-session
@@ -80,12 +80,6 @@ def start_ui_service():
ui_service = UIService()
-def start_session_manager():
- from jarabe.model.session import get_session_manager
-
- session_manager = get_session_manager()
- session_manager.start()
-
def unfreeze_dcon_cb():
logging.debug('STARTUP: unfreeze_dcon_cb')
from jarabe.model import screen
@@ -252,7 +246,6 @@ def main():
intro.check_profile()
start_ui_service()
- start_session_manager()
sound.restore()
diff --git a/bin/sugar.in b/bin/sugar.in
index 12098db..9a79527 100644
--- a/bin/sugar.in
+++ b/bin/sugar.in
@@ -77,6 +77,4 @@ if [ -f ~/.sugar/debug ]; then
fi
echo Xcursor.theme: sugar | xrdb -merge
-metacity --no-force-fullscreen -d $DISPLAY &
-
-exec sugar-session
+exec gnome-session --session=sugar
diff --git a/data/Makefile.am b/data/Makefile.am
index 6a62d23..eb2f8cc 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -23,8 +23,12 @@ GTKRC_FILES = \
xsessionsdir = $(datadir)/xsessions
xsessions_DATA = sugar.desktop
+gnomesessiondir = $(datadir)/gnome-session/sessions
+gnomesession_DATA = sugar.session
+
applicationsdir = $(datadir)/applications
-applications_DATA = sugar-emulator.desktop
+applications_DATA = sugar-emulator.desktop sugar-session.desktop \
+ metacity-sugar.desktop
mime_xml_in_files = sugar.xml.in
mime_xml_files = $(mime_xml_in_files:.xml.in=.xml)
diff --git a/data/metacity-sugar.desktop b/data/metacity-sugar.desktop
new file mode 100644
index 0000000..d3b23f9
--- /dev/null
+++ b/data/metacity-sugar.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Metacity for Sugar
+Exec=metacity --no-force-fullscreen
+Type=Application
+NoDisplay=true
diff --git a/data/sugar-session.desktop b/data/sugar-session.desktop
new file mode 100644
index 0000000..57bf30e
--- /dev/null
+++ b/data/sugar-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=Sugar session
+Comment=A combination of all core parts of the Sugar desktop: Neighbourhood, Group View, Home View, Journal and the Frame.
+Exec=sugar-session
+Type=Application
+NoDisplay=true
diff --git a/data/sugar.session b/data/sugar.session
new file mode 100644
index 0000000..5b163e8
--- /dev/null
+++ b/data/sugar.session
@@ -0,0 +1,5 @@
+[GNOME Session]
+Name=Sugar
+RequiredComponents=sugar-session;
+RequiredProviders=windowmanager;
+DefaultProvider-windowmanager=metacity-sugar
diff --git a/src/jarabe/controlpanel/gui.py b/src/jarabe/controlpanel/gui.py
index 46810aa..85ea6bb 100644
--- a/src/jarabe/controlpanel/gui.py
+++ b/src/jarabe/controlpanel/gui.py
@@ -25,7 +25,7 @@ from sugar.graphics.icon import Icon
from sugar.graphics import style
from sugar.graphics.alert import Alert
-from jarabe.model.session import get_session_manager
+from jarabe.model import session
from jarabe.controlpanel.toolbar import MainToolbar
from jarabe.controlpanel.toolbar import SectionToolbar
from jarabe import config
@@ -330,8 +330,7 @@ class ControlPanel(gtk.Window):
self._section_view.restart_alerts
self._show_main_view()
elif response_id is gtk.RESPONSE_APPLY:
- session_manager = get_session_manager()
- session_manager.logout()
+ session.logout()
def __select_option_cb(self, button, event, option):
self.show_section_view(option)
diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py
index 9b277ff..bab155c 100644
--- a/src/jarabe/model/session.py
+++ b/src/jarabe/model/session.py
@@ -1,5 +1,3 @@
-# Copyright (C) 2008, Red Hat, Inc.
-#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
@@ -21,72 +19,39 @@ import signal
import sys
import logging
-from sugar import session
from sugar import env
-_session_manager = None
-
-
-class SessionManager(session.SessionManager):
- MODE_LOGOUT = 0
- MODE_SHUTDOWN = 1
- MODE_REBOOT = 2
-
- def __init__(self):
- session.SessionManager.__init__(self)
- self._logout_mode = None
-
- def logout(self):
- self._logout_mode = self.MODE_LOGOUT
- self.initiate_shutdown()
-
- def shutdown(self):
- self._logout_mode = self.MODE_SHUTDOWN
- self.initiate_shutdown()
+GNOME_SESSION_DBUS_SERVICE = 'org.gnome.SessionManager'
+GNOME_SESSION_DBUS_INTERFACE = 'org.gnome.SessionManager'
+GNOME_SESSION_DBUS_PATH = '/org/gnome/SessionManager'
- def reboot(self):
- self._logout_mode = self.MODE_REBOOT
- self.initiate_shutdown()
- def shutdown_completed(self):
- if env.is_emulator():
- self._close_emulator()
- elif self._logout_mode != self.MODE_LOGOUT:
- try:
- bus = dbus.SystemBus()
- proxy = bus.get_object('org.freedesktop.ConsoleKit',
- '/org/freedesktop/ConsoleKit/Manager')
- pm = dbus.Interface(proxy,
- 'org.freedesktop.ConsoleKit.Manager')
+def logout():
+ _end_session('logout')
- if self._logout_mode == self.MODE_SHUTDOWN:
- pm.Stop()
- elif self._logout_mode == self.MODE_REBOOT:
- pm.Restart()
- except:
- logging.exception('Can not stop sugar')
- self.session.cancel_shutdown()
- return
- session.SessionManager.shutdown_completed(self)
- gtk.main_quit()
+def shutdown():
+ _end_session('shutdown')
- def _close_emulator(self):
- gtk.main_quit()
- if 'SUGAR_EMULATOR_PID' in os.environ:
- pid = int(os.environ['SUGAR_EMULATOR_PID'])
- os.kill(pid, signal.SIGTERM)
+def reboot():
+ _end_session('reboot')
- # Need to call this ASAP so the atexit handlers get called before we
- # get killed by the X (dis)connection
- sys.exit()
+def _end_session(mode):
+ if env.is_emulator():
+ mode = 'logout'
-def get_session_manager():
- global _session_manager
+ bus = dbus.SessionBus()
+ obj = bus.get_object(GNOME_SESSION_DBUS_SERVICE, GNOME_SESSION_DBUS_PATH)
+ session_manager = dbus.Interface(obj, GNOME_SESSION_DBUS_INTERFACE)
- if _session_manager == None:
- _session_manager = SessionManager()
- return _session_manager
+ if mode in ['shutdown', 'reboot']:
+ # FIXME: There's no way to trigger a reboot.
+ # FIXME: The Shutdown dialog only has a Cancel button, so the user
+ # needs to wait 50 seconds.
+ session_manager.Shutdown()
+ elif mode == 'logout':
+ # 1 = Don't show confirmation UI
+ session_manager.Logout(1)
diff --git a/src/jarabe/view/buddymenu.py b/src/jarabe/view/buddymenu.py
index de5a772..7205c11 100644
--- a/src/jarabe/view/buddymenu.py
+++ b/src/jarabe/view/buddymenu.py
@@ -29,7 +29,7 @@ from sugar.graphics.icon import Icon
from jarabe.model import shell
from jarabe.model import friends
-from jarabe.model.session import get_session_manager
+from jarabe.model import session
from jarabe.controlpanel.gui import ControlPanel
import jarabe.desktop.homewindow
@@ -113,13 +113,13 @@ class BuddyMenu(Palette):
home_window.busy_during_delayed_action(action)
def __logout_activate_cb(self, menu_item):
- self._quit(get_session_manager().logout)
+ self._quit(session.logout)
def __reboot_activate_cb(self, menu_item):
- self._quit(get_session_manager().reboot)
+ self._quit(session.reboot)
def __shutdown_activate_cb(self, menu_item):
- self._quit(get_session_manager().shutdown)
+ self._quit(session.shutdown)
def __controlpanel_activate_cb(self, menu_item):
panel = ControlPanel()
diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py
index d79bfe6..8af38d1 100644
--- a/src/jarabe/view/keyhandler.py
+++ b/src/jarabe/view/keyhandler.py
@@ -183,7 +183,7 @@ class KeyHandler(object):
self._frame.notify_key_press()
def handle_quit_emulator(self, event_time):
- session.get_session_manager().shutdown()
+ session.shutdown()
def handle_open_search(self, event_time):
journalactivity.get_journal().focus_search()