sugar-toolkit-gtk3/shell/Shell.py

109 lines
3.0 KiB
Python
Raw Normal View History

2006-07-12 17:21:22 +02:00
import os
2006-07-06 23:34:23 +02:00
import dbus
2006-07-08 15:47:51 +02:00
import gtk
import wnck
2006-07-12 22:17:57 +02:00
import gobject
2006-07-06 23:34:23 +02:00
from sugar.LogWriter import LogWriter
from ConsoleLogger import ConsoleLogger
from ActivityRegistry import ActivityRegistry
2006-07-08 15:47:51 +02:00
from HomeWindow import HomeWindow
from sugar import keybindings
2006-07-12 17:21:22 +02:00
from sugar import env
from sugar.activity import Activity
from PeopleWindow import PeopleWindow
from Owner import ShellOwner
from PresenceService import PresenceService
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 __show_people_idle(self):
self._shell.show_people()
@dbus.service.method('com.redhat.Sugar.Shell')
def show_people(self):
gobject.idle_add(self.__show_people_idle)
@dbus.service.method('com.redhat.Sugar.Shell')
def toggle_console(self):
self._shell.toggle_console()
2006-07-06 23:34:23 +02:00
2006-07-12 14:02:29 +02:00
class Shell:
2006-07-06 23:34:23 +02:00
def __init__(self):
self._screen = wnck.screen_get_default()
2006-07-06 23:34:23 +02:00
def start(self):
self._console = ConsoleLogger()
keybindings.setup_global_keys(self._console.get_window(), self)
2006-07-06 23:34:23 +02:00
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._ps = PresenceService.PresenceService()
self._owner = ShellOwner()
2006-07-08 15:47:51 +02:00
self._registry = ActivityRegistry()
2006-07-12 17:21:22 +02:00
self._registry.scan_directory(env.get_activities_dir())
self._registry.scan_directory(os.path.join(env.get_user_dir(), 'activities'))
self._home_window = HomeWindow(self)
keybindings.setup_global_keys(self._home_window, self)
self._home_window.show()
self._people_windows = {}
def _toggle_window_visibility(self, window):
if window.get_property('visible'):
window.hide()
else:
window.show()
def get_activity_from_xid(self, xid):
bus = dbus.SessionBus()
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')
2006-07-19 18:35:37 +02:00
def get_activity_window(self):
return self._screen.get_active_window()
def __people_window_delete_cb(self, window, event):
window.hide()
return True
def show_people(self):
2006-07-19 18:35:37 +02:00
activity_window = self.get_activity_window()
if activity_window:
xid = activity_window.get_xid()
activity = self.get_activity_from_xid(xid)
activity_id = activity.get_id()
if not self._people_windows.has_key(activity_id):
window = PeopleWindow(self, activity)
window.connect('delete-event', self.__people_window_delete_cb)
keybindings.setup_global_keys(window, self)
self._people_windows[activity_id] = window
else:
window = self._people_windows[activity_id]
2006-07-19 18:35:37 +02:00
window.show()
foreign_activity_win = gtk.gdk.window_foreign_new(xid)
window.window.set_transient_for(foreign_activity_win)
def toggle_console(self):
self._toggle_window_visibility(self._console.get_window())
2006-07-08 15:47:51 +02:00
def get_registry(self):
return self._registry