Skip to content

Commit d78eef0

Browse files
committed
settings: Add bind_settings helper for attribute-specified properties
The idea here is to have settings bindings specified next to the GObject attributes that they're often associated with. This commit adds the helper, and moves all of the major uses of gsettings binding to it.
1 parent 6d38d8c commit d78eef0

6 files changed

Lines changed: 51 additions & 43 deletions

File tree

meld/dirdiff.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
from decimal import Decimal
4343

4444
from meld.conf import _
45-
from meld.settings import meldsettings, settings
45+
from meld.settings import bind_settings, meldsettings, settings
4646

4747

4848
################################################################################
@@ -248,6 +248,14 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
248248

249249
__gtype_name__ = "DirDiff"
250250

251+
__gsettings_bindings__ = (
252+
('folder-ignore-symlinks', 'ignore-symlinks'),
253+
('folder-shallow-comparison', 'shallow-comparison'),
254+
('folder-time-resolution', 'time-resolution'),
255+
('folder-status-filters', 'status-filters'),
256+
('ignore-blank-lines', 'ignore-blank-lines'),
257+
)
258+
251259
ignore_blank_lines = GObject.property(
252260
type=bool,
253261
nick="Ignore blank lines",
@@ -302,6 +310,7 @@ def __init__(self, num_panes):
302310
melddoc.MeldDoc.__init__(self)
303311
gnomeglade.Component.__init__(self, "dirdiff.ui", "dirdiff",
304312
["DirdiffActions"])
313+
bind_settings(self)
305314

306315
self.ui_file = gnomeglade.ui_file("dirdiff-ui.xml")
307316
self.actiongroup = self.DirdiffActions
@@ -408,17 +417,6 @@ def __init__(self, num_panes):
408417
settings.connect('changed::folder-columns',
409418
self.update_treeview_columns)
410419

411-
settings.bind('folder-ignore-symlinks', self, 'ignore-symlinks',
412-
Gio.SettingsBindFlags.DEFAULT)
413-
settings.bind('folder-shallow-comparison', self, 'shallow-comparison',
414-
Gio.SettingsBindFlags.DEFAULT)
415-
settings.bind('folder-time-resolution', self, 'time-resolution',
416-
Gio.SettingsBindFlags.DEFAULT)
417-
settings.bind('folder-status-filters', self, 'status-filters',
418-
Gio.SettingsBindFlags.DEFAULT)
419-
settings.bind('ignore-blank-lines', self, 'ignore-blank-lines',
420-
Gio.SettingsBindFlags.DEFAULT)
421-
422420
self.update_comparator()
423421
self.connect("notify::shallow-comparison", self.update_comparator)
424422
self.connect("notify::time-resolution", self.update_comparator)

meld/filediff.py

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
from .ui import gnomeglade
4747

4848
from meld.const import MODE_REPLACE, MODE_DELETE, MODE_INSERT
49-
from meld.settings import meldsettings, settings
49+
from meld.settings import bind_settings, meldsettings, settings
5050
from .util.compat import text_type
5151
from meld.sourceview import LanguageManager
5252

@@ -141,6 +141,11 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
141141

142142
__gtype_name__ = "FileDiff"
143143

144+
__gsettings_bindings__ = (
145+
('highlight-current-line', 'highlight-current-line'),
146+
('ignore-blank-lines', 'ignore-blank-lines'),
147+
)
148+
144149
highlight_current_line = GObject.property(type=bool, default=False)
145150
ignore_blank_lines = GObject.property(
146151
type=bool,
@@ -171,6 +176,8 @@ def __init__(self, num_panes):
171176
"""
172177
melddoc.MeldDoc.__init__(self)
173178
gnomeglade.Component.__init__(self, "filediff.ui", "filediff")
179+
bind_settings(self)
180+
174181
widget_lists = [
175182
"diffmap", "file_save_button", "file_toolbar", "fileentry",
176183
"linkmap", "msgarea_mgr", "readonlytoggle",
@@ -362,29 +369,6 @@ def __init__(self, num_panes):
362369
gutter = t.get_gutter(window)
363370
gutter.insert(renderer, 10)
364371

365-
# GSettings bindings
366-
for view in self.textview:
367-
settings.bind('indent-width', view, 'indent-width',
368-
Gio.SettingsBindFlags.DEFAULT)
369-
settings.bind('insert-spaces-instead-of-tabs', view,
370-
'insert-spaces-instead-of-tabs',
371-
Gio.SettingsBindFlags.DEFAULT)
372-
settings.bind('show-line-numbers', view, 'show-line-numbers',
373-
Gio.SettingsBindFlags.DEFAULT)
374-
settings.bind('draw-spaces', view, 'draw-spaces',
375-
Gio.SettingsBindFlags.DEFAULT)
376-
settings.bind('wrap-mode', view, 'wrap-mode',
377-
Gio.SettingsBindFlags.DEFAULT)
378-
379-
for buf in self.textbuffer:
380-
settings.bind('highlight-syntax', buf, 'highlight-syntax',
381-
Gio.SettingsBindFlags.DEFAULT)
382-
383-
settings.bind('highlight-current-line', self, 'highlight-current-line',
384-
Gio.SettingsBindFlags.DEFAULT)
385-
settings.bind('ignore-blank-lines', self, 'ignore-blank-lines',
386-
Gio.SettingsBindFlags.DEFAULT)
387-
388372
self.connect("notify::ignore-blank-lines", self.refresh_comparison)
389373

390374
meldsettings.connect('changed', self.on_setting_changed)

meld/meldbuffer.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,21 @@
2424
from gi.repository import GtkSource
2525

2626
from meld.conf import _
27+
from meld.settings import bind_settings
2728
from meld.util.compat import text_type
2829

2930

3031
class MeldBuffer(GtkSource.Buffer):
3132

3233
__gtype_name__ = "MeldBuffer"
3334

35+
__gsettings_bindings__ = (
36+
('highlight-syntax', 'highlight-syntax'),
37+
)
38+
3439
def __init__(self, filename=None):
3540
GtkSource.Buffer.__init__(self)
41+
bind_settings(self)
3642
self.data = MeldBufferData(filename)
3743
self.user_action_count = 0
3844

meld/settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ def create_settings(uninstalled=False):
107107
meldsettings = MeldSettings()
108108

109109

110+
def bind_settings(obj):
111+
global settings
112+
for binding in getattr(obj, '__gsettings_bindings__', ()):
113+
settings_id, property_id = binding
114+
settings.bind(
115+
settings_id, obj, property_id, Gio.SettingsBindFlags.DEFAULT)
116+
117+
110118
settings = None
111119
interface_settings = None
112120
meldsettings = None

meld/sourceview.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from gi.repository import Gtk
2121
from gi.repository import GtkSource
2222

23+
from meld.settings import bind_settings
24+
2325

2426
class LanguageManager(object):
2527

@@ -46,6 +48,14 @@ class MeldSourceView(GtkSource.View):
4648

4749
__gtype_name__ = "MeldSourceView"
4850

51+
__gsettings_bindings__ = (
52+
('indent-width', 'indent-width'),
53+
('insert-spaces-instead-of-tabs', 'insert-spaces-instead-of-tabs'),
54+
('show-line-numbers', 'show-line-numbers'),
55+
('draw-spaces', 'draw-spaces'),
56+
('wrap-mode', 'wrap-mode'),
57+
)
58+
4959
replaced_entries = (
5060
# We replace the default GtkSourceView undo mechanism
5161
(Gdk.KEY_z, Gdk.ModifierType.CONTROL_MASK),
@@ -61,6 +71,7 @@ class MeldSourceView(GtkSource.View):
6171

6272
def __init__(self, *args, **kwargs):
6373
super(MeldSourceView, self).__init__(*args, **kwargs)
74+
bind_settings(self)
6475

6576
binding_set = Gtk.binding_set_find('GtkSourceView')
6677
for key, modifiers in self.replaced_entries:

meld/vcview.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
from .ui import vcdialogs
4444

4545
from meld.conf import _
46-
from meld.settings import settings
46+
from meld.settings import settings, bind_settings
4747
from meld.vc import _null
4848

4949
log = logging.getLogger(__name__)
@@ -139,6 +139,12 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
139139

140140
__gtype_name__ = "VcView"
141141

142+
__gsettings_bindings__ = (
143+
('vc-status-filters', 'status-filters'),
144+
('vc-left-is-local', 'left-is-local'),
145+
('vc-merge-file-order', 'merge-file-order'),
146+
)
147+
142148
status_filters = GObject.property(
143149
type=GObject.TYPE_STRV,
144150
nick="File status filters",
@@ -175,6 +181,7 @@ def __init__(self):
175181
melddoc.MeldDoc.__init__(self)
176182
gnomeglade.Component.__init__(self, "vcview.ui", "vcview",
177183
["VcviewActions", 'liststore_vcs'])
184+
bind_settings(self)
178185

179186
self.ui_file = gnomeglade.ui_file("vcview-ui.xml")
180187
self.actiongroup = self.VcviewActions
@@ -240,12 +247,6 @@ def addCol(name, num, data_name=None):
240247
self.combobox_vcs.add_attribute(cell, 'sensitive', 2)
241248
self.combobox_vcs.lock = False
242249

243-
settings.bind('vc-status-filters', self, 'status-filters',
244-
Gio.SettingsBindFlags.DEFAULT)
245-
settings.bind('vc-left-is-local', self, 'left-is-local',
246-
Gio.SettingsBindFlags.DEFAULT)
247-
settings.bind('vc-merge-file-order', self, 'merge-file-order',
248-
Gio.SettingsBindFlags.DEFAULT)
249250
settings.bind('vc-console-visible',
250251
self.actiongroup.get_action('VcConsoleVisible'),
251252
'active', Gio.SettingsBindFlags.DEFAULT)

0 commit comments

Comments
 (0)