From c3ca1e1c8a9b470ad8b3e9081b801685f9db1aec Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Wed, 26 Oct 2011 20:13:50 -0500 Subject: [PATCH 1/2] - Rebuilt for glibc bug#747377 --- ibus.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ibus.spec b/ibus.spec index 3112c6a..5cc2439 100644 --- a/ibus.spec +++ b/ibus.spec @@ -24,7 +24,7 @@ Name: ibus Version: 1.4.0 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ Group: System Environment/Libraries @@ -386,6 +386,9 @@ fi %{_datadir}/gtk-doc/html/* %changelog +* Wed Oct 26 2011 Fedora Release Engineering - 1.4.0-6 +- Rebuilt for glibc bug#747377 + * Fri Oct 21 2011 Takao Fujiwara - 1.4.0-5 - Fixed Bug 747845 - ibus icon cannot open menu item on gnome-shell From 5f53fe6fa62dc6644a2ec0c3cf70a9157b64bea8 Mon Sep 17 00:00:00 2001 From: Takao Fujiwara Date: Fri, 28 Oct 2011 18:30:01 +0900 Subject: [PATCH 2/2] Fixed Bug 747902 - mouse and ctrl+space not working Fixed rerotate next/previous key. Updated ibus-HEAD.patch from upstream. --- .gitignore | 2 + ibus-541492-xkb.patch | 22 +-- ibus-HEAD.patch | 248 +++++++++++++++++++++++- ibus-xx-bridge-hotkey.patch | 372 +++++++++++++++++++++++++++++++----- ibus.spec | 17 +- sources | 4 +- 6 files changed, 595 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 8ae827f..aa119b2 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ ibus-1.3.6.tar.gz /ibus-gjs-3.0.2.20111018.tar.gz /ibus-gjs-3.2.0.20111018.tar.gz /ibus-gjs-3.2.1.20111021.tar.gz +/ibus-gjs-3.0.2.20111028.tar.gz +/ibus-gjs-3.2.1.20111028.tar.gz diff --git a/ibus-541492-xkb.patch b/ibus-541492-xkb.patch index 04809a4..50df294 100644 --- a/ibus-541492-xkb.patch +++ b/ibus-541492-xkb.patch @@ -1,6 +1,6 @@ -From 72785243dfb47e9028de47910bed603776e4ec6e Mon Sep 17 00:00:00 2001 +From 471e7583078c1e4b65219c9d37e16bf0d3d808bf Mon Sep 17 00:00:00 2001 From: fujiwarat -Date: Wed, 7 Sep 2011 15:27:26 +0900 +Date: Fri, 28 Oct 2011 15:25:19 +0900 Subject: [PATCH] Add XKB layouts --- @@ -85,10 +85,10 @@ index ff0fabc..056ddfc 100644 $(DCONF_DIRS) \ $(NULL) diff --git a/configure.ac b/configure.ac -index 367b069..e90f20e 100644 +index f452666..227e28e 100644 --- a/configure.ac +++ b/configure.ac -@@ -191,6 +191,60 @@ else +@@ -221,6 +221,60 @@ else enable_xim="no (disabled, use --enable-xim to enable)" fi @@ -149,7 +149,7 @@ index 367b069..e90f20e 100644 # GObject introspection GOBJECT_INTROSPECTION_CHECK([0.6.8]) -@@ -457,6 +511,7 @@ bindings/Makefile +@@ -478,6 +532,7 @@ bindings/Makefile bindings/vala/Makefile dconf/Makefile dconf/dconf.xml.in @@ -157,7 +157,7 @@ index 367b069..e90f20e 100644 ]) AC_OUTPUT -@@ -472,6 +527,7 @@ Build options: +@@ -493,6 +548,7 @@ Build options: Build gtk2 immodule $enable_gtk2 Build gtk3 immodule $enable_gtk3 Build XIM agent server $enable_xim @@ -280,10 +280,10 @@ index 7c8f8be..3c25605 100644 +from xkbxml import * from _config import * diff --git a/ibus/bus.py b/ibus/bus.py -index 5738fad..05ec49e 100644 +index a8a458d..84b4140 100644 --- a/ibus/bus.py +++ b/ibus/bus.py -@@ -160,6 +160,9 @@ class Bus(object.Object): +@@ -163,6 +163,9 @@ class Bus(object.Object): data = serializable.deserialize_object(data) return data @@ -2149,7 +2149,7 @@ index 0000000..af9ec53 + expander.set_data("checked", checked) + diff --git a/src/Makefile.am b/src/Makefile.am -index 90e412f..fc7008e 100644 +index 6f0321c..c62f3ed 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -186,6 +186,11 @@ typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) @@ -2165,7 +2165,7 @@ index 90e412f..fc7008e 100644 ibusenumtypes.h: $(ibus_headers) ibusenumtypes.h.template $(AM_V_GEN) ( top_builddir=`cd $(top_builddir) && pwd`; \ diff --git a/src/ibus.h b/src/ibus.h -index 0765799..5843b7f 100644 +index addc531..467c775 100644 --- a/src/ibus.h +++ b/src/ibus.h @@ -45,6 +45,7 @@ @@ -9985,5 +9985,5 @@ index 0000000..6c00f1d +G_END_DECLS +#endif -- -1.7.5.4 +1.7.6.4 diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index d15f9b4..6035ce1 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -1,8 +1,132 @@ -From 5d519fb7a798e252dc28665694d53b0773542584 Mon Sep 17 00:00:00 2001 +From cb519c852dfc7a652df1768c81974d750ef48f58 Mon Sep 17 00:00:00 2001 +From: Daiki Ueno +Date: Thu, 29 Sep 2011 12:24:53 +0900 +Subject: [PATCH] Fix hiding button items in GTK panel. + +BUG=none +TEST=manual + +Review URL: http://codereview.appspot.com/5148041 +--- + ui/gtk/toolitem.py | 12 ++++-------- + 1 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/ui/gtk/toolitem.py b/ui/gtk/toolitem.py +index 4bdffba..4f4f97d 100644 +--- a/ui/gtk/toolitem.py ++++ b/ui/gtk/toolitem.py +@@ -73,11 +73,9 @@ class ToolButton(gtk.ToolButton, PropItem): + self.set_icon_name(self._prop.icon) + + if self._prop.visible: +- self.set_no_show_all(False) +- self.show_all() ++ self.show() + else: +- self.set_no_show_all(True) +- self.hide_all() ++ self.hide() + + def do_clicked(self): + self.emit("property-activate", self._prop.key, self._prop.state) +@@ -128,11 +126,9 @@ class ToggleToolButton(gtk.ToggleToolButton, PropItem): + self.set_active(self._prop.state == ibus.PROP_STATE_CHECKED) + self.set_sensitive(self._prop.sensitive) + if self._prop.visible: +- self.set_no_show_all(False) +- self.show_all() ++ self.show() + else: +- self.set_no_show_all(True) +- self.hide_all() ++ self.hide() + + def do_toggled(self): + # Do not send property-activate to engine in case the event is +-- +1.7.6.4 + +From d19018b8709847009d2e0836c942dd9f1385e7cb Mon Sep 17 00:00:00 2001 +From: Yusuke Sato +Date: Sun, 9 Oct 2011 13:52:42 +0900 +Subject: [PATCH] Always consume a hotkey press + +BUG=1324 + +Review URL: http://codereview.appspot.com/5242044 +--- + bus/ibusimpl.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c +index 1942504..1494f5f 100644 +--- a/bus/ibusimpl.c ++++ b/bus/ibusimpl.c +@@ -2066,21 +2066,21 @@ bus_ibus_impl_filter_keyboard_shortcuts (BusIBusImpl *ibus, + else { + bus_input_context_enable (context); + } +- return (enabled != bus_input_context_is_enabled (context)); ++ return TRUE; + } + if (event == enable_unconditional) { + gboolean enabled = bus_input_context_is_enabled (context); + if (!enabled) { + bus_input_context_enable (context); + } +- return bus_input_context_is_enabled (context); ++ return TRUE; + } + if (event == disable_unconditional) { + gboolean enabled = bus_input_context_is_enabled (context); + if (enabled) { + bus_input_context_disable (context); + } +- return !bus_input_context_is_enabled (context); ++ return TRUE; + } + if (event == next) { + if (bus_input_context_is_enabled (context)) { +-- +1.7.6.4 + +From ee966e327cc3b1b4bba40379bc0fbb3d46c38239 Mon Sep 17 00:00:00 2001 From: fujiwarat -Date: Thu, 20 Oct 2011 11:00:23 +0900 +Date: Tue, 25 Oct 2011 10:37:22 +0900 +Subject: [PATCH] Add ibusutil.h in ibus.h + +BUG=http://code.google.com/p/ibus/issues/detail?id=1338 +TEST=Linux desktop + +Review URL: http://codereview.appspot.com/5294054 +--- + src/ibus.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/src/ibus.h b/src/ibus.h +index 0765799..addc531 100644 +--- a/src/ibus.h ++++ b/src/ibus.h +@@ -52,6 +52,7 @@ + #include + #include + #include ++#include + + #undef __IBUS_H_INSIDE__ + +-- +1.7.6.4 + +From 910f8a64098d89b04c50056f621ec1a49dd3e7ea Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Tue, 25 Oct 2011 10:50:34 +0900 Subject: [PATCH] Fix previous_engine without global engine. +BUG=http://code.google.com/p/ibus/issues/detail?id=1331 +TEST=Linux desktop + +Review URL: http://codereview.appspot.com/5297047 --- bus/ibusimpl.c | 31 +++++++++++++++++++------------ 1 files changed, 19 insertions(+), 12 deletions(-) @@ -81,3 +205,123 @@ index 1494f5f..0a4f3fb 100644 -- 1.7.6.4 +From cca4fd8993613a6993965c3120323e43c4647ef5 Mon Sep 17 00:00:00 2001 +From: Daiki Ueno +Date: Fri, 28 Oct 2011 15:42:08 +0900 +Subject: [PATCH] Don't set focus on GTK password entry. + +For an old bug: +https://bugzilla.redhat.com/show_bug.cgi?id=484643 +Input method should be disabled on password entry for security reason. + +BUG=none +TEST=manually with gtk-demo "Entry Buffer" example + +Review URL: http://codereview.appspot.com/5319053 +--- + client/gtk2/ibusimcontext.c | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c +index 327a5d9..b6ca12e 100644 +--- a/client/gtk2/ibusimcontext.c ++++ b/client/gtk2/ibusimcontext.c +@@ -734,6 +734,19 @@ ibus_im_context_focus_in (GtkIMContext *context) + if (ibusimcontext->has_focus) + return; + ++ /* don't set focus on password entry */ ++ if (ibusimcontext->client_window != NULL) { ++ GtkWidget *widget; ++ ++ gdk_window_get_user_data (ibusimcontext->client_window, ++ (gpointer *)&widget); ++ ++ if (GTK_IS_ENTRY (widget) && ++ !gtk_entry_get_visibility (GTK_ENTRY (widget))) { ++ return; ++ } ++ } ++ + if (_focus_im_context != NULL) { + g_assert (_focus_im_context != context); + gtk_im_context_focus_out (_focus_im_context); +-- +1.7.6.4 + +From d57b575f2a1b33b60ad84310a4e685e706f8a574 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 28 Oct 2011 13:09:07 +0900 +Subject: [PATCH] Rerotate next/previous engines without global engine. + +--- + bus/ibusimpl.c | 33 ++++++++++++++++++++++++++++++--- + 1 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c +index 0a4f3fb..687f910 100644 +--- a/bus/ibusimpl.c ++++ b/bus/ibusimpl.c +@@ -1056,7 +1056,7 @@ bus_ibus_impl_context_request_rotate_engine_in_menu (BusIBusImpl *ibus, + BusEngineProxy *engine; + IBusEngineDesc *desc; + IBusEngineDesc *next_desc = NULL; +- GList *p; ++ GList *p = NULL; + + engine = bus_input_context_get_engine (context); + if (engine == NULL) { +@@ -1074,21 +1074,48 @@ bus_ibus_impl_context_request_rotate_engine_in_menu (BusIBusImpl *ibus, + if (p != NULL) { + if (is_next) { + p = p->next; +- } else if (p->prev) { ++ } else { + p = p->prev; + } + } ++ ++ /* Rotate register_engine_list and engine_list. */ ++ if (p == NULL && is_next && ++ g_list_find (ibus->register_engine_list, desc) != NULL) { ++ p = ibus->engine_list; ++ } ++ else if (p == NULL && !is_next && ++ g_list_find (ibus->register_engine_list, desc) != NULL && ++ ibus->engine_list != NULL) { ++ p = g_list_last (ibus->engine_list); ++ } ++ + if (p == NULL) { + p = g_list_find (ibus->engine_list, desc); + if (p != NULL) { + if (is_next) { + p = p->next; +- } else if (p->prev) { ++ } else { + p = p->prev; + } + } + } + ++ if (p == NULL && !is_next && ++ g_list_find (ibus->engine_list, desc) != NULL) { ++ p = g_list_last (ibus->register_engine_list); ++ if (p == NULL) { ++ p = g_list_last (ibus->engine_list); ++ } ++ } ++ else if (p == NULL && is_next && ++ g_list_find (ibus->engine_list, desc) != NULL) { ++ p = ibus->register_engine_list; ++ if (p == NULL) { ++ p = ibus->engine_list; ++ } ++ } ++ + if (p != NULL) { + next_desc = (IBusEngineDesc*) p->data; + } +-- +1.7.6.4 + diff --git a/ibus-xx-bridge-hotkey.patch b/ibus-xx-bridge-hotkey.patch index 3d58a19..c04c1e4 100644 --- a/ibus-xx-bridge-hotkey.patch +++ b/ibus-xx-bridge-hotkey.patch @@ -1,38 +1,40 @@ -From 5136e4136e38271da195da76e1377308dbc2ed64 Mon Sep 17 00:00:00 2001 +From 0c7589f84d4a0e8723f7fce37981d177a11da4f6 Mon Sep 17 00:00:00 2001 From: fujiwarat -Date: Fri, 12 Aug 2011 16:42:52 +0900 +Date: Fri, 28 Oct 2011 15:30:12 +0900 Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead of on-off. --- bus/Makefile.am | 20 +- - bus/ibusimpl.c | 501 ++++++++++++++++++++++++++++++++++----- - bus/inputcontext.c | 39 +++ + bus/ibusimpl.c | 571 +++++++++++++++++++++++++++++++++++---- + bus/inputcontext.c | 81 ++++++ bus/inputcontext.h | 22 ++ bus/registry.c | 61 +++++ bus/registry.h | 10 + configure.ac | 31 +++ data/Makefile.am | 6 +- - data/ibus.schemas.in | 287 ---------------------- - data/ibus.schemas.in.in | 300 +++++++++++++++++++++++ + data/ibus.schemas.in | 287 -------------------- + data/ibus.schemas.in.in | 300 ++++++++++++++++++++ ibus/_config.py.in | 6 + - ibus/inputcontext.py | 14 +- - ibus/interface/iinputcontext.py | 4 +- + ibus/inputcontext.py | 17 ++- + ibus/interface/iinputcontext.py | 7 +- ibus/xkbxml.py.in | 4 + setup/enginecombobox.py | 3 + setup/enginetreeview.py | 8 +- setup/main.py | 24 ++ - setup/setup.ui | 55 +++++- + setup/setup.ui | 55 ++++- src/Makefile.am | 18 +- src/ibushotkey.c | 11 + src/ibushotkey.h | 11 + + src/ibusinputcontext.c | 28 ++ + src/ibusinputcontext.h | 12 + src/ibusutil.c | 12 + src/ibusutil.h | 14 + - ui/gtk/panel.py | 271 ++++++++++++++++++++-- + ui/gtk/panel.py | 305 +++++++++++++++++++-- xkb/Makefile.am | 2 + - xkb/ibus-engine-xkb-main.c | 19 ++ + xkb/ibus-engine-xkb-main.c | 16 ++ xkb/xkbxml.c | 10 +- - 28 files changed, 1374 insertions(+), 391 deletions(-) + 29 files changed, 1561 insertions(+), 391 deletions(-) delete mode 100644 data/ibus.schemas.in create mode 100644 data/ibus.schemas.in.in @@ -89,18 +91,19 @@ index 853465c..00864ac 100644 #include "types.h" #include "ibusimpl.h" #include "dbusimpl.h" -@@ -79,6 +84,10 @@ struct _BusIBusImpl { +@@ -79,6 +84,11 @@ struct _BusIBusImpl { /* engine-specific hotkeys */ IBusHotkeyProfile *engines_hotkey_profile; GHashTable *hotkey_to_engines_map; + +#if USE_BRIDGE_HOTKEY + IBusEngineDesc *prev_hotkey_engine; ++ guint xkb_group_length; +#endif }; struct _BusIBusImplClass { -@@ -99,6 +108,8 @@ enum { +@@ -99,6 +109,8 @@ enum { static guint _signals[LAST_SIGNAL] = { 0 }; */ @@ -109,7 +112,7 @@ index 853465c..00864ac 100644 /* functions prototype */ static void bus_ibus_impl_destroy (BusIBusImpl *ibus); static void bus_ibus_impl_service_method_call -@@ -285,6 +296,112 @@ _panel_destroy_cb (BusPanelProxy *panel, +@@ -285,6 +297,112 @@ _panel_destroy_cb (BusPanelProxy *panel, g_object_unref (panel); } @@ -222,7 +225,7 @@ index 853465c..00864ac 100644 static void _config_set_value_done (GObject *object, GAsyncResult *res, -@@ -562,6 +679,67 @@ bus_ibus_impl_set_hotkey (BusIBusImpl *i +@@ -572,6 +690,67 @@ bus_ibus_impl_set_hotkey (BusIBusImpl *i } @@ -290,7 +293,7 @@ index 853465c..00864ac 100644 /** * bus_ibus_impl_set_trigger: * -@@ -573,7 +751,15 @@ bus_ibus_impl_set_trigger (BusIBusImpl * +@@ -583,7 +762,15 @@ bus_ibus_impl_set_trigger (BusIBusImpl * { GQuark hotkey = g_quark_from_static_string ("trigger"); if (value != NULL) { @@ -306,7 +309,7 @@ index 853465c..00864ac 100644 } #ifndef OS_CHROMEOS else { -@@ -639,6 +825,72 @@ bus_ibus_impl_set_previous_engine (BusIB +@@ -649,6 +836,72 @@ bus_ibus_impl_set_previous_engine (BusIB bus_ibus_impl_set_hotkey (ibus, hotkey, value); } @@ -379,7 +382,7 @@ index 853465c..00864ac 100644 /** * bus_ibus_impl_set_preload_engines: * -@@ -658,6 +910,9 @@ bus_ibus_impl_set_preload_engines (BusIB +@@ -668,6 +921,9 @@ bus_ibus_impl_set_preload_engines (BusIB _set_preload_engines (ibus, value); } } @@ -389,7 +392,7 @@ index 853465c..00864ac 100644 #else _set_preload_engines (ibus, value); #endif -@@ -1216,7 +1471,71 @@ _context_request_engine_cb (BusInputCont +@@ -1226,7 +1482,73 @@ _context_request_engine_cb (BusInputCont const gchar *engine_name, BusIBusImpl *ibus) { @@ -414,7 +417,9 @@ index 853465c..00864ac 100644 + } + } + -+ if (current_desc) { ++ if (current_desc && desc && ++ g_strcmp0 (ibus_engine_desc_get_name (current_desc), ++ ibus_engine_desc_get_name (desc)) != 0) { + if (context) { + bus_input_context_set_prev_hotkey_engine (context, current_desc); + } else { @@ -462,7 +467,7 @@ index 853465c..00864ac 100644 } /** -@@ -1255,8 +1574,13 @@ bus_ibus_impl_get_engine_desc (BusIBusIm +@@ -1265,8 +1587,13 @@ bus_ibus_impl_get_engine_desc (BusIBusIm if (!desc) { if (ibus->register_engine_list) { desc = (IBusEngineDesc *) ibus->register_engine_list->data; @@ -477,7 +482,92 @@ index 853465c..00864ac 100644 desc = (IBusEngineDesc *) ibus->engine_list->data; } } -@@ -1407,6 +1731,9 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus, +@@ -1311,9 +1638,20 @@ bus_ibus_impl_context_request_rotate_eng + desc = bus_engine_proxy_get_desc (engine); + + p = g_list_find (ibus->register_engine_list, desc); ++#if USE_BRIDGE_HOTKEY ++ if (!use_bridge_hotkey (ibus)) { ++ p = NULL; ++ } ++#endif + if (p != NULL) { + if (is_next) { + p = p->next; ++#if USE_BRIDGE_HOTKEY ++ if (p && g_list_length (ibus->register_engine_list) - ++ g_list_length (p) >= ibus->xkb_group_length) { ++ p = NULL; ++ } ++#endif + } else { + p = p->prev; + } +@@ -1344,6 +1682,15 @@ bus_ibus_impl_context_request_rotate_eng + if (p == NULL && !is_next && + g_list_find (ibus->engine_list, desc) != NULL) { + p = g_list_last (ibus->register_engine_list); ++#if USE_BRIDGE_HOTKEY ++ if (!use_bridge_hotkey (ibus)) { ++ p = NULL; ++ } ++ else if (ibus->xkb_group_length > 0) { ++ p = g_list_nth (ibus->register_engine_list, ++ ibus->xkb_group_length - 1); ++ } ++#endif + if (p == NULL) { + p = g_list_last (ibus->engine_list); + } +@@ -1351,6 +1698,11 @@ bus_ibus_impl_context_request_rotate_eng + else if (p == NULL && is_next && + g_list_find (ibus->engine_list, desc) != NULL) { + p = ibus->register_engine_list; ++#if USE_BRIDGE_HOTKEY ++ if (!use_bridge_hotkey (ibus)) { ++ p = NULL; ++ } ++#endif + if (p == NULL) { + p = ibus->engine_list; + } +@@ -1360,14 +1712,25 @@ bus_ibus_impl_context_request_rotate_eng + next_desc = (IBusEngineDesc*) p->data; + } + else { ++#if USE_BRIDGE_HOTKEY ++ if (use_bridge_hotkey (ibus) && ibus->register_engine_list) { ++ next_desc = (IBusEngineDesc *) ibus->register_engine_list->data; ++ } ++#else + if (ibus->register_engine_list) { + next_desc = (IBusEngineDesc *) ibus->register_engine_list->data; + } ++#endif + else if (ibus->engine_list) { + next_desc = (IBusEngineDesc *) ibus->engine_list->data; + } + } + ++#if USE_BRIDGE_HOTKEY ++ if (use_bridge_hotkey (ibus)) { ++ bus_input_context_set_prev_hotkey_engine (context, desc); ++ } ++#endif + bus_ibus_impl_set_context_engine_from_desc (ibus, context, next_desc); + } + +@@ -1389,7 +1752,9 @@ bus_ibus_impl_context_request_previous_e + if (!ibus->global_previous_engine_name) { + ibus->global_previous_engine_name = bus_ibus_impl_load_global_previous_engine_name_from_config (ibus); + } ++#if 0 + engine_name = ibus->global_previous_engine_name; ++#endif + if (engine_name != NULL) { + /* If the previous engine is removed from the engine list or the + current engine and the previous engine are the same one, force +@@ -1450,6 +1815,9 @@ bus_ibus_impl_set_focused_context (BusIB BusEngineProxy *engine = NULL; gboolean is_enabled = FALSE; @@ -487,7 +577,7 @@ index 853465c..00864ac 100644 if (ibus->focused_context) { if (ibus->use_global_engine) { -@@ -1336,6 +1741,9 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus, +@@ -1457,6 +1825,9 @@ bus_ibus_impl_set_focused_context (BusIB engine = bus_input_context_get_engine (ibus->focused_context); if (engine) { is_enabled = bus_input_context_is_enabled (ibus->focused_context); @@ -497,7 +587,7 @@ index 853465c..00864ac 100644 g_object_ref (engine); bus_input_context_set_engine (ibus->focused_context, NULL); } -@@ -1360,6 +1768,9 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus, +@@ -1481,6 +1852,9 @@ bus_ibus_impl_set_focused_context (BusIB if (is_enabled) { bus_input_context_enable (context); } @@ -507,7 +597,41 @@ index 853465c..00864ac 100644 g_object_unref (engine); } -@@ -2267,6 +2591,9 @@ bus_ibus_impl_filter_keyboard_shortcuts +@@ -1710,6 +2084,25 @@ _context_disabled_cb (BusInputContext + } + + /** ++ * _context_set_xkb_engines_cb: ++ * ++ * A callback function to be called when the "set-xkb-engines" signal is sent to the context. ++ */ ++static void ++_context_set_xkb_engines_cb (BusInputContext *context, ++ GList *list, ++ BusIBusImpl *ibus) ++{ ++ if (list == NULL) { ++ return; ++ } ++ ++#if USE_BRIDGE_HOTKEY ++ ibus->xkb_group_length = g_list_length (list); ++#endif ++} ++ ++/** + * bus_ibus_impl_create_input_context: + * @client: A name of a client. e.g. "gtk-im" + * @returns: A BusInputContext object. +@@ -1737,6 +2130,7 @@ bus_ibus_impl_create_input_context (BusI + { "destroy", G_CALLBACK (_context_destroy_cb) }, + { "enabled", G_CALLBACK (_context_enabled_cb) }, + { "disabled", G_CALLBACK (_context_disabled_cb) }, ++ { "set-xkb-engines", G_CALLBACK (_context_set_xkb_engines_cb) }, + }; + + gint i; +@@ -2314,6 +2708,9 @@ bus_ibus_impl_filter_keyboard_shortcuts GQuark event; GList *engine_list; @@ -517,7 +641,7 @@ index 853465c..00864ac 100644 if (trigger == 0) { trigger = g_quark_from_static_string ("trigger"); -@@ -2331,6 +2658,12 @@ bus_ibus_impl_filter_keyboard_shortcuts +@@ -2379,6 +2776,12 @@ bus_ibus_impl_filter_keyboard_shortcuts return FALSE; } @@ -530,7 +654,7 @@ index 853465c..00864ac 100644 /* Then try engines hotkeys. */ event = ibus_hotkey_profile_filter_key_event (ibus->engines_hotkey_profile, keyval, -@@ -2352,6 +2685,24 @@ bus_ibus_impl_filter_keyboard_shortcuts +@@ -2400,6 +2803,24 @@ bus_ibus_impl_filter_keyboard_shortcuts g_assert (new_engine_desc); @@ -555,7 +679,7 @@ index 853465c..00864ac 100644 /* Find out what engine we should switch to. If the current engine has * 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 -@@ -2363,8 +2714,47 @@ bus_ibus_impl_filter_keyboard_shortcuts +@@ -2411,8 +2832,47 @@ bus_ibus_impl_filter_keyboard_shortcuts break; } } @@ -565,7 +689,7 @@ index 853465c..00864ac 100644 + if (context == NULL) { + return FALSE; + } - ++ + /* This means RequestEngine signal might be done but SetEngine signal + * has not been done yet by ibus status icon. */ + if (current_engine_desc == NULL && @@ -580,7 +704,7 @@ index 853465c..00864ac 100644 + 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. @@ -603,7 +727,7 @@ index 853465c..00864ac 100644 bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc); } -@@ -2468,59 +2858,54 @@ static void +@@ -2516,59 +2976,54 @@ static void _add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus) { const gchar *hotkeys; @@ -698,7 +822,7 @@ index 853465c..00864ac 100644 /** diff --git a/bus/inputcontext.c b/bus/inputcontext.c -index 4e8cdc5..43dedc0 100644 +index 3c81688..58ab8f4 100644 --- a/bus/inputcontext.c +++ b/bus/inputcontext.c @@ -90,6 +90,12 @@ struct _BusInputContext { @@ -714,7 +838,43 @@ index 4e8cdc5..43dedc0 100644 }; struct _BusInputContextClass { -@@ -647,6 +653,11 @@ bus_input_context_destroy (BusInputContext *context) +@@ -122,6 +128,7 @@ enum { + DISABLED, + ENGINE_CHANGED, + REQUEST_ENGINE, ++ SET_XKB_ENGINES, + LAST_SIGNAL, + }; + +@@ -265,6 +272,9 @@ static const gchar introspection_xml[] = + " " + " " + " " ++ " " ++ " " ++ " " + " " + " " + " " +@@ -586,6 +596,17 @@ bus_input_context_class_init (BusInputContextClass *class) + 1, + G_TYPE_STRING); + ++ context_signals[SET_XKB_ENGINES] = ++ g_signal_new (I_("set-xkb-engines"), ++ G_TYPE_FROM_CLASS (class), ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, ++ bus_marshal_VOID__OBJECT, ++ G_TYPE_NONE, ++ 1, ++ G_TYPE_POINTER); ++ + text_empty = ibus_text_new_from_string (""); + g_object_ref_sink (text_empty); + lookup_table_empty = ibus_lookup_table_new (9 /* page size */, 0, FALSE, FALSE); +@@ -648,6 +669,11 @@ bus_input_context_destroy (BusInputContext *context) context->client = NULL; } @@ -726,7 +886,48 @@ index 4e8cdc5..43dedc0 100644 IBUS_OBJECT_CLASS (bus_input_context_parent_class)->destroy (IBUS_OBJECT (context)); } -@@ -2211,6 +2222,7 @@ bus_input_context_set_engine (BusInputContext *context, +@@ -1048,6 +1074,32 @@ _ic_get_engine (BusInputContext *context, + } + + /** ++ * _ic_set_xkb_engines: ++ * ++ * Implement the "SetXKBEngines" method call of the org.freedesktop.IBus.InputContext interface. ++ */ ++static void ++_ic_set_xkb_engines (BusInputContext *context, ++ GVariant *parameters, ++ GDBusMethodInvocation *invocation) ++{ ++ GVariantIter *iter = NULL; ++ GVariant *var; ++ GList *list = NULL; ++ ++ g_variant_get_child (parameters, 0, "av", &iter); ++ while (g_variant_iter_loop (iter, "v", &var)) { ++ list = g_list_append (list, ibus_serializable_deserialize (var)); ++ } ++ g_variant_iter_free (iter); ++ ++ g_signal_emit (context, ++ context_signals[SET_XKB_ENGINES], 0, ++ list); ++ return; ++} ++ ++/** + * bus_input_context_service_method_call: + * + * Handle a D-Bus method call whose destination and interface name are both "org.freedesktop.IBus.InputContext" +@@ -1126,6 +1178,7 @@ bus_input_context_service_method_call (IBusService *service, + { "IsEnabled", _ic_is_enabled }, + { "SetEngine", _ic_set_engine }, + { "GetEngine", _ic_get_engine }, ++ { "SetXKBEngines", _ic_set_xkb_engines }, + { "SetSurroundingText", _ic_set_surrounding_text}, + }; + +@@ -2218,6 +2271,7 @@ bus_input_context_set_engine (BusInputContext *context, } else { gint i; @@ -734,7 +935,7 @@ index 4e8cdc5..43dedc0 100644 context->engine = engine; g_object_ref (context->engine); -@@ -2538,3 +2550,30 @@ bus_input_context_get_client (BusInputContext *context) +@@ -2542,3 +2596,30 @@ bus_input_context_get_client (BusInputContext *context) g_assert (BUS_IS_INPUT_CONTEXT (context)); return context->client; } @@ -1056,7 +1257,7 @@ index a830136..4c3c980 100644 +DEFAULT_BRIDGE_ENGINE_NAME='@DEFAULT_BRIDGE_ENGINE_NAME@' ISOCODES_PREFIX='@ISOCODES_PREFIX@' diff --git a/ibus/inputcontext.py b/ibus/inputcontext.py -index ceeb56d..b3c2f65 100644 +index 64a6ba2..b471e20 100644 --- a/ibus/inputcontext.py +++ b/ibus/inputcontext.py @@ -28,6 +28,7 @@ import sys @@ -1067,7 +1268,7 @@ index ceeb56d..b3c2f65 100644 import object import common import serializable -@@ -279,8 +280,19 @@ class InputContext(object.Object): +@@ -283,8 +284,22 @@ class InputContext(object.Object): except: return None @@ -1083,16 +1284,19 @@ index ceeb56d..b3c2f65 100644 + reply_handler=self.__handle_ic_reply, + error_handler=self.__handle_ic_error) + -+ def set_bridge_engine(self): -+ return self.__context.SetEngine(_config.DEFAULT_BRIDGE_ENGINE_NAME) ++ def set_xkb_engines(self, engines): ++ engines = map(lambda e: serializable.serialize_object(e), engines) ++ return self.__context.SetXKBEngines(engines, ++ reply_handler=self.__handle_ic_reply, ++ error_handler=self.__handle_ic_error) def introspect(self): return self.__context.Introspect() diff --git a/ibus/interface/iinputcontext.py b/ibus/interface/iinputcontext.py -index 1d3cd2a..58d75e5 100644 +index 06ce519..3b655dc 100644 --- a/ibus/interface/iinputcontext.py +++ b/ibus/interface/iinputcontext.py -@@ -76,8 +76,8 @@ class IInputContext(dbus.service.Object): +@@ -76,8 +76,11 @@ class IInputContext(dbus.service.Object): @method(out_signature="v") def GetEngine(self): pass @@ -1100,6 +1304,9 @@ index 1d3cd2a..58d75e5 100644 - def SetEngine(self, engine_name): pass + @async_method(in_signature="s") + def SetEngine(self, engine_name, reply_cb, error_cb): pass ++ ++ @async_method(in_signature="av") ++ def SetXKBEngines(self, engines, reply_cb, error_cb): pass @method() def Destroy(self): pass @@ -1342,6 +1549,67 @@ index 9a341f6..92ec6af 100644 + G_END_DECLS #endif +diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c +index 54e30ae..c37a71d 100644 +--- a/src/ibusinputcontext.c ++++ b/src/ibusinputcontext.c +@@ -1219,6 +1219,33 @@ ibus_input_context_set_engine (IBusInputContext *context, + ); + } + ++void ++ibus_input_context_set_xkb_engines (IBusInputContext *context, ++ GList *list) ++{ ++ GVariantBuilder builder; ++ GList *p; ++ ++ g_assert (IBUS_IS_INPUT_CONTEXT (context)); ++ g_assert (list); ++ ++ g_variant_builder_init (&builder, G_VARIANT_TYPE ("av")); ++ for (p = list; p; p = p->next) { ++ g_variant_builder_add (&builder, "v", ++ ibus_serializable_serialize ((IBusSerializable *) p->data)); ++ } ++ ++ g_dbus_proxy_call ((GDBusProxy *) context, ++ "SetXKBEngines", /* method_name */ ++ g_variant_new ("(av)", &builder), /* parameters */ ++ G_DBUS_CALL_FLAGS_NONE, /* flags */ ++ -1, /* timeout */ ++ NULL, /* cancellable */ ++ NULL, /* callback */ ++ NULL /* user_data */ ++ ); ++} ++ + #define DEFINE_FUNC(name, Name) \ + void \ + ibus_input_context_##name (IBusInputContext *context) \ +diff --git a/src/ibusinputcontext.h b/src/ibusinputcontext.h +index be3c502..40b902e 100644 +--- a/src/ibusinputcontext.h ++++ b/src/ibusinputcontext.h +@@ -495,6 +495,18 @@ void ibus_input_context_set_engine (IBusInputContext *context, + const gchar *name); + + /** ++ * ibus_input_context_set_xkb_engines: ++ * @context: An IBusInputContext. ++ * @list: (transfer container) (element-type IBusEngineDesc): ++ * A list of the engines. ++ * ++ * Set XKB group layouts from the desktop session. ++ */ ++void ibus_input_context_set_xkb_engines ++ (IBusInputContext *context, ++ GList *list); ++ ++/** + * ibus_input_context_set_surrounding_text: + * @context: An #IBusInputContext. + * @text: An #IBusText surrounding the current cursor on the application. diff --git a/src/ibusutil.c b/src/ibusutil.c index ddb6b9e..46dab1a 100644 --- a/src/ibusutil.c @@ -1431,7 +1699,7 @@ index 8804634..bef6fbf 100644 def set_cursor_location(self, x, y, w, h): self.__candidate_panel.set_cursor_location(x, y, w, h) -@@ -233,12 +249,97 @@ class Panel(ibus.PanelBase): +@@ -233,12 +249,99 @@ class Panel(ibus.PanelBase): def __set_im_name(self, name): self.__language_bar.set_im_name(name) @@ -1489,6 +1757,8 @@ index 8804634..bef6fbf 100644 + name) + self.__disabled_engines.append(engine) + self.__disabled_engines_id = self.__xkblayout.get_group() ++ if use_bridge_hotkey and len(self.__disabled_engines) > 0: ++ self.__focus_ic.set_xkb_engines(self.__disabled_engines) + if not use_bridge_hotkey: + return + if len(self.__disabled_engines) > 0: @@ -1530,7 +1800,7 @@ index 8804634..bef6fbf 100644 if not enabled: self.__set_im_icon(ICON_KEYBOARD) self.__set_im_name(None) -@@ -250,7 +351,7 @@ class Panel(ibus.PanelBase): +@@ -250,7 +353,7 @@ class Panel(ibus.PanelBase): self.__set_im_icon(engine.icon) self.__set_im_name(engine.longname) if self.__bus.get_use_sys_layout(): @@ -1539,7 +1809,7 @@ index 8804634..bef6fbf 100644 else: self.__set_im_icon(ICON_KEYBOARD) self.__set_im_name(None) -@@ -273,7 +374,21 @@ class Panel(ibus.PanelBase): +@@ -273,7 +376,21 @@ class Panel(ibus.PanelBase): return enabled = self.__focus_ic.is_enabled() @@ -1562,7 +1832,7 @@ index 8804634..bef6fbf 100644 if enabled == False: self.reset() -@@ -287,7 +402,7 @@ class Panel(ibus.PanelBase): +@@ -287,7 +404,7 @@ class Panel(ibus.PanelBase): self.__set_im_icon(engine.icon) self.__set_im_name(engine.longname) if self.__bus.get_use_sys_layout(): @@ -1571,7 +1841,7 @@ index 8804634..bef6fbf 100644 else: self.__set_im_icon(ICON_KEYBOARD) self.__set_im_name(None) -@@ -315,6 +430,7 @@ class Panel(ibus.PanelBase): +@@ -315,6 +432,7 @@ class Panel(ibus.PanelBase): def __config_load_show(self): show = self.__config.get_value("panel", "show", 0) @@ -1579,7 +1849,7 @@ index 8804634..bef6fbf 100644 self.__language_bar.set_show(show) def __config_load_position(self): -@@ -443,6 +559,21 @@ class Panel(ibus.PanelBase): +@@ -443,6 +561,21 @@ class Panel(ibus.PanelBase): # menu.set_take_focus(False) # return menu @@ -1601,7 +1871,7 @@ index 8804634..bef6fbf 100644 def __create_im_menu(self): engines = self.__bus.list_active_engines() current_engine = \ -@@ -453,25 +584,39 @@ class Panel(ibus.PanelBase): +@@ -453,25 +586,39 @@ class Panel(ibus.PanelBase): size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) menu = gtk.Menu() for i, engine in enumerate(engines): @@ -1654,7 +1924,7 @@ index 8804634..bef6fbf 100644 menu.show_all() menu.set_take_focus(False) -@@ -523,8 +668,25 @@ class Panel(ibus.PanelBase): +@@ -523,8 +670,25 @@ class Panel(ibus.PanelBase): if not self.__focus_ic: return if engine: @@ -1681,7 +1951,7 @@ index 8804634..bef6fbf 100644 self.__focus_ic.disable() def __sys_menu_item_activate_cb(self, item, command): -@@ -573,12 +735,113 @@ class Panel(ibus.PanelBase): +@@ -573,12 +737,113 @@ class Panel(ibus.PanelBase): self.__setup_pid = pid glib.child_watch_add(self.__setup_pid, self.__child_watch_cb) diff --git a/ibus.spec b/ibus.spec index 5cc2439..e8c5568 100644 --- a/ibus.spec +++ b/ibus.spec @@ -5,15 +5,21 @@ %define have_libxkbfile 1 %define have_gjsfile 1 +%if 0%{?fedora} > 16 +%define have_bridge_hotkey 1 +%define ibus_gjs_version 3.2.1.20111028 +%define ibus_gjs_build_failure 0 +%else %if 0%{?fedora} > 15 %define have_bridge_hotkey 1 -%define ibus_gjs_version 3.2.1.20111021 -%define ibus_gjs_build_failure 1 +%define ibus_gjs_version 3.2.1.20111028 +%define ibus_gjs_build_failure 0 %else %define have_bridge_hotkey 0 -%define ibus_gjs_version 3.0.2.20111018 +%define ibus_gjs_version 3.0.2.20111028 %define ibus_gjs_build_failure 0 %endif +%endif %define ibus_api_version 1.0 @@ -24,7 +30,7 @@ Name: ibus Version: 1.4.0 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ Group: System Environment/Libraries @@ -386,6 +392,9 @@ fi %{_datadir}/gtk-doc/html/* %changelog +* Fri Oct 28 2011 Takao Fujiwara - 1.4.0-7 +- Fixed Bug 747902 - mouse and ctrl+space not working + * Wed Oct 26 2011 Fedora Release Engineering - 1.4.0-6 - Rebuilt for glibc bug#747377 diff --git a/sources b/sources index f03ebdf..1f110bf 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ b4f063794e89c71eb1f8cb543210da30 ibus-1.4.0.tar.gz -21093439be2c7321cb1a85ca3307a0b5 ibus-gjs-3.0.2.20111018.tar.gz -636991ea42551a754c04996ae396bf69 ibus-gjs-3.2.1.20111021.tar.gz +de3f3ea3f94b857e253943c54f77f63c ibus-gjs-3.0.2.20111028.tar.gz +68800261522aa391f972c93c7317c05b ibus-gjs-3.2.1.20111028.tar.gz