diff options
Diffstat (limited to 'caribou')
-rw-r--r-- | caribou/ui/keyboard.py | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py index 6ef8565..4601d29 100644 --- a/caribou/ui/keyboard.py +++ b/caribou/ui/keyboard.py @@ -55,11 +55,21 @@ class KeyboardPreferences: close.connect("clicked", self.destroy) client = gconf.client_get_default() - client.add_dir("/apps/caribou/osk", gconf.CLIENT_PRELOAD_NONE) + client.add_dir(const.CARIBOU_GCONF, gconf.CLIENT_PRELOAD_NONE) layout_combo = builder.get_object("combobox_layout") layout_combo.connect("changed", self._on_layout_changed, client) + normal_state_color_button = builder.get_object("normal_state_color_button") + normal_color = gtk.gdk.Color(client.get_string(const.CARIBOU_GCONF + "/normal_color")) + normal_state_color_button.set_color(normal_color) + normal_state_color_button.connect("color-set", self._on_normal_state_color_set, client) + + mouse_over_color_button = builder.get_object("mouse_over_color_button") + mouse_over_color = gtk.gdk.Color(client.get_string(const.CARIBOU_GCONF + "/mouse_over_color")) + mouse_over_color_button.set_color(mouse_over_color) + mouse_over_color_button.connect("color-set", self._on_mouse_over_color_set, client) + #TODO: List the layouts in the data dir #for kbddef in keyboards.kbds: # layout_combo.append_text(kbddef) @@ -98,6 +108,15 @@ class KeyboardPreferences: if kbdname: client.set_string("/apps/caribou/osk/layout", kbdname) + def _on_normal_state_color_set(self, colorbutton, client): + color = colorbutton.get_color().to_string() + client.set_string(const.CARIBOU_GCONF + "/normal_color", color) + + def _on_mouse_over_color_set(self, colorbutton, client): + color = colorbutton.get_color().to_string() + client.set_string(const.CARIBOU_GCONF + "/mouse_over_color", color) + + class Key(gtk.Button): def __init__(self, label = '', value = '', key_type = 'normal', @@ -127,6 +146,10 @@ class Key(gtk.Button): def set_relative_size(self, size): self.set_size_request(int(size * self.width), int(size)) + def set_color(self, normal_color, mouse_over_color): + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(normal_color)) + self.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.Color(mouse_over_color)) + def _get_value(self): return self._value @@ -276,11 +299,16 @@ class CaribouKeyboard(gtk.Notebook): self.key_size = 30 self.current_mask = 0 self.current_page = 0 + self.client = gconf.client_get_default() + + self.client.notify_add(const.CARIBOU_GCONF + "/normal_color", self._colors_changed) + self.client.notify_add(const.CARIBOU_GCONF + "/mouse_over_color", self._colors_changed) def load_kb(self, kb_location): kb_deserializer = KbLayoutDeserializer() layouts = kb_deserializer.deserialize(kb_location) self._set_layouts(layouts) + self._update_colors() def _set_layouts(self, layout_list): self._clear() @@ -302,6 +330,20 @@ class CaribouKeyboard(gtk.Notebook): self._pressed_normal_key) key.set_relative_size(self.key_size) + def _colors_changed(self, client, connection_id, entry, args): + self._update_colors() + + def _update_colors(self): + normal_color = self.client.get_string(const.CARIBOU_GCONF + "/normal_color") + mouse_over_color = self.client.get_string(const.CARIBOU_GCONF + "/mouse_over_color") + n_pages = self.get_n_pages() + for i in range(n_pages): + layout = self.get_nth_page(i) + for row in layout.rows: + for button in row: + button.set_color(normal_color, + mouse_over_color) + def _clear(self): n_pages = self.get_n_pages() for i in range(n_pages): |