From c4a5e5cf9dabce8c58bc5e7ef4cfe79095d012df Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 8 Aug 2009 10:47:24 -0600 Subject: Fixing a few things with the dbus stuff and starting to listen to the extra information on the service. --- src/dbus-shared-names.h | 2 +- src/indicator-sus.c | 26 ++++++++++++++++++++++++++ src/status-service-dbus.c | 2 +- src/status-service.xml | 2 +- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h index 9c828b1..6eb261f 100644 --- a/src/dbus-shared-names.h +++ b/src/dbus-shared-names.h @@ -26,7 +26,7 @@ with this program. If not, see . #define INDICATOR_STATUS_DBUS_NAME "org.ayatana.indicator.status" #define INDICATOR_STATUS_DBUS_OBJECT "/org/ayatana/indicator/status" -#define INDICATOR_STATUS_SERVICE_DBUS_OBJECT "/org/ayatana/indicator/statusservice" +#define INDICATOR_STATUS_SERVICE_DBUS_INTERFACE "org.ayatana.indicator.status.service" #define INDICATOR_USERS_DBUS_NAME "org.ayatana.indicator.users" #define INDICATOR_USERS_DBUS_OBJECT "/org/ayatana/indicator/users" diff --git a/src/indicator-sus.c b/src/indicator-sus.c index 1ab810c..24629d6 100644 --- a/src/indicator-sus.c +++ b/src/indicator-sus.c @@ -47,6 +47,7 @@ static GtkWidget * loading_item = NULL; static DBusGConnection * connection = NULL; static DBusGProxy * proxy = NULL; +static DBusGProxy * status_proxy = NULL; typedef enum { STATUS_SECTION, @@ -179,6 +180,29 @@ status_menu_root_changed(DbusmenuGtkClient * client, DbusmenuMenuitem * newroot, return; } +static gboolean +connect_to_status (gpointer userdata) +{ + if (status_proxy == NULL) { + GError * error = NULL; + + DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + + status_proxy = dbus_g_proxy_new_for_name_owner(sbus, + INDICATOR_STATUS_DBUS_NAME, + INDICATOR_STATUS_DBUS_OBJECT, + INDICATOR_STATUS_SERVICE_DBUS_INTERFACE, + &error); + + if (error != NULL) { + g_warning("Unable to get status proxy: %s", error->message); + g_error_free(error); + } + } + + return FALSE; +} + static gboolean build_status_menu (gpointer userdata) { @@ -209,6 +233,8 @@ build_status_menu (gpointer userdata) gtk_menu_shell_append(GTK_MENU_SHELL(main_menu), status_separator); gtk_widget_hide(status_separator); /* Should be default, I'm just being explicit. $(%*#$ hide already! */ + g_idle_add(connect_to_status, NULL); + return FALSE; } diff --git a/src/status-service-dbus.c b/src/status-service-dbus.c index 09d2711..f93980f 100644 --- a/src/status-service-dbus.c +++ b/src/status-service-dbus.c @@ -116,7 +116,7 @@ status_service_dbus_init (StatusServiceDbus *self) DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); dbus_g_connection_register_g_object(connection, - INDICATOR_STATUS_SERVICE_DBUS_OBJECT, + INDICATOR_STATUS_DBUS_OBJECT, G_OBJECT(self)); StatusServiceDbusPrivate * priv = STATUS_SERVICE_DBUS_GET_PRIVATE(self); diff --git a/src/status-service.xml b/src/status-service.xml index ba1f79f..977b338 100644 --- a/src/status-service.xml +++ b/src/status-service.xml @@ -1,6 +1,6 @@ - + -- cgit v1.2.3 From e445c0f0ec5bfcf7571f951dfb6889fd2f3558c2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 8 Aug 2009 10:58:20 -0600 Subject: Oh, now signals and callbacks, oh, my --- src/indicator-sus.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/indicator-sus.c b/src/indicator-sus.c index 24629d6..e7b067f 100644 --- a/src/indicator-sus.c +++ b/src/indicator-sus.c @@ -180,6 +180,20 @@ status_menu_root_changed(DbusmenuGtkClient * client, DbusmenuMenuitem * newroot, return; } +void +status_icon_changed (void) +{ + + +} + +void +status_icon_cb (DBusGProxy * proxy, char * icons, GError *error, gpointer userdata) +{ + + return; +} + static gboolean connect_to_status (gpointer userdata) { @@ -197,9 +211,15 @@ connect_to_status (gpointer userdata) if (error != NULL) { g_warning("Unable to get status proxy: %s", error->message); g_error_free(error); + return FALSE; } + + dbus_g_proxy_add_signal(status_proxy, "IconsChanged", G_TYPE_STRING, G_TYPE_INVALID); + dbus_g_proxy_connect_signal(status_proxy, "IconsChanged", G_CALLBACK(status_icon_changed), NULL, NULL); } + org_ayatana_indicator_status_status_icons_async(status_proxy, status_icon_cb, NULL); + return FALSE; } -- cgit v1.2.3 From e522c2c39f2543f1992f6f45879b8ff901b2c3b3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 8 Aug 2009 11:05:08 -0600 Subject: Setting the icon from the callback of asking the value --- src/indicator-sus.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/indicator-sus.c b/src/indicator-sus.c index e7b067f..f33eff0 100644 --- a/src/indicator-sus.c +++ b/src/indicator-sus.c @@ -39,6 +39,7 @@ static DbusmenuGtkClient * users_client = NULL; static DbusmenuGtkClient * session_client = NULL; static GtkMenu * main_menu = NULL; +static GtkImage * status_image = NULL; static GtkWidget * status_separator = NULL; static GtkWidget * users_separator = NULL; @@ -72,9 +73,9 @@ get_label (void) GtkImage * get_icon (void) { - GtkImage * image = GTK_IMAGE(gtk_image_new_from_icon_name("user-offline", GTK_ICON_SIZE_MENU)); - gtk_widget_show(GTK_WIDGET(image)); - return image; + status_image = GTK_IMAGE(gtk_image_new_from_icon_name("user-offline", GTK_ICON_SIZE_MENU)); + gtk_widget_show(GTK_WIDGET(status_image)); + return status_image; } static void @@ -190,6 +191,11 @@ status_icon_changed (void) void status_icon_cb (DBusGProxy * proxy, char * icons, GError *error, gpointer userdata) { + g_return_if_fail(status_image != NULL); + g_return_if_fail(icons != NULL); + g_return_if_fail(icons[0] == '\0'); + + gtk_image_set_from_icon_name(status_image, icons, GTK_ICON_SIZE_MENU); return; } -- cgit v1.2.3 From 74ac9091c44c933e14b6ef05f1177accc744ecf2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 8 Aug 2009 11:08:03 -0600 Subject: connecting to the signal --- src/indicator-sus.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/indicator-sus.c b/src/indicator-sus.c index f33eff0..3e16e64 100644 --- a/src/indicator-sus.c +++ b/src/indicator-sus.c @@ -181,13 +181,6 @@ status_menu_root_changed(DbusmenuGtkClient * client, DbusmenuMenuitem * newroot, return; } -void -status_icon_changed (void) -{ - - -} - void status_icon_cb (DBusGProxy * proxy, char * icons, GError *error, gpointer userdata) { @@ -200,6 +193,13 @@ status_icon_cb (DBusGProxy * proxy, char * icons, GError *error, gpointer userda return; } +void +status_icon_changed (DBusGProxy * proxy, gchar * icon, gpointer userdata) +{ + return status_icon_cb(proxy, icon, NULL, NULL); +} + + static gboolean connect_to_status (gpointer userdata) { -- cgit v1.2.3