A bunch of fixes...
This commit is contained in:
parent
57cc6a303c
commit
0947581a11
@ -9,15 +9,14 @@ class ActivityInfo:
|
|||||||
self._service = service
|
self._service = service
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
activity_id = self._service.get_activity_id()
|
activity_id = self._service.get_id()
|
||||||
|
|
||||||
def get_type(self):
|
def get_type(self):
|
||||||
return self._service.get_type()
|
# FIXME
|
||||||
|
return "_web_olpc._udp"
|
||||||
|
|
||||||
def get_title(self):
|
def get_title(self):
|
||||||
escaped_title = self._service.get_published_value('Title')
|
return "FIXME Title"
|
||||||
title = xml.sax.saxutils.unescape(escaped_title)
|
|
||||||
return title
|
|
||||||
|
|
||||||
def get_service(self):
|
def get_service(self):
|
||||||
return self._service
|
return self._service
|
||||||
@ -47,7 +46,4 @@ class ActivitiesModel(gobject.GObject):
|
|||||||
return self._activities.__iter__()
|
return self._activities.__iter__()
|
||||||
|
|
||||||
def _on_activity_announced_cb(self, pservice, activity):
|
def _on_activity_announced_cb(self, pservice, activity):
|
||||||
# FIXME We should not hard code activity types here
|
self.add_activity(activity)
|
||||||
services = activity.get_services_of_type("_web_olpc._udp")
|
|
||||||
if len(services) > 0:
|
|
||||||
self.add_activity(services[0])
|
|
||||||
|
@ -2,9 +2,11 @@ import gtk
|
|||||||
import dbus
|
import dbus
|
||||||
|
|
||||||
from sugar.activity import Activity
|
from sugar.activity import Activity
|
||||||
|
from PeopleWindow import PeopleWindow
|
||||||
|
|
||||||
class ActivityHost:
|
class ActivityHost:
|
||||||
def __init__(self, xid):
|
def __init__(self, shell, xid):
|
||||||
|
self._shell = shell
|
||||||
self._xid = xid
|
self._xid = xid
|
||||||
|
|
||||||
bus = dbus.SessionBus()
|
bus = dbus.SessionBus()
|
||||||
@ -16,11 +18,13 @@ class ActivityHost:
|
|||||||
self._id = self._activity.get_id()
|
self._id = self._activity.get_id()
|
||||||
self._default_type = self._activity.get_default_type()
|
self._default_type = self._activity.get_default_type()
|
||||||
self._window = gtk.gdk.window_foreign_new(xid)
|
self._window = gtk.gdk.window_foreign_new(xid)
|
||||||
|
self._people_window = PeopleWindow(shell, self)
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
return self._id
|
return self._id
|
||||||
|
|
||||||
def share(self):
|
def share(self):
|
||||||
|
self._people_window.share()
|
||||||
self._activity.share()
|
self._activity.share()
|
||||||
|
|
||||||
def get_shared(self):
|
def get_shared(self):
|
||||||
@ -29,6 +33,9 @@ class ActivityHost:
|
|||||||
def get_default_type(self):
|
def get_default_type(self):
|
||||||
return self._default_type
|
return self._default_type
|
||||||
|
|
||||||
|
def show_people(self):
|
||||||
|
self.show_dialog(self._people_window)
|
||||||
|
|
||||||
def show_dialog(self, dialog):
|
def show_dialog(self, dialog):
|
||||||
dialog.show()
|
dialog.show()
|
||||||
dialog.window.set_transient_for(self._window)
|
dialog.window.set_transient_for(self._window)
|
||||||
|
@ -18,9 +18,12 @@ class PeopleWindow(gtk.Window):
|
|||||||
hbox.pack_start(presence_view, False)
|
hbox.pack_start(presence_view, False)
|
||||||
presence_view.show()
|
presence_view.show()
|
||||||
|
|
||||||
chat = ActivityChat(activity)
|
self._chat = ActivityChat(activity)
|
||||||
hbox.pack_start(chat)
|
hbox.pack_start(self._chat)
|
||||||
chat.show()
|
self._chat.show()
|
||||||
|
|
||||||
self.add(hbox)
|
self.add(hbox)
|
||||||
hbox.show()
|
hbox.show()
|
||||||
|
|
||||||
|
def share(self):
|
||||||
|
self._chat.share()
|
||||||
|
@ -133,9 +133,9 @@ class PresenceView(gtk.VBox):
|
|||||||
self._add_buddy(buddy)
|
self._add_buddy(buddy)
|
||||||
|
|
||||||
def _add_buddy(self, buddy):
|
def _add_buddy(self, buddy):
|
||||||
#if buddy.is_owner():
|
if buddy.is_owner():
|
||||||
# Do not show ourself in the buddy list
|
# Do not show ourself in the buddy list
|
||||||
#return
|
return
|
||||||
|
|
||||||
aniter = self._buddy_store.append(None)
|
aniter = self._buddy_store.append(None)
|
||||||
self._buddy_store.set(aniter,
|
self._buddy_store.set(aniter,
|
||||||
|
@ -12,7 +12,6 @@ from sugar.LogWriter import LogWriter
|
|||||||
from ActivityRegistry import ActivityRegistry
|
from ActivityRegistry import ActivityRegistry
|
||||||
from HomeWindow import HomeWindow
|
from HomeWindow import HomeWindow
|
||||||
from sugar import env
|
from sugar import env
|
||||||
from PeopleWindow import PeopleWindow
|
|
||||||
from ConsoleWindow import ConsoleWindow
|
from ConsoleWindow import ConsoleWindow
|
||||||
from Owner import ShellOwner
|
from Owner import ShellOwner
|
||||||
from PresenceService import PresenceService
|
from PresenceService import PresenceService
|
||||||
@ -66,29 +65,33 @@ class Shell:
|
|||||||
self._home_window = HomeWindow(self)
|
self._home_window = HomeWindow(self)
|
||||||
self._home_window.show()
|
self._home_window.show()
|
||||||
|
|
||||||
self._people_windows = {}
|
self._hosts = {}
|
||||||
self._console_windows = {}
|
self._console_windows = {}
|
||||||
|
|
||||||
def get_current_activity(self):
|
def get_current_activity(self):
|
||||||
window = self._screen.get_active_window()
|
window = self._screen.get_active_window()
|
||||||
if window:
|
if window:
|
||||||
|
xid = None
|
||||||
|
|
||||||
if window.get_window_type() == wnck.WINDOW_NORMAL:
|
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:
|
elif window.get_window_type() == wnck.WINDOW_DIALOG:
|
||||||
parent = window.get_transient()
|
parent = window.get_transient()
|
||||||
if not parent is None:
|
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
|
return None
|
||||||
|
|
||||||
def show_people(self):
|
def show_people(self):
|
||||||
activity = self.get_current_activity()
|
activity = self.get_current_activity()
|
||||||
if activity:
|
activity.show_people()
|
||||||
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)
|
|
||||||
|
|
||||||
def get_console(self, module_id):
|
def get_console(self, module_id):
|
||||||
if not self._console_windows.has_key(module_id):
|
if not self._console_windows.has_key(module_id):
|
||||||
|
@ -7,6 +7,8 @@ import dbus.glib
|
|||||||
import gtk
|
import gtk
|
||||||
import gobject
|
import gobject
|
||||||
|
|
||||||
|
from sugar.presence.PresenceService import PresenceService
|
||||||
|
|
||||||
# Work around for dbus mutex locking issue
|
# Work around for dbus mutex locking issue
|
||||||
gtk.gdk.threads_init()
|
gtk.gdk.threads_init()
|
||||||
dbus.glib.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.Object.__init__(self, bus_name, get_path(factory))
|
||||||
|
|
||||||
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
||||||
def create_with_service(self, serialized_service, args):
|
def create_with_service(self, service_path):
|
||||||
service = Service.deserialize(serialized_service)
|
pservice = PresenceService()
|
||||||
activity = self._class(service, args)
|
service = pservice._new_object(service_path)
|
||||||
|
activity = self._class(service, [])
|
||||||
|
|
||||||
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
||||||
def create(self):
|
def create(self):
|
||||||
@ -74,9 +77,9 @@ def create(activity_name, service = None, args = None):
|
|||||||
proxy_obj = bus.get_object(factory_name, factory_path)
|
proxy_obj = bus.get_object(factory_name, factory_path)
|
||||||
factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
|
factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
|
||||||
|
|
||||||
if service and args:
|
if service:
|
||||||
serialized_service = service.serialize(service)
|
print service.object_path()
|
||||||
factory.create_with_service(serialized_service, args)
|
factory.create_with_service(service.object_path())
|
||||||
else:
|
else:
|
||||||
factory.create()
|
factory.create()
|
||||||
|
|
||||||
@ -148,8 +151,8 @@ class Activity(gtk.Window):
|
|||||||
def __init__(self, service = None):
|
def __init__(self, service = None):
|
||||||
gtk.Window.__init__(self)
|
gtk.Window.__init__(self)
|
||||||
|
|
||||||
if service and service.has_key('activity_id'):
|
if service:
|
||||||
self._activity_id = service['activity_id']
|
self._activity_id = service.get_id()
|
||||||
self._shared = True
|
self._shared = True
|
||||||
else:
|
else:
|
||||||
self._activity_id = sugar.util.unique_id()
|
self._activity_id = sugar.util.unique_id()
|
||||||
|
@ -16,9 +16,9 @@ class ActivityChat(GroupChat):
|
|||||||
# Find an existing activity chat to latch onto
|
# Find an existing activity chat to latch onto
|
||||||
ps_activity = self._pservice.get_activity(activity.get_id())
|
ps_activity = self._pservice.get_activity(activity.get_id())
|
||||||
if ps_activity is not None:
|
if ps_activity is not None:
|
||||||
service = ps_activity.get_service_of_type(ActivityChat.SERVICE_TYPE)
|
services = ps_activity.get_services_of_type(ActivityChat.SERVICE_TYPE)
|
||||||
if service is not None:
|
if len(services) > 0:
|
||||||
self._service_appeared_cb(self._pservice, service)
|
self._service_appeared_cb(self._pservice, services[0])
|
||||||
|
|
||||||
def _service_appeared_cb(self, pservice, service):
|
def _service_appeared_cb(self, pservice, service):
|
||||||
if service.get_activity_id() != self._activity.get_id():
|
if service.get_activity_id() != self._activity.get_id():
|
||||||
|
Loading…
Reference in New Issue
Block a user