Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-07-26 10:57:54 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-26 10:57:54 (GMT)
commit0947581a113af6eaa3660ae37b2720c4806ab0e8 (patch)
tree5006567bbf0de11ad274a0ff44ca18b244433196
parent57cc6a303c6c062c7af5544fc9469f80d92a808f (diff)
A bunch of fixes...
-rw-r--r--shell/ActivitiesModel.py14
-rw-r--r--shell/ActivityHost.py9
-rw-r--r--shell/PeopleWindow.py9
-rw-r--r--shell/PresenceView.py4
-rwxr-xr-xshell/Shell.py25
-rw-r--r--sugar/activity/Activity.py19
-rw-r--r--sugar/chat/ActivityChat.py6
7 files changed, 49 insertions, 37 deletions
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():