summaryrefslogtreecommitdiff
path: root/caribou
diff options
context:
space:
mode:
authorEitan Isaacson <eitan@monotonous.org>2011-06-15 16:20:03 -0700
committerEitan Isaacson <eitan@monotonous.org>2011-06-22 11:23:21 -0700
commitdffb9374b4cae0266c0e3c1a4e1a03e7a77383b0 (patch)
treed547d34bf7b3d6c70a9516e1247f5ac96f126940 /caribou
parent20ee8c51feee3cbdd4ce39576035db60a8ecdf0f (diff)
downloadcaribou-dffb9374b4cae0266c0e3c1a4e1a03e7a77383b0.tar.gz
Antler: Have keyboard resize correctly when type changes.
Diffstat (limited to 'caribou')
-rw-r--r--caribou/antler/keyboard_view.py13
-rw-r--r--caribou/antler/main.py2
-rw-r--r--caribou/antler/window.py29
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: