------------------------------------------------------------ revno: 118 committer: Ken VanDine <ken.vand...@canonical.com> branch nick: indicator-me-gdbus timestamp: Thu 2011-01-13 10:28:28 -0600 message: Properly query for username and icon after connecting to the proxy modified: src/Makefile.am src/indicator-me.c
-- lp:indicator-me https://code.launchpad.net/~indicator-applet-developers/indicator-me/trunk Your team ayatana-commits is subscribed to branch lp:indicator-me. To unsubscribe from this branch go to https://code.launchpad.net/~indicator-applet-developers/indicator-me/trunk/+edit-subscription
=== modified file 'src/Makefile.am' --- src/Makefile.am 2011-01-12 22:40:11 +0000 +++ src/Makefile.am 2011-01-13 16:28:28 +0000 @@ -12,7 +12,6 @@ about-me-menu-item.h \ indicator-me.c \ dbus-shared-names.h \ - me-service-server.h \ gen-me-service.xml.h \ gen-me-service.xml.c libme_la_CFLAGS = $(APPLET_CFLAGS) -Wall -Werror @@ -29,6 +28,7 @@ me-service.c \ me-service-dbus.h \ me-service-dbus.c \ + me-service-server.h \ me-service-gwibber.c \ me-service-gwibber.h \ status-provider.h \ @@ -55,9 +55,6 @@ --output=me-service-server.h \ $(srcdir)/me-service.xml -DBUS_SPECS = \ - me-service.xml - gen-%.xml.h: %.xml @echo "Building $@ from $<" @echo "extern const char * _$(subst -,_,$(subst .,_,$(basename $<)));" > $@ === modified file 'src/indicator-me.c' --- src/indicator-me.c 2011-01-12 22:40:11 +0000 +++ src/indicator-me.c 2011-01-13 16:28:28 +0000 @@ -71,6 +71,7 @@ static GtkImage * status_image = NULL; static GtkLabel *label = NULL; static GDBusProxy * status_proxy = NULL; + static GCancellable * status_proxy_cancel = NULL; static IdoEntryMenuItem *ido_entry = NULL; @@ -85,7 +86,8 @@ static void indicator_me_dispose (GObject *object); static void indicator_me_finalize (GObject *object); static void connection_changed (IndicatorServiceManager * sm, gboolean connected, gpointer userdata); -static void status_icon_cb (GDBusProxy * proxy, char * icons, GError *error, gpointer userdata); +static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data); + static gboolean new_entry_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client); @@ -93,6 +95,10 @@ static void entry_prop_change_cb (DbusmenuMenuitem *mi, gchar *prop, GVariant *value, GtkEntry *entry); static gboolean entry_hint_is_shown (GtkWidget *widget); static void status_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); +static void status_icon_changed (IndicatorMe * self, char * icon); +static void status_icon_cb (GObject * object, GAsyncResult * res, gpointer user_data); +static void username_changed (IndicatorMe * self, char * username); +static void username_cb (GObject * object, GAsyncResult * res, gpointer user_data); G_DEFINE_TYPE (IndicatorMe, indicator_me, INDICATOR_OBJECT_TYPE); @@ -129,21 +135,65 @@ static void indicator_me_dispose (GObject *object) { + IndicatorMe * self = INDICATOR_ME(object); + + if (self->service != NULL) { + g_object_unref(G_OBJECT(self->service)); + self->service = NULL; + } + + if (status_proxy != NULL) { + g_object_unref(status_proxy); + status_proxy = NULL; + } + + if (status_proxy_cancel != NULL) { + g_cancellable_cancel(status_proxy_cancel); + g_object_unref(status_proxy_cancel); + status_proxy_cancel = NULL; + } G_OBJECT_CLASS (indicator_me_parent_class)->dispose (object); + return; } static void indicator_me_finalize (GObject *object) { - G_OBJECT_CLASS (indicator_me_parent_class)->finalize (object); return; } static void -username_cb (GDBusProxy * proxy, char * username, GError *error, gpointer userdata) +username_cb (GObject * object, GAsyncResult * res, gpointer user_data) +{ + GError * error = NULL; + char * username; + GVariant * result; + + IndicatorMe * self = INDICATOR_ME (user_data); + g_return_if_fail(self != NULL); + + result = g_dbus_proxy_call_finish(status_proxy, res, &error); + g_return_if_fail(status_proxy != NULL); + + if (error != NULL) { + g_error("Could not get the username %s", error->message); + g_error_free(error); + return; + } + + g_variant_get(result, "(&s)", &username); + + if (username != NULL) { + username_changed (self, username); + } + +} + +static void +username_changed (IndicatorMe * self, char * username) { if (label == NULL) { label = GTK_LABEL(gtk_label_new(NULL)); @@ -160,20 +210,13 @@ } -static void -username_changed (GDBusProxy * proxy, char * username, GError *error, gpointer userdata) -{ - return username_cb(proxy, username, error, userdata); -} - static GtkLabel * get_label (IndicatorObject * io) { - if (label == NULL) { + if (label == NULL) { /* Create the label if it doesn't exist already */ - username_cb (NULL, NULL, NULL, NULL); - } - + username_changed (NULL, NULL); + } return label; } @@ -182,35 +225,74 @@ { if (status_image == NULL) { /* Will create the status icon if it doesn't exist already */ - status_icon_cb(NULL, DEFAULT_ICON, NULL, NULL); + status_icon_changed(NULL, DEFAULT_ICON); } return status_image; } static void -status_icon_cb (GDBusProxy * proxy, char * icons, GError *error, gpointer userdata) -{ - g_return_if_fail(icons != NULL); - g_return_if_fail(icons[0] != '\0'); +status_icon_cb (GObject * object, GAsyncResult * res, gpointer user_data) +{ + GError * error = NULL; + char * icon; + GVariant * result; + + IndicatorMe * self = INDICATOR_ME (user_data); + g_return_if_fail(self != NULL); + + result = g_dbus_proxy_call_finish(status_proxy, res, &error); + g_return_if_fail(status_proxy != NULL); + + if (error != NULL) { + g_error("Could not get the username %s", error->message); + g_error_free(error); + return; + } + + g_variant_get(result, "(&s)", &icon); + + if (icon != NULL) { + status_icon_changed (self, icon); + } + +} + +static void +status_icon_changed (IndicatorMe * self, char * icon) +{ + g_return_if_fail(icon != NULL); + g_return_if_fail(icon[0] != '\0'); if (status_image == NULL) { - status_image = indicator_image_helper (DEFAULT_ICON "-panel"); + status_image = indicator_image_helper (DEFAULT_ICON "-panel"); gtk_widget_show(GTK_WIDGET(status_image)); } - gchar *panel_icon = g_strconcat (icons, "-panel", NULL); - indicator_image_helper_update (status_image, panel_icon); - g_free (panel_icon); + gchar *panel_icon = g_strconcat (icon, "-panel", NULL); + indicator_image_helper_update (status_image, panel_icon); + g_free (panel_icon); return; } +/* Receives all signals from the service, routed to the appropriate functions */ static void -status_icon_changed (GDBusProxy * proxy, gchar * icon, gpointer userdata) +receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, + GVariant * parameters, gpointer user_data) { - g_debug("Changing status icon: '%s'", icon); + IndicatorMe * self = INDICATOR_ME(user_data); - return status_icon_cb(proxy, icon, NULL, NULL); + if (g_strcmp0(signal_name, "StatusIconsChanged") == 0) { + char * icon; + g_variant_get (parameters, "(&s)", &icon); + status_icon_changed (self, icon); + } + else if (g_strcmp0(signal_name, "UserChanged") == 0) { + char * username; + g_variant_get (parameters, "(&s)", &username); + username_changed(self, username); + } + return; } static void @@ -231,8 +313,6 @@ { if (connected) { if (status_proxy == NULL) { - GError * error = NULL; - status_proxy_cancel = g_cancellable_new(); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, @@ -243,28 +323,9 @@ INDICATOR_ME_SERVICE_DBUS_INTERFACE, status_proxy_cancel, status_proxy_cb, - self); - - - if (error != NULL) { - g_warning("Unable to get status proxy: %s", error->message); - g_error_free(error); - } - - if (status_proxy == NULL) return; - - g_signal_connect(status_proxy, "g-signal", G_CALLBACK(status_icon_changed), self); - g_signal_connect(status_proxy, "g-signal", G_CALLBACK(username_changed), self); + userdata); + } - - /* KEN REMOVED - org_ayatana_indicator_me_service_status_icons_async(status_proxy, status_icon_cb, NULL); - */ - - /* query the service for the username to display */ - /* KEN REMOVED - org_ayatana_indicator_me_service_pretty_user_name_async(status_proxy, username_cb, NULL); - */ } else { DbusmenuMenuitem *mi = g_object_get_data (G_OBJECT (ido_entry), "dbusmenuitem"); @@ -278,7 +339,7 @@ mi); /* If we're disconnecting, go back to offline */ - status_icon_cb(NULL, DEFAULT_ICON, NULL, NULL); + status_icon_changed(NULL, DEFAULT_ICON); g_object_unref (status_proxy); status_proxy = NULL; @@ -296,11 +357,13 @@ could include starting the service. Sometimes it'll fail and we'll try to start that dang service again! */ static void -status_proxy_cb (GObject * self, GAsyncResult * res, gpointer user_data) +status_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) { GError * error = NULL; - g_return_if_fail(self != NULL); + g_return_if_fail(object != NULL); + + IndicatorMe * self = INDICATOR_ME (user_data); GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); @@ -319,6 +382,20 @@ sure that it's ours. */ status_proxy = proxy; + g_signal_connect(status_proxy, "g-signal", G_CALLBACK(receive_signal), self); + + /* Query to get the username */ + g_debug("Get the username"); + g_dbus_proxy_call(status_proxy, "PrettyUserName", NULL, + G_DBUS_CALL_FLAGS_NONE, -1, NULL, + (GAsyncReadyCallback) username_cb, self); + + /* Query to get the status icon */ + g_debug("Get the status icon"); + g_dbus_proxy_call(status_proxy, "StatusIcon", NULL, + G_DBUS_CALL_FLAGS_NONE, -1, NULL, + (GAsyncReadyCallback) status_icon_cb, self); + return; }
_______________________________________________ Mailing list: https://launchpad.net/~ayatana-commits Post to : ayatana-commits@lists.launchpad.net Unsubscribe : https://launchpad.net/~ayatana-commits More help : https://help.launchpad.net/ListHelp