diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/dbus-shared-names.h | 15 | ||||
-rw-r--r-- | src/indicator-fusa.c | 43 |
3 files changed, 53 insertions, 7 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 3bae3f2..325e351 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,5 +2,5 @@ fusalibdir = $(INDICATORDIR) fusalib_LTLIBRARIES = libfusa.la libfusa_la_SOURCES = indicator-fusa.c -libfusa_la_CFLAGS = $(APPLET_CFLAGS) +libfusa_la_CFLAGS = $(APPLET_CFLAGS) -Wall -Werror libfusa_la_LIBADD = $(APPLET_LIBS) diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h index 35839a4..f56e9cb 100644 --- a/src/dbus-shared-names.h +++ b/src/dbus-shared-names.h @@ -1,3 +1,14 @@ -#define INDICATOR_FUSA_DBUS_NAME "org.indicators.fusa" -#define INDICATOR_FUSA_DBUS_OBJECT "/org/fusa" +#ifndef __DBUS_SHARED_NAMES_H__ +#define __DBUS_SHARED_NAMES_H__ 1 + +#define INDICATOR_STATUS_DBUS_NAME "com.ubuntu.indicator.status" +#define INDICATOR_STATUS_DBUS_OBJECT "/com/ubuntu/indicator/status" + +#define INDICATOR_USERS_DBUS_NAME "com.ubuntu.indicator.users" +#define INDICATOR_USERS_DBUS_OBJECT "/com/ubuntu/indicator/users" + +#define INDICATOR_SESSION_DBUS_NAME "com.ubuntu.indicator.session" +#define INDICATOR_SESSION_DBUS_OBJECT "/com/ubuntu/indicator/session" + +#endif /* __DBUS_SHARED_NAMES_H__ */ diff --git a/src/indicator-fusa.c b/src/indicator-fusa.c index 8815fb5..4c1c163 100644 --- a/src/indicator-fusa.c +++ b/src/indicator-fusa.c @@ -7,14 +7,19 @@ #include <libindicator/indicator.h> INDICATOR_SET_VERSION -INDICATOR_SET_NAME("users-status-shutdown") +INDICATOR_SET_NAME("users-status-session") #include "dbus-shared-names.h" +static GtkMenu * status_menu = NULL; +static GtkMenu * users_menu = NULL; +static GtkMenu * session_menu = NULL; +static GtkMenu * main_menu = NULL; + GtkLabel * get_label (void) { - GtkLabel * returnval = gtk_label_new("Ted Gould"); + GtkLabel * returnval = GTK_LABEL(gtk_label_new("Ted Gould")); return returnval; } @@ -33,7 +38,7 @@ get_menu (void) DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); DBusGProxy * proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); - if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_FUSA_DBUS_NAME, 0, &returnval, &error)) { + if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_STATUS_DBUS_NAME, 0, &returnval, &error)) { g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); g_error_free(error); return NULL; @@ -44,7 +49,37 @@ get_menu (void) return NULL; } - return GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_FUSA_DBUS_NAME, INDICATOR_FUSA_DBUS_OBJECT)); + status_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_STATUS_DBUS_NAME, INDICATOR_STATUS_DBUS_OBJECT)); + + if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_USERS_DBUS_NAME, 0, &returnval, &error)) { + g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); + g_error_free(error); + return NULL; + } + + if (returnval != DBUS_START_REPLY_SUCCESS && returnval != DBUS_START_REPLY_ALREADY_RUNNING) { + g_error("Return value isn't indicative of success: %d", returnval); + return NULL; + } + + users_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_USERS_DBUS_NAME, INDICATOR_USERS_DBUS_OBJECT)); + + if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_SESSION_DBUS_NAME, 0, &returnval, &error)) { + g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); + g_error_free(error); + return NULL; + } + + if (returnval != DBUS_START_REPLY_SUCCESS && returnval != DBUS_START_REPLY_ALREADY_RUNNING) { + g_error("Return value isn't indicative of success: %d", returnval); + return NULL; + } + + session_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT)); + + main_menu = GTK_MENU(gtk_menu_new()); + + return main_menu; } |