[meld: 179/180] filediff, sourceview: Override SourceView line number handling
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld: 179/180] filediff, sourceview: Override SourceView line number handling
- Date: Thu, 23 Jul 2015 21:46:25 +0000 (UTC)
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]