static void ibus_bus_watch_dbus_signal (IBusBus *bus) { g_assert (IBUS_IS_BUS (bus)); const gchar *rule; rule = "type='signal'," \ "path='" DBUS_PATH_DBUS "'," \ "interface='" DBUS_INTERFACE_DBUS "'"; ibus_bus_add_match (bus, rule); }
static void ibus_bus_connect (IBusBus *bus) { IBusBusPrivate *priv; priv = IBUS_BUS_GET_PRIVATE (bus); /* destry old connection at first */ if (priv->connection != NULL) { ibus_object_destroy ((IBusObject *)priv->connection); g_assert (priv->connection == NULL); } if (ibus_get_address () != NULL) { priv->connection = ibus_connection_open (ibus_get_address ()); } if (priv->connection) { ibus_bus_hello (bus); g_signal_connect (priv->connection, "destroy", (GCallback) _connection_destroy_cb, bus); g_signal_emit (bus, bus_signals[CONNECTED], 0); if (priv->watch_dbus_signal) { ibus_bus_watch_dbus_signal (bus); } /** Watch ibus signals. */ const gchar *rule = "type='signal'," "path='" IBUS_PATH_IBUS "'," "interface='" IBUS_INTERFACE_IBUS "'"; ibus_bus_add_match (bus, rule); g_signal_connect (priv->connection, "ibus-signal", (GCallback) _connection_ibus_signal_cb, bus); } }