[meld: 179/180] filediff, sourceview: Override SourceView line number handling



commit c4b4c09f747904629f991c80b6a1cea4bc1a74e7
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Tue Jul 7 07:30:48 2015 +1000

    filediff, sourceview: Override SourceView line number handling
    
    In order to have everything work nicely, we override the
    show-line-numbers property in our MeldSourceView class and handle
    everything from there.
    
    Ideally we would also be creating the GutterRenderers there, but as it
    stands we need too much information from FileDiff to do this.

 meld/filediff.py   |   14 +++++++++++---
 meld/sourceview.py |   26 ++++++++++++++++++++------
 2 files changed, 31 insertions(+), 9 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index d5bb5c4..cced5f1 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -31,6 +31,7 @@ from gi.repository import GObject
 from gi.repository import Gio
 from gi.repository import Gdk
 from gi.repository import Gtk
+from gi.repository import GtkSource
 
 from meld.conf import _
 from . import diffutil
@@ -218,9 +219,6 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
         self.in_nested_textview_gutter_expose = False
         self._cached_match = CachedSequenceMatcher()
 
-        for v in self.textview:
-            v.late_bind()
-
         for buf in self.textbuffer:
             buf.connect("notify::has-selection",
                         self.update_text_actions_sensitivity)
@@ -281,12 +279,22 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                 gutter = t.get_gutter(window)
                 gutter.insert(renderer, -40)
 
+            # TODO: This renderer handling should all be part of
+            # MeldSourceView, but our current diff-chunk-handling makes
+            # this difficult.
             window = Gtk.TextWindowType.LEFT
             if direction == Gtk.TextDirection.RTL:
                 window = Gtk.TextWindowType.RIGHT
             renderer = GutterRendererChunkLines(pane, pane - 1, self.linediffer)
+            renderer.set_properties(
+                "alignment-mode", GtkSource.GutterRendererAlignmentMode.FIRST,
+                "yalign", 0.5,
+                "xalign", 1.0,
+                "xpad", 3,
+            )
             gutter = t.get_gutter(window)
             gutter.insert(renderer, -30)
+            t.line_renderer = renderer
 
         self.connect("notify::ignore-blank-lines", self.refresh_comparison)
 
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 008b789..0d142f3 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -24,7 +24,7 @@ from gi.repository import GtkSource
 import meldbuffer
 
 from meld.misc import colour_lookup_with_fallback, get_common_theme
-from meld.settings import bind_settings, meldsettings, settings
+from meld.settings import bind_settings, meldsettings
 
 
 class LanguageManager(object):
@@ -71,11 +71,29 @@ class MeldSourceView(GtkSource.View):
         ('insert-spaces-instead-of-tabs', 'insert-spaces-instead-of-tabs'),
         ('draw-spaces', 'draw-spaces'),
         ('wrap-mode', 'wrap-mode'),
+        ('show-line-numbers', 'show-line-numbers'),
     )
 
     # Named so as not to conflict with the GtkSourceView property
     highlight_current_line_local = GObject.property(type=bool, default=False)
 
+    def get_show_line_numbers(self):
+        return self._show_line_numbers
+
+    def set_show_line_numbers(self, show):
+        if show == self._show_line_numbers:
+            return
+
+        if self.line_renderer:
+            self.line_renderer.set_visible(show)
+
+        self._show_line_numbers = bool(show)
+        self.notify("show-line-numbers")
+
+    show_line_numbers = GObject.property(
+        type=bool, default=False, getter=get_show_line_numbers,
+        setter=set_show_line_numbers)
+
     replaced_entries = (
         # We replace the default GtkSourceView undo mechanism
         (Gdk.KEY_z, Gdk.ModifierType.CONTROL_MASK),
@@ -102,6 +120,7 @@ class MeldSourceView(GtkSource.View):
         self.anim_source_id = None
         self.animating_chunks = []
         self.syncpoints = []
+        self._show_line_numbers = None
 
         buf = meldbuffer.MeldBuffer()
         buf.create_tag("inline")
@@ -111,11 +130,6 @@ class MeldSourceView(GtkSource.View):
         self.on_setting_changed(meldsettings, 'font')
         self.on_setting_changed(meldsettings, 'style-scheme')
 
-    def late_bind(self):
-        settings.bind(
-            'show-line-numbers', self, 'show-line-numbers',
-            Gio.SettingsBindFlags.DEFAULT)
-
     def get_y_for_line_num(self, line):
         buf = self.get_buffer()
         it = buf.get_iter_at_line(line)


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