sugar-toolkit-gtk3/shell/view/frame/clipboardpanelwindow.py

68 lines
2.4 KiB
Python
Raw Normal View History

import logging
import gtk
import hippo
from view.frame.PanelWindow import PanelWindow
from view.frame.clipboardbox import ClipboardBox
from sugar.clipboard import clipboardservice
from sugar import util
class ClipboardPanelWindow(PanelWindow):
def __init__(self, frame, x, y, width, height):
PanelWindow.__init__(self, x, y, width, height)
self._frame = frame
# Listening for new clipboard objects
clipboard = gtk.Clipboard()
clipboard.connect("owner-change", self._owner_change_cb)
menu_shell = self.get_menu_shell()
root = self.get_root()
box = ClipboardBox(menu_shell)
root.append(box)
# Receiving dnd drops
self.drag_dest_set(0, [], 0)
self.connect("drag_motion", box.drag_motion_cb)
self.connect("drag_drop", box.drag_drop_cb)
self.connect("drag_data_received", box.drag_data_received_cb)
# Offering dnd drags
self.drag_source_set(0, [], 0)
self.add_events(gtk.gdk.BUTTON_PRESS_MASK |
2006-12-14 13:50:42 +01:00
gtk.gdk.POINTER_MOTION_HINT_MASK)
self.connect("motion_notify_event", box.motion_notify_event_cb)
self.connect("button_press_event", box.button_press_event_cb)
self.connect("drag_end", box.drag_end_cb)
self.connect("drag_data_get", box.drag_data_get_cb)
def _owner_change_cb(self, clipboard, event):
logging.debug("owner_change_cb")
key = util.unique_id()
cb_service = clipboardservice.get_instance()
cb_service.add_object(key, "name")
cb_service.set_object_percent(key, percent = 100)
targets = clipboard.wait_for_targets()
for target in targets:
if target not in ('TIMESTAMP', 'TARGETS', 'MULTIPLE'):
selection = clipboard.wait_for_contents(target)
if selection:
self._add_selection(key, selection)
self._frame.show_and_hide(0)
def _add_selection(self, key, selection):
if selection.data:
logging.debug('adding type ' + selection.type + '.')
cb_service = clipboardservice.get_instance()
cb_service.add_object_format(key,
selection.type,
selection.data,
on_disk = False)