Implement the ability to manipulate the global engine. lib parth.
authorJames Su <james.su@gmail.com>
Fri, 21 May 2010 21:56:36 +0000 (14:56 -0700)
committerPeng Huang <shawn.p.huang@gmail.com>
Tue, 1 Jun 2010 03:39:37 +0000 (11:39 +0800)
src/ibusbus.c
src/ibusbus.h
src/test-bus.c

index 8de1bbc..b0e60b3 100644 (file)
@@ -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;
+}
index c86d924..ea88d3c 100644 (file)
@@ -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:
index 01d8684..b5f4a6b 100644 (file)
@@ -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 */