static void ibus_input_context_real_destroy (IBusInputContext *context) { IBusInputContextPrivate *priv; priv = IBUS_INPUT_CONTEXT_GET_PRIVATE (context); if (priv->own && ibus_proxy_get_connection ((IBusProxy *) context) != NULL) { ibus_proxy_call (IBUS_PROXY (context), "Destroy", G_TYPE_INVALID); } IBUS_OBJECT_CLASS(ibus_input_context_parent_class)->destroy (IBUS_OBJECT (context)); }
IBusProxy * ibus_proxy_new (const gchar *name, const gchar *path, IBusConnection *connection) { g_assert (name != NULL); g_assert (path != NULL); g_assert (IBUS_IS_CONNECTION (connection)); IBusProxy *proxy; proxy = IBUS_PROXY (g_object_new (IBUS_TYPE_PROXY, "name", name, "path", path, "connection", connection, NULL)); return proxy; }
static GObject * ibus_proxy_constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params) { GObject *obj; IBusProxy *proxy; IBusProxyPrivate *priv; obj = G_OBJECT_CLASS (ibus_proxy_parent_class)->constructor (type, n_construct_params, construct_params); proxy = IBUS_PROXY (obj); priv = IBUS_PROXY_GET_PRIVATE (proxy); if (priv->connection == NULL) { g_object_unref (proxy); return NULL; } if (priv->name != NULL) { IBusError *error; gchar *rule; if (ibus_proxy_get_unique_name (proxy) == NULL) { g_object_unref (proxy); return NULL; } rule = g_strdup_printf ("type='signal'," "sender='" DBUS_SERVICE_DBUS "'," "path='" DBUS_PATH_DBUS "'," "interface='" DBUS_INTERFACE_DBUS "'," "member='NameOwnerChanged'," "arg0='%s'", priv->unique_name); if (!ibus_connection_call (priv->connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "AddMatch", &error, G_TYPE_STRING, &rule, G_TYPE_INVALID, G_TYPE_INVALID)) { g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); } g_free (rule); rule = g_strdup_printf ("type='signal'," "sender='%s'," "path='%s'", priv->unique_name, priv->path); if (!ibus_connection_call (priv->connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "AddMatch", &error, G_TYPE_STRING, &rule, G_TYPE_INVALID, G_TYPE_INVALID)) { g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); } g_free (rule); } g_signal_connect (priv->connection, "ibus-signal", (GCallback) _connection_ibus_signal_cb, proxy); g_signal_connect (priv->connection, "destroy", (GCallback) _connection_destroy_cb, proxy); return obj; }
int main() { g_type_init (); IBusBus *bus; GList *engines; gchar *active_engine_name; bus = ibus_bus_new (); /* Test ibusbus.c */ g_debug ("===== Active engines:"); engines = ibus_bus_list_active_engines (bus); g_assert (engines); active_engine_name = get_last_engine_id (engines); print_engines (engines); g_list_free (engines); g_debug ("===== All engines:"); engines = ibus_bus_list_engines (bus); 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 */ #if 1 { IBusInputContext *context; IBusEngineDesc *engine_desc; gchar *current_ic; context = ibus_bus_create_input_context (bus, "test"); ibus_input_context_set_capabilities (context, IBUS_CAP_FOCUS); ibus_input_context_disable (context); g_assert (ibus_input_context_is_enabled (context) == FALSE); ibus_input_context_enable (context); g_assert (ibus_input_context_is_enabled (context) == TRUE); ibus_input_context_focus_in (context); ibus_input_context_set_engine (context, active_engine_name); current_ic = ibus_bus_current_input_context (bus); g_assert (!strcmp (current_ic, ibus_proxy_get_path (IBUS_PROXY (context)))); engine_desc = ibus_input_context_get_engine (context); g_assert (engine_desc); g_assert (!strcmp (active_engine_name, engine_desc->name)); g_debug ("Test ibusinputcontext.c: passed."); g_free (active_engine_name); g_free (current_ic); g_object_unref (engine_desc); g_object_unref (context); } #endif g_object_unref (bus); return 0; }