Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-06-18 05:31:55 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-06-18 05:31:55 (GMT)
commit4e6cbab48e4e7eadf2cd443d1eaaf58dd48b03a9 (patch)
tree9454dd82565f76b80a9d87a54e6052e40381294e /sugar
parent9f1c77a55abfaafdac7912df1ddff07fe7ea3a01 (diff)
Pass a serialized Service object through when joining an activity
Diffstat (limited to 'sugar')
-rw-r--r--sugar/browser/BrowserActivity.py7
-rw-r--r--sugar/browser/BrowserShell.py20
-rw-r--r--sugar/shell/StartPage.py31
-rw-r--r--sugar/shell/activity.py16
4 files changed, 43 insertions, 31 deletions
diff --git a/sugar/browser/BrowserActivity.py b/sugar/browser/BrowserActivity.py
index 905b4eb..8b71967 100644
--- a/sugar/browser/BrowserActivity.py
+++ b/sugar/browser/BrowserActivity.py
@@ -111,9 +111,10 @@ class BrowserActivity(activity.Activity):
vbox.show()
- # FIXME remove, when we join the activity this will happen automatically
- self._pservice.track_activity(self.get_id())
-
+ # Join the shared activity if we were started from one
+ if self._initial_service:
+ self._pservice.join_shared_activity(self._initial_service)
+
def get_embed(self):
return self.embed
diff --git a/sugar/browser/BrowserShell.py b/sugar/browser/BrowserShell.py
index 42f2ccd..bf7c873 100644
--- a/sugar/browser/BrowserShell.py
+++ b/sugar/browser/BrowserShell.py
@@ -8,6 +8,7 @@ import gobject
import sugar.env
from sugar.browser.BrowserActivity import BrowserActivity
+from sugar.presence import Service
class BrowserShell(dbus.service.Object):
def __init__(self, bus_name, object_path = '/com/redhat/Sugar/Browser'):
@@ -30,20 +31,21 @@ class BrowserShell(dbus.service.Object):
links.append(link)
return links
- def _start_browser_cb(self, browser, activity_id):
- if activity_id:
- browser.connect_to_shell(activity_id)
- else:
- browser.connect_to_shell()
+ def _start_browser_cb(self, browser, service):
+ browser.connect_to_shell(service)
@dbus.service.method('com.redhat.Sugar.BrowserShell')
- def open_browser(self, uri):
+ def open_browser(self, uri, serialized_service=None):
+ service = None
+ if serialized_service is not None:
+ serivce = Service.deserialize(serialized_service)
browser = BrowserActivity(uri)
self.__browsers.append(browser)
- gobject.idle_add(self._start_browser_cb, browser, None)
+ gobject.idle_add(self._start_browser_cb, browser, service)
@dbus.service.method('com.redhat.Sugar.BrowserShell')
- def open_browser_with_id(self, uri, activity_id):
+ def open_browser_from_service_foobar(self, uri, serialized_service):
+ serivce = Service.deserialize(serialized_service)
browser = BrowserActivity(uri)
self.__browsers.append(browser)
- gobject.idle_add(self._start_browser_cb, browser, activity_id)
+ gobject.idle_add(self._start_browser_cb, browser, service)
diff --git a/sugar/shell/StartPage.py b/sugar/shell/StartPage.py
index bd863ba..3aa2e7e 100644
--- a/sugar/shell/StartPage.py
+++ b/sugar/shell/StartPage.py
@@ -6,21 +6,27 @@ import dbus
import cgi
import xml.sax.saxutils
import re
+import gobject
import google
from sugar.presence.PresenceService import PresenceService
from sugar.presence import Service
from sugar.browser import BrowserActivity
+_COLUMN_TITLE = 0
+_COLUMN_ADDRESS = 1
+_COLUMN_SUBTITLE = 2
+_COLUMN_SERVICE = 3
+
class ActivitiesModel(gtk.ListStore):
def __init__(self):
- gtk.ListStore.__init__(self, str, str, str, str)
+ gtk.ListStore.__init__(self, gobject.TYPE_STRING, gobject.TYPE_STRING,
+ gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
def add_web_page(self, title, address):
self.append([ title, address, None, None ])
def add_activity(self, buddy, service):
- uid = service.get_activity_uid()
# Web Activity check
if service.get_type() == BrowserActivity._BROWSER_ACTIVITY_TYPE:
escaped_title = service.get_one_property('Title')
@@ -29,7 +35,7 @@ class ActivitiesModel(gtk.ListStore):
title = xml.sax.saxutils.unescape(escaped_title)
address = xml.sax.saxutils.unescape(escaped_uri)
subtitle = 'Shared by %s' % buddy.get_nick_name()
- self.append([ title, address, subtitle, uid ])
+ self.append([ title, address, subtitle, service ])
class ActivitiesView(gtk.TreeView):
def __init__(self):
@@ -47,11 +53,11 @@ class ActivitiesView(gtk.TreeView):
self.connect('row-activated', self._row_activated_cb)
def _cell_data_func(self, column, cell, model, it):
- title = model.get_value(it, 0)
- subtitle = model.get_value(it, 2)
+ title = model.get_value(it, _COLUMN_TITLE)
+ subtitle = model.get_value(it, _COLUMN_SUBTITLE)
if subtitle is None:
- subtitle = model.get_value(it, 1)
-
+ subtitle = model.get_value(it, _COLUMN_ADDRESS)
+
markup = '<big><b>' + cgi.escape(title) + '</b></big>'
markup += '\n' + cgi.escape(subtitle)
@@ -64,15 +70,16 @@ class ActivitiesView(gtk.TreeView):
browser_shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.BrowserShell')
model = self.get_model()
- address = model.get_value(model.get_iter(path), 1)
- activity_id = model.get_value(model.get_iter(path), 3)
+ address = model.get_value(model.get_iter(path), _COLUMN_ADDRESS)
+ service = model.get_value(model.get_iter(path), _COLUMN_SERVICE)
- print 'Activated row %s %s' % (address, activity_id)
+ print 'Activated row %s' % address
- if activity_id is None:
+ if service is None:
browser_shell.open_browser(address)
else:
- browser_shell.open_browser_with_id(address, activity_id)
+ serialized_service = service.serialize()
+ browser_shell.open_browser(address, serialized_service)
class StartPage(gtk.HBox):
def __init__(self, ac_signal_object):
diff --git a/sugar/shell/activity.py b/sugar/shell/activity.py
index 77e600e..14d3685 100644
--- a/sugar/shell/activity.py
+++ b/sugar/shell/activity.py
@@ -68,7 +68,7 @@ class ActivityDbusService(dbus.service.Object):
if name in self._ALLOWED_CALLBACKS and self._callbacks[name]:
gobject.idle_add(self._call_callback_cb, self._callbacks[name], *args)
- def connect_to_shell(self, activity_id = None):
+ def connect_to_shell(self, service=None):
"""Register with the shell via dbus, getting an activity ID and
and XEMBED window ID in which to display the Activity."""
self._activity_container_object = self._bus.get_object(SHELL_SERVICE_NAME, \
@@ -76,10 +76,10 @@ class ActivityDbusService(dbus.service.Object):
self._activity_container = dbus.Interface(self._activity_container_object, \
SHELL_SERVICE_NAME + ".ActivityContainer")
- if activity_id is None:
+ if service is None:
self._activity_id = self._activity_container.add_activity("", self._activity.default_type())
else:
- self._activity_id = activity_id
+ self._activity_id = serivce.get_activity_uid()
self._activity_container.add_activity_with_id("", self._activity.default_type(), activity_id)
self._object_path = SHELL_SERVICE_PATH + "/Activities/%s" % self._activity_id
@@ -97,7 +97,7 @@ class ActivityDbusService(dbus.service.Object):
self._activity_object.set_peer_service_name(self._peer_service_name, self._peer_object_path)
- self._call_callback(ON_CONNECTED_TO_SHELL_CB, self._activity_object, self._activity_id)
+ self._call_callback(ON_CONNECTED_TO_SHELL_CB, self._activity_object, self._activity_id, service)
def _shutdown_reply_cb(self):
"""Shutdown was successful, tell the Activity that we're disconnected."""
@@ -155,6 +155,7 @@ class Activity(object):
self._dbus_service.register_callback(ON_GOT_FOCUS_CB, self._internal_on_got_focus_cb)
self._has_focus = False
self._plug = None
+ self._initial_service = None
self._activity_object = None
if type(default_type) != type("") or not len(default_type):
raise ValueError("Default type must be a valid string.")
@@ -183,18 +184,19 @@ class Activity(object):
"""Return whether or not this Activity is visible to the user."""
return self._has_focus
- def connect_to_shell(self, activity_id = None):
+ def connect_to_shell(self, service = None):
"""Called by our controller to tell us to initialize and connect
to the shell."""
- self._dbus_service.connect_to_shell(activity_id)
+ self._dbus_service.connect_to_shell(service)
- def _internal_on_connected_to_shell_cb(self, activity_object, activity_id):
+ def _internal_on_connected_to_shell_cb(self, activity_object, activity_id, service=None):
"""Callback when the dbus service object has connected to the shell."""
self._activity_object = activity_object
self._activity_id = activity_id
self._window_id = self._activity_object.get_host_xembed_id()
print "Activity: XEMBED window ID is %s" % self._window_id
self._plug = gtk.Plug(self._window_id)
+ self._initial_service = service
self.on_connected_to_shell()
def _internal_on_disconnected_from_shell_cb(self):