From c5705b4c037d7fc14bd38ded069a8437f1256250 Mon Sep 17 00:00:00 2001 From: James Su Date: Fri, 21 May 2010 14:56:36 -0700 Subject: [PATCH] Implement the ability to manipulate the global engine. lib parth. --- src/ibusbus.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ibusbus.h | 53 ++++++++++++++++++++++++++++++++ src/test-bus.c | 16 ++++++++++ 3 files changed, 164 insertions(+) diff --git a/src/ibusbus.c b/src/ibusbus.c index 8de1bbc..b0e60b3 100644 --- a/src/ibusbus.c +++ b/src/ibusbus.c @@ -885,3 +885,98 @@ ibus_bus_get_config (IBusBus *bus) return priv->config; } + +gboolean +ibus_bus_get_use_sys_layout (IBusBus *bus) +{ + g_assert (IBUS_IS_BUS (bus)); + gboolean result; + gboolean use_sys_layout; + + result = ibus_bus_call (bus, + IBUS_SERVICE_IBUS, + IBUS_PATH_IBUS, + IBUS_INTERFACE_IBUS, + "GetUseSysLayout", + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &use_sys_layout, + G_TYPE_INVALID); + + return result && use_sys_layout; +} + +gboolean +ibus_bus_get_use_global_engine (IBusBus *bus) +{ + g_assert (IBUS_IS_BUS (bus)); + gboolean result; + gboolean use_global_engine; + + result = ibus_bus_call (bus, + IBUS_SERVICE_IBUS, + IBUS_PATH_IBUS, + IBUS_INTERFACE_IBUS, + "GetUseGlobalEngine", + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &use_global_engine, + G_TYPE_INVALID); + + return result && use_global_engine; +} + +gboolean +ibus_bus_is_global_engine_enabled (IBusBus *bus) +{ + g_assert (IBUS_IS_BUS (bus)); + gboolean result; + gboolean is_global_engine_enabled; + + result = ibus_bus_call (bus, + IBUS_SERVICE_IBUS, + IBUS_PATH_IBUS, + IBUS_INTERFACE_IBUS, + "IsGlobalEngineEnabled", + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &is_global_engine_enabled, + G_TYPE_INVALID); + + return result && is_global_engine_enabled; +} + +IBusEngineDesc * +ibus_bus_get_global_engine (IBusBus *bus) +{ + g_assert (IBUS_IS_BUS (bus)); + gboolean result; + IBusEngineDesc *global_engine = NULL; + + result = ibus_bus_call (bus, + IBUS_SERVICE_IBUS, + IBUS_PATH_IBUS, + IBUS_INTERFACE_IBUS, + "GetGlobalEngine", + G_TYPE_INVALID, + IBUS_TYPE_ENGINE_DESC, &global_engine, + G_TYPE_INVALID); + + return result ? global_engine : NULL; +} + +gboolean +ibus_bus_set_global_engine (IBusBus *bus, + const gchar *global_engine) +{ + g_assert (IBUS_IS_BUS (bus)); + gboolean result; + + result = ibus_bus_call (bus, + IBUS_SERVICE_IBUS, + IBUS_PATH_IBUS, + IBUS_INTERFACE_IBUS, + "SetGlobalEngine", + G_TYPE_STRING, &global_engine, + G_TYPE_INVALID, + G_TYPE_INVALID); + + return result; +} diff --git a/src/ibusbus.h b/src/ibusbus.h index c86d924..ea88d3c 100644 --- a/src/ibusbus.h +++ b/src/ibusbus.h @@ -257,6 +257,59 @@ GList *ibus_bus_list_engines (IBusBus *bus); */ GList *ibus_bus_list_active_engines (IBusBus *bus); + +/** + * ibus_bus_get_use_sys_layout: + * @bus: An IBusBus. + * @returns: TRUE if "use_sys_layout" option is enabled. + * + * Check if the bus's "use_sys_layout" option is enabled or not. + */ +gboolean ibus_bus_get_use_sys_layout(IBusBus *bus); + +/** + * ibus_bus_get_use_global_engine: + * @bus: An IBusBus. + * @returns: TRUE if "use_global_engine" option is enabled. + * + * Check if the bus's "use_global_engine" option is enabled or not. + */ +gboolean ibus_bus_get_use_global_engine + (IBusBus *bus); + + +/** + * ibus_bus_is_global_engine_enabled: + * @bus: An IBusBus. + * @returns: TRUE if the current global engine is enabled. + * + * Check if the current global engine is enabled or not. + */ +gboolean ibus_bus_is_global_engine_enabled + (IBusBus *bus); + +/** + * ibus_bus_get_global_engine: + * @bus: An IBusBus. + * @returns: The description of current global engine, or NULL if there is no + * global engine. + * + * Get the description of current global engine. + */ +IBusEngineDesc + *ibus_bus_get_global_engine (IBusBus *bus); + +/** + * ibus_bus_set_global_engine: + * @bus: An IBusBus. + * @global_engine: A new engine name. + * @returns: TRUE if the global engine was set successfully. + * + * Set current global engine. + */ +gboolean ibus_bus_set_global_engine (IBusBus *bus, + const gchar *global_engine); + /* declare config apis */ /** * ibus_bus_get_config: diff --git a/src/test-bus.c b/src/test-bus.c index 01d8684..b5f4a6b 100644 --- a/src/test-bus.c +++ b/src/test-bus.c @@ -50,6 +50,22 @@ int main() g_assert (engines); print_engines (engines); g_list_free (engines); + + g_debug ("===== Global engine:"); + if (ibus_bus_get_use_global_engine (bus)) { + g_debug ("use_global_engine is true."); + if (ibus_bus_is_global_engine_enabled (bus)) { + g_debug ("Global engine is enabled."); + IBusEngineDesc *global_engine = ibus_bus_get_global_engine (bus); + g_assert (global_engine); + g_debug ("%s (id:%s, icon:%s)", global_engine->longname, + global_engine->name, global_engine->icon); + g_object_unref (global_engine); + } + } + + g_debug ("===== Use system layout:%s", ibus_bus_get_use_sys_layout (bus) ? "true" : "false"); + g_debug ("Test ibusbus.c: passed."); /* Test ibusinputcontext.c */ -- 2.7.4