[meld] Add ScrollLinkMap for diff scrolling in folder comparisons (bgo#729756)



commit f064296ca0bf6e9efebde58e5afd063b71f34537
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Tue Jun 3 05:54:50 2014 +1000

    Add ScrollLinkMap for diff scrolling in folder comparisons (bgo#729756)
    
    In file comparisons, scrolling in the LinkMap flips between changes,
    but does nothing in folder comparisons. While it's a bit weird to
    have this behaviour on an otherwise blank widget, it doesn't hurt
    anything and does feel somewhat more consistent.

 data/ui/dirdiff.ui |    8 ++++----
 meld/dirdiff.py    |    3 +++
 meld/linkmap.py    |   17 +++++++++++++++++
 3 files changed, 24 insertions(+), 4 deletions(-)
---
diff --git a/data/ui/dirdiff.ui b/data/ui/dirdiff.ui
index 9a24fed..4ee0f01 100644
--- a/data/ui/dirdiff.ui
+++ b/data/ui/dirdiff.ui
@@ -257,11 +257,11 @@
               </packing>
             </child>
             <child>
-              <object class="GtkDrawingArea" id="linkmap1">
+              <object class="ScrollLinkMap" id="linkmap1">
                 <property name="width_request">50</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="events">GDK_SCROLL_MASK</property>
                 <property name="vexpand">True</property>
               </object>
               <packing>
@@ -315,11 +315,11 @@
               </packing>
             </child>
             <child>
-              <object class="GtkDrawingArea" id="linkmap0">
+              <object class="ScrollLinkMap" id="linkmap0">
                 <property name="width_request">50</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="events">GDK_SCROLL_MASK</property>
                 <property name="vexpand">True</property>
               </object>
               <packing>
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index f08ca94..8037cbe 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -1398,6 +1398,9 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
                 idx = 1 if i else 0
                 w.setup(scroll, self.get_state_traversal(idx), [self.fill_colors, self.line_colors])
 
+            for w in self.linkmap:
+                w.associate(self)
+
             for widget in (
                     self.vbox[:n] + self.file_toolbar[:n] + self.diffmap[:n] +
                     self.linkmap[:n - 1] + self.dummy_toolbar_linkmap[:n - 1]):
diff --git a/meld/linkmap.py b/meld/linkmap.py
index be8082f..ede7e58 100644
--- a/meld/linkmap.py
+++ b/meld/linkmap.py
@@ -122,3 +122,20 @@ class LinkMap(Gtk.DrawingArea):
 
     def do_scroll_event(self, event):
         self.filediff.next_diff(event.direction)
+
+
+class ScrollLinkMap(Gtk.DrawingArea):
+
+    __gtype_name__ = "ScrollLinkMap"
+
+    def __init__(self):
+        self._setup = False
+
+    def associate(self, melddoc):
+        self.melddoc = melddoc
+        self._setup = True
+
+    def do_scroll_event(self, event):
+        if not self._setup:
+            return
+        self.melddoc.next_diff(event.direction)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]