summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2009-02-10 10:17:01 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2009-02-10 10:17:01 +0800
commit566270731276e9028350dd90b6982c865490f243 (patch)
tree316e18e36e162f33855d969f87a1481d218de9b6 /src
parent30bff4867177ec439cb210a016e2dd416ebab963 (diff)
downloadibus-566270731276e9028350dd90b6982c865490f243.tar.gz
ibus-566270731276e9028350dd90b6982c865490f243.tar.xz
ibus-566270731276e9028350dd90b6982c865490f243.zip
Do not use glib main loop in ibus_input_context_process_key function.
Diffstat (limited to 'src')
-rw-r--r--src/ibusconnection.c22
-rw-r--r--src/ibusconnection.h2
-rw-r--r--src/ibusinputcontext.c5
3 files changed, 24 insertions, 5 deletions
diff --git a/src/ibusconnection.c b/src/ibusconnection.c
index 90776cd..4821d6d 100644
--- a/src/ibusconnection.c
+++ b/src/ibusconnection.c
@@ -370,6 +370,16 @@ ibus_connection_get_connection (IBusConnection *connection)
return priv->connection;
}
+gboolean
+ibus_connection_read_write_dispatch (IBusConnection *connection,
+ gint timeout)
+{
+ IBusConnectionPrivate *priv;
+ priv = IBUS_CONNECTION_GET_PRIVATE (connection);
+
+ return dbus_connection_read_write_dispatch (priv->connection, timeout);
+}
+
typedef struct _VTableCallData {
IBusMessageFunc message_func;
gpointer user_data;
@@ -558,10 +568,14 @@ ibus_connection_send_with_reply (IBusConnection *connection,
IBusConnectionPrivate *priv;
priv = IBUS_CONNECTION_GET_PRIVATE (connection);
- return dbus_connection_send_with_reply (priv->connection,
- message,
- pending_return,
- timeout_milliseconds);
+ gboolean retval;
+
+ retval = dbus_connection_send_with_reply (priv->connection,
+ message,
+ pending_return,
+ timeout_milliseconds);
+
+ return retval;
}
IBusMessage *
diff --git a/src/ibusconnection.h b/src/ibusconnection.h
index e4a70f7..5a8e099 100644
--- a/src/ibusconnection.h
+++ b/src/ibusconnection.h
@@ -94,6 +94,8 @@ IBusConnection *ibus_connection_open_private (const gchar *address
void ibus_connection_close (IBusConnection *connection);
gboolean ibus_connection_is_connected (IBusConnection *connection);
DBusConnection *ibus_connection_get_connection (IBusConnection *connection);
+gboolean ibus_connection_read_write_dispatch(IBusConnection *connection,
+ gint timeout);
gboolean ibus_connection_send (IBusConnection *connection,
IBusMessage *message);
gboolean ibus_connection_send_signal (IBusConnection *connection,
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
index 71de8fb..94de55a 100644
--- a/src/ibusinputcontext.c
+++ b/src/ibusinputcontext.c
@@ -573,7 +573,10 @@ ibus_input_context_process_key_event (IBusInputContext *context,
}
/* wait reply or timeout */
- ibus_pending_call_wait (pending);
+ IBusConnection *connection = ibus_proxy_get_connection ((IBusProxy *) context);
+ while (!ibus_pending_call_get_completed (pending)) {
+ ibus_connection_read_write_dispatch (connection, -1);
+ }
reply_message = ibus_pending_call_steal_reply (pending);
ibus_pending_call_unref (pending);