From 82a2c8c680be1f63c982c7016dc7665773c8496e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 6 Aug 2009 12:14:53 +0100 Subject: Status submenu --- src/status-service.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/status-service.c') diff --git a/src/status-service.c b/src/status-service.c index dbb597c..4e16788 100644 --- a/src/status-service.c +++ b/src/status-service.c @@ -39,6 +39,7 @@ static const gchar * status_icons[STATUS_PROVIDER_STATUS_LAST] = { static DbusmenuMenuitem * root_menuitem = NULL; +static DbusmenuMenuitem * status_menuitem = NULL; static GMainLoop * mainloop = NULL; /* A fun little function to actually lock the screen. If, @@ -98,6 +99,10 @@ build_menu (gpointer data) DbusmenuMenuitem * root = DBUSMENU_MENUITEM(data); g_return_val_if_fail(root != NULL, FALSE); + status_menuitem = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(status_menuitem, "label", "Status"); + dbusmenu_menuitem_child_append(root, status_menuitem); + StatusProviderStatus i; for (i = STATUS_PROVIDER_STATUS_ONLINE; i < STATUS_PROVIDER_STATUS_LAST; i++) { DbusmenuMenuitem * mi = dbusmenu_menuitem_new(); @@ -106,7 +111,7 @@ build_menu (gpointer data) dbusmenu_menuitem_property_set(mi, "icon", status_icons[i]); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(status_menu_click), GINT_TO_POINTER(i)); - dbusmenu_menuitem_child_append(root, mi); + dbusmenu_menuitem_child_append(status_menuitem, mi); g_debug("Built %s", status_strings[i]); } -- cgit v1.2.3 From aff047a23a15219933657f85311d858d6e458870 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 6 Aug 2009 12:27:39 +0100 Subject: Putting the user name in a menu label. --- src/status-service.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/status-service.c') diff --git a/src/status-service.c b/src/status-service.c index 4e16788..b804711 100644 --- a/src/status-service.c +++ b/src/status-service.c @@ -41,6 +41,7 @@ static const gchar * status_icons[STATUS_PROVIDER_STATUS_LAST] = { static DbusmenuMenuitem * root_menuitem = NULL; static DbusmenuMenuitem * status_menuitem = NULL; static GMainLoop * mainloop = NULL; +static gchar * whoami = "ted"; /* A fun little function to actually lock the screen. If, that's what you want, let's do it! */ @@ -99,6 +100,11 @@ build_menu (gpointer data) DbusmenuMenuitem * root = DBUSMENU_MENUITEM(data); g_return_val_if_fail(root != NULL, FALSE); + DbusmenuMenuitem * useritem = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(useritem, "label", whoami); + dbusmenu_menuitem_property_set(useritem, "sensitive", "false"); + dbusmenu_menuitem_child_append(root, useritem); + status_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(status_menuitem, "label", "Status"); dbusmenu_menuitem_child_append(root, status_menuitem); -- cgit v1.2.3 From a253844a712ceb8f54cb3b6fa5b090ba0a216e19 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 6 Aug 2009 12:39:59 +0100 Subject: Something global to track all the DBus stuff. --- src/status-service.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/status-service.c') diff --git a/src/status-service.c b/src/status-service.c index b804711..1bd33e9 100644 --- a/src/status-service.c +++ b/src/status-service.c @@ -42,6 +42,7 @@ static DbusmenuMenuitem * root_menuitem = NULL; static DbusmenuMenuitem * status_menuitem = NULL; static GMainLoop * mainloop = NULL; static gchar * whoami = "ted"; +static StatusServiceDbus * dbus_interface = NULL; /* A fun little function to actually lock the screen. If, that's what you want, let's do it! */ @@ -158,6 +159,8 @@ main (int argc, char ** argv) g_idle_add(build_menu, root_menuitem); + dbus_interface = g_object_new(STATUS_SERVICE_DBUS_TYPE, NULL); + mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); -- cgit v1.2.3 From 848e09b4d35f6609c4deaf1298c8b4360ed15a22 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 7 Aug 2009 21:39:52 +0100 Subject: Put the user's real name in the menu item. --- src/status-service.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'src/status-service.c') diff --git a/src/status-service.c b/src/status-service.c index 1bd33e9..a9274ce 100644 --- a/src/status-service.c +++ b/src/status-service.c @@ -1,4 +1,7 @@ +#include +#include + #include #include @@ -41,7 +44,6 @@ static const gchar * status_icons[STATUS_PROVIDER_STATUS_LAST] = { static DbusmenuMenuitem * root_menuitem = NULL; static DbusmenuMenuitem * status_menuitem = NULL; static GMainLoop * mainloop = NULL; -static gchar * whoami = "ted"; static StatusServiceDbus * dbus_interface = NULL; /* A fun little function to actually lock the screen. If, @@ -95,16 +97,39 @@ build_providers (gpointer data) return FALSE; } +static void +build_user_item (DbusmenuMenuitem * root) +{ + struct passwd * pwd = NULL; + + pwd = getpwuid(getuid()); + + if (pwd != NULL && pwd->pw_gecos != NULL) { + gchar * name = g_strdup(pwd->pw_gecos); + gchar * walker = name; + while (*walker != '\0' && *walker != ',') { walker++; } + *walker = '\0'; + + DbusmenuMenuitem * useritem = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(useritem, "label", name); + dbusmenu_menuitem_property_set(useritem, "sensitive", "false"); + dbusmenu_menuitem_child_append(root, useritem); + + g_free(name); + } else { + g_debug("PWD: %s", (pwd == NULL ? "(pwd null)" : (pwd->pw_gecos == NULL ? "(gecos null)" : pwd->pw_gecos))); + } + + return; +} + static gboolean build_menu (gpointer data) { DbusmenuMenuitem * root = DBUSMENU_MENUITEM(data); g_return_val_if_fail(root != NULL, FALSE); - DbusmenuMenuitem * useritem = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(useritem, "label", whoami); - dbusmenu_menuitem_property_set(useritem, "sensitive", "false"); - dbusmenu_menuitem_child_append(root, useritem); + build_user_item(root); status_menuitem = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(status_menuitem, "label", "Status"); -- cgit v1.2.3