Several fixes and cleanups

This commit is contained in:
Marco Pesenti Gritti 2006-08-09 18:29:33 +02:00
parent 95d9b7fe8e
commit 0dcaf314f7
5 changed files with 30 additions and 28 deletions

View File

@ -5,18 +5,19 @@ from sugar.activity import Activity
from PeopleWindow import PeopleWindow
class ActivityHost:
def __init__(self, shell, xid):
def __init__(self, shell, window):
self._shell = shell
self._xid = xid
xid = window.get_xid()
bus = dbus.SessionBus()
path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid
proxy_obj = bus.get_object(Activity.ACTIVITY_SERVICE_NAME, path)
proxy_obj = bus.get_object(Activity.get_service_name(xid),
Activity.get_object_path(xid))
self._activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE)
self._id = self._activity.get_id()
self._default_type = self._activity.get_default_type()
self._window = gtk.gdk.window_foreign_new(xid)
self._window = gtk.gdk.window_foreign_new(window.get_xid())
self._people_window = PeopleWindow(shell, self)
def get_id(self):

View File

@ -111,7 +111,7 @@ class PresenceView(gtk.VBox):
if buddy:
chat_service = buddy.get_service_of_type(BuddyChat.SERVICE_TYPE)
activity = self._shell.start_activity('com.redhat.Sugar.ChatActivity')
#activity.execute('start', [chat_service.object_path()])
activity.execute('start', [chat_service.object_path()])
def __buddy_icon_changed_cb(self, buddy):
it = self._get_iter_for_buddy(buddy)

View File

@ -17,6 +17,7 @@ from sugar.presence.PresenceService import PresenceService
from ActivityHost import ActivityHost
from ChatController import ChatController
from sugar.activity import ActivityFactory
from sugar.activity import Activity
class ShellDbusService(dbus.service.Object):
def __init__(self, shell, bus_name):
@ -73,8 +74,7 @@ class Shell:
def __window_opened_cb(self, screen, window):
if window.get_window_type() == wnck.WINDOW_NORMAL:
xid = window.get_xid()
self._hosts[xid] = ActivityHost(self, xid)
self._hosts[window.get_xid()] = ActivityHost(self, window)
def __window_closed_cb(self, screen, window):
if window.get_window_type() == wnck.WINDOW_NORMAL:

View File

@ -1,3 +1,5 @@
import os
import dbus
import dbus.service
import gtk
@ -10,25 +12,23 @@ ACTIVITY_SERVICE_NAME = "org.laptop.Activity"
ACTIVITY_SERVICE_PATH = "/org/laptop/Activity"
ACTIVITY_INTERFACE = "org.laptop.Activity"
def get_service_name(xid):
return ACTIVITY_SERVICE_NAME + '%d' % xid
def get_object_path(xid):
return ACTIVITY_SERVICE_PATH + "/%s" % xid
class ActivityDbusService(dbus.service.Object):
"""Base dbus service object that each Activity uses to export dbus methods.
The dbus service is separate from the actual Activity object so that we can
tightly control what stuff passes through the dbus python bindings."""
def __init__(self, pservice, xid, activity):
def start(self, pservice, activity):
self._activity = activity
self._pservice = pservice
bus = dbus.SessionBus()
service_name = ACTIVITY_SERVICE_NAME
self._object_path = ACTIVITY_SERVICE_PATH + "/%s" % xid
service = dbus.service.BusName(service_name, bus=bus)
dbus.service.Object.__init__(self, service, self._object_path)
def get_object_path(self):
return self._object_path
@dbus.service.method(ACTIVITY_INTERFACE)
def share(self):
"""Called by the shell to request the activity to share itself on the network."""
@ -68,7 +68,7 @@ class ActivityDbusService(dbus.service.Object):
class Activity(gtk.Window):
"""Base Activity class that all other Activities derive from."""
def __init__(self, service = None):
def __init__(self):
gtk.Window.__init__(self)
self._shared = False
@ -82,17 +82,17 @@ class Activity(gtk.Window):
group.realize()
self.window.set_group(group.window)
self._bus = ActivityDbusService(self._pservice, self.window.xid, self)
bus = dbus.SessionBus()
xid = self.window.xid
bus_name = dbus.service.BusName(get_service_name(xid), bus=bus)
self._bus = ActivityDbusService(bus_name, get_object_path(xid))
self._bus.start(self._pservice, self)
def __del__(self):
if self._bus:
del self._bus
self._bus = None
def get_object_path(self):
"""Returns the path of the activity dbus service"""
return self._bus.get_object_path()
def set_default_type(self, default_type):
"""Set the activity default type.

View File

@ -38,7 +38,7 @@ class ActivityFactory(dbus.service.Object):
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
def create(self):
activity = self._class()
return activity.get_object_path()
return activity.window.xid
def create(activity_name):
"""Create a new activity from his name."""
@ -50,10 +50,11 @@ def create(activity_name):
proxy_obj = bus.get_object(factory_name, factory_path)
factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
activity_path = factory.create()
xid = factory.create()
bus = dbus.SessionBus()
proxy_obj = bus.get_object(Activity.ACTIVITY_SERVICE_NAME, activity_path)
proxy_obj = bus.get_object(Activity.get_service_name(xid),
Activity.get_object_path(xid))
activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE)
return activity