[gnome-tweak-tool] Automatically search when unhandled keyboard input is detected



commit a3069bd02e21dfdabca7a8f56122f53b49f77d96
Author: Isaac Lenton <isaac isuniversal com>
Date:   Wed Jan 28 02:37:37 2015 +1000

    Automatically search when unhandled keyboard input is detected
    
    https://bugzilla.gnome.org/show_bug.cgi?id=741804

 gtweak/tweakview.py |   30 +++++++++++++++++++++++++++---
 1 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/gtweak/tweakview.py b/gtweak/tweakview.py
index 0a724d1..3d1ffdf 100644
--- a/gtweak/tweakview.py
+++ b/gtweak/tweakview.py
@@ -59,6 +59,7 @@ class Window(Gtk.ApplicationWindow):
                                           self._update_decorations);
 
         self.connect("key-press-event", self._on_key_press)
+        self.connect_after("key-press-event", self._after_key_press)
         self.add(main_box)
     
     def titlebar(self):
@@ -196,13 +197,36 @@ class Window(Gtk.ApplicationWindow):
                 self._right_header.props.decoration_layout = ":" + tokens[1]
                 self._left_header.props.decoration_layout = tokens[0]
 
+    def _after_key_press(self, widget, event):
+        if not self.button.get_active() or not self.entry.is_focus():
+            if self.entry.im_context_filter_keypress(event):
+                self.button.set_active(True)
+                self.entry.grab_focus ()
+
+                # Text in entry is selected, deselect it
+                l = self.entry.get_text_length()
+                self.entry.select_region(l, l)
+
+                return True
+
+        return False
+
     def _on_key_press(self, widget, event):
         keyname = Gdk.keyval_name(event.keyval)
-        if keyname == 'Escape':
-            self.button.set_active(False)
-        if event.state and Gdk.ModifierType.CONTROL_MASK:
+
+        if keyname == 'Escape' and self.button.get_active():
+            if self.entry.is_focus():
+                self.button.set_active(False)
+            else:
+                self.entry.grab_focus()
+            return True
+
+        if event.state & Gdk.ModifierType.CONTROL_MASK:
             if keyname == 'f':
                 self.button.set_active(True)
+                return True
+
+        return False
 
     def _on_list_changed(self, group):
         self.listbox.set_filter_func(self._list_filter_func, group)


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