From f86438bf0ee2f83f4744226e4d640503ff985b12 Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Mon, 23 Feb 2009 15:05:50 +0800 Subject: Add Disable menu item on Input Menu. Use it to disable InputContext. --- bus/inputcontext.c | 36 ++++++++++++++++++++++++++++++++++++ ibus/inputcontext.py | 6 ++++++ ibus/interface/iinputcontext.py | 6 ++++++ ui/gtk/panel.py | 13 ++++++++++--- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/bus/inputcontext.c b/bus/inputcontext.c index 866c837..6ba7322 100644 --- a/bus/inputcontext.c +++ b/bus/inputcontext.c @@ -798,6 +798,40 @@ _ic_set_capabilities (BusInputContext *context, return reply; } +static IBusMessage * +_ic_enable (BusInputContext *context, + IBusMessage *message, + BusConnection *connection) +{ + g_assert (BUS_IS_INPUT_CONTEXT (context)); + g_assert (message != NULL); + g_assert (BUS_IS_CONNECTION (connection)); + + IBusMessage *reply; + + bus_input_context_enable (context); + + reply = ibus_message_new_method_return (message); + return reply; +} + +static IBusMessage * +_ic_disable (BusInputContext *context, + IBusMessage *message, + BusConnection *connection) +{ + g_assert (BUS_IS_INPUT_CONTEXT (context)); + g_assert (message != NULL); + g_assert (BUS_IS_CONNECTION (connection)); + + IBusMessage *reply; + + bus_input_context_disable (context); + + reply = ibus_message_new_method_return (message); + return reply; +} + static IBusMessage * _ic_is_enabled (BusInputContext *context, IBusMessage *message, @@ -945,6 +979,8 @@ bus_input_context_ibus_message (BusInputContext *context, { IBUS_INTERFACE_INPUT_CONTEXT, "FocusOut", _ic_focus_out }, { IBUS_INTERFACE_INPUT_CONTEXT, "Reset", _ic_reset }, { IBUS_INTERFACE_INPUT_CONTEXT, "SetCapabilities", _ic_set_capabilities }, + { IBUS_INTERFACE_INPUT_CONTEXT, "Enable", _ic_enable }, + { IBUS_INTERFACE_INPUT_CONTEXT, "Disable", _ic_disable }, { IBUS_INTERFACE_INPUT_CONTEXT, "IsEnabled", _ic_is_enabled }, { IBUS_INTERFACE_INPUT_CONTEXT, "SetEngine", _ic_set_engine }, { IBUS_INTERFACE_INPUT_CONTEXT, "GetEngine", _ic_get_engine }, diff --git a/ibus/inputcontext.py b/ibus/inputcontext.py index 10233da..c9aa634 100644 --- a/ibus/inputcontext.py +++ b/ibus/inputcontext.py @@ -197,6 +197,12 @@ class InputContext(object.Object): def reset(self): return self.__context.Reset() + def enable(self): + return self.__context.Enable() + + def disable(self): + return self.__context.Disable() + def is_enabled(self): return self.__context.IsEnabled() diff --git a/ibus/interface/iinputcontext.py b/ibus/interface/iinputcontext.py index e5cf129..d88a9c1 100644 --- a/ibus/interface/iinputcontext.py +++ b/ibus/interface/iinputcontext.py @@ -57,6 +57,12 @@ class IInputContext(dbus.service.Object): @method() def Reset(self): pass + @method() + def Enable(self): pass + + @method() + def Disable(self): pass + @method(out_signature="b") def IsEnabled(self): pass diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py index ee29ea0..fb9ae6e 100644 --- a/ui/gtk/panel.py +++ b/ui/gtk/panel.py @@ -314,11 +314,11 @@ class Panel(ibus.PanelBase): langs.remove(_("Other")) langs.append(_("Other")) + size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) for lang in langs: if len(tmp[lang]) == 1: engine = tmp[lang][0] item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) - size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) if engine.icon: item.set_image (_icon.IconWidget(engine.icon, size[0])) else: @@ -332,7 +332,6 @@ class Panel(ibus.PanelBase): item.set_submenu(submenu) for engine in tmp[lang]: item = gtk.ImageMenuItem(engine.longname) - size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) if engine.icon: item.set_image (_icon.IconWidget(engine.icon, size[0])) else: @@ -340,6 +339,11 @@ class Panel(ibus.PanelBase): item.connect("activate", self.__im_menu_item_activate_cb, engine) submenu.add(item) + item = gtk.ImageMenuItem(_("Disable")) + item.set_image (_icon.IconWidget("gtk-close", size[0])) + item.connect("activate", self.__im_menu_item_activate_cb, None) + menu.add (item) + menu.show_all() menu.set_take_focus(False) return menu @@ -367,7 +371,10 @@ class Panel(ibus.PanelBase): self.__status_icon) def __im_menu_item_activate_cb(self, item, engine): - self.__focus_ic.set_engine(engine) + if engine: + self.__focus_ic.set_engine(engine) + else: + self.__focus_ic.disable() def __sys_menu_item_activate_cb(self, item, command): if command == gtk.STOCK_PREFERENCES: -- cgit