From dffb9374b4cae0266c0e3c1a4e1a03e7a77383b0 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Wed, 15 Jun 2011 16:20:03 -0700 Subject: 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(-) (limited to 'caribou') 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: -- cgit v1.2.1