summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Pellicer <davidpellicermartin@gmail.com>2010-07-19 11:48:06 -0700
committerEitan Isaacson <eitan@monotonous.org>2010-07-19 13:06:28 -0700
commit6f77e3d5016abc696e40d472cf35722fff6c14c4 (patch)
tree9cd280cca59055a351437247aa33d4b0439d10d3
parent07a79a29d9c38235bc8c80ee7ee2240751e14c39 (diff)
downloadcaribou-6f77e3d5016abc696e40d472cf35722fff6c14c4.tar.gz
Added listeners to Caribou object to handle the layout changes.
-rw-r--r--caribou/ui/main.py20
1 files changed, 17 insertions, 3 deletions
diff --git a/caribou/ui/main.py b/caribou/ui/main.py
index 3c70bb3..0f99398 100644
--- a/caribou/ui/main.py
+++ b/caribou/ui/main.py
@@ -18,11 +18,16 @@ class Caribou:
if not self._get_a11y_enabled():
raise Exception, "AT-SPI 1 or 2 needs to be enabled."
self.__current_acc = None
+ self.window_factory = window_factory
+ self.kb_factory = kb_factory
self.window = window_factory(kb_factory())
- self._register_events()
+ self.client = gconf.client_get_default()
+ self._register_event_listeners()
+ self.client.notify_add(const.CARIBOU_GCONF + "/layout",
+ self._on_layout_changed)
signal.signal(signal.SIGINT, self.signal_handler)
- def _register_events(self):
+ def _register_event_listeners(self):
pyatspi.Registry.registerEventListener(
self.on_focus, "object:state-changed:focused")
pyatspi.Registry.registerEventListener(self.on_focus, "focus")
@@ -31,7 +36,7 @@ class Caribou:
pyatspi.Registry.registerKeystrokeListener(
self.on_key_down, mask=None, kind=(pyatspi.KEY_PRESSED_EVENT,))
- def _deregister_events(self):
+ def _deregister_event_listeners(self):
pyatspi.Registry.deregisterEventListener(
self.on_focus, "object:state-changed:focused")
pyatspi.Registry.deregisterEventListener(self.on_focus, "focus")
@@ -40,6 +45,15 @@ class Caribou:
pyatspi.Registry.deregisterKeystrokeListener(
self.on_key_down, mask=None, kind=(pyatspi.KEY_PRESSED_EVENT,))
+ def _on_layout_changed(self, client, connection_id, entry, args):
+ self._deregister_event_listeners()
+ self.window.destroy()
+ self._update_window()
+ self._register_event_listeners()
+
+ def _update_window(self):
+ self.window = self.window_factory(self.kb_factory())
+
def _get_a11y_enabled(self):
try:
gconfc = gconf.client_get_default()