Created SugarDownloadManager and ClipboardService's wrapper. Show and hide the frame when adding an object to the clipboard.
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
SUBDIRS = activity chat graphics p2p presence
|
||||
SUBDIRS = activity chat clipboard graphics p2p presence
|
||||
|
||||
sugardir = $(pythondir)/sugar
|
||||
sugar_PYTHON = \
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
import dbus
|
||||
import gobject
|
||||
|
||||
DBUS_SERVICE = "org.laptop.Clipboard"
|
||||
DBUS_INTERFACE = "org.laptop.Clipboard"
|
||||
DBUS_PATH = "/org/laptop/Clipboard"
|
||||
|
||||
class ClipboardService(gobject.GObject):
|
||||
|
||||
__gsignals__ = {
|
||||
'object-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
([str, str])),
|
||||
'object-deleted': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
([str])),
|
||||
'object-state-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
([str, int])),
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
gobject.GObject.__init__(self)
|
||||
|
||||
self._dbus_service = None
|
||||
bus = dbus.SessionBus()
|
||||
bus.add_signal_receiver(self._name_owner_changed_cb,
|
||||
signal_name="NameOwnerChanged",
|
||||
dbus_interface="org.freedesktop.DBus")
|
||||
# Try to register to ClipboardService, if we fail, we'll try later.
|
||||
try:
|
||||
self._connect_clipboard_signals()
|
||||
except dbus.DBusException, exception:
|
||||
pass
|
||||
|
||||
def _connect_clipboard_signals(self):
|
||||
bus = dbus.SessionBus()
|
||||
proxy_obj = bus.get_object(DBUS_SERVICE, DBUS_PATH)
|
||||
self._dbus_service = dbus.Interface(proxy_obj, DBUS_SERVICE)
|
||||
self._dbus_service.connect_to_signal('object_added', self._object_added_cb)
|
||||
self._dbus_service.connect_to_signal('object_deleted', self._object_deleted_cb)
|
||||
self._dbus_service.connect_to_signal('object_state_updated',
|
||||
self._object_state_updated_cb)
|
||||
|
||||
def _name_owner_changed_cb(self, name, old, new):
|
||||
if name != DBUS_SERVICE:
|
||||
return
|
||||
|
||||
if (not old and not len(old)) and (new and len(new)):
|
||||
# ClipboardService started up
|
||||
self._connect_clipboard_signals()
|
||||
|
||||
def _object_added_cb(self, mimeType, fileName):
|
||||
self.emit('object-added', mimeType, fileName)
|
||||
|
||||
def _object_deleted_cb(self, fileName):
|
||||
self.emit('object-deleted', fileName)
|
||||
|
||||
def _object_state_updated_cb(self, fileName, percent):
|
||||
self.emit('object-state-updated', fileName, percent)
|
||||
|
||||
def add_object(self, mimeType, fileName):
|
||||
self._dbus_service.add_object(mimeType, fileName)
|
||||
|
||||
def delete_object(self, fileName):
|
||||
self._dbus_service.delete_object(fileName)
|
||||
|
||||
def update_object_state(self, fileName, percent):
|
||||
self._dbus_service.update_object_state(fileName, percent)
|
||||
|
||||
_clipboard_service = None
|
||||
def get_instance():
|
||||
global _clipboard_service
|
||||
if not _clipboard_service:
|
||||
_clipboard_service = ClipboardService()
|
||||
return _clipboard_service
|
||||
@@ -0,0 +1,5 @@
|
||||
sugardir = $(pythondir)/sugar/clipboard
|
||||
sugar_PYTHON = \
|
||||
__init__.py \
|
||||
ClipboardService.py
|
||||
|
||||
@@ -4,6 +4,7 @@ sugar_PYTHON = \
|
||||
bubble.py \
|
||||
canvasicon.py \
|
||||
colors.py \
|
||||
ClipboardBubble.py \
|
||||
grid.py \
|
||||
iconcolor.py \
|
||||
menu.py \
|
||||
|
||||
@@ -49,6 +49,7 @@ class Menu(gtk.Window):
|
||||
self._root.append(content_box)
|
||||
|
||||
self._action_box = None
|
||||
self._action_box_separator = None
|
||||
|
||||
def _create_separator(self):
|
||||
separator = hippo.CanvasBox()
|
||||
@@ -56,8 +57,8 @@ class Menu(gtk.Window):
|
||||
return separator
|
||||
|
||||
def _create_action_box(self):
|
||||
separator = self._create_separator()
|
||||
self._root.append(separator)
|
||||
self._action_box_separator = self._create_separator()
|
||||
self._root.append(self._action_box_separator)
|
||||
|
||||
self._action_box = hippo.CanvasBox(
|
||||
orientation=hippo.ORIENTATION_HORIZONTAL)
|
||||
@@ -71,5 +72,8 @@ class Menu(gtk.Window):
|
||||
icon.connect('activated', self._action_clicked_cb, action_id)
|
||||
self._action_box.append(icon)
|
||||
|
||||
def remove_action(self, icon):
|
||||
self._action_box.remove(icon)
|
||||
|
||||
def _action_clicked_cb(self, icon, action):
|
||||
self.emit('action', action)
|
||||
|
||||
Reference in New Issue
Block a user