diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-07-09 15:37:54 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-07-09 15:37:54 (GMT) |
commit | 1cc14e406a62a015067446976d149a1f60de5197 (patch) | |
tree | 8f0f66f65da26b55c93e0bd7503f9f315d76cc87 /shell/Shell.py | |
parent | d4cb9a27149126de64fb003aafb8673633b885b0 (diff) |
More work on the window management refactor
Diffstat (limited to 'shell/Shell.py')
-rwxr-xr-x | shell/Shell.py | 108 |
1 files changed, 87 insertions, 21 deletions
diff --git a/shell/Shell.py b/shell/Shell.py index dd222da..bb79e5d 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -1,13 +1,36 @@ import dbus import gtk import gobject +import wnck from sugar.LogWriter import LogWriter -from WindowManager import WindowManager from ConsoleLogger import ConsoleLogger -from ActivityContainer import ActivityContainer from ActivityRegistry import ActivityRegistry from HomeWindow import HomeWindow +from sugar import keybindings +from sugar.activity import Activity +from PresenceWindow import PresenceWindow +from sugar.chat.ActivityChat import ActivityChat + +class ShellDbusService(dbus.service.Object): + def __init__(self, shell, bus_name): + dbus.service.Object.__init__(self, bus_name, '/com/redhat/Sugar/Shell') + self._shell = shell + + def __toggle_people_idle(self): + self._shell.toggle_people() + + @dbus.service.method('com.redhat.Sugar.Shell') + def toggle_people(self): + gobject.idle_add(self.__toggle_people_idle) + + @dbus.service.method('com.redhat.Sugar.Shell') + def toggle_home(self): + self._shell.toggle_home() + + @dbus.service.method('com.redhat.Sugar.Shell') + def toggle_console(self): + self._shell.toggle_console() class Shell(gobject.GObject): __gsignals__ = { @@ -19,32 +42,75 @@ class Shell(gobject.GObject): gobject.GObject.__init__(self) def start(self): - console = ConsoleLogger() + self._console = ConsoleLogger() + keybindings.setup_global_keys(self._console.get_window(), self) log_writer = LogWriter("Shell", False) log_writer.start() + session_bus = dbus.SessionBus() + bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus) + ShellDbusService(self, bus_name) + self._registry = ActivityRegistry() - root_window = gtk.Window() - root_window.set_title('Sugar') - wm = WindowManager(root_window) - wm.set_type(WindowManager.TYPE_ROOT) - wm.show() - - home_window = HomeWindow(self) - home_window.set_transient_for(root_window) - wm = WindowManager(home_window) - wm.set_type(WindowManager.TYPE_POPUP) - wm.set_animation(WindowManager.ANIMATION_SLIDE_IN) - wm.set_geometry(0.1, 0.1, 0.8, 0.8) - wm.set_key(gtk.keysyms.F2) - wm.show() + self._home_window = HomeWindow(self) + keybindings.setup_global_keys(self._home_window, self) + self._home_window.show() + + self._presence_window = PresenceWindow(self) + self._presence_window.set_skip_taskbar_hint(True) + keybindings.setup_global_keys(self._presence_window, self) + + self._chat_windows = {} + + def _toggle_window_visibility(self, window): + if window.get_property('visible'): + window.hide() + else: + window.show() + + def toggle_home(self): + self._toggle_window_visibility(self._home_window) + + def get_current_activity(self): + window = wnck.screen_get_default().get_active_window() + if window and not window.is_skip_tasklist(): + bus = dbus.SessionBus() + xid = window.get_xid() + service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid + path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid + proxy_obj = bus.get_object(service, path) + return dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity') + else: + return None + + def toggle_people(self): + activity = self.get_current_activity() + + if activity: + activity_id = activity.get_id() + + if not self._chat_windows.has_key(activity_id): + window = gtk.Window() + window.set_skip_taskbar_hint(True) + keybindings.setup_global_keys(window, self) + chat = ActivityChat(activity) + window.add(chat) + chat.show() + self._chat_windows[activity_id] = window + self._toggle_window_visibility(self._chat_windows[activity_id]) + + self._presence_window.set_activity(activity) + self._toggle_window_visibility(self._presence_window) + else: + self._presence_window.hide() + for window in self._chat_windows.values(): + window.hide() + + def toggle_console(self): + self._toggle_window_visibility(self._console.get_window()) - session_bus = dbus.SessionBus() - service = dbus.service.BusName("com.redhat.Sugar.Shell", bus=session_bus) - activity_container = ActivityContainer(service, session_bus) - def get_registry(self): return self._registry |