From 0425b4e0940dc21ea92fe57c28104cde7c66b196 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 12 Aug 2011 15:01:14 +0900 Subject: [PATCH] Make sure that IBusBus is connected when setting up DBus message filter. --- src/client.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/client.c b/src/client.c index 952617bf..c6739523 100644 --- a/src/client.c +++ b/src/client.c @@ -616,18 +616,14 @@ focus_message_filter (GDBusConnection *connection, return message; } -gboolean -eekboard_client_enable_ibus_focus (EekboardClient *client) +static void +_ibus_connect_focus_handlers (IBusBus *bus, gpointer user_data) { + EekboardClient *client = user_data; GDBusConnection *connection; GError *error; - if (!client->ibus_bus) { - client->ibus_bus = ibus_bus_new (); - g_object_ref_sink (client->ibus_bus); - } - - connection = ibus_bus_get_connection (client->ibus_bus); + connection = ibus_bus_get_connection (bus); add_match_rule (connection, "type='method_call'," "interface='" IBUS_INTERFACE_INPUT_CONTEXT "'," @@ -641,6 +637,22 @@ eekboard_client_enable_ibus_focus (EekboardClient *client) focus_message_filter, client, NULL); +} + +gboolean +eekboard_client_enable_ibus_focus (EekboardClient *client) +{ + if (!client->ibus_bus) { + client->ibus_bus = ibus_bus_new (); + g_object_ref (client->ibus_bus); + g_signal_connect (client->ibus_bus, "connected", + G_CALLBACK(_ibus_connect_focus_handlers), + client); + } + + if (ibus_bus_is_connected (client->ibus_bus)) + _ibus_connect_focus_handlers (client->ibus_bus, client); + client->follows_focus = TRUE; return TRUE; }