Stefano Candori has proposed merging lp:~cando/gnome-activity-journal/dnd-pinning into lp:gnome-activity-journal.
Requested reviews: GNOME Zeitgeist Team (gnome-zeitgeist) This merge proposal include this one: https://code.launchpad.net/~cando/gnome-activity-journal/fix-pinning/+merge/41754 (so forget about it). In this branch I've: * fixed bug #680653 ; * added DND support to bookmarking/pinning area ; * refactored a little DND code, as asked by RainCT. -- https://code.launchpad.net/~cando/gnome-activity-journal/dnd-pinning/+merge/41866 Your team GNOME Zeitgeist Team is requested to review the proposed merge of lp:~cando/gnome-activity-journal/dnd-pinning into lp:gnome-activity-journal.
=== modified file 'src/activity_widgets.py' --- src/activity_widgets.py 2010-11-11 16:43:36 +0000 +++ src/activity_widgets.py 2010-11-25 14:45:55 +0000 @@ -41,7 +41,27 @@ #DND support variables TYPE_TARGET_TEXT = 80 TYPE_TARGET_URI = 81 - + +class Draggable(): + + def __init__(self, widget): + targets = [("text/plain", 0, TYPE_TARGET_TEXT), + ("text/uri-list", 0, TYPE_TARGET_URI)] + widget.drag_source_set( gtk.gdk.BUTTON1_MASK, targets, + gtk.gdk.ACTION_COPY) + widget.connect("drag_data_get", self.on_drag_data_get) + +class Droppable(): + + def __init__(self, widget): + targets = [("text/plain", 0, TYPE_TARGET_TEXT),] + widget.drag_dest_set(gtk.DEST_DEFAULT_MOTION | + gtk.DEST_DEFAULT_HIGHLIGHT | + gtk.DEST_DEFAULT_DROP, + targets, gtk.gdk.ACTION_COPY) + widget.connect("drag_data_received", self.on_drag_data_received) + + class _GenericViewWidget(gtk.VBox): day = None day_signal_id = None @@ -172,7 +192,7 @@ self.day = day if pinbox in self.box.get_children(): self.box.remove(pinbox) - if (day.date - datetime.date.today()) == 0: + if (day.date - datetime.date.today()) == datetime.timedelta(days=0): self.box.pack_start(pinbox, False, False) self.box.reorder_child(pinbox, 0) self.daylabel.set_date(day.date) @@ -360,7 +380,7 @@ self._set_up_box(self.event_structs) -class Item(gtk.HBox): +class Item(gtk.HBox, Draggable): def __init__(self, content_struct, allow_pin = False, do_style=True): event = content_struct.event @@ -368,6 +388,7 @@ self.set_border_width(2) self.allow_pin = allow_pin self.btn = gtk.Button() + Draggable.__init__(self, self.btn) self.search_results = [] self.subject = event.subjects[0] self.content_obj = content_struct.content_object @@ -459,11 +480,6 @@ self.btn.connect("realize", self.realize_cb, evbox) self.init_multimedia_tooltip() - self.targets = [("text/plain", 0, TYPE_TARGET_TEXT), - ("text/uri-list", 0, TYPE_TARGET_URI),] - self.btn.drag_source_set( gtk.gdk.BUTTON1_MASK, self.targets, - gtk.gdk.ACTION_COPY) - self.btn.connect("drag_data_get", self.on_drag_data_get) def on_drag_data_get(self, treeview, context, selection, target_id, etime): uri = self.content_obj.uri @@ -672,7 +688,7 @@ pass -class ThumbIconView(gtk.IconView): +class ThumbIconView(gtk.IconView, Draggable): """ A iconview which uses a custom cellrenderer to render square pixbufs based on zeitgeist events @@ -681,7 +697,8 @@ child_width = _ThumbViewRenderer.width child_height = _ThumbViewRenderer.height def __init__(self): - super(ThumbIconView, self).__init__() + gtk.IconView.__init__(self) + Draggable.__init__(self, self) self.active_list = [] self.popupmenu = ContextMenu self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) @@ -700,12 +717,6 @@ SearchBox.connect("search", lambda *args: self.queue_draw()) SearchBox.connect("clear", lambda *args: self.queue_draw()) - self.targets = [("text/plain", 0, TYPE_TARGET_TEXT), - ("text/uri-list", 0, TYPE_TARGET_URI),] - self.drag_source_set( gtk.gdk.BUTTON1_MASK, self.targets, - gtk.gdk.ACTION_COPY) - self.connect("drag_data_get", self.on_drag_data_get) - def _set_model_in_thread(self, items): """ A threaded which generates pixbufs and emblems for a list of events. @@ -751,7 +762,7 @@ if uri.startswith("file://"): unquoted_uri = urllib.unquote(uri) if os.path.exists(unquoted_uri[7:]): - selection.set_uris([uri]) + selection.set_uris([uri]) def on_button_press(self, widget, event): if event.button == 3: @@ -1060,7 +1071,7 @@ pass -class TimelineView(gtk.TreeView): +class TimelineView(gtk.TreeView, Draggable): child_width = _TimelineRenderer.width child_height = _TimelineRenderer.height @@ -1078,7 +1089,8 @@ return [x, w] def __init__(self): - super(TimelineView, self).__init__() + gtk.TreeView.__init__(self) + Draggable.__init__(self, self) self.popupmenu = ContextMenu self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.connect("button-press-event", self.on_button_press) @@ -1095,12 +1107,6 @@ SearchBox.connect("search", lambda *args: self.queue_draw()) SearchBox.connect("clear", lambda *args: self.queue_draw()) - self.targets = [("text/plain", 0, TYPE_TARGET_TEXT), - ("text/uri-list", 0, TYPE_TARGET_URI),] - self.drag_source_set( gtk.gdk.BUTTON1_MASK, self.targets, - gtk.gdk.ACTION_COPY) - self.connect("drag_data_get", self.on_drag_data_get) - def set_model_from_list(self, items): """ Sets creates/sets a model from a list of zeitgeist events @@ -1228,11 +1234,14 @@ self.line_color = get_gtk_rgba(widget.style, "bg", 0, 0.94) -class PinBox(DayView): +class PinBox(DayView, Droppable): def __init__(self): self.event_timerange = TimeRange.until_now() - super(PinBox, self).__init__(title=_("Pinned Items"))#_("Pinned items")) + DayView.__init__(self, title=_("Pinned Items"))#_("Pinned items")) + self.notebook = gtk.Notebook() + Droppable.__init__(self, self.notebook) + bookmarker.connect("reload", self.set_from_templates) self.set_from_templates() @@ -1254,6 +1263,8 @@ self.event_templates, self.do_set, self.event_timerange, StorageState.Any, 10000, ResultType.MostRecentSubjects) + else: + self.do_set([]) def do_set(self, event_ids): objs = [] @@ -1270,12 +1281,17 @@ self.view.pack_start(box) for w in self: self.remove(w) - notebook = gtk.Notebook() - notebook.append_page(self.view, self.label) + self.notebook.append_page(self.view, self.label) self.label.set_alignment(0.01, 0.5) - notebook.set_tab_label_packing(self.view, True, True, gtk.PACK_START) + self.notebook.set_tab_label_packing(self.view, True, True, gtk.PACK_START) self.set_border_width(4) - if len(items) > 0: self.pack_start(notebook) + if len(items) > 0: self.pack_start(self.notebook) + + def on_drag_data_received(self, wid, context, x, y, selection, target_type, time): + uri = unicode(selection.data.strip()) + isbookmarked = bookmarker.is_bookmarked(uri) + if not isbookmarked: + bookmarker.bookmark(uri) ## gobject registration === modified file 'src/supporting_widgets.py' --- src/supporting_widgets.py 2010-11-09 20:25:08 +0000 +++ src/supporting_widgets.py 2010-11-25 14:45:55 +0000 @@ -917,7 +917,7 @@ uri = obj.uri uri = unicode(uri) isbookmarked = bookmarker.is_bookmarked(uri) - if isbookmarked: + if isbookmarked: bookmarker.unbookmark(uri) def do_delete(self, menuitem):
_______________________________________________ Mailing list: https://launchpad.net/~gnome-zeitgeist Post to : gnome-zeitgeist@lists.launchpad.net Unsubscribe : https://launchpad.net/~gnome-zeitgeist More help : https://help.launchpad.net/ListHelp