[gnome-settings-daemon] keyboard: Use the async IBus global engine setter
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] keyboard: Use the async IBus global engine setter
- Date: Thu, 13 Sep 2012 12:37:45 +0000 (UTC)
commit 205c8afa75b5e9b2abeea709f4886558f189bcc5
Author: Rui Matos <tiagomatos gmail com>
Date: Tue Sep 11 15:17:37 2012 +0200
keyboard: Use the async IBus global engine setter
https://bugzilla.gnome.org/show_bug.cgi?id=683798
plugins/keyboard/gsd-keyboard-manager.c | 49 +++++++++++++++++++++++++++---
1 files changed, 44 insertions(+), 5 deletions(-)
---
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index de5080d..e0e3a70 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -115,6 +115,8 @@ static gboolean apply_input_sources_settings (GSettings *setti
gpointer keys,
gint n_keys,
GsdKeyboardManager *manager);
+static void set_gtk_im_module (GsdKeyboardManager *manager,
+ const gchar *new_module);
G_DEFINE_TYPE (GsdKeyboardManager, gsd_keyboard_manager, G_TYPE_OBJECT)
@@ -346,6 +348,46 @@ got_bus (GObject *object,
}
static void
+set_ibus_engine_finish (GObject *object,
+ GAsyncResult *res,
+ GsdKeyboardManager *manager)
+{
+ gboolean result;
+ IBusBus *ibus = IBUS_BUS (object);
+ GsdKeyboardManagerPrivate *priv = manager->priv;
+ GError *error = NULL;
+
+ g_clear_object (&priv->ibus_cancellable);
+
+ result = ibus_bus_set_global_engine_async_finish (ibus, res, &error);
+ if (!result) {
+ g_warning ("Couldn't set IBus engine: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ set_gtk_im_module (manager, GTK_IM_MODULE_IBUS);
+}
+
+static void
+set_ibus_engine (GsdKeyboardManager *manager,
+ const gchar *engine_id)
+{
+ GsdKeyboardManagerPrivate *priv = manager->priv;
+
+ g_cancellable_cancel (priv->ibus_cancellable);
+ g_clear_object (&priv->ibus_cancellable);
+ priv->ibus_cancellable = g_cancellable_new ();
+
+ ibus_bus_set_global_engine_async (priv->ibus,
+ engine_id,
+ -1,
+ priv->ibus_cancellable,
+ (GAsyncReadyCallback)set_ibus_engine_finish,
+ manager);
+}
+
+static void
set_ibus_xkb_engine (GsdKeyboardManager *manager,
const gchar *xkb_id)
{
@@ -359,7 +401,7 @@ set_ibus_xkb_engine (GsdKeyboardManager *manager,
if (!engine)
return;
- ibus_bus_set_global_engine (priv->ibus, ibus_engine_desc_get_name (engine));
+ set_ibus_engine (manager, ibus_engine_desc_get_name (engine));
}
#endif /* HAVE_IBUS */
@@ -803,10 +845,7 @@ apply_input_sources_settings (GSettings *settings,
goto exit;
}
- if (ibus_bus_set_global_engine (priv->ibus, id))
- set_gtk_im_module (manager, GTK_IM_MODULE_IBUS);
- else
- g_warning ("Couldn't set IBus engine '%s'", id);
+ set_ibus_engine (manager, id);
#else
g_warning ("IBus input source type specified but IBus support was not compiled");
goto exit;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]