diff --git a/ibus-530711-preload-sys.patch b/ibus-530711-preload-sys.patch new file mode 100644 index 0000000..20a766c --- /dev/null +++ b/ibus-530711-preload-sys.patch @@ -0,0 +1,371 @@ +From 8d29b30a2ad09a1e7cf840655e23018d41201436 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 12 Nov 2010 18:03:42 +0900 +Subject: [PATCH] Reload preload engines until users customize the list. + +The idea is, if users don't customize the preload_engines with ibus-setup, +users would prefer to load the system default engines again by login. +The gconf value 'preload_engine_mode' is +IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE by default. +If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE, +ibus-daemon loads the system preload engines by langs. +If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER, +ibus-daemon do not update the gconf value preload_engines. +On the other hand, if users enable the customized engine checkbutton +on ibus-setup, ibus-setup sets 'preload_engine_mode' as +IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value +'preload_engines'. +Loading system default may spend the startup time. If you mind it, +your dist may like to put TRUE in 'use_local_preload_engines' value. +--- + bus/ibusimpl.c | 80 +++++++++++++++++++++++++++++++++++++++++++------- + data/ibus.schemas.in | 13 ++++++++ + ibus/common.py | 4 ++ + setup/main.py | 47 ++++++++++++++++++++++++++--- + setup/setup.ui | 21 +++++++++++-- + src/ibustypes.h | 10 ++++++ + 6 files changed, 156 insertions(+), 19 deletions(-) + +diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c +index 80f0bf0..c0c1a8a 100644 +--- a/bus/ibusimpl.c ++++ b/bus/ibusimpl.c +@@ -133,6 +133,9 @@ static void bus_ibus_impl_set_previous_engine + static void bus_ibus_impl_set_preload_engines + (BusIBusImpl *ibus, + GVariant *value); ++static void bus_ibus_impl_set_preload_engine_mode ++ (BusIBusImpl *ibus, ++ GVariant *value); + static void bus_ibus_impl_set_use_sys_layout + (BusIBusImpl *ibus, + GVariant *value); +@@ -145,6 +148,9 @@ static void bus_ibus_impl_set_enable_by_default + static void bus_ibus_impl_set_use_global_engine + (BusIBusImpl *ibus, + GVariant *value); ++static void bus_ibus_impl_set_default_preload_engines ++ (BusIBusImpl *ibus, ++ gboolean force); + static void bus_ibus_impl_set_global_engine (BusIBusImpl *ibus, + BusEngineProxy *engine); + +@@ -343,6 +349,23 @@ bus_ibus_impl_set_preload_engines (BusIBusImpl *ibus, + } + + static void ++bus_ibus_impl_set_preload_engine_mode (BusIBusImpl *ibus, ++ GVariant *value) ++{ ++ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE; ++ ++ if (value != NULL && g_variant_classify (value) == G_VARIANT_CLASS_INT32) { ++ preload_engine_mode = g_variant_get_int16 (value); ++ } ++ ++ if (preload_engine_mode == IBUS_PRELOAD_ENGINE_MODE_USER) { ++ return; ++ } ++ ++ bus_ibus_impl_set_default_preload_engines (ibus, TRUE); ++} ++ ++static void + bus_ibus_impl_set_use_sys_layout (BusIBusImpl *ibus, + GVariant *value) + { +@@ -405,22 +428,48 @@ _engine_desc_cmp (IBusEngineDesc *desc1, + ((gint) ibus_engine_desc_get_rank (desc2)); + } + ++/* bus_ibus_impl_set_use_sys_layout handles the gconf value ++ * /desktop/ibus/general/preload_engines and preload_engine_mode. ++ * The idea is, if users don't customize the preload_engines with ibus-setup, ++ * users would prefer to load the system default engines again by login. ++ * The gconf value 'preload_engine_mode' is ++ * IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE by default. ++ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE, ++ * ibus-daemon loads the system preload engines by langs. ++ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER, ++ * ibus-daemon do not update the gconf value preload_engines. ++ * On the other hand, if users enable the customized engine checkbutton ++ * on ibus-setup, ibus-setup sets 'preload_engine_mode' as ++ * IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value ++ * 'preload_engines'. ++ * Loading system default may spend the startup time. If you mind it, ++ * your dist may like to put TRUE in 'use_local_preload_engines' value. ++ */ + static void +-bus_ibus_impl_set_default_preload_engines (BusIBusImpl *ibus) ++bus_ibus_impl_set_default_preload_engines (BusIBusImpl *ibus, gboolean force) + { + g_assert (BUS_IS_IBUS_IMPL (ibus)); + ++ GVariant *variant = NULL; + static gboolean done = FALSE; ++ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE; + +- if (done || ibus->config == NULL) { +- return; +- } ++ if (!force) { ++ if (done || ibus->config == NULL) { ++ return; ++ } + +- GVariant *variant = ibus_config_get_value (ibus->config, "general", "preload_engines"); +- if (variant != NULL) { +- done = TRUE; +- g_variant_unref (variant); +- return; ++ variant = ibus_config_get_value (ibus->config, "general", ++ "preload_engine_mode"); ++ if (variant != NULL) { ++ preload_engine_mode = g_variant_get_int32 (variant); ++ g_variant_unref (variant); ++ } ++ ++ if (preload_engine_mode == IBUS_PRELOAD_ENGINE_MODE_USER) { ++ done = TRUE; ++ return; ++ } + } + + done = TRUE; +@@ -466,6 +515,7 @@ const static struct { + { "general/hotkey", "next_engine_in_menu", bus_ibus_impl_set_next_engine_in_menu }, + { "general/hotkey", "previous_engine", bus_ibus_impl_set_previous_engine }, + { "general", "preload_engines", bus_ibus_impl_set_preload_engines }, ++ { "general", "preload_engine_mode", bus_ibus_impl_set_preload_engine_mode }, + { "general", "use_system_keyboard_layout", bus_ibus_impl_set_use_sys_layout }, + { "general", "use_global_engine", bus_ibus_impl_set_use_global_engine }, + { "general", "embed_preedit_text", bus_ibus_impl_set_embed_preedit_text }, +@@ -480,10 +530,18 @@ bus_ibus_impl_reload_config (BusIBusImpl *ibus) + gint i; + for (i = 0; i < G_N_ELEMENTS (bus_ibus_impl_config_items); i++) { + GVariant *variant = NULL; +- if (ibus->config != NULL) ++ ++ if (g_strcmp0 (bus_ibus_impl_config_items[i].section, "general") == 0 && ++ g_strcmp0 (bus_ibus_impl_config_items[i].key, "preload_engine_mode") == 0) { ++ continue; ++ } ++ ++ if (ibus->config != NULL) { + variant = ibus_config_get_value (ibus->config, + bus_ibus_impl_config_items[i].section, + bus_ibus_impl_config_items[i].key); ++ } ++ + bus_ibus_impl_config_items[i].func (ibus, variant); + if (variant) g_variant_unref (variant); + } +@@ -603,7 +661,7 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus, + G_CALLBACK (_config_destroy_cb), + ibus); + +- bus_ibus_impl_set_default_preload_engines (ibus); ++ bus_ibus_impl_set_default_preload_engines (ibus, FALSE); + bus_ibus_impl_reload_config (ibus); + } + } +diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in +index aa66aa5..5956171 100644 +--- a/data/ibus.schemas.in ++++ b/data/ibus.schemas.in +@@ -13,6 +13,19 @@ + + + ++ /schemas/desktop/ibus/general/preload_engine_mode ++ /desktop/ibus/general/preload_engine_mode ++ ibus ++ int ++ 0 ++ ++ Preload engine mode ++ Preload engines are loaded with this mode. ++ 0 = language related engines. ++ 1 = user customized engines. ++ ++ ++ + /schemas/desktop/ibus/general/hotkey/trigger + /desktop/ibus/general/hotkey/trigger + ibus +diff --git a/ibus/common.py b/ibus/common.py +index cbc8d56..3598546 100644 +--- a/ibus/common.py ++++ b/ibus/common.py +@@ -133,6 +133,10 @@ ORIENTATION_HORIZONTAL = 0 + ORIENTATION_VERTICAL = 1 + ORIENTATION_SYSTEM = 2 + ++# define preload engine mode ++PRELOAD_ENGINE_MODE_LANG_RELATIVE = 0 ++PRELOAD_ENGINE_MODE_USER = 1 ++ + def default_reply_handler( *args): + pass + +diff --git a/setup/main.py b/setup/main.py +index 98fa1d1..77fdfb3 100644 +--- a/setup/main.py ++++ b/setup/main.py +@@ -91,6 +91,7 @@ class Setup(object): + # keyboard shortcut + # trigger + self.__config = self.__bus.get_config() ++ self.__config.connect("value-changed", self.__config_value_changed_cb) + shortcuts = self.__config.get_value( + "general/hotkey", "trigger", + ibus.CONFIG_GENERAL_SHORTCUT_TRIGGER_DEFAULT) +@@ -190,15 +191,25 @@ class Setup(object): + self.__checkbutton_use_global_engine.connect("toggled", self.__checkbutton_use_global_engine_toggled_cb) + + # init engine page ++ preload_engine_mode = self.__config.get_value("general", ++ "preload_engine_mode", ++ ibus.common.PRELOAD_ENGINE_MODE_LANG_RELATIVE) ++ button = self.__builder.get_object("checkbutton_preload_engine_mode") ++ if preload_engine_mode == ibus.common.PRELOAD_ENGINE_MODE_USER: ++ button.set_active(True) ++ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(True) ++ else: ++ button.set_active(False) ++ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(False) ++ button.connect("toggled", self.__checkbutton_preload_engine_mode_toggled_cb) ++ self.__wait_update_preload_engines = False ++ + self.__engines = self.__bus.list_engines() + self.__combobox = self.__builder.get_object("combobox_engines") + self.__combobox.set_engines(self.__engines) + +- tmp_dict = {} +- for e in self.__engines: +- tmp_dict[e.name] = e + engine_names = self.__config.get_value("general", "preload_engines", []) +- engines = [tmp_dict[name] for name in engine_names if name in tmp_dict] ++ engines = self.__get_engine_descs_from_names(engine_names) + + self.__treeview = self.__builder.get_object("treeview_engines") + self.__treeview.set_engines(engines) +@@ -240,6 +251,13 @@ class Setup(object): + engine_names = map(lambda e: e.name, engines) + self.__config.set_list("general", "preload_engines", engine_names, "s") + ++ def __get_engine_descs_from_names(self, engine_names): ++ tmp_dict = {} ++ for e in self.__engines: ++ tmp_dict[e.name] = e ++ engines = [tmp_dict[name] for name in engine_names if name in tmp_dict] ++ return engines ++ + def __button_engine_add_cb(self, button): + engine = self.__combobox.get_active_engine() + self.__treeview.append_engine(engine) +@@ -251,6 +269,19 @@ class Setup(object): + about.run() + about.destroy() + ++ def __checkbutton_preload_engine_mode_toggled_cb(self, button): ++ if button.get_active(): ++ self.__config.set_value("general", ++ "preload_engine_mode", ++ ibus.common.PRELOAD_ENGINE_MODE_USER) ++ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(True) ++ else: ++ self.__config.set_value("general", ++ "preload_engine_mode", ++ ibus.common.PRELOAD_ENGINE_MODE_LANG_RELATIVE) ++ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(False) ++ self.__wait_update_preload_engines = True ++ + def __init_bus(self): + try: + self.__bus = ibus.Bus() +@@ -441,7 +472,13 @@ class Setup(object): + self.__config.set_value("general", "use_global_engine", value) + + def __config_value_changed_cb(self, bus, section, name, value): +- pass ++ if section == "general": ++ if name == "preload_engines": ++ if self.__wait_update_preload_engines: ++ engines = self.__get_engine_descs_from_names(value) ++ self.__treeview.set_engines(engines) ++ # treeview update gconf value again ++ self.__wait_update_preload_engines = False + + def __config_reloaded_cb(self, bus): + pass +diff --git a/setup/setup.ui b/setup/setup.ui +index 0e31a78..ef841a0 100644 +--- a/setup/setup.ui ++++ b/setup/setup.ui +@@ -489,7 +489,22 @@ + True + vertical + +- ++ ++ True ++ Customize active input _methods ++ True ++ True ++ False ++ Customize active input methods ++ True ++ ++ ++ False ++ 0 ++ ++ ++ ++ + True + + +@@ -640,7 +655,7 @@ + + + +- 0 ++ 1 + + + +@@ -679,7 +694,7 @@ You may use up/down buttons to change it.</i></small> + + + False +- 1 ++ 2 + + + +diff --git a/src/ibustypes.h b/src/ibustypes.h +index 035d124..dd3806d 100644 +--- a/src/ibustypes.h ++++ b/src/ibustypes.h +@@ -144,6 +144,16 @@ typedef enum { + } IBusOrientation; + + /** ++ * IBusPreloadEngineMode: ++ * @IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE: language related engines. ++ * @IBUS_PRELOAD_ENGINE_MODE_USER: user custimized engines ++ */ ++typedef enum { ++ IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE = 0, ++ IBUS_PRELOAD_ENGINE_MODE_USER = 1, ++} IBusPreloadEngineMode; ++ ++/** + * IBusRectangle: + * @x: x coordinate. + * @y: y coordinate. +-- +1.7.2.1 + diff --git a/ibus-652157-x11-ppc64.patch b/ibus-652157-x11-ppc64.patch new file mode 100644 index 0000000..4f1b0c0 --- /dev/null +++ b/ibus-652157-x11-ppc64.patch @@ -0,0 +1,29 @@ +From cd7385f4cc1e729891bd878db12dfafad397b098 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Thu, 11 Nov 2010 18:09:52 +0900 +Subject: [PATCH] Always read Window as 32 bits integer to fix problem in ppc64. + +--- + client/x11/main.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/client/x11/main.c b/client/x11/main.c +index c91a6d7..be9cb0e 100644 +--- a/client/x11/main.c ++++ b/client/x11/main.c +@@ -277,10 +277,10 @@ _xim_store_ic_values (X11IC *x11ic, IMChangeICStruct *call_data) + x11ic->input_style = *(gint32 *) ic_attr->value; + } + else if (g_strcmp0 (XNClientWindow, ic_attr->name) == 0) { +- x11ic->client_window = *(Window *) call_data->ic_attr[i].value; ++ x11ic->client_window = (Window)(*(CARD32 *) call_data->ic_attr[i].value); + } + else if (g_strcmp0 (XNFocusWindow, ic_attr->name) == 0) { +- x11ic->focus_window = *(Window *) call_data->ic_attr[i].value; ++ x11ic->focus_window = (Window)(*(CARD32 *) call_data->ic_attr[i].value); + } + else { + LOG (1, "Unknown ic attribute: %s", ic_attr->name); +-- +1.7.2.1 + diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index 1acf357..b34e136 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -337,3 +337,42 @@ index 0bb71b5..c06faaa 100644 } gdk_window_get_origin (ibusimcontext->client_window, &x, &y); +diff --git a/configure.ac b/configure.ac +index 2c330fa..a9cd908 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -21,10 +21,6 @@ + # Boston, MA 02111-1307 USA + AC_PREFEQ([2.62]) + +-AC_INIT([ibus], [ibus_version], +- [http://code.google.com/p/ibus/issues/entry], +- [ibus]) +- + AC_CONFIG_HEADERS([config.h]) + AC_CONFIG_MACRO_DIR([m4]) + +@@ -46,6 +42,10 @@ m4_define([ibus_api_version], [1.0]) + m4_define([glib_required_version], [2.26.0]) + + ++AC_INIT([ibus], [ibus_version], ++ [http://code.google.com/p/ibus/issues/entry], ++ [ibus]) ++ + # Init automake + AM_INIT_AUTOMAKE([1.10]) + AM_MAINTAINER_MODE([enable]) +diff --git a/setup/main.py b/setup/main.py +index 978b467..98fa1d1 100644 +--- a/setup/main.py ++++ b/setup/main.py +@@ -69,7 +69,7 @@ class Setup(object): + super(Setup, self).__init__() + gtk_builder_file = path.join(path.dirname(__file__), "./setup.ui") + self.__builder = gtk.Builder() +- self.__builder.set_translation_domain("ibus") ++ self.__builder.set_translation_domain("ibus10") + self.__builder.add_from_file(gtk_builder_file); + self.__bus = None + self.__init_bus() diff --git a/ibus.spec b/ibus.spec index 93f8244..2860160 100644 --- a/ibus.spec +++ b/ibus.spec @@ -12,7 +12,7 @@ Name: ibus Version: 1.3.99.20101028 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ Group: System Environment/Libraries @@ -20,9 +20,10 @@ URL: http://code.google.com/p/ibus/ Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz Source1: xinput-ibus Patch0: ibus-HEAD.patch -# Patch1: ibus-530711-preload-sys.patch -Patch2: ibus-541492-xkb.patch -Patch3: ibus-435880-surrounding-text.patch +Patch1: ibus-652157-x11-ppc64.patch +Patch2: ibus-530711-preload-sys.patch +Patch3: ibus-541492-xkb.patch +Patch4: ibus-435880-surrounding-text.patch # WORKAROUND_GTK3_BUILD_FAILURE @ fedora14 Patch99: ibus-xx-workaround-gtk3.patch @@ -131,11 +132,12 @@ The ibus-devel-docs package contains developer documentation for ibus %prep %setup -q %patch0 -p1 -# %patch1 -p1 -b .preload-sys +%patch1 -p1 -b .ppc64 +%patch2 -p1 -b .preload-sys %if %have_libxkbfile -%patch2 -p1 -b .xkb +%patch3 -p1 -b .xkb %endif -%patch3 -p1 -b .surrounding +%patch4 -p1 -b .surrounding #### start WORKAROUND_GTK3_BUILD_FAILURE WORKAROUND_GTK3_BUILD_FAILURE=0 @@ -166,6 +168,7 @@ automake -a -c -f --enable-gtk3 \ --enable-xim \ --disable-gtk-doc \ + --with-no-snooper-apps='gnome-do,Do.*,firefox.*,.*chrome.*,.*chromium.*' \ --enable-introspection # make -C po update-gmo @@ -307,6 +310,15 @@ fi %{_datadir}/gtk-doc/html/* %changelog +* Fri Oct 29 2010 Takao Fujiwara - 1.3.99.20101028-2 +- Added ibus-652157-x11-ppc64.patch + Fixes Bug 652157 - Window position of ibus-x11 in ppc64 +- Added ibus-530711-preload-sys.patch + Fixes Bug 530711 - Reload preloaded engines by login +- Updated ibus-HEAD.patch + Fixes ibus.get_version & gettext domain for gtkbuilder +- Applied no-snooper for 'gnome-do,Do.*,firefox.*,.*chrome.*,.*chromium.*' + * Fri Oct 29 2010 Takao Fujiwara - 1.3.99.20101028-1 - Updated to 1.3.99.20101028 - Integrated gdbus