← Back to team overview

gnome-zeitgeist team mailing list archive

[Merge] lp:~cando/gnome-activity-journal/drag_and_drop into lp:gnome-activity-journal

 

Cando has proposed merging lp:~cando/gnome-activity-journal/drag_and_drop into lp:gnome-activity-journal.

Requested reviews:
  GNOME Zeitgeist Team (gnome-zeitgeist)


In this branch i've implemented the drag and drop for GAJ.
It works in all the three views.
This closes bug #553385.
-- 
https://code.launchpad.net/~cando/gnome-activity-journal/drag_and_drop/+merge/40277
Your team GNOME Zeitgeist Team is requested to review the proposed merge of lp:~cando/gnome-activity-journal/drag_and_drop into lp:gnome-activity-journal.
=== modified file 'src/activity_widgets.py'
--- src/activity_widgets.py	2010-10-31 14:19:15 +0000
+++ src/activity_widgets.py	2010-11-07 14:27:48 +0000
@@ -454,6 +454,19 @@
         self.btn.connect("button_press_event", self._show_item_popup)
         self.btn.connect("realize", self.realize_cb, evbox)
         self.init_multimedia_tooltip()
+        
+        self.targets = [("text/uri-list", 0, 0)]
+        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
+            #FIXME for the moment we handle only files
+            if uri.startswith("file://"):
+                uri = uri.replace("%20"," ")
+                if os.path.exists(uri[7:]):
+                    selection.set_uris([uri])
 
     def realize_cb(self, widget, evbox):
         evbox.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
@@ -649,8 +662,7 @@
         pass
 
     def on_activate(self, event, widget, path, background_area, cell_area, flags):
-        self.content_obj.launch()
-        return True
+        pass
 
 
 class ThumbIconView(gtk.IconView):
@@ -667,9 +679,10 @@
         self.popupmenu = ContextMenu
         self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK)
         self.connect("button-press-event", self.on_button_press)
+        self.connect("button-release-event", self.on_button_release)
         self.connect("motion-notify-event", self.on_motion_notify)
         self.connect("leave-notify-event", self.on_leave_notify)
-        self.set_selection_mode(gtk.SELECTION_NONE)
+        self.set_selection_mode(gtk.SELECTION_SINGLE)
         self.set_column_spacing(6)
         self.set_row_spacing(6)
         pcolumn = gtk.TreeViewColumn("Preview")
@@ -680,6 +693,11 @@
         SearchBox.connect("search", lambda *args: self.queue_draw())
         SearchBox.connect("clear", lambda *args: self.queue_draw())
 
+        self.targets = [("text/uri-list", 0, 0)]
+        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.
@@ -714,6 +732,17 @@
         thread = threading.Thread(target=self._set_model_in_thread, args=(items,))
         thread.start()
 
+    def on_drag_data_get(self, iconview, context, selection, target_id, etime):
+            model = iconview.get_model()
+            selected = iconview.get_selected_items()
+            content_object = model[selected[0]][0]
+            uri = content_object.uri
+            #FIXME for the moment we handle only files
+            if uri.startswith("file://"):
+                uri = uri.replace("%20"," ")
+                if os.path.exists(uri[7:]):
+                    selection.set_uris([uri])
+
     def on_button_press(self, widget, event):
         if event.button == 3:
             val = self.get_item_at_pos(int(event.x), int(event.y))
@@ -722,7 +751,15 @@
                 model = self.get_model()
                 obj = model[path[0]][0]
                 self.popupmenu.do_popup(event.time, [obj])
-        return False
+    
+    def on_button_release(self, widget, event):
+        if event.button == 1:
+            val = self.get_item_at_pos(int(event.x), int(event.y))
+            if val:
+                path, cell = val
+                model = self.get_model()
+                obj = model[path[0]][0]
+                obj.launch()
 
     def on_leave_notify(self, widget, event):
         try:
@@ -740,7 +777,6 @@
                 self.active_list[path[0]] = True
                 self.last_active = path[0]
                 self.queue_draw()
-        return True
 
     def query_tooltip(self, widget, x, y, keyboard_mode, tooltip):
         """
@@ -1049,6 +1085,11 @@
         SearchBox.connect("search", lambda *args: self.queue_draw())
         SearchBox.connect("clear", lambda *args: self.queue_draw())
 
+        self.targets = [("text/uri-list", 0, 0)]
+        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
@@ -1072,6 +1113,17 @@
         items = day.get_time_map()
         self.set_model_from_list(items)
 
+    def on_drag_data_get(self, treeview, context, selection, target_id, etime):
+            tree_selection = treeview.get_selection()
+            model, iter = tree_selection.get_selected()
+            content_object = model.get_value(iter, 0)
+            uri = content_object.uri
+            #FIXME for the moment we handle only files
+            if uri.startswith("file://"):
+                uri = uri.replace("%20"," ")
+                if os.path.exists(uri[7:]):
+                    selection.set_uris([uri])
+
     def on_button_press(self, widget, event):
         if event.button == 3:
             path = self.get_dest_row_at_pos(int(event.x), int(event.y))


Follow ups