From ab14024d10c136a50348caf4faacfa655e57a9c1 Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Mon, 6 Aug 2012 01:35:53 +0200 Subject: forward port changes from maliit's glib-connection --- meego/meego-im-connector.c | 62 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) (limited to 'meego/meego-im-connector.c') diff --git a/meego/meego-im-connector.c b/meego/meego-im-connector.c index d316235..c1ca0de 100644 --- a/meego/meego-im-connector.c +++ b/meego/meego-im-connector.c @@ -18,8 +18,18 @@ #include +#define DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" +#define DBUS_PROPERTIES_GET_METHOD "Get" + #define MEEGO_IM_SOCKET_PATH "unix:path=/tmp/meego-im-uiserver/imserver_dbus" +#define MALIIT_SERVER_ADDRESS_ENV "MALIIT_SERVER_ADDRESS" + +#define MALIIT_SERVER_NAME "org.maliit.server" +#define MALIIT_SERVER_OBJECT_PATH "/org/maliit/server/address" +#define MALIIT_SERVER_INTERFACE "org.maliit.Server.Address" +#define MALIIT_SERVER_ADDRESS_PROPERTY "address" + MeegoImConnector *meego_im_connector_new(); static gboolean @@ -39,6 +49,51 @@ connection_dropped(gpointer instance, MeegoImConnector *connector) try_reconnect(connector); } +static char * +get_dbus_address() +{ + const char *overridden_address = g_getenv(MALIIT_SERVER_ADDRESS_ENV); + + if (overridden_address && *overridden_address) { + return g_strdup(overridden_address); + } + + GValue value = { 0 }; + GError *error = NULL; + DBusGConnection *connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + + if (!connection) { + g_warning("%s: %s", __PRETTY_FUNCTION__, error->message); + g_error_free(error); + return NULL; + } + + DBusGProxy *proxy = dbus_g_proxy_new_for_name(connection, + MALIIT_SERVER_NAME, + MALIIT_SERVER_OBJECT_PATH, + DBUS_PROPERTIES_INTERFACE); + + if (!dbus_g_proxy_call(proxy, + DBUS_PROPERTIES_GET_METHOD, + &error, + G_TYPE_STRING, MALIIT_SERVER_INTERFACE, + G_TYPE_STRING, MALIIT_SERVER_ADDRESS_PROPERTY, + G_TYPE_INVALID, + G_TYPE_VALUE, &value, G_TYPE_INVALID)) { + + g_warning("%s: %s", __PRETTY_FUNCTION__, error->message); + g_error_free(error); + // Let's try PR1.2 address if PR1.3/Maliit was not found. + return g_strdup(MEEGO_IM_SOCKET_PATH); + } + + gchar *result = g_value_dup_string(&value); + g_value_unset(&value); + g_object_unref(proxy); + + return result; +} + /** * MeegoImConnector: @@ -91,12 +146,15 @@ meego_im_connector_run(MeegoImConnector *self) { GError *error = NULL; DBusGConnection *connection = NULL; + gchar *address = get_dbus_address(); g_return_if_fail(self != NULL); - connection = dbus_g_connection_open(MEEGO_IM_SOCKET_PATH, &error); + connection = dbus_g_connection_open(address, &error); + + g_free(address); - if (error != NULL) { + if (!connection) { g_warning("Couldn't connect to Maliit server. Retrying..."); g_error_free(error); -- cgit v1.2.3