IBusConnection * ibus_connection_open_private (const gchar *address) { g_assert (address != NULL); DBusError error; DBusConnection *dbus_connection; IBusConnection *connection; dbus_error_init (&error); dbus_connection = dbus_connection_open_private (address, &error); if (dbus_connection == NULL) { g_warning ("Connect to %s failed. %s.", address, error.message); dbus_error_free (&error); return NULL; } connection = ibus_connection_new (); ibus_connection_set_connection (connection, dbus_connection, FALSE); return connection; }
IBusConnection * ibus_connection_open (const gchar *address) { g_assert (address != NULL); DBusError error; DBusConnection *dbus_connection; IBusConnection *connection; if (_connections == NULL) { _connections = g_hash_table_new (g_direct_hash, g_direct_equal); } dbus_error_init (&error); dbus_connection = dbus_connection_open (address, &error); if (dbus_connection == NULL) { g_warning ("Connect to %s failed: %s.", address, error.message); dbus_error_free (&error); return NULL; } connection = g_hash_table_lookup (_connections, dbus_connection); if (connection == NULL) { connection = ibus_connection_new (); g_object_ref_sink (connection); ibus_connection_set_connection (connection, dbus_connection, TRUE); g_hash_table_insert (_connections, dbus_connection, connection); g_signal_connect (connection, "destroy", G_CALLBACK (_connection_destroy_cb), dbus_connection); } dbus_connection_unref (dbus_connection); g_object_ref_sink (connection); return connection; }