public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Takao Fujiwara <tfujiwar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/ibus] autotool: Fixed Bug 683484 - Timed out SetEngine when select an engine from panel.
Date: Sun, 31 May 2026 02:05:06 GMT [thread overview]
Message-ID: <178019310606.1.3465389493217357856.rpms-ibus-1640e30cdc4d@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/ibus
Branch : autotool
Commit : 1640e30cdc4d26a9247f6a74885c51f355433a7b
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date : 2011-03-17T17:33:47+09:00
Stats : +314/-16 in 5 file(s)
URL : https://src.fedoraproject.org/rpms/ibus/c/1640e30cdc4d26a9247f6a74885c51f355433a7b?branch=autotool
Log:
Fixed Bug 683484 - Timed out SetEngine when select an engine from panel.
---
diff --git a/.gitignore b/.gitignore
index a0e8a7a..bcd246c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,4 @@ ibus-1.3.6.tar.gz
/ibus-1.3.99.20110206.tar.gz
/ibus-ui-gjs-plugins-20110214.tar.bz2
/ibus-1.3.99.20110228.tar.gz
-/gnome-shell-ibus-plugins-20110304.tar.bz2
+/gnome-shell-ibus-plugins-20110317.tar.bz2
diff --git a/ibus-657165-panel-libs.patch b/ibus-657165-panel-libs.patch
index 401ebc2..b7b5b73 100644
--- a/ibus-657165-panel-libs.patch
+++ b/ibus-657165-panel-libs.patch
@@ -35,7 +35,7 @@ Subject: [PATCH] Implement APIs for another non-Python panel.
src/ibustext.c | 18 ++
src/ibustext.h | 29 +++-
src/ibustypes.h | 33 +++
- src/ibusutil.c | 169 ++++++++++++++++
+ src/ibusutil.c | 180 ++++++++++++++++
src/ibusutil.h | 39 ++++
ui/gtk/gtkpanel.xml.in.in | 2 +-
ui/gtk/main.py | 23 ++-
@@ -704,18 +704,14 @@ diff --git a/bus/marshalers.list b/bus/marshalers.list
index 15bdf02..514d6ea 100644
--- a/bus/marshalers.list
+++ b/bus/marshalers.list
-@@ -5,9 +5,10 @@ VOID:INT,UINT
- VOID:UINT,UINT,UINT
+@@ -4,6 +4,7 @@ VOID:INT,UINT
VOID:INT,INT,INT,INT
- VOID:STRING,INT
--VOID:OBJECT
- VOID:STRING,STRING,STRING
-+VOID:OBJECT
+ VOID:OBJECT
VOID:OBJECT,BOOLEAN
+VOID:OBJECT,STRING
VOID:OBJECT,UINT,BOOLEAN
VOID:OBJECT,UINT,BOOLEAN,UINT
- BOOL:UINT,UINT,UINT
+ VOID:STRING
diff --git a/ibus/common.py b/ibus/common.py
index cbc8d56..614d782 100644
--- a/ibus/common.py
@@ -1146,7 +1142,7 @@ new file mode 100644
index 0000000..59291f9
--- /dev/null
+++ b/src/ibusutil.c
-@@ -0,0 +1,169 @@
+@@ -0,0 +1,180 @@
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/* vim:set et sts=4: */
+/* bus - The Input Bus
@@ -1176,6 +1172,7 @@ index 0000000..59291f9
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
++#include <string.h>
+#include "ibusxml.h"
+
+#ifdef ENABLE_NLS
@@ -1267,11 +1264,21 @@ index 0000000..59291f9
+const gchar *
+ibus_get_language_name(const gchar *_locale) {
+ const gchar *retval;
++ gchar *p = NULL;
++ gchar *lang = NULL;
+
+ if (__languages_dict == NULL ) {
+ _load_lang();
+ }
-+ retval = (const gchar *) g_hash_table_lookup (__languages_dict, _locale);
++ if ((p = strchr (_locale, '_')) != NULL) {
++ p = g_strndup (_locale, p - _locale);
++ } else {
++ p = g_strdup (_locale);
++ }
++ lang = g_ascii_strdown (p, -1);
++ g_free (p);
++ retval = (const gchar *) g_hash_table_lookup (__languages_dict, lang);
++ g_free (lang);
+ if (retval != NULL) {
+#ifdef ENABLE_NLS
+ return dgettext("iso_639", retval);
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 5336954..3b0f1e5 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -94,3 +94,292 @@ index a2967cc..16104de 100644
--
1.7.4.1
+From b9b2c42596e1a7394e89c11025074aed2fcb099a Mon Sep 17 00:00:00 2001
+From: Peng Huang <shawn.p.huang@gmail.com>
+Date: Wed, 16 Mar 2011 10:02:47 -0400
+Subject: [PATCH] Fix issue of InputContext.SetEngine.
+
+InputContext.SetEngine returns error sometimes, because "request-engine"
+signal handler calls an async function to set the engine of the context.
+So checking context->engine != NULL just after emiting "request-engine"
+signal is not correct.
+
+BUG=none
+TEST=Linux desktop
+
+Review URL: http://codereview.appspot.com/4287049
+---
+ bus/ibusimpl.c | 68 ++++++++++++++++++++++++-----------
+ bus/inputcontext.c | 97 +++++++++++++++++++++++++++++++++++++++++++--------
+ bus/marshalers.list | 14 ++++----
+ 3 files changed, 136 insertions(+), 43 deletions(-)
+
+diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
+index 8d4ec36..5a8e134 100644
+--- a/bus/ibusimpl.c
++++ b/bus/ibusimpl.c
+@@ -186,6 +186,9 @@ static BusInputContext
+ (BusIBusImpl *ibus,
+ BusConnection *connection,
+ const gchar *client);
++static IBusEngineDesc
++ *bus_ibus_impl_get_engine_desc (BusIBusImpl *ibus,
++ const gchar *engine_name);
+ /* some callback functions */
+ static void _context_engine_changed_cb (BusInputContext *context,
+ BusIBusImpl *ibus);
+@@ -975,21 +978,30 @@ _find_engine_desc_by_name (BusIBusImpl *ibus,
+ *
+ * A callback function to be called when the "request-engine" signal is sent to the context.
+ */
+-static void
++static IBusEngineDesc *
+ _context_request_engine_cb (BusInputContext *context,
+ const gchar *engine_name,
+ BusIBusImpl *ibus)
+ {
+- IBusEngineDesc *desc = NULL;
++ return bus_ibus_impl_get_engine_desc (ibus, engine_name);
++}
+
+- /* context should has focus before request an engine */
+- g_return_if_fail (bus_input_context_has_focus (context) ||
+- context == ibus->focused_context);
++/**
++ * bus_ibus_impl_get_engine_desc:
++ *
++ * Get the IBusEngineDesc by engine_name. If the engine_name is NULL, return
++ * a default engine desc.
++ */
++static IBusEngineDesc *
++bus_ibus_impl_get_engine_desc (BusIBusImpl *ibus,
++ const gchar *engine_name)
++{
++ IBusEngineDesc *desc = NULL;
+
+ if (engine_name != NULL && engine_name[0] != '\0') {
+ /* request engine by name */
+ desc = _find_engine_desc_by_name (ibus, engine_name);
+- g_return_if_fail (desc != NULL);
++ g_return_val_if_fail (desc != NULL, NULL);
+ }
+ else {
+ /* Use global engine if possible. */
+@@ -1018,11 +1030,11 @@ _context_request_engine_cb (BusInputContext *context,
+ * not find any default engines. another possiblity is that the
+ * user hasn't installed an engine yet? just give up. */
+ g_warning ("No engine is available. Run ibus-setup first.");
+- return;
++ return NULL;
+ }
+ }
+
+- bus_ibus_impl_set_context_engine_from_desc (ibus, context, desc);
++ return desc;
+ }
+
+ /**
+@@ -1041,7 +1053,11 @@ bus_ibus_impl_context_request_next_engine_in_menu (BusIBusImpl *ibus,
+
+ engine = bus_input_context_get_engine (context);
+ if (engine == NULL) {
+- _context_request_engine_cb (context, NULL, ibus);
++ desc = bus_ibus_impl_get_engine_desc (ibus, NULL);
++ if (desc != NULL)
++ bus_ibus_impl_set_context_engine_from_desc (ibus,
++ context,
++ desc);
+ return;
+ }
+
+@@ -1112,7 +1128,14 @@ bus_ibus_impl_context_request_previous_engine (BusIBusImpl *ibus,
+ bus_ibus_impl_context_request_next_engine_in_menu (ibus, context);
+ return;
+ }
+- _context_request_engine_cb (context, engine_name, ibus);
++
++ IBusEngineDesc *desc = NULL;
++ desc = bus_ibus_impl_get_engine_desc (ibus, engine_name);
++ if (desc != NULL) {
++ bus_ibus_impl_set_context_engine_from_desc (ibus,
++ context,
++ desc);
++ }
+ }
+
+ static void
+diff --git a/bus/inputcontext.c b/bus/inputcontext.c
+index c226a20..6d65830 100644
+--- a/bus/inputcontext.c
++++ b/bus/inputcontext.c
+@@ -20,11 +20,13 @@
+ * Boston, MA 02111-1307, USA.
+ */
+ #include "inputcontext.h"
+-#include "types.h"
+-#include "marshalers.h"
+-#include "ibusimpl.h"
++
+ #include "engineproxy.h"
+ #include "factoryproxy.h"
++#include "ibusimpl.h"
++#include "marshalers.h"
++#include "option.h"
++#include "types.h"
+
+ struct _SetEngineByDescData {
+ /* context related to the data */
+@@ -565,8 +567,8 @@ bus_input_context_class_init (BusInputContextClass *class)
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+- bus_marshal_VOID__STRING,
+- G_TYPE_NONE,
++ bus_marshal_OBJECT__STRING,
++ IBUS_TYPE_ENGINE_DESC,
+ 1,
+ G_TYPE_STRING);
+
+@@ -917,6 +919,26 @@ _ic_is_enabled (BusInputContext *context,
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", context->enabled));
+ }
+
++static void
++_ic_set_engine_done (BusInputContext *context,
++ GAsyncResult *res,
++ GDBusMethodInvocation *invocation)
++{
++ gboolean retval = FALSE;
++ GError *error = NULL;
++
++ retval = bus_input_context_set_engine_by_desc_finish (context,
++ res, &error);
++
++ if (!retval) {
++ g_dbus_method_invocation_return_gerror (invocation, error);
++ g_error_free (error);
++ }
++ else {
++ g_dbus_method_invocation_return_value (invocation, NULL);
++ }
++}
++
+ /**
+ * _ic_set_engine:
+ *
+@@ -930,16 +952,34 @@ _ic_set_engine (BusInputContext *context,
+ gchar *engine_name = NULL;
+ g_variant_get (parameters, "(&s)", &engine_name);
+
+- g_signal_emit (context, context_signals[REQUEST_ENGINE], 0, engine_name);
+-
+- if (context->engine == NULL) {
+- g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
+- "Can not find engine '%s'.", engine_name);
++ if (!bus_input_context_has_focus (context)) {
++ g_dbus_method_invocation_return_error (invocation,
++ G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
++ "Context which does not has focus can not change engine to %s.",
++ engine_name);
++ return;
+ }
+- else {
+- bus_input_context_enable (context);
+- g_dbus_method_invocation_return_value (invocation, NULL);
++
++ IBusEngineDesc *desc = NULL;
++ g_signal_emit (context,
++ context_signals[REQUEST_ENGINE], 0,
++ engine_name,
++ &desc);
++ if (desc == NULL) {
++ g_dbus_method_invocation_return_error (invocation,
++ G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
++ "Can not find engine %s.", engine_name);
++ return;
+ }
++
++ bus_input_context_set_engine_by_desc (context,
++ desc,
++ g_gdbus_timeout,
++ NULL,
++ (GAsyncReadyCallback)_ic_set_engine_done,
++ invocation);
++
++ g_object_unref (desc);
+ }
+
+ /**
+@@ -1045,7 +1085,21 @@ bus_input_context_focus_in (BusInputContext *context)
+
+ if (context->engine == NULL && context->enabled) {
+ /* request an engine, e.g. a global engine if the feature is enabled. */
+- g_signal_emit (context, context_signals[REQUEST_ENGINE], 0, NULL);
++ IBusEngineDesc *desc = NULL;
++ g_signal_emit (context,
++ context_signals[REQUEST_ENGINE], 0,
++ NULL,
++ &desc);
++
++ if (desc != NULL) {
++ bus_input_context_set_engine_by_desc (context,
++ desc,
++ g_gdbus_timeout, /* timeout in msec. */
++ NULL, /* we do not cancel the call. */
++ NULL, /* use the default callback function. */
++ NULL);
++ g_object_unref (desc);
++ }
+ }
+
+ if (context->engine && context->enabled) {
+@@ -1927,7 +1981,20 @@ bus_input_context_enable (BusInputContext *context)
+ }
+
+ if (context->engine == NULL) {
+- g_signal_emit (context, context_signals[REQUEST_ENGINE], 0, NULL);
++ IBusEngineDesc *desc = NULL;
++ g_signal_emit (context,
++ context_signals[REQUEST_ENGINE], 0,
++ NULL,
++ &desc);
++ if (desc != NULL) {
++ bus_input_context_set_engine_by_desc (context,
++ desc,
++ g_gdbus_timeout, /* timeout in msec. */
++ NULL, /* we do not cancel the call. */
++ NULL, /* use the default callback function. */
++ NULL);
++ g_object_unref (desc);
++ }
+ }
+
+ if (context->engine == NULL)
+diff --git a/bus/marshalers.list b/bus/marshalers.list
+index 15bdf02..159bc24 100644
+--- a/bus/marshalers.list
++++ b/bus/marshalers.list
+@@ -1,13 +1,13 @@
+-VOID:VOID
+-VOID:STRING
+-VOID:OBJECT
++BOOL:UINT,UINT,UINT
++OBJECT:STRING
+ VOID:INT,UINT
+-VOID:UINT,UINT,UINT
+ VOID:INT,INT,INT,INT
+-VOID:STRING,INT
+ VOID:OBJECT
+-VOID:STRING,STRING,STRING
+ VOID:OBJECT,BOOLEAN
+ VOID:OBJECT,UINT,BOOLEAN
+ VOID:OBJECT,UINT,BOOLEAN,UINT
+-BOOL:UINT,UINT,UINT
++VOID:STRING
++VOID:STRING,INT
++VOID:STRING,STRING,STRING
++VOID:UINT,UINT,UINT
++VOID:VOID
+--
+1.7.4.1
+
diff --git a/ibus.spec b/ibus.spec
index c2829c2..d96152f 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -13,7 +13,7 @@
Name: ibus
Version: 1.3.99.20110228
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
Group: System Environment/Libraries
@@ -21,7 +21,7 @@ URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
Source1: xinput-ibus
%if %have_gjsfile
-Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110304.tar.bz2
+Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110317.tar.bz2
%endif
Patch0: ibus-HEAD.patch
Patch1: ibus-435880-surrounding-text.patch
@@ -327,8 +327,10 @@ fi
%{_datadir}/gtk-doc/html/*
%changelog
-* Fri Mar 11 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110228-2
-- Revised ibus-530711-preload-sys.patch
+* Thu Mar 17 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110228-3
+- Updated ibus-HEAD.patch
+ Fixed Bug 683484 - Timed out SetEngine when select an engine from panel.
+- Updated ibus-657165-panel-libs.patch
* Thu Mar 10 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110228-1
- Updated to 1.3.99.20110228
diff --git a/sources b/sources
index 9151a4a..617504f 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
223ce787c5357f833ba34cdaf502ef76 ibus-1.3.99.20110228.tar.gz
-3d97318591cfb2aa82f97db3f3a5a7f2 gnome-shell-ibus-plugins-20110304.tar.bz2
+2d6991ca7d3147aa486b6297872bed5f gnome-shell-ibus-plugins-20110317.tar.bz2
reply other threads:[~2026-05-31 2:05 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178019310606.1.3465389493217357856.rpms-ibus-1640e30cdc4d@fedoraproject.org \
--to=tfujiwar@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox