[caribou] Antler: Have keyboard resize correctly when type changes.



commit dffb9374b4cae0266c0e3c1a4e1a03e7a77383b0
Author: Eitan Isaacson <eitan monotonous org>
Date:   Wed Jun 15 16:20:03 2011 -0700

    Antler: Have keyboard resize correctly when type changes.

 caribou/antler/keyboard_view.py |   13 ++-----------
 caribou/antler/main.py          |    2 +-
 caribou/antler/window.py        |   29 +++++++++++++++++++++--------
 3 files changed, 24 insertions(+), 20 deletions(-)
---
diff --git a/caribou/antler/keyboard_view.py b/caribou/antler/keyboard_view.py
index 13d1a29..b1e1db0 100644
--- a/caribou/antler/keyboard_view.py
+++ b/caribou/antler/keyboard_view.py
@@ -243,7 +243,7 @@ class AntlerLayout(Gtk.Box):
             self.add_row([c.get_children() for c in row.get_columns()], row_num)
 
 class AntlerKeyboardView(Gtk.Notebook):
-    def __init__(self):
+    def __init__(self, keyboard_type):
         gobject.GObject.__init__(self)
         settings = AntlerSettings()
         self.set_show_tabs(False)
@@ -269,8 +269,7 @@ class AntlerKeyboardView(Gtk.Notebook):
                 Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + 1)
 
         self.scanner = Caribou.Scanner()
-        self.set_keyboard_model(settings.keyboard_type.value)
-        settings.keyboard_type.connect('value-changed', self._on_kb_type_changed)
+        self.set_keyboard_model(keyboard_type)
 
     def set_keyboard_model(self, keyboard_type):
         self.keyboard_model = Caribou.KeyboardModel(keyboard_type=keyboard_type)
@@ -293,14 +292,6 @@ class AntlerKeyboardView(Gtk.Notebook):
 
         self._set_to_active_layer()
 
-    def _on_kb_type_changed(self, setting, value):
-        is_visible = self.get_visible()
-        for l in [self.get_nth_page(i) for i in xrange(self.get_n_pages ())]:
-            self.remove(l)
-        self.set_keyboard_model(value)
-        if is_visible:
-            self.show_all ()
-
     def _on_key_activated(self, model, key):
         if key.props.name == "Caribou_Prefs":
             p = PreferencesDialog(AntlerSettings())
diff --git a/caribou/antler/main.py b/caribou/antler/main.py
index d5d9a1b..46c0453 100644
--- a/caribou/antler/main.py
+++ b/caribou/antler/main.py
@@ -8,7 +8,7 @@ class AntlerKeyboardService(Caribou.KeyboardService):
     def __init__(self):
         gobject.GObject.__init__(self)
         self.register_keyboard("Antler")
-        self.window = AntlerWindowEntry(AntlerKeyboardView())
+        self.window = AntlerWindowEntry(AntlerKeyboardView)
 
     def run(self):
         loop = gobject.MainLoop()
diff --git a/caribou/antler/window.py b/caribou/antler/window.py
index e24330d..a72203e 100644
--- a/caribou/antler/window.py
+++ b/caribou/antler/window.py
@@ -195,7 +195,7 @@ class ProximityWindowBase(AnimatedWindowBase):
             return sqrt((px - x2)**2 + (py - y2)**2)
 
 class AntlerWindow(ProximityWindowBase):
-    def __init__(self, text_entry_mech, placement=None,
+    def __init__(self, keyboard_view_factory, placement=None,
                  min_alpha=1.0, max_alpha=1.0, max_distance=100):
         ProximityWindowBase.__init__(self)
 
@@ -204,10 +204,16 @@ class AntlerWindow(ProximityWindowBase):
         ctx = self.get_style_context()
         ctx.add_class("antler-keyboard-window")
 
+        settings = AntlerSettings()
+        settings.keyboard_type.connect('value-changed', self.on_kb_type_changed)
+
         self._vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
         self.add(self._vbox)
-        self.keyboard = text_entry_mech
-        self._vbox.pack_start(text_entry_mech, True, True, 0)
+
+        self.keyboard_view_factory = keyboard_view_factory
+        self.keyboard_view = keyboard_view_factory (settings.keyboard_type.value)
+
+        self._vbox.pack_start(self.keyboard_view, True, True, 0)
 
         self.connect("size-allocate", self.on_size_allocate)
 
@@ -216,6 +222,13 @@ class AntlerWindow(ProximityWindowBase):
         self.placement = placement or \
             AntlerWindowPlacement()
 
+    def on_kb_type_changed(self, setting, value):
+        self._vbox.remove(self.keyboard_view)
+        self.resize(1, 1)
+        self.keyboard_view = self.keyboard_view_factory (value)
+        self._vbox.pack_start(self.keyboard_view, True, True, 0)
+        self.keyboard_view.show_all()
+
     def on_size_allocate(self, widget, allocation):
         self._update_position()
 
@@ -299,7 +312,7 @@ class AntlerWindow(ProximityWindowBase):
         return offset
 
 class AntlerWindowDocked(AntlerWindow):
-    def __init__(self, text_entry_mech, horizontal_roll=False):
+    def __init__(self, keyboard_view_factory, horizontal_roll=False):
         placement = AntlerWindowPlacement(
             xalign=AntlerWindowPlacement.START,
             yalign=AntlerWindowPlacement.END,
@@ -307,7 +320,7 @@ class AntlerWindowDocked(AntlerWindow):
             ystickto=AntlerWindowPlacement.SCREEN,
             xgravitate=AntlerWindowPlacement.INSIDE)
 
-        AntlerWindow.__init__(self, text_entry_mech, placement)
+        AntlerWindow.__init__(self, keyboard_view_factory, placement)
 
         self.horizontal_roll = horizontal_roll
         self._rolled_in = False
@@ -378,7 +391,7 @@ class AntlerWindowDocked(AntlerWindow):
         animation.connect('completed', lambda x: AntlerWindow.hide(self))
 
 class AntlerWindowEntry(AntlerWindow):
-    def __init__(self, text_entry_mech):
+    def __init__(self, keyboard_view_factory):
         placement = AntlerWindowPlacement(
             xalign=AntlerWindowPlacement.START,
             xstickto=AntlerWindowPlacement.ENTRY,
@@ -386,7 +399,7 @@ class AntlerWindowEntry(AntlerWindow):
             xgravitate=AntlerWindowPlacement.INSIDE,
             ygravitate=AntlerWindowPlacement.OUTSIDE)
 
-        AntlerWindow.__init__(self, text_entry_mech, placement)
+        AntlerWindow.__init__(self, keyboard_view_factory, placement)
 
 
     def _calculate_axis(self, axis_placement, root_bbox):
@@ -471,7 +484,7 @@ if __name__ == "__main__":
     import signal
     signal.signal(signal.SIGINT, signal.SIG_DFL)
 
-    w = AntlerWindowDocked(keyboard_view.AntlerKeyboardView())
+    w = AntlerWindowDocked(keyboard_view.AntlerKeyboardView)
     w.show_all()
 
     try:



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