Updated ibus-xx-bridge-hotkey.patch

Fixed 718892, 718453, 718450
This commit is contained in:
Takao Fujiwara 2011-07-05 12:40:53 +09:00
parent 88e8e76eb5
commit b4e3b48e01
3 changed files with 242 additions and 69 deletions

View File

@ -967,3 +967,28 @@ index 29b8f1d..6da342a 100644
-- --
1.7.4.4 1.7.4.4
From a25187a315e9dfbb36a3e4a4f8e96f18e2cc6e0d Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 5 Jul 2011 12:15:55 +0900
Subject: [PATCH] Fix SEGV in ibus_keymap_lookup_keysym
---
bus/engineproxy.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
index 95e9e0b..a49d6fd 100644
--- a/bus/engineproxy.c
+++ b/bus/engineproxy.c
@@ -907,7 +907,7 @@ bus_engine_proxy_process_key_event (BusEngineProxy *engine,
if (keymap == NULL)
keymap = BUS_DEFAULT_KEYMAP;
if (keymap != NULL) {
- guint t = ibus_keymap_lookup_keysym (engine->keymap, keycode, state);
+ guint t = ibus_keymap_lookup_keysym (keymap, keycode, state);
if (t != IBUS_VoidSymbol) {
keyval = t;
}
--
1.7.5.4

View File

@ -1,32 +1,31 @@
From bbf124332b8ba43f369be86ba3a6411fe66556d1 Mon Sep 17 00:00:00 2001 From 0242d89ec9d4d3d92d335e50b8aa6c16ff950438 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com> From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 30 Jun 2011 11:46:02 +0900 Date: Tue, 5 Jul 2011 12:00:31 +0900
Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead
of on-off. of on-off.
--- ---
bus/Makefile.am | 20 ++-- bus/Makefile.am | 20 ++-
bus/ibusimpl.c | 255 ++++++++++++++++++++++++++++++---------- bus/ibusimpl.c | 356 ++++++++++++++++++++++++++++++++++++--------
bus/registry.c | 35 ++++++ bus/registry.c | 35 +++++
configure.ac | 31 +++++ configure.ac | 31 ++++
data/Makefile.am | 6 +- data/Makefile.am | 6 +-
data/ibus.schemas.in | 286 -------------------------------------------- data/ibus.schemas.in | 286 -----------------------------------
data/ibus.schemas.in.in | 286 ++++++++++++++++++++++++++++++++++++++++++++ data/ibus.schemas.in.in | 286 +++++++++++++++++++++++++++++++++++
ibus/_config.py.in | 6 + ibus/_config.py.in | 6 +
ibus/inputcontext.py | 4 + ibus/inputcontext.py | 4 +
setup/enginecombobox.py | 3 + setup/enginecombobox.py | 3 +
setup/enginetreeview.py | 16 ++- setup/enginetreeview.py | 16 ++-
src/Makefile.am | 18 ++-- src/Makefile.am | 18 ++-
src/ibusbus.c | 12 ++ src/ibusbus.c | 12 ++
src/ibusbus.h | 18 +++ src/ibusbus.h | 18 +++
src/ibusenginedesc.c | 4 +
src/ibushotkey.c | 11 ++ src/ibushotkey.c | 11 ++
src/ibushotkey.h | 11 ++ src/ibushotkey.h | 11 ++
ui/gtk/panel.py | 157 +++++++++++++++++++++--- ui/gtk/panel.py | 189 +++++++++++++++++++++---
xkb/Makefile.am | 2 + xkb/Makefile.am | 2 +
xkb/ibus-engine-xkb-main.c | 8 ++ xkb/ibus-engine-xkb-main.c | 8 +
xkb/xkbxml.c | 8 +- xkb/xkbxml.c | 8 +-
21 files changed, 810 insertions(+), 387 deletions(-) 20 files changed, 938 insertions(+), 388 deletions(-)
delete mode 100644 data/ibus.schemas.in delete mode 100644 data/ibus.schemas.in
create mode 100644 data/ibus.schemas.in.in create mode 100644 data/ibus.schemas.in.in
@ -62,7 +61,7 @@ index 074b456..0efaa1b 100644
AM_LDADD = \ AM_LDADD = \
@GOBJECT2_LIBS@ \ @GOBJECT2_LIBS@ \
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
index b356b2c..f3ca330 100644 index b356b2c..ffea37a 100644
--- a/bus/ibusimpl.c --- a/bus/ibusimpl.c
+++ b/bus/ibusimpl.c +++ b/bus/ibusimpl.c
@@ -20,6 +20,10 @@ @@ -20,6 +20,10 @@
@ -87,7 +86,16 @@ index b356b2c..f3ca330 100644
}; };
struct _BusIBusImplClass { struct _BusIBusImplClass {
@@ -285,6 +293,30 @@ _panel_destroy_cb (BusPanelProxy *panel, @@ -99,6 +107,8 @@ enum {
static guint _signals[LAST_SIGNAL] = { 0 };
*/
+static gchar *_bridge_trigger_keys = NULL;
+
/* functions prototype */
static void bus_ibus_impl_destroy (BusIBusImpl *ibus);
static void bus_ibus_impl_service_method_call
@@ -285,6 +295,30 @@ _panel_destroy_cb (BusPanelProxy *panel,
g_object_unref (panel); g_object_unref (panel);
} }
@ -118,7 +126,7 @@ index b356b2c..f3ca330 100644
static void static void
_config_set_value_done (GObject *object, _config_set_value_done (GObject *object,
GAsyncResult *res, GAsyncResult *res,
@@ -475,8 +507,21 @@ _set_preload_engines (BusIBusImpl *ibus, @@ -475,8 +509,21 @@ _set_preload_engines (BusIBusImpl *ibus,
g_variant_unref (value); g_variant_unref (value);
} }
@ -133,7 +141,7 @@ index b356b2c..f3ca330 100644
+ engine_list = g_list_insert (engine_list, engine, 1); + engine_list = g_list_insert (engine_list, engine, 1);
+ } else { + } else {
+ engine_list = g_list_append (engine_list, engine); + engine_list = g_list_append (engine_list, engine);
+ } + }
+ ibus->engine_list = engine_list; + ibus->engine_list = engine_list;
+ } + }
+#endif +#endif
@ -141,17 +149,63 @@ index b356b2c..f3ca330 100644
if (ibus->engine_list) { if (ibus->engine_list) {
BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data); BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data);
@@ -573,7 +618,9 @@ bus_ibus_impl_set_trigger (BusIBusImpl * @@ -562,6 +609,43 @@ bus_ibus_impl_set_hotkey (BusIBusImpl *i
}
+#if USE_BRIDGE_HOTKEY
+static void
+bus_ibus_impl_set_bridge_trigger_keys (BusIBusImpl *ibus,
+ GQuark hotkey,
+ GVariant *value)
+{
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
+
+ ibus_hotkey_profile_remove_hotkey_by_event (ibus->hotkey_profile, hotkey);
+
+ if (value == NULL) {
+ return;
+ }
+
+ GVariantIter iter;
+ g_variant_iter_init (&iter, value);
+ const gchar *str = NULL;
+
+ g_free (_bridge_trigger_keys);
+ _bridge_trigger_keys = NULL;
+
+ while (g_variant_iter_loop (&iter,"&s", &str)) {
+ if (str != NULL) {
+ gchar *tmp =NULL;
+
+ if (_bridge_trigger_keys) {
+ tmp = g_strdup_printf ("%s,%s", _bridge_trigger_keys, str);
+ } else {
+ tmp = g_strdup (str);
+ }
+ g_free (_bridge_trigger_keys);
+ _bridge_trigger_keys = tmp;
+ }
+ }
+}
+#endif
+
/**
* bus_ibus_impl_set_trigger:
*
@@ -573,7 +657,11 @@ bus_ibus_impl_set_trigger (BusIBusImpl *
{ {
GQuark hotkey = g_quark_from_static_string ("trigger"); GQuark hotkey = g_quark_from_static_string ("trigger");
if (value != NULL) { if (value != NULL) {
+#if !USE_BRIDGE_HOTKEY +#if USE_BRIDGE_HOTKEY
+ bus_ibus_impl_set_bridge_trigger_keys (ibus, hotkey, value);
+#else
bus_ibus_impl_set_hotkey (ibus, hotkey, value); bus_ibus_impl_set_hotkey (ibus, hotkey, value);
+#endif +#endif
} }
#ifndef OS_CHROMEOS #ifndef OS_CHROMEOS
else { else {
@@ -1182,28 +1229,110 @@ _ibus_get_address (BusIBusImpl @@ -1182,28 +1270,110 @@ _ibus_get_address (BusIBusImpl
g_variant_new ("(s)", bus_server_get_address ())); g_variant_new ("(s)", bus_server_get_address ()));
} }
@ -279,7 +333,7 @@ index b356b2c..f3ca330 100644
} }
/** /**
@@ -1216,7 +1345,39 @@ _context_request_engine_cb (BusInputCont @@ -1216,7 +1386,61 @@ _context_request_engine_cb (BusInputCont
const gchar *engine_name, const gchar *engine_name,
BusIBusImpl *ibus) BusIBusImpl *ibus)
{ {
@ -292,24 +346,46 @@ index b356b2c..f3ca330 100644
+ +
+#if USE_BRIDGE_HOTKEY +#if USE_BRIDGE_HOTKEY
+ IBusEngineDesc *current_desc = NULL; + IBusEngineDesc *current_desc = NULL;
+
+ if (context) { + if (context) {
+ BusEngineProxy *engine = bus_input_context_get_engine (context); + BusEngineProxy *engine = bus_input_context_get_engine (context);
+ if (engine != NULL) { + if (engine != NULL) {
+ current_desc = bus_engine_proxy_get_desc (engine); + current_desc = bus_engine_proxy_get_desc (engine);
+ } + }
+ } + }
+
+ if (current_desc) { + if (current_desc) {
+ ibus->prev_hotkey_engine = current_desc; + ibus->prev_hotkey_engine = current_desc;
+ } + }
+
+ if (current_desc != NULL && desc != NULL && + if (current_desc != NULL && desc != NULL &&
+ g_strcmp0 (ibus_engine_desc_get_name (current_desc), + g_strcmp0 (ibus_engine_desc_get_name (current_desc),
+ ibus_engine_desc_get_name (desc)) != 0 && + ibus_engine_desc_get_name (desc)) != 0 &&
+ g_strcmp0 (ibus_engine_desc_get_name (desc), + g_strcmp0 (ibus_engine_desc_get_name (desc),
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) { + DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
+ const gchar *hotkeys = ibus_engine_desc_get_hotkeys (current_desc); + const gchar *hotkeys = NULL;
+ if (!hotkeys || !*hotkeys) { +
+ hotkeys = "Control+space"; + /* If the user customized the trigger key, the trigger key is used for
+ * any IBus engines. */
+ if (_bridge_trigger_keys != NULL &&
+ *_bridge_trigger_keys != '\0' &&
+ g_strcmp0 (_bridge_trigger_keys, "Control+space") != 0) {
+
+ hotkeys = (const gchar *) _bridge_trigger_keys;
+ } else {
+ hotkeys = ibus_engine_desc_get_hotkeys (current_desc);
+ } + }
+
+ /* If engine hotkeys are not defined in the compose xml file, IBus trigger
+ * keys are used. */
+ if (!hotkeys || !*hotkeys) {
+ hotkeys = (const gchar *) _bridge_trigger_keys;
+ }
+
+ if (!hotkeys || !*hotkeys) {
+ return desc;
+ }
+
+ ibus_hotkey_profile_foreach_hotkey (ibus->engines_hotkey_profile, + ibus_hotkey_profile_foreach_hotkey (ibus->engines_hotkey_profile,
+ _foreach_remove_engine_hotkey, + _foreach_remove_engine_hotkey,
+ &id); + &id);
@ -320,19 +396,23 @@ index b356b2c..f3ca330 100644
} }
/** /**
@@ -2357,6 +2518,11 @@ bus_ibus_impl_filter_keyboard_shortcuts @@ -2353,6 +2577,15 @@ bus_ibus_impl_filter_keyboard_shortcuts
* the same hotkey, then we should switch to the next engine with the
* same hotkey in the list. Otherwise, we just switch to the first g_assert (new_engine_desc);
* engine in the list. */
+#if USE_BRIDGE_HOTKEY +#if USE_BRIDGE_HOTKEY
+ if (ibus->prev_hotkey_engine) { + /* If the previous engine is not included in engine_list,
+ * this enables a new engine instead of toggling the engines
+ * so should not enable the previous engine. */
+ if (ibus->prev_hotkey_engine &&
+ g_list_find (engine_list, ibus->prev_hotkey_engine) != NULL) {
+ new_engine_desc = ibus->prev_hotkey_engine; + new_engine_desc = ibus->prev_hotkey_engine;
+ } + }
+#else +#else
GList *p = engine_list; /* Find out what engine we should switch to. If the current engine has
for (; p->next != NULL; p = p->next) { * the same hotkey, then we should switch to the next engine with the
if (current_engine_desc == (IBusEngineDesc *) p->data) { * same hotkey in the list. Otherwise, we just switch to the first
@@ -2364,8 +2530,16 @@ bus_ibus_impl_filter_keyboard_shortcuts @@ -2364,8 +2597,31 @@ bus_ibus_impl_filter_keyboard_shortcuts
break; break;
} }
} }
@ -343,13 +423,28 @@ index b356b2c..f3ca330 100644
+ g_strcmp0 (ibus_engine_desc_get_name (new_engine_desc), + g_strcmp0 (ibus_engine_desc_get_name (new_engine_desc),
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) { + DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
+ ibus->prev_hotkey_engine = current_engine_desc; + ibus->prev_hotkey_engine = current_engine_desc;
+
+ /* If the previous engine is not included in engine_list and
+ * the current engine is the defualt bridge engine,
+ * the current engine is also not included in engine_list.
+ * So the engine is added here. */
+ if (g_list_find (engine_list, current_engine_desc) == NULL &&
+ g_strcmp0 (ibus_engine_desc_get_name (current_engine_desc),
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
+ engine_list = g_list_append (engine_list, current_engine_desc);
+
+ g_hash_table_steal (ibus->hotkey_to_engines_map,
+ GUINT_TO_POINTER (event));
+ g_hash_table_insert (ibus->hotkey_to_engines_map,
+ GUINT_TO_POINTER (event), engine_list);
+ }
+#else +#else
if (current_engine_desc != new_engine_desc) { if (current_engine_desc != new_engine_desc) {
+#endif +#endif
bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc); bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc);
} }
@@ -2470,14 +2644,6 @@ static void @@ -2470,59 +2726,39 @@ static void
_add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus) _add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus)
{ {
const gchar *hotkeys; const gchar *hotkeys;
@ -364,10 +459,32 @@ index b356b2c..f3ca330 100644
if (!engine) { if (!engine) {
return; return;
@@ -2489,40 +2655,7 @@ _add_engine_hotkey (IBusEngineDesc *engi
return;
} }
+#if USE_BRIDGE_HOTKEY
+ /* If the user customized the trigger key, the trigger key is used for
+ * any IBus engines. */
+ if (_bridge_trigger_keys != NULL &&
+ *_bridge_trigger_keys != '\0' &&
+ g_strcmp0 (_bridge_trigger_keys, "Control+space") != 0) {
+
+ hotkeys = (const gchar *) _bridge_trigger_keys;
+ } else {
+ hotkeys = ibus_engine_desc_get_hotkeys (engine);
+ }
+#else
hotkeys = ibus_engine_desc_get_hotkeys (engine);
+#endif
+#if USE_BRIDGE_HOTKEY
+ /* If engine hotkeys are not defined in the compose xml file, IBus trigger
+ * keys are used. */
if (!hotkeys || !*hotkeys) {
- return;
+ hotkeys = (const gchar *) _bridge_trigger_keys;
}
+#endif
- hotkey_list = g_strsplit_set (hotkeys, ";,", 0); - hotkey_list = g_strsplit_set (hotkeys, ";,", 0);
- -
- for (p = hotkey_list; p && *p; ++p) { - for (p = hotkey_list; p && *p; ++p) {
@ -399,8 +516,10 @@ index b356b2c..f3ca330 100644
- -
- g_hash_table_insert (ibus->hotkey_to_engines_map, - g_hash_table_insert (ibus->hotkey_to_engines_map,
- GUINT_TO_POINTER (event), engine_list); - GUINT_TO_POINTER (event), engine_list);
- } + if (!hotkeys || !*hotkeys) {
- + return;
}
- g_strfreev (hotkey_list); - g_strfreev (hotkey_list);
+ _add_engine_hotkey_with_hotkeys (engine, ibus, hotkeys); + _add_engine_hotkey_with_hotkeys (engine, ibus, hotkeys);
} }
@ -473,7 +592,7 @@ index bc6680d..f47f727 100644
static void static void
diff --git a/configure.ac b/configure.ac diff --git a/configure.ac b/configure.ac
index 85e5e30..a6974d4 100644 index 85e5e30..3ada2f8 100644
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -438,6 +438,34 @@ else @@ -438,6 +438,34 @@ else
@ -490,7 +609,7 @@ index 85e5e30..a6974d4 100644
+ +
+if test x"$enable_bridge_hotkey" = x"yes"; then +if test x"$enable_bridge_hotkey" = x"yes"; then
+ USE_BRIDGE_HOTKEY=1 + USE_BRIDGE_HOTKEY=1
+ TRIGGER_HOTKEYS="" + TRIGGER_HOTKEYS="Control+space"
+else +else
+ USE_BRIDGE_HOTKEY=0 + USE_BRIDGE_HOTKEY=0
+ TRIGGER_HOTKEYS="Control+space,Zenkaku_Hankaku,Alt+Kanji,Alt+grave,Hangul,Alt+Release+Alt_R" + TRIGGER_HOTKEYS="Control+space,Zenkaku_Hankaku,Alt+Kanji,Alt+grave,Hangul,Alt+Release+Alt_R"
@ -737,22 +856,6 @@ index 77d3916..f560671 100644
+ +
G_END_DECLS G_END_DECLS
#endif #endif
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
index fa3a768..3d6100e 100644
--- a/src/ibusenginedesc.c
+++ b/src/ibusenginedesc.c
@@ -232,7 +232,11 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
g_param_spec_string ("hotkeys",
"description hotkeys",
"The hotkeys of engine description",
+#if USE_BRIDGE_HOTKEY
+ "Control+space",
+#else
"",
+#endif
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/**
diff --git a/src/ibushotkey.c b/src/ibushotkey.c diff --git a/src/ibushotkey.c b/src/ibushotkey.c
index 32f8338..bef7dfc 100644 index 32f8338..bef7dfc 100644
--- a/src/ibushotkey.c --- a/src/ibushotkey.c
@ -794,10 +897,10 @@ index 9a341f6..92ec6af 100644
G_END_DECLS G_END_DECLS
#endif #endif
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py
index de64920..5839238 100644 index de64920..55acd5a 100644
--- a/ui/gtk/panel.py --- a/ui/gtk/panel.py
+++ b/ui/gtk/panel.py +++ b/ui/gtk/panel.py
@@ -133,6 +133,14 @@ class Panel(ibus.PanelBase): @@ -133,6 +133,15 @@ class Panel(ibus.PanelBase):
# self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0) # self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0)
# init xkb # init xkb
@ -808,11 +911,12 @@ index de64920..5839238 100644
+ self.__disabled_engines_id = -1 + self.__disabled_engines_id = -1
+ self.__disabled_engines_prev_id = -1 + self.__disabled_engines_prev_id = -1
+ self.__disabled_engines_swapped = 0 + self.__disabled_engines_swapped = 0
+ self.__show = 0
+ +
self.__xkblayout = ibus.XKBLayout(self.__config) self.__xkblayout = ibus.XKBLayout(self.__config)
use_xkb = self.__config.get_value("general", "use_system_keyboard_layout", False) use_xkb = self.__config.get_value("general", "use_system_keyboard_layout", False)
if not use_xkb: if not use_xkb:
@@ -142,11 +150,18 @@ class Panel(ibus.PanelBase): @@ -142,11 +151,18 @@ class Panel(ibus.PanelBase):
value = 'default' value = 'default'
if value != 'default': if value != 'default':
self.__xkblayout.set_default_layout(value) self.__xkblayout.set_default_layout(value)
@ -831,7 +935,7 @@ index de64920..5839238 100644
def set_cursor_location(self, x, y, w, h): def set_cursor_location(self, x, y, w, h):
self.__candidate_panel.set_cursor_location(x, y, w, h) self.__candidate_panel.set_cursor_location(x, y, w, h)
@@ -233,12 +248,57 @@ class Panel(ibus.PanelBase): @@ -233,12 +249,69 @@ class Panel(ibus.PanelBase):
def __set_im_name(self, name): def __set_im_name(self, name):
self.__language_bar.set_im_name(name) self.__language_bar.set_im_name(name)
@ -882,14 +986,27 @@ index de64920..5839238 100644
self.reset() self.reset()
self.__focus_ic = ibus.InputContext(self.__bus, ic) self.__focus_ic = ibus.InputContext(self.__bus, ic)
enabled = self.__focus_ic.is_enabled() enabled = self.__focus_ic.is_enabled()
self.__language_bar.set_enabled(enabled) - self.__language_bar.set_enabled(enabled)
+ if ibus.use_bridge_hotkey(): + if ibus.use_bridge_hotkey():
+ self.__set_default_layout_engine() + self.__set_default_layout_engine()
+ if self.__show != 1:
+ self.__language_bar.set_enabled(enabled)
+ elif enabled:
+ engine = self.__focus_ic.get_engine()
+ if engine != None and \
+ engine.name != ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ self.__language_bar.set_enabled(enabled)
+ else:
+ self.__language_bar.set_enabled(False)
+ else:
+ self.__language_bar.set_enabled(False)
+ else:
+ self.__language_bar.set_enabled(enabled)
if not enabled: if not enabled:
self.__set_im_icon(ICON_KEYBOARD) self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None) self.__set_im_name(None)
@@ -250,7 +310,7 @@ class Panel(ibus.PanelBase): @@ -250,7 +323,7 @@ class Panel(ibus.PanelBase):
self.__set_im_icon(engine.icon) self.__set_im_icon(engine.icon)
self.__set_im_name(engine.longname) self.__set_im_name(engine.longname)
if self.__bus.get_use_sys_layout(): if self.__bus.get_use_sys_layout():
@ -898,7 +1015,30 @@ index de64920..5839238 100644
else: else:
self.__set_im_icon(ICON_KEYBOARD) self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None) self.__set_im_name(None)
@@ -287,7 +347,7 @@ class Panel(ibus.PanelBase): @@ -273,7 +346,21 @@ class Panel(ibus.PanelBase):
return
enabled = self.__focus_ic.is_enabled()
- self.__language_bar.set_enabled(enabled)
+
+ if ibus.use_bridge_hotkey():
+ if self.__show != 1:
+ self.__language_bar.set_enabled(enabled)
+ elif enabled:
+ engine = self.__focus_ic.get_engine()
+ if engine != None and \
+ engine.name != ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ self.__language_bar.set_enabled(enabled)
+ else:
+ self.__language_bar.set_enabled(False)
+ else:
+ self.__language_bar.set_enabled(False)
+ else:
+ self.__language_bar.set_enabled(enabled)
if enabled == False:
self.reset()
@@ -287,7 +374,7 @@ class Panel(ibus.PanelBase):
self.__set_im_icon(engine.icon) self.__set_im_icon(engine.icon)
self.__set_im_name(engine.longname) self.__set_im_name(engine.longname)
if self.__bus.get_use_sys_layout(): if self.__bus.get_use_sys_layout():
@ -907,7 +1047,15 @@ index de64920..5839238 100644
else: else:
self.__set_im_icon(ICON_KEYBOARD) self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None) self.__set_im_name(None)
@@ -443,6 +503,21 @@ class Panel(ibus.PanelBase): @@ -315,6 +402,7 @@ class Panel(ibus.PanelBase):
def __config_load_show(self):
show = self.__config.get_value("panel", "show", 0)
+ self.__show = show
self.__language_bar.set_show(show)
def __config_load_position(self):
@@ -443,6 +531,21 @@ class Panel(ibus.PanelBase):
# menu.set_take_focus(False) # menu.set_take_focus(False)
# return menu # return menu
@ -929,7 +1077,7 @@ index de64920..5839238 100644
def __create_im_menu(self): def __create_im_menu(self):
engines = self.__bus.list_active_engines() engines = self.__bus.list_active_engines()
current_engine = \ current_engine = \
@@ -453,25 +528,31 @@ class Panel(ibus.PanelBase): @@ -453,25 +556,31 @@ class Panel(ibus.PanelBase):
size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
menu = gtk.Menu() menu = gtk.Menu()
for i, engine in enumerate(engines): for i, engine in enumerate(engines):
@ -974,7 +1122,7 @@ index de64920..5839238 100644
menu.show_all() menu.show_all()
menu.set_take_focus(False) menu.set_take_focus(False)
@@ -523,8 +604,25 @@ class Panel(ibus.PanelBase): @@ -523,8 +632,25 @@ class Panel(ibus.PanelBase):
if not self.__focus_ic: if not self.__focus_ic:
return return
if engine: if engine:
@ -1001,7 +1149,7 @@ index de64920..5839238 100644
self.__focus_ic.disable() self.__focus_ic.disable()
def __sys_menu_item_activate_cb(self, item, command): def __sys_menu_item_activate_cb(self, item, command):
@@ -573,11 +671,34 @@ class Panel(ibus.PanelBase): @@ -573,11 +699,34 @@ class Panel(ibus.PanelBase):
self.__setup_pid = pid self.__setup_pid = pid
glib.child_watch_add(self.__setup_pid, self.__child_watch_cb) glib.child_watch_add(self.__setup_pid, self.__child_watch_cb)

View File

@ -13,7 +13,7 @@
Name: ibus Name: ibus
Version: 1.3.99.20110419 Version: 1.3.99.20110419
Release: 7%{?dist} Release: 8%{?dist}
Summary: Intelligent Input Bus for Linux OS Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+ License: LGPLv2+
Group: System Environment/Libraries Group: System Environment/Libraries
@ -354,7 +354,7 @@ fi
%{_datadir}/gtk-doc/html/* %{_datadir}/gtk-doc/html/*
%changelog %changelog
* Mon Jun 20 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-7 * Mon Jun 20 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-8
- Updated ibus-HEAD.patch for upstream. - Updated ibus-HEAD.patch for upstream.
- Removed ibus-435880-surrounding-text.patch as upstream. - Removed ibus-435880-surrounding-text.patch as upstream.
- Added ibus-711632-fedora-fallback-icon.patch - Added ibus-711632-fedora-fallback-icon.patch