diff options
author | Huang Peng <shawn.p.huang@gmail.com> | 2009-02-05 10:39:56 +0800 |
---|---|---|
committer | Huang Peng <shawn.p.huang@gmail.com> | 2009-02-05 10:39:56 +0800 |
commit | aedad1ea0a7fef604aa27f4b58433fd8f2ece29e (patch) | |
tree | ffcb531d8474bde18b90341bcd4eb639edd74525 /ui/gtk/panel.py | |
parent | 41ad46305a88637dd99f00a2d2a3f455505d357b (diff) | |
download | ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.gz ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.xz ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.zip |
re-implement ibus in c language.
Diffstat (limited to 'ui/gtk/panel.py')
-rw-r--r-- | ui/gtk/panel.py | 116 |
1 files changed, 63 insertions, 53 deletions
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py index 1456cc4..284dbb6 100644 --- a/ui/gtk/panel.py +++ b/ui/gtk/panel.py @@ -55,6 +55,7 @@ class Panel(ibus.PanelBase): def __init__ (self, bus): super(Panel, self).__init__(bus) self.__bus = bus + self.__config = self.__bus.get_config() self.__focus_ic = None self.__setup_pid = 0 self.__prefix = os.getenv("IBUS_PREFIX") @@ -67,9 +68,9 @@ class Panel(ibus.PanelBase): signal.signal(signal.SIGCHLD, self.__sigchld_cb) # connect bus signal - self.__bus.connect("config-value-changed", self.__config_value_changed_cb) - self.__bus.connect("config-reloaded", self.__config_reloaded_cb) - self.__bus.config_add_watch("panel") + self.__config.connect("value-changed", self.__config_value_changed_cb) + self.__config.connect("reloaded", self.__config_reloaded_cb) + # self.__bus.config_add_watch("panel") # add icon search path icon_theme = gtk.icon_theme_get_default() @@ -101,28 +102,28 @@ class Panel(ibus.PanelBase): self.__config_load_lookup_table_orientation() self.__config_load_auto_hide() self.__config_load_custom_font() - self.__bus.request_name(ibus.panel.IBUS_PANEL_NAME, 0) + # self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0) def set_cursor_location(self, x, y, w, h): self.__candidate_panel.set_cursor_location(x + w, y + h) - def update_preedit(self, text, attrs, cursor_pos, visible): - self.__candidate_panel.update_preedit(text, attrs, cursor_pos, visible) + def update_preedit_text(self, text, cursor_pos, visible): + self.__candidate_panel.update_preedit_text(text, cursor_pos, visible) - def show_preedit(self): - self.__candidate_panel.show_preedit() + def show_preedit_text(self): + self.__candidate_panel.show_preedit_text() - def hide_preedit(self): - self.__candidate_panel.hide_preedit() + def hide_preedit_text(self): + self.__candidate_panel.hide_preedit_text() - def update_aux_string(self, text, attrs, visible): - self.__candidate_panel.update_aux_string(text, attrs, visible) + def update_auxiliary_text(self, text, visible): + self.__candidate_panel.update_auxiliary_text(text, visible) - def show_aux_string(self): - self.__candidate_panel.show_aux_string() + def show_auxiliary_text(self): + self.__candidate_panel.show_auxiliary_text() - def hide_aux_string(self): - self.__candidate_panel.hide_aux_string() + def hide_auxiliary_text(self): + self.__candidate_panel.hide_auxiliary_text() def update_lookup_table(self, lookup_table, visible): self.__candidate_panel.update_lookup_table(lookup_table, visible) @@ -175,35 +176,43 @@ class Panel(ibus.PanelBase): def focus_in(self, ic): self.reset() - self.__focus_ic = ic - - factory, enabled = self.__bus.get_input_context_states(ic) + self.__focus_ic = ibus.InputContext(self.__bus, ic) + enabled = self.__focus_ic.is_enabled() self.__language_bar.set_enabled(enabled) - if factory == "" or not enabled: + if not enabled: self.__set_im_icon(self.__ibus_icon) else: - name, lang, icon, authors, credits = self.__bus.get_factory_info(factory) - self.__set_im_icon(icon) + engine = self.__focus_ic.get_engine() + if engine: + self.__set_im_icon(engine.icon) + else: + self.__set_im_icon(self.__ibus_icon) self.__language_bar.focus_in() def focus_out(self, ic): self.reset() - if self.__focus_ic == ic: - self.__focus_ic = None - self.__language_bar.focus_out() - self.__set_im_icon(self.__ibus_icon) + self.__focus_ic = None + self.__language_bar.focus_out() + self.__set_im_icon(self.__ibus_icon) - def states_changed(self): + def state_changed(self): if not self.__focus_ic: return - factory, enabled = self.__bus.get_input_context_states(self.__focus_ic) + + enabled = self.__focus_ic.is_enabled() self.__language_bar.set_enabled(enabled) - if enabled == False or not factory: + + if enabled == False: + self.reset() self.__set_im_icon(self.__ibus_icon) else: - name, lang, icon, authors, credits = self.__bus.get_factory_info(factory) - self.__set_im_icon(icon) + engine = self.__focus_ic.get_engine() + if engine: + self.__set_im_icon(engine.icon) + else: + self.__set_im_icon(self.__ibus_icon) + def reset(self): self.__candidate_panel.reset() @@ -216,7 +225,7 @@ class Panel(ibus.PanelBase): gtk.main_quit() def __config_load_lookup_table_orientation(self): - value = self.__bus.config_get_value("panel", "lookup_table_orientation", 0) + value = self.__config.get_value("panel", "lookup_table_orientation", 0) if value != 0 and value != 1: value = 0 if value == 0: @@ -225,14 +234,14 @@ class Panel(ibus.PanelBase): self.__candidate_panel.set_orientation(gtk.ORIENTATION_VERTICAL) def __config_load_auto_hide(self): - auto_hide = self.__bus.config_get_value("panel", "auto_hide", False) + auto_hide = self.__config.get_value("panel", "auto_hide", False) self.__language_bar.set_auto_hide(auto_hide) def __config_load_custom_font(self): - use_custom_font = self.__bus.config_get_value("panel", "use_custom_font", False) + use_custom_font = self.__config.get_value("panel", "use_custom_font", False) font_name = gtk.settings_get_default().get_property("gtk-font-name") font_name = unicode(font_name, "utf-8") - custom_font = self.__bus.config_get_value("panel", "custom_font", font_name) + custom_font = self.__config.get_value("panel", "custom_font", font_name) style_string = 'style "custom-font" { font_name="%s" }\n' \ 'class "IBusPanelLabel" style "custom-font"\n' if use_custom_font: @@ -246,6 +255,8 @@ class Panel(ibus.PanelBase): gtk.rc_reset_styles(settings) def __config_value_changed_cb(self, bus, section, name, value): + if section != "panel": + return if name == "lookup_table_orientation": self.__config_load_lookup_table_orientation() elif name == "auto_hide": @@ -278,45 +289,44 @@ class Panel(ibus.PanelBase): def __create_im_menu(self): menu = gtk.Menu() - factories = self.__bus.get_factories() + engines = self.__bus.list_active_engines() - if not factories: + if not engines: item = gtk.MenuItem(label = "no engine") item.set_sensitive(False) menu.add(item) else: tmp = {} - for factory in factories: - name, lang, icon, authors, credits = self.__bus.get_factory_info(factory) - lang = ibus.get_language_name(lang) - if not icon: - icon = "engine-default" + for engine in engines: + lang = ibus.get_language_name(engine.language) if lang not in tmp: tmp[lang] = [] - tmp[lang].append((name, lang, icon, authors, credits, factory)) + tmp[lang].append(engine) + langs = tmp.keys() other = tmp.get(_("Other"), []) if _("Other") in tmp: langs.remove(_("Other")) langs.append(_("Other")) + for lang in langs: if len(tmp[lang]) == 1: - name, lang, icon, authors, credits, factory = tmp[lang][0] - item = gtk.ImageMenuItem("%s - %s" % (lang, name)) + engine = tmp[lang][0] + item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) - item.set_image (_icon.IconWidget(icon, size[0])) - item.connect("activate", self.__im_menu_item_activate_cb, factory) + item.set_image (_icon.IconWidget(engine.icon, size[0])) + item.connect("activate", self.__im_menu_item_activate_cb, engine) menu.add(item) else: item = gtk.MenuItem(lang) menu.add(item) submenu = gtk.Menu() item.set_submenu(submenu) - for name, __lang, icon, authors, credits, factory in tmp[lang]: - item = gtk.ImageMenuItem(name) + for engine in tmp[lang]: + item = gtk.ImageMenuItem(engine.longname) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) - item.set_image (_icon.IconWidget(icon, size[0])) - item.connect("activate", self.__im_menu_item_activate_cb, factory) + item.set_image (_icon.IconWidget(engine.icon, size[0])) + item.connect("activate", self.__im_menu_item_activate_cb, engine) submenu.add(item) menu.show_all() @@ -345,8 +355,8 @@ class Panel(ibus.PanelBase): gtk.get_current_event_time(), self.__status_icon) - def __im_menu_item_activate_cb(self, item, factory): - self.__bus.set_factory(factory) + def __im_menu_item_activate_cb(self, item, engine): + self.__focus_ic.set_engine(engine) def __sys_menu_item_activate_cb(self, item, command): if command == gtk.STOCK_PREFERENCES: |