Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(353)

Unified Diff: ui/gtk/panel.py

Issue 1735020: Support changing the global input method engine without focus. (Closed) Base URL: ssh://git@chromiumos-git/ibus.git
Patch Set: Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ibus/interface/iibus.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gtk/panel.py
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py
index 3043580c559941ae287a360265e7e918575d2d72..d060b7bccfb61287963069a81de898329c19312d 100644
--- a/ui/gtk/panel.py
+++ b/ui/gtk/panel.py
@@ -61,6 +61,8 @@ class Panel(ibus.PanelBase):
def __init__(self, bus):
super(Panel, self).__init__(bus)
self.__bus = bus
+ self.__bus.connect("global-engine-changed",
+ self.__global_engine_changed_cb)
self.__config = self.__bus.get_config()
self.__focus_ic = None
self.__setup_pid = 0
@@ -204,63 +206,19 @@ class Panel(ibus.PanelBase):
def focus_in(self, ic):
self.reset()
self.__focus_ic = ibus.InputContext(self.__bus, ic)
- enabled = self.__focus_ic.is_enabled()
- self.__language_bar.set_enabled(enabled)
-
- if not enabled:
- self.__set_im_icon(ICON_KEYBOARD)
- self.__set_im_name(None)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(self.__default_xkb_layout)
- else:
- engine = self.__focus_ic.get_engine()
- if engine:
- self.__set_im_icon(engine.icon)
- self.__set_im_name(engine.longname)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(engine.layout)
- else:
- self.__set_im_icon(ICON_KEYBOARD)
- self.__set_im_name(None)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(self.__default_xkb_layout)
+ self.__update_ui_and_xkb_layout()
self.__language_bar.focus_in()
def focus_out(self, ic):
self.reset()
self.__focus_ic = None
- self.__language_bar.set_enabled(False)
+ self.__update_ui_and_xkb_layout()
self.__language_bar.focus_out()
- self.__set_im_icon(ICON_KEYBOARD)
- self.__set_im_name(None)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(self.__default_xkb_layout)
def state_changed(self):
if not self.__focus_ic:
return
-
- enabled = self.__focus_ic.is_enabled()
- self.__language_bar.set_enabled(enabled)
-
- if enabled == False:
- self.reset()
- self.__set_im_icon(ICON_KEYBOARD)
- self.__set_im_name(None)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(self.__default_xkb_layout)
- else:
- engine = self.__focus_ic.get_engine()
- if engine:
- self.__set_im_icon(engine.icon)
- self.__set_im_name(engine.longname)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(engine.layout)
- else:
- self.__set_im_icon(ICON_KEYBOARD)
- self.__set_im_name(None)
- if self.__bus.get_use_sys_layout():
- self.__set_xkb_layout(self.__default_xkb_layout)
+ self.__update_ui_and_xkb_layout()
def reset(self):
self.__candidate_panel.reset()
@@ -414,6 +372,7 @@ class Panel(ibus.PanelBase):
engines = self.__bus.list_active_engines()
current_engine = \
(self.__focus_ic != None and self.__focus_ic.get_engine()) or \
+ self.__bus.get_global_engine() or \
(engines and engines[0]) or \
None
@@ -470,7 +429,7 @@ class Panel(ibus.PanelBase):
self.__status_icon)
def __status_icon_activate_cb(self, status_icon):
- if not self.__focus_ic:
+ if not (self.__focus_ic or self.__bus.get_use_global_engine()):
menu = gtk.Menu()
item = gtk.ImageMenuItem(_("No input window"))
size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
@@ -487,12 +446,13 @@ class Panel(ibus.PanelBase):
self.__status_icon)
def __im_menu_item_activate_cb(self, item, engine):
- if not self.__focus_ic:
- return
- if engine:
- self.__focus_ic.set_engine(engine)
- else:
- self.__focus_ic.disable()
+ if self.__focus_ic:
+ if engine:
+ self.__focus_ic.set_engine(engine)
+ else:
+ self.__focus_ic.disable()
+ elif self.__bus.get_use_global_engine() and engine:
+ self.__bus.set_global_engine(engine)
def __sys_menu_item_activate_cb(self, item, command):
if command == gtk.STOCK_PREFERENCES:
@@ -544,7 +504,7 @@ class Panel(ibus.PanelBase):
layout = layout + ",us"
if self.__current_xkb_layout == layout:
- return;
+ return
self.__current_xkb_layout = layout
@@ -555,3 +515,33 @@ class Panel(ibus.PanelBase):
[ "setxkbmap", "-layout", layout ] )
except:
print >> sys.stderr, "Failed to run %s" % self.__setxkbmap_cmd
+
+ def __update_ui_and_xkb_layout(self):
+ engine = None
+ enabled = False
+ language_bar_enabled = False
+
+ if self.__focus_ic:
+ engine = self.__focus_ic.get_engine()
+ enabled = self.__focus_ic.is_enabled()
+ language_bar_enabled = enabled
+ elif self.__bus.get_use_global_engine():
+ engine = self.__bus.get_global_engine()
+ enabled = self.__bus.is_global_engine_enabled()
+
+ self.__language_bar.set_enabled(language_bar_enabled)
+
+ if engine and enabled:
+ self.__set_im_icon(engine.icon)
+ self.__set_im_name(engine.longname)
+ if self.__bus.get_use_sys_layout():
+ self.__set_xkb_layout(engine.layout)
+ else:
+ self.__set_im_icon(ICON_KEYBOARD)
+ self.__set_im_name(None)
+ if self.__bus.get_use_sys_layout():
+ self.__set_xkb_layout(self.__default_xkb_layout)
+
+ def __global_engine_changed_cb(self, bus):
+ if not self.__focus_ic:
+ self.__update_ui_and_xkb_layout()
« no previous file with comments | « ibus/interface/iibus.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698