From 0947581a113af6eaa3660ae37b2720c4806ab0e8 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 26 Jul 2006 10:57:54 +0000 Subject: A bunch of fixes... --- diff --git a/shell/ActivitiesModel.py b/shell/ActivitiesModel.py index 99612f6..01d83ec 100644 --- a/shell/ActivitiesModel.py +++ b/shell/ActivitiesModel.py @@ -9,15 +9,14 @@ class ActivityInfo: self._service = service def get_id(self): - activity_id = self._service.get_activity_id() + activity_id = self._service.get_id() def get_type(self): - return self._service.get_type() + # FIXME + return "_web_olpc._udp" def get_title(self): - escaped_title = self._service.get_published_value('Title') - title = xml.sax.saxutils.unescape(escaped_title) - return title + return "FIXME Title" def get_service(self): return self._service @@ -47,7 +46,4 @@ class ActivitiesModel(gobject.GObject): return self._activities.__iter__() def _on_activity_announced_cb(self, pservice, activity): - # FIXME We should not hard code activity types here - services = activity.get_services_of_type("_web_olpc._udp") - if len(services) > 0: - self.add_activity(services[0]) + self.add_activity(activity) diff --git a/shell/ActivityHost.py b/shell/ActivityHost.py index 6f3b2d1..540d1e2 100644 --- a/shell/ActivityHost.py +++ b/shell/ActivityHost.py @@ -2,9 +2,11 @@ import gtk import dbus from sugar.activity import Activity +from PeopleWindow import PeopleWindow class ActivityHost: - def __init__(self, xid): + def __init__(self, shell, xid): + self._shell = shell self._xid = xid bus = dbus.SessionBus() @@ -16,11 +18,13 @@ class ActivityHost: self._id = self._activity.get_id() self._default_type = self._activity.get_default_type() self._window = gtk.gdk.window_foreign_new(xid) + self._people_window = PeopleWindow(shell, self) def get_id(self): return self._id def share(self): + self._people_window.share() self._activity.share() def get_shared(self): @@ -29,6 +33,9 @@ class ActivityHost: def get_default_type(self): return self._default_type + def show_people(self): + self.show_dialog(self._people_window) + def show_dialog(self, dialog): dialog.show() dialog.window.set_transient_for(self._window) diff --git a/shell/PeopleWindow.py b/shell/PeopleWindow.py index 78a31ad..60e76a7 100644 --- a/shell/PeopleWindow.py +++ b/shell/PeopleWindow.py @@ -18,9 +18,12 @@ class PeopleWindow(gtk.Window): hbox.pack_start(presence_view, False) presence_view.show() - chat = ActivityChat(activity) - hbox.pack_start(chat) - chat.show() + self._chat = ActivityChat(activity) + hbox.pack_start(self._chat) + self._chat.show() self.add(hbox) hbox.show() + + def share(self): + self._chat.share() diff --git a/shell/PresenceView.py b/shell/PresenceView.py index 436a244..c9c2002 100644 --- a/shell/PresenceView.py +++ b/shell/PresenceView.py @@ -133,9 +133,9 @@ class PresenceView(gtk.VBox): self._add_buddy(buddy) def _add_buddy(self, buddy): - #if buddy.is_owner(): + if buddy.is_owner(): # Do not show ourself in the buddy list - #return + return aniter = self._buddy_store.append(None) self._buddy_store.set(aniter, diff --git a/shell/Shell.py b/shell/Shell.py index 1cf1ba5..4176b72 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -12,7 +12,6 @@ from sugar.LogWriter import LogWriter from ActivityRegistry import ActivityRegistry from HomeWindow import HomeWindow from sugar import env -from PeopleWindow import PeopleWindow from ConsoleWindow import ConsoleWindow from Owner import ShellOwner from PresenceService import PresenceService @@ -66,29 +65,33 @@ class Shell: self._home_window = HomeWindow(self) self._home_window.show() - self._people_windows = {} + self._hosts = {} self._console_windows = {} def get_current_activity(self): window = self._screen.get_active_window() if window: + xid = None + if window.get_window_type() == wnck.WINDOW_NORMAL: - return ActivityHost(window.get_xid()) + xid = window.get_xid() elif window.get_window_type() == wnck.WINDOW_DIALOG: parent = window.get_transient() if not parent is None: - return ActivityHost(parent.get_xid()) + xid = parent.get_xid() + + if xid != None: + if self._hosts.has_key(xid): + return self._hosts[xid] + else: + self._hosts[xid] = ActivityHost(self, xid) + return self._hosts[xid] + return None def show_people(self): activity = self.get_current_activity() - if activity: - if not self._people_windows.has_key(activity.get_id()): - dialog = PeopleWindow(self, activity) - self._people_windows[activity.get_id()] = dialog - else: - dialog = self._people_windows[activity.get_id()] - activity.show_dialog(dialog) + activity.show_people() def get_console(self, module_id): if not self._console_windows.has_key(module_id): diff --git a/sugar/activity/Activity.py b/sugar/activity/Activity.py index c5f4f1a..faaa7d8 100644 --- a/sugar/activity/Activity.py +++ b/sugar/activity/Activity.py @@ -7,6 +7,8 @@ import dbus.glib import gtk import gobject +from sugar.presence.PresenceService import PresenceService + # Work around for dbus mutex locking issue gtk.gdk.threads_init() dbus.glib.threads_init() @@ -55,9 +57,10 @@ class ActivityFactory(dbus.service.Object): dbus.service.Object.__init__(self, bus_name, get_path(factory)) @dbus.service.method("com.redhat.Sugar.ActivityFactory") - def create_with_service(self, serialized_service, args): - service = Service.deserialize(serialized_service) - activity = self._class(service, args) + def create_with_service(self, service_path): + pservice = PresenceService() + service = pservice._new_object(service_path) + activity = self._class(service, []) @dbus.service.method("com.redhat.Sugar.ActivityFactory") def create(self): @@ -74,9 +77,9 @@ def create(activity_name, service = None, args = None): proxy_obj = bus.get_object(factory_name, factory_path) factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") - if service and args: - serialized_service = service.serialize(service) - factory.create_with_service(serialized_service, args) + if service: + print service.object_path() + factory.create_with_service(service.object_path()) else: factory.create() @@ -148,8 +151,8 @@ class Activity(gtk.Window): def __init__(self, service = None): gtk.Window.__init__(self) - if service and service.has_key('activity_id'): - self._activity_id = service['activity_id'] + if service: + self._activity_id = service.get_id() self._shared = True else: self._activity_id = sugar.util.unique_id() diff --git a/sugar/chat/ActivityChat.py b/sugar/chat/ActivityChat.py index 9e74f8d..645b5e4 100644 --- a/sugar/chat/ActivityChat.py +++ b/sugar/chat/ActivityChat.py @@ -16,9 +16,9 @@ class ActivityChat(GroupChat): # Find an existing activity chat to latch onto ps_activity = self._pservice.get_activity(activity.get_id()) if ps_activity is not None: - service = ps_activity.get_service_of_type(ActivityChat.SERVICE_TYPE) - if service is not None: - self._service_appeared_cb(self._pservice, service) + services = ps_activity.get_services_of_type(ActivityChat.SERVICE_TYPE) + if len(services) > 0: + self._service_appeared_cb(self._pservice, services[0]) def _service_appeared_cb(self, pservice, service): if service.get_activity_id() != self._activity.get_id(): -- cgit v0.9.1