[gnome-tweak-tool] the search works



commit db0605f9e3d8004706888b539cf5db24c9bf7e80
Author: Alex Muñoz <alexmudoz gmail com>
Date:   Mon Jul 29 05:08:56 2013 -0400

    the search works

 gtweak/tweakmodel.py |   17 ++++++++++++-----
 gtweak/tweakview.py  |   41 ++++++++++++++++++++++++++++-------------
 2 files changed, 40 insertions(+), 18 deletions(-)
---
diff --git a/gtweak/tweakmodel.py b/gtweak/tweakmodel.py
index a803d77..1bd044b 100644
--- a/gtweak/tweakmodel.py
+++ b/gtweak/tweakmodel.py
@@ -71,10 +71,8 @@ class Tweak:
 
     def search_matches(self, txt):
         if self._search_cache == None:
-            self._search_cache = set([i.strip(" .,\n'\"").lower() for j in (
-                    self.name.split(' '),self.description.split(' ')) for i in j])
-
-        return txt.strip().lower() in self._search_cache
+            self._search_cache = self.name.lower() + " " + self.description.lower()
+        return  txt in self._search_cache
 
     def set_notify_cb(self, func):
         self._notify_cb = func
@@ -200,7 +198,16 @@ class TweakModel(Gtk.ListStore):
         group.set_tweaks(tweak)
       
     def search_matches(self, txt):
-        return (t for t in self.tweaks if t.search_matches(txt))
+        tweaks = []                                          
+        groups = []                                                             
+        
+        for g in self.tweak_groups:
+            for t in  g.tweaks:                                             
+                if t.search_matches(txt): 
+                    tweaks.append(t)
+                    if not g.name in groups:                          
+                        groups.append(g.name)
+        return tweaks, groups 
 
     def get_tweakgroup_iter(self, name):
         return self._tweak_group_iters[name]
diff --git a/gtweak/tweakview.py b/gtweak/tweakview.py
index dbaa3af..e5033cd 100644
--- a/gtweak/tweakview.py
+++ b/gtweak/tweakview.py
@@ -68,8 +68,8 @@ class TweakView:
         self._model.load_tweaks()
         groups = self._model._tweak_group_names.keys()
        groups = sorted(groups)
-        listbox = self.init_listbox(groups)
-        leftbox.pack_start(listbox, True, True, 0)
+        self.listbox = self.init_listbox(groups)
+        leftbox.pack_start(self.listbox, True, True, 0)
 
         #make sure the tweak background is the correct color
         ctx = builder.get_object('tweak_viewport').get_style_context ()
@@ -106,8 +106,18 @@ class TweakView:
             else:
                 t.widget.hide()
 
-    def select_none(self):
-        print "filter"
+    def on_list_changed(self, groups):
+        self.listbox.set_filter_func(self.on_list_filtered,groups)
+        selected = self.listbox.get_selected_row().get_child().get_text()
+        if groups and not selected in groups:
+            index =  sorted(self._model._tweak_group_names.keys()).index(groups[0])
+            row = self.listbox.get_row_at_index(index)
+            self.listbox.select_row(row)
+        
+    def on_list_filtered(self, row, groups):
+        lbl = row.get_child()
+        if lbl.get_text() in groups:
+            return row        
 
     def _on_tweak_notify_response(self, info, response, func):
         self._detail_vbox.remove(info)
@@ -147,13 +157,16 @@ class TweakView:
         info.show_all()
 
     def _on_search(self, txt):
-        tweaks = self._model.search_matches(txt)
+        tweaks, group = self._model.search_matches(txt)
         self.show_only_tweaks(tweaks)
-        self.select_none()
+        self.on_list_changed(group)
         self._notebook.set_current_page(1)
 
     def _on_search_cancel(self):
-        self._notebook.set_current_page(0)
+        self.stack.show_all()
+        groups = self._model._tweak_group_names.keys()
+        groups = sorted(groups)
+        self.on_list_changed(groups)
 
     def _on_pre_selection_change(self):
         self._notebook.set_current_page(0)
@@ -183,7 +196,8 @@ class TweakView:
         if revealer.get_reveal_child():
             revealer.set_reveal_child(False) 
             entry.set_text("") 
-            btn.grab_focus()      
+            btn.grab_focus()
+            self._on_search_cancel()
         else:
             revealer.set_reveal_child(True)
             entry.grab_focus()
@@ -197,13 +211,14 @@ class EntryManager:
         self._entry = search_entry
         self._search_cb = search_cb
         self._search_cancel_cb = search_cancel_cb
-        self._entry.connect("changed", self._on_changed)
+        self._entry.connect("changed", self._search)
         self._entry.connect("key-press-event", self._on_key_press)
         self._entry.connect("icon-release", self._on_clear_icon_release)
-        self._on_changed(self._entry)
+        self._on_changed()
 
-    def _search(self):
-        txt = self._entry.get_text()
+    def _search(self, entry):
+        txt = entry.get_text()
+        self._on_changed()
         if txt:
             self._search_cb(txt)
 
@@ -211,7 +226,7 @@ class EntryManager:
         self._search_cancel_cb()
         self._entry.set_text("")
         
-    def _on_changed(self, entry):
+    def _on_changed(self):
         if not self._entry.get_text():
             self._entry.set_properties(
                     secondary_icon_name="edit-find" + EntryManager.SYMBOLIC,


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