Blob Blame History Raw
From f82a109c1db0497e62f22bace42f6ccf8db30821 Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Thu, 7 Nov 2013 21:39:47 +0100
Subject: [PATCH 3/6] Add a way to reload tweaks when there are changes after
 startup

---
 gtweak/tweakmodel.py |  7 +++++++
 gtweak/tweakview.py  | 30 ++++++++++++++++++++++++++++--
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/gtweak/tweakmodel.py b/gtweak/tweakmodel.py
index faa920b..0fa3053 100644
--- a/gtweak/tweakmodel.py
+++ b/gtweak/tweakmodel.py
@@ -90,6 +90,7 @@ class TweakGroup:
     def __init__(self, name, *tweaks):
         self.name = name
         self.tweaks = []
+        self.model = None
 
         self._sg = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL)
         self._sg.props.ignore_hidden = True
@@ -165,6 +166,12 @@ class TweakModel(Gtk.ListStore):
         _iter = self.append([gettext(tweakgroup.name), tweakgroup])
         self._tweak_group_names[tweakgroup.name] = tweakgroup
         self._tweak_group_iters[tweakgroup.name] = _iter
+        tweakgroup.model = self
+
+    def tweaks_changed(self, group):
+        _iter = self._tweak_group_iters[group.name]
+        _path = self.get_path(_iter)
+        self.row_changed(_path, _iter)
 
     def add_tweak_auto_to_group(self, tweak):
         if not tweak.loaded:
diff --git a/gtweak/tweakview.py b/gtweak/tweakview.py
index ac8ae45..9de821c 100644
--- a/gtweak/tweakview.py
+++ b/gtweak/tweakview.py
@@ -73,14 +73,40 @@ class TweakView:
         ctx.add_provider (provider,6000)
 
         #add all tweaks
+        self._tweak_set = set()
         self._tweak_vbox = builder.get_object('tweak_vbox')
+        self.reload_tweaks()
+
+        self._model.connect('row-changed', self._on_model_row_changed)
+
+        #dict of pending notifications, the key is the function to be called
+        self._notification_functions = {}
+
+    def reload_tweaks(self):
+        new_tweak_set = set()
+
         for t in sorted(self._model.tweaks, key=_sort_tweak_widgets_by_widget_type):
+            new_tweak_set.add(t)
+            if t in self._tweak_set:
+                continue
+
             t.main_window = self._main_window
             self._tweak_vbox.pack_start(t.widget, False, False, 0)
             t.set_notify_cb(self._on_tweak_notify)
 
-        #dict of pending notifications, the key is the function to be called
-        self._notification_functions = {}
+            self._tweak_set.add(t)
+
+        for t in self._tweak_set - new_tweak_set:
+            self._tweak_vbox.remove(t.widget)
+
+        self._tweak_set = new_tweak_set
+
+    def _on_model_row_changed(self, model, path, titer):
+        model, selected = self.treeview.get_selection().get_selected_rows()
+        self.select_none()
+        self.reload_tweaks()
+        if len(selected) > 0:
+            self.treeview.get_selection().select_path(selected[0])
 
     def run(self):
         self._main_window.show_all()
-- 
1.8.3.1