From 727f9412b9f587fcf65c45a209a901a2562dd4ce Mon Sep 17 00:00:00 2001 From: Takao Fujiwara Date: Dec 08 2014 04:46:34 +0000 Subject: Updated ibus-xx-increase-timeout.patch to fix #1163722 Updated ibus-HEAD.patch for upstream #1747, #1748, #1753 and gnome #703020, gnome #730628 --- diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index fd3094b..80f2cdb 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -98,3 +98,575 @@ index 76cea23..7b99fdf 100644 -- 1.8.5.3 +From e2507263817926ceb97511da3d617934d4b73443 Mon Sep 17 00:00:00 2001 +From: Osamu Aoki +Date: Thu, 13 Nov 2014 11:23:38 +0900 +Subject: [PATCH] ibus-setup tries C since en_US.UTF-8 is not installed in + Debian by default. + +BUG=https://code.google.com/p/ibus/issues/detail?id=1747 +TEST=setup + +Review URL: https://codereview.appspot.com/166420043 +Patch from Osamu Aoki . +--- + setup/enginecombobox.py | 2 +- + setup/enginedialog.py | 13 +++++++++---- + 2 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/setup/enginecombobox.py b/setup/enginecombobox.py +index 2a2a677..199ed96 100644 +--- a/setup/enginecombobox.py ++++ b/setup/enginecombobox.py +@@ -78,7 +78,7 @@ class EngineComboBox(Gtk.ComboBox): + keys.sort(key=functools.cmp_to_key(locale.strcoll)) + loc = locale.getlocale()[0] + # None on C locale +- if loc == None: ++ if loc == None or loc == 'C': + loc = 'en_US' + current_lang = IBus.get_language_name(loc) + # move current language to the first place +diff --git a/setup/enginedialog.py b/setup/enginedialog.py +index 8a56901..2b179ad 100644 +--- a/setup/enginedialog.py ++++ b/setup/enginedialog.py +@@ -325,21 +325,26 @@ class EngineDialog(Gtk.Dialog): + + # Retrieve Untranslated language names. + backup_locale = locale.setlocale(locale.LC_ALL, None) +- try: +- locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') ++ def __set_untrans_with_locale(en_locale): ++ locale.setlocale(locale.LC_ALL, en_locale) + untrans = IBus.get_language_name(e.get_language()) + if untrans == None: + untrans = '' + self.__untrans_for_lang[l] = untrans ++ try: ++ __set_untrans_with_locale('en_US.UTF-8') + except locale.Error: +- pass ++ try: ++ __set_untrans_with_locale('C') ++ except locale.Error: ++ pass + locale.setlocale(locale.LC_ALL, backup_locale) + + keys = list(self.__engines_for_lang.keys()) + keys.sort(key=functools.cmp_to_key(locale.strcoll)) + loc = locale.getlocale()[0] + # None on C locale +- if loc == None: ++ if loc == None or loc == 'C': + loc = 'en_US' + current_lang = IBus.get_language_name(loc) + # move current language to the first place +-- +1.8.5.3 + +From de3541d2a26c673f27c068559f6d363064e03760 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Thu, 13 Nov 2014 11:28:43 +0900 +Subject: [PATCH] Remove "Release" modifiers key on ibus-setup. + +BUG=https://code.google.com/p/ibus/issues/detail?id=1748 +TEST=setup + +Review URL: https://codereview.appspot.com/167570043 +--- + setup/keyboardshortcut.py | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +diff --git a/setup/keyboardshortcut.py b/setup/keyboardshortcut.py +index 91595f7..86463cb 100644 +--- a/setup/keyboardshortcut.py ++++ b/setup/keyboardshortcut.py +@@ -105,20 +105,16 @@ class KeyboardShortcutSelection(Gtk.Box): + Gtk.CheckButton.new_with_mnemonic("_Hyper"), + Gdk.ModifierType.HYPER_MASK)) + # is not parsed by gtk_accelerator_parse() +- # FIXME: Need to check if ibus gtk panel can enable . +- self.__modifier_buttons.append(("Release", +- Gtk.CheckButton.new_with_mnemonic("_Release"), +- Gdk.ModifierType.RELEASE_MASK)) ++ # is not supported by XIGrabKeycode() + for name, button, mask in self.__modifier_buttons: + button.connect("toggled", self.__modifier_button_toggled_cb, name) + + table.attach(self.__modifier_buttons[0][1], 0, 1, 0, 1) + table.attach(self.__modifier_buttons[1][1], 1, 2, 0, 1) + table.attach(self.__modifier_buttons[2][1], 2, 3, 0, 1) +- table.attach(self.__modifier_buttons[3][1], 3, 4, 0, 1) +- table.attach(self.__modifier_buttons[4][1], 0, 1, 1, 2) +- table.attach(self.__modifier_buttons[5][1], 1, 2, 1, 2) +- table.attach(self.__modifier_buttons[6][1], 2, 3, 1, 2) ++ table.attach(self.__modifier_buttons[3][1], 0, 1, 1, 2) ++ table.attach(self.__modifier_buttons[4][1], 1, 2, 1, 2) ++ table.attach(self.__modifier_buttons[5][1], 2, 3, 1, 2) + hbox.pack_start(table, True, True, 4) + self.pack_start(hbox, False, True, 4) + +-- +1.8.5.3 + +From a7abce698f40e60275c46f05967e8cc369769e4b Mon Sep 17 00:00:00 2001 +From: Peng Wu +Date: Wed, 19 Nov 2014 18:10:05 +0900 +Subject: [PATCH] Fixes ibus_engine_update_lookup_table_fast method + +gnome shell needs the previous page and next page +to correctly show the page up/down arrows, +send three pages instead of one page. + +URL: https://bugzilla.gnome.org/show_bug.cgi?id=703020 + +BUG= + +Review URL: https://codereview.appspot.com/164540045 +Patch from Peng Wu . +--- + src/ibusengine.c | 27 ++++++++++++++++++++++----- + 1 file changed, 22 insertions(+), 5 deletions(-) + +diff --git a/src/ibusengine.c b/src/ibusengine.c +index 53d57df..4758f82 100644 +--- a/src/ibusengine.c ++++ b/src/ibusengine.c +@@ -1422,12 +1422,17 @@ ibus_engine_update_lookup_table_fast (IBusEngine *engine, + IBusLookupTable *table, + gboolean visible) + { ++ /* Note: gnome shell needs the previous page and next page ++ to correctly show the page up/down arrows, ++ send three pages instead of one page. */ ++ + g_return_if_fail (IBUS_IS_ENGINE (engine)); + g_return_if_fail (IBUS_IS_LOOKUP_TABLE (table)); + + IBusLookupTable *new_table; + IBusText *text; + gint page_begin; ++ gint cursor_pos; + gint i; + + if (table->candidates->len < table->page_size << 2) { +@@ -1436,19 +1441,31 @@ ibus_engine_update_lookup_table_fast (IBusEngine *engine, + } + + page_begin = (table->cursor_pos / table->page_size) * table->page_size; ++ cursor_pos = ibus_lookup_table_get_cursor_in_page (table); ++ ++ if (table->cursor_pos >= table->page_size) { ++ /* has previous page, adjust the value. */ ++ page_begin -= table->page_size; ++ cursor_pos += table->page_size; ++ } + +- new_table = ibus_lookup_table_new (table->page_size, 0, table->cursor_visible, table->round); ++ new_table = ibus_lookup_table_new ++ (table->page_size, 0, table->cursor_visible, table->round); + +- for (i = page_begin; i < page_begin + table->page_size && i < table->candidates->len; i++) { +- ibus_lookup_table_append_candidate (new_table, ibus_lookup_table_get_candidate (table, i)); ++ /* '3' means the previous page, current page and next page. */ ++ for (i = page_begin; i < page_begin + 3 * table->page_size && ++ i < table->candidates->len; i++) { ++ ibus_lookup_table_append_candidate ++ (new_table, ibus_lookup_table_get_candidate (table, i)); + } + + for (i = 0; (text = ibus_lookup_table_get_label (table, i)) != NULL; i++) { + ibus_lookup_table_append_label (new_table, text); + } + +- ibus_lookup_table_set_cursor_pos (new_table, ibus_lookup_table_get_cursor_in_page (table)); +- ibus_lookup_table_set_orientation (new_table, ibus_lookup_table_get_orientation (table)); ++ ibus_lookup_table_set_cursor_pos (new_table, cursor_pos); ++ ibus_lookup_table_set_orientation ++ (new_table, ibus_lookup_table_get_orientation (table)); + + ibus_engine_update_lookup_table (engine, new_table, visible); + +-- +1.8.5.3 + +From f69ddc3952971c5599c92aee3dc1de6017d07f3c Mon Sep 17 00:00:00 2001 +From: Peng Wu +Date: Fri, 5 Dec 2014 11:41:08 +0900 +Subject: [PATCH] Fixes ibus_keyval_name method in c++ binding + +Add G_BEGIN_DECLS and G_END_DECLS macros in src/ibuskeys.h + +BUG= + +Review URL: https://codereview.appspot.com/185850043 +Patch from Peng Wu . +--- + src/ibuskeys.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/ibuskeys.h b/src/ibuskeys.h +index 6acb0d6..7969929 100644 +--- a/src/ibuskeys.h ++++ b/src/ibuskeys.h +@@ -29,6 +29,7 @@ + + #include + ++G_BEGIN_DECLS + /** + * ibus_keyval_name: + * @keyval: Key symbol. +@@ -73,4 +74,5 @@ guint ibus_unicode_to_keyval (gunichar wc); + **/ + gunichar ibus_keyval_to_unicode (guint keyval); + ++G_END_DECLS + #endif // __IBUS_KEYS_H_ +-- +1.8.5.3 + +From 097715746da0f56b8b8c3ddae2da3442032bff0c Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Fri, 5 Dec 2014 20:25:44 +0900 +Subject: [PATCH] Carry current context content type into fake context when + switching + +When focus moves out of a context to the fake context we should keep +the content type properties as they were in the focused out context. + +This allows panel implementations to show the proper UI while input +focus moves away temporarily from a text entry. + +E.g. a password entry is focused and the user clicks on the panel +UI. At this point ibus switches the currently focused context to the +fake context and emits set-content-type with the fake context +properties which are empty and thus the panel reacts to it. This isn't +the intended behavior though since, from a user POV, the password +entry is still the context that will be getting text input when the +panel UI gets dismissed. + +R=shawn.p.huang@gmail.com +BUG=https://bugzilla.gnome.org/show_bug.cgi?id=730628 + +Review URL: https://codereview.appspot.com/176260043 +Patch from Rui Matos . +--- + bus/ibusimpl.c | 6 ++++ + bus/inputcontext.c | 91 +++++++++++++++++++++++++++++++++--------------------- + bus/inputcontext.h | 10 ++++++ + 3 files changed, 72 insertions(+), 35 deletions(-) + +diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c +index dd254e2..61f6649 100644 +--- a/bus/ibusimpl.c ++++ b/bus/ibusimpl.c +@@ -620,6 +620,8 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus, + } + + BusEngineProxy *engine = NULL; ++ guint purpose = 0; ++ guint hints = 0; + + if (ibus->focused_context) { + if (ibus->use_global_engine) { +@@ -634,12 +636,16 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus, + if (ibus->panel != NULL) + bus_panel_proxy_focus_out (ibus->panel, ibus->focused_context); + ++ bus_input_context_get_content_type (ibus->focused_context, ++ &purpose, &hints); + g_object_unref (ibus->focused_context); + ibus->focused_context = NULL; + } + + if (context == NULL && ibus->use_global_engine) { + context = ibus->fake_context; ++ if (context) ++ bus_input_context_set_content_type (context, purpose, hints); + } + + if (context) { +diff --git a/bus/inputcontext.c b/bus/inputcontext.c +index d9924a1..ea77102 100644 +--- a/bus/inputcontext.c ++++ b/bus/inputcontext.c +@@ -1151,6 +1151,47 @@ bus_input_context_service_method_call (IBusService *service, + g_return_if_reached (); + } + ++static void ++_ic_set_content_type (BusInputContext *context, ++ GVariant *value) ++{ ++ guint purpose = 0; ++ guint hints = 0; ++ ++ g_variant_get (value, "(uu)", &purpose, &hints); ++ if (purpose != context->purpose || hints != context->hints) { ++ GError *error; ++ gboolean retval; ++ ++ context->purpose = purpose; ++ context->hints = hints; ++ ++ if (context->has_focus && context->engine) ++ bus_engine_proxy_set_content_type (context->engine, ++ purpose, ++ hints); ++ ++ if (context->has_focus) { ++ g_signal_emit (context, ++ context_signals[SET_CONTENT_TYPE], ++ 0, ++ context->purpose, ++ context->hints); ++ } ++ ++ error = NULL; ++ retval = bus_input_context_property_changed (context, ++ "ContentType", ++ value, ++ &error); ++ if (!retval) { ++ g_warning ("Failed to emit PropertiesChanged signal: %s", ++ error->message); ++ g_error_free (error); ++ } ++ } ++} ++ + static gboolean + bus_input_context_service_set_property (IBusService *service, + GDBusConnection *connection, +@@ -1175,41 +1216,7 @@ bus_input_context_service_set_property (IBusService *service, + + if (g_strcmp0 (property_name, "ContentType") == 0) { + BusInputContext *context = (BusInputContext *) service; +- guint purpose = 0; +- guint hints = 0; +- +- g_variant_get (value, "(uu)", &purpose, &hints); +- if (purpose != context->purpose || hints != context->hints) { +- GError *error; +- gboolean retval; +- +- context->purpose = purpose; +- context->hints = hints; +- +- if (context->has_focus && context->engine) +- bus_engine_proxy_set_content_type (context->engine, +- purpose, +- hints); +- +- if (context->has_focus) { +- g_signal_emit (context, +- context_signals[SET_CONTENT_TYPE], +- 0, +- context->purpose, +- context->hints); +- } +- +- error = NULL; +- retval = bus_input_context_property_changed (context, +- "ContentType", +- value, +- &error); +- if (!retval) { +- g_warning ("Failed to emit PropertiesChanged signal: %s", +- error->message); +- g_error_free (error); +- } +- } ++ _ic_set_content_type (context, value); + return TRUE; + } + +@@ -2521,3 +2528,17 @@ bus_input_context_get_content_type (BusInputContext *context, + *purpose = context->purpose; + *hints = context->hints; + } ++ ++void ++bus_input_context_set_content_type (BusInputContext *context, ++ guint purpose, ++ guint hints) ++{ ++ GVariant *value; ++ ++ g_assert (BUS_IS_INPUT_CONTEXT (context)); ++ ++ value = g_variant_ref_sink (g_variant_new ("(uu)", purpose, hints)); ++ _ic_set_content_type (context, value); ++ g_variant_unref (value); ++} +diff --git a/bus/inputcontext.h b/bus/inputcontext.h +index f282fae..258f501 100644 +--- a/bus/inputcontext.h ++++ b/bus/inputcontext.h +@@ -250,5 +250,15 @@ void bus_input_context_get_content_type + guint *purpose, + guint *hints); + ++/** ++ * bus_input_context_set_content_type: ++ * @purpose: Input purpose. ++ * @hints: Input hints. ++ */ ++void bus_input_context_set_content_type ++ (BusInputContext *context, ++ guint purpose, ++ guint hints); ++ + G_END_DECLS + #endif +-- +1.8.5.3 + +From 8f471ce138a9dc10ab5b1e0c716bb48ca36fe12a Mon Sep 17 00:00:00 2001 +From: Doug Rintoul +Date: Mon, 8 Dec 2014 12:52:00 +0900 +Subject: [PATCH] Show language rather than layout in xkb panel icon + +BUG=https://code.google.com/p/ibus/issues/detail?id=1753 +TEST=ui/gtk3/ibus-ui-gtk3 + +Review URL: https://codereview.appspot.com/184840043 +Patch from Doug Rintoul . +--- + ui/gtk3/panel.vala | 8 ++++---- + ui/gtk3/switcher.vala | 42 ++++++++++++++++++------------------------ + 2 files changed, 22 insertions(+), 28 deletions(-) + +diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala +index 7b99fdf..4e02140 100644 +--- a/ui/gtk3/panel.vala ++++ b/ui/gtk3/panel.vala +@@ -1135,16 +1135,16 @@ class Panel : IBus.PanelService { + if (icon_name[0] == '/') + m_status_icon.set_from_file(icon_name); + else { +- string symbol = null; ++ string language = null; + + if (engine != null) { + var name = engine.get_name(); + if (name.length >= 4 && name[0:4] == "xkb:") +- symbol = m_switcher.get_xkb_symbol(engine); ++ language = m_switcher.get_xkb_language(engine); + } + +- if (symbol != null) { +- Gdk.Pixbuf pixbuf = create_icon_pixbuf_with_string(symbol); ++ if (language != null) { ++ Gdk.Pixbuf pixbuf = create_icon_pixbuf_with_string(language); + m_status_icon.set_from_pixbuf(pixbuf); + } else { + var theme = Gtk.IconTheme.get_default(); +diff --git a/ui/gtk3/switcher.vala b/ui/gtk3/switcher.vala +index 7601d80..476b159 100644 +--- a/ui/gtk3/switcher.vala ++++ b/ui/gtk3/switcher.vala +@@ -21,8 +21,6 @@ + */ + + class Switcher : Gtk.Window { +- private const int DESC_LABEL_MAX_LEN = 20; +- + private class IBusEngineButton : Gtk.Button { + public IBusEngineButton(IBus.EngineDesc engine, Switcher switcher) { + GLib.Object(); +@@ -38,14 +36,14 @@ class Switcher : Gtk.Window { + icon.set_valign(Gtk.Align.CENTER); + add(icon); + } else { +- var symbol = switcher.get_xkb_symbol(engine); ++ var language = switcher.get_xkb_language(engine); + +- Gtk.Label label = new Gtk.Label(symbol); ++ Gtk.Label label = new Gtk.Label(language); + label.set_halign(Gtk.Align.CENTER); + label.set_valign(Gtk.Align.CENTER); +- string symbol_font = "Monospace Bold 16"; ++ string language_font = "Monospace Bold 16"; + string markup = "%s". +- printf(symbol_font, symbol); ++ printf(language_font, language); + + label.set_markup(markup); + +@@ -89,7 +87,7 @@ class Switcher : Gtk.Window { + private uint m_popup_delay_time_id = 0; + private int m_root_x; + private int m_root_y; +- private GLib.HashTable m_xkb_symbols = ++ private GLib.HashTable m_xkb_languages = + new GLib.HashTable(GLib.str_hash, + GLib.str_equal); + +@@ -268,10 +266,6 @@ class Switcher : Gtk.Window { + return true; + }); + +- if (longname.length > DESC_LABEL_MAX_LEN) { +- longname = longname[0:DESC_LABEL_MAX_LEN]; +- } +- + button.longname = longname; + m_label.set_label(longname); + +@@ -429,37 +423,37 @@ class Switcher : Gtk.Window { + m_popup_delay_time = popup_delay_time; + } + +- public string get_xkb_symbol(IBus.EngineDesc engine) { ++ public string get_xkb_language(IBus.EngineDesc engine) { + var name = engine.get_name(); + + assert(name[0:4] == "xkb:"); + +- var symbol = m_xkb_symbols[name]; ++ var language = m_xkb_languages[name]; + +- if (symbol != null) +- return symbol; ++ if (language != null) ++ return language; + +- var layout = engine.get_layout(); ++ language = engine.get_language(); + + /* Maybe invalid layout */ +- if (layout.length < 2) +- return layout; ++ if (language.length < 2) ++ return language; + +- symbol = layout[0:2].up(); ++ language = language[0:2].up(); + + int index = 0; + +- foreach (var saved_symbol in m_xkb_symbols.get_values()) { +- if (symbol == saved_symbol[0:2]) ++ foreach (var saved_language in m_xkb_languages.get_values()) { ++ if (language == saved_language[0:2]) + index++; + } + + if (index > 0) { + unichar u = 0x2081 + index; +- symbol = "%s%s".printf(symbol, u.to_string()); ++ language = "%s%s".printf(language, u.to_string()); + } + +- m_xkb_symbols.insert(name, symbol); +- return symbol; ++ m_xkb_languages.insert(name, language); ++ return language; + } + } +-- +1.8.5.3 + diff --git a/ibus-xx-increase-timeout.patch b/ibus-xx-increase-timeout.patch index 7380372..a406d69 100644 --- a/ibus-xx-increase-timeout.patch +++ b/ibus-xx-increase-timeout.patch @@ -1,11 +1,11 @@ --- ibus-1.5.8/bus/global.c.orig 2014-10-24 11:39:02.992359855 +0900 -+++ ibus-1.5.8/bus/global.c 2014-10-24 11:40:33.917051813 +0900 ++++ ibus-1.5.8/bus/global.c 2014-12-01 19:11:11.311759112 +0900 @@ -28,4 +28,4 @@ gchar *g_address = "unix:tmpdir=/tmp"; gchar *g_cache = "auto"; gboolean g_mempro = FALSE; gboolean g_verbose = FALSE; -gint g_gdbus_timeout = 5000; -+gint g_gdbus_timeout = 20000; ++gint g_gdbus_timeout = 15000; --- ibus-1.5.8/bus/ibusimpl.c.orig 2014-10-14 12:15:30.547369108 +0900 +++ ibus-1.5.8/bus/ibusimpl.c 2014-10-14 12:16:23.182396247 +0900 @@ -1390,11 +1390,12 @@ _ibus_set_global_engine_ready_cb (BusInp @@ -24,65 +24,61 @@ else { g_dbus_method_invocation_return_value (data->invocation, NULL); --- ibus-1.5.8/bus/main.c.orig 2014-10-24 11:41:32.579140912 +0900 -+++ ibus-1.5.8/bus/main.c 2014-10-24 11:41:43.520343867 +0900 ++++ ibus-1.5.8/bus/main.c 2014-12-01 19:12:17.235109849 +0900 @@ -64,7 +64,7 @@ static const GOptionEntry entries[] = { "address", 'a', 0, G_OPTION_ARG_STRING, &g_address, "specify the address of ibus daemon.", "address" }, { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace, "if there is an old ibus-daemon is running, it will be replaced.", NULL }, { "cache", 't', 0, G_OPTION_ARG_STRING, &g_cache, "specify the cache mode. [auto/refresh/none]", NULL }, - { "timeout", 'o', 0, G_OPTION_ARG_INT, &g_gdbus_timeout, "gdbus reply timeout in milliseconds. pass -1 to use the default timeout of gdbus.", "timeout [default is 5000]" }, -+ { "timeout", 'o', 0, G_OPTION_ARG_INT, &g_gdbus_timeout, "gdbus reply timeout in milliseconds. pass -1 to use the default timeout of gdbus.", "timeout [default is 20000]" }, ++ { "timeout", 'o', 0, G_OPTION_ARG_INT, &g_gdbus_timeout, "gdbus reply timeout in milliseconds. pass -1 to use the default timeout of gdbus.", "timeout [default is 15000]" }, { "mem-profile", 'm', 0, G_OPTION_ARG_NONE, &g_mempro, "enable memory profile, send SIGUSR2 to print out the memory profile.", NULL }, { "restart", 'R', 0, G_OPTION_ARG_NONE, &restart, "restart panel and config processes when they die.", NULL }, { "verbose", 'v', 0, G_OPTION_ARG_NONE, &g_verbose, "verbose.", NULL }, --- ibus-1.5.8/src/ibusshare.c.orig 2014-10-22 11:49:55.386913376 +0900 -+++ ibus-1.5.8/src/ibusshare.c 2014-10-24 11:44:15.719249951 +0900 ++++ ibus-1.5.8/src/ibusshare.c 2014-12-01 19:13:01.135009323 +0900 @@ -158,8 +158,9 @@ ibus_get_socket_path (void) gint ibus_get_timeout (void) { - /* 6000 ms is the default timeout on the ibus-daemon side (5 sec) plus 1. */ - static const gint default_timeout = 6000; -+ /* 21000 ms is the default timeout on the ibus-daemon side -+ * (20 sec) plus 1. */ -+ static const gint default_timeout = 21000; ++ /* 16000 ms is the default timeout on the ibus-daemon side ++ * (15 sec) plus 1. */ ++ static const gint default_timeout = 16000; static gint64 timeout = -2; if (timeout == -2) { --- ibus-1.5.8/ui/gtk3/panel.vala.orig 2014-10-22 12:00:37.017604825 +0900 -+++ ibus-1.5.8/ui/gtk3/panel.vala 2014-10-22 15:00:47.742187430 +0900 -@@ -687,14 +687,28 @@ class Panel : IBus.PanelService { - } ++++ ibus-1.5.8/ui/gtk3/panel.vala 2014-11-28 18:49:49.878234966 +0900 +@@ -65,6 +65,8 @@ class Panel : IBus.PanelService { + red = 0.0, green = 0.0, blue = 0.0, alpha = 1.0 }; + private XKBLayout m_xkblayout = new XKBLayout(); + private bool inited_engines_order = true; ++ private uint m_preload_engines_id; ++ private const uint PRELOAD_ENGINES_DELAY_TIME = 30000; - private void set_engine(IBus.EngineDesc engine) { -- if (!m_bus.set_global_engine(engine.get_name())) { -- warning("Switch engine to %s failed.", engine.get_name()); -- return; -- } -+ /* Use async because IBus.Bus.set_global_engine() uses -+ * IBus.get_timeout() internally and the value does not follow -+ * ibus-daemon --timeout. -+ */ -+ m_bus.set_global_engine_async.begin(engine.get_name(), -1, null, -+ (obj, res) => { -+ try { -+ bool result = -+ m_bus.set_global_engine_async_finish(res); -+ if (!result) -+ warning("Switch engine to %s failed.", -+ engine.get_name()); -+ } catch (GLib.Error e) { -+ warning("Switch engine to %s failed.: GLib.Error: %s", -+ engine.get_name(), -+ e.message); -+ } + private GLib.List m_keybindings = new GLib.List(); -- // set xkb layout -- if (!m_use_system_keyboard_layout) -- m_xkblayout.set_layout(engine); -+ // set xkb layout -+ if (!m_use_system_keyboard_layout) -+ m_xkblayout.set_layout(engine); -+ }); +@@ -764,8 +766,21 @@ class Panel : IBus.PanelService { + return; + } - engine_contexts_insert(engine); ++ if (m_preload_engines_id != 0) { ++ GLib.Source.remove(m_preload_engines_id); ++ m_preload_engines_id = 0; ++ } ++ + names += engines[index].get_name(); +- m_bus.preload_engines_async.begin(names, -1, null); ++ m_preload_engines_id = ++ Timeout.add( ++ PRELOAD_ENGINES_DELAY_TIME, ++ () => { ++ m_bus.preload_engines_async.begin(names, ++ -1, ++ null); ++ return false; ++ }); } + + private void update_engines(string[]? unowned_engine_names, diff --git a/ibus.spec b/ibus.spec index c66cd25..6fbea72 100644 --- a/ibus.spec +++ b/ibus.spec @@ -28,7 +28,7 @@ Name: ibus Version: 1.5.9 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ Group: System Environment/Libraries @@ -411,6 +411,11 @@ fi %{_datadir}/gtk-doc/html/* %changelog +* Mon Dec 08 2014 Takao Fujiwara - 1.5.9-6 +- Updated ibus-xx-increase-timeout.patch to fix #1163722 +- Updated ibus-HEAD.patch for upstream #1747, #1748, #1753 + and gnome #703020, gnome #730628 + * Wed Nov 12 2014 Takao Fujiwara - 1.5.9-5 - rhbz#1161871 Added BR of python and python3