From 59c5e7039b4549c2e7e7a4052c0a3f9407961357 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 23:20:23 -0600 Subject: Adding in some defines for our new menu type. --- src/dbus-shared-names.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/dbus-shared-names.h b/src/dbus-shared-names.h index 1fd256f..253cba8 100644 --- a/src/dbus-shared-names.h +++ b/src/dbus-shared-names.h @@ -38,4 +38,8 @@ with this program. If not, see . #define INDICATOR_SESSION_DBUS_OBJECT "/org/ayatana/indicator/session/menu" #define INDICATOR_SESSION_DBUS_VERSION 0 +#define USER_ITEM_TYPE "x-canonical-user-item" +#define USER_ITEM_PROP_NAME "user-item-name" +#define USER_ITEM_PROP_LOGGED_IN "user-item-logged-in" + #endif /* __DBUS_SHARED_NAMES_H__ */ -- cgit v1.2.3 From 765a3b87d9812680615dcb7278e16fea8f0fa1d1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 23:24:09 -0600 Subject: Registering a handler for our new type --- src/indicator-session.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/indicator-session.c b/src/indicator-session.c index dda8c76..d931bcd 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -135,13 +135,25 @@ get_icon (IndicatorObject * io) return status_image; } +static gboolean +new_user_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) +{ + + return FALSE; +} + /* Indicator based function to get the menu for the whole applet. This starts up asking for the parts of the menu from the various services. */ static GtkMenu * get_menu (IndicatorObject * io) { - return GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT)); + DbusmenuGtkMenu * menu = dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT); + DbusmenuGtkClient * client = dbusmenu_gtkmenu_get_client(menu); + + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), USER_ITEM_TYPE, new_user_item); + + return GTK_MENU(menu); } -- cgit v1.2.3 From 7723397ac8f8f5875ffac86f007b9321a503a846 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 23:36:13 -0600 Subject: Fleshing out the building of the user item --- src/indicator-session.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/indicator-session.c b/src/indicator-session.c index d931bcd..a39e4a0 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -135,11 +135,33 @@ get_icon (IndicatorObject * io) return status_image; } +/* Builds an item with a hip little logged in icon. */ static gboolean new_user_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { + GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + GtkWidget * hbox = gtk_hbox_new(FALSE, 0); + + GtkWidget * label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, USER_ITEM_PROP_NAME)); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + + GtkWidget * icon = gtk_image_new_from_icon_name("account-logged-in", GTK_ICON_SIZE_MENU); + gtk_misc_set_alignment(GTK_MISC(icon), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 0); + if (dbusmenu_menuitem_property_get_bool(newitem, USER_ITEM_PROP_LOGGED_IN)) { + gtk_widget_show(icon); + } else { + gtk_widget_hide(icon); + } + + gtk_container_add(GTK_CONTAINER(gmi), hbox); + gtk_widget_show(hbox); + + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); - return FALSE; + return TRUE; } /* Indicator based function to get the menu for the whole -- cgit v1.2.3 From 6868e64c17ba4aea5f8aa22b84a6518119b6754e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 23:39:11 -0600 Subject: Switching the guest over to a user item. --- src/session-service.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/session-service.c b/src/session-service.c index 3303317..fed4446 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -444,7 +444,9 @@ rebuild_items (DbusmenuMenuitem *root, if (check_guest_session ()) { mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Guest Session")); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE); + dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, _("Guest Session")); + dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, FALSE); dbusmenu_menuitem_child_append (root, mi); g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_guest_session), NULL); } -- cgit v1.2.3 From 4a297fec6d7fbc75035aa7d3d1eedb90bea98d15 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 23:42:54 -0600 Subject: Switching users over to user items --- src/session-service.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/session-service.c b/src/session-service.c index fed4446..1a01174 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -495,7 +495,9 @@ rebuild_items (DbusmenuMenuitem *root, user->service = service; mi = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, user->real_name); + dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE); + dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, user->real_name); + dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, user->sessions != NULL); dbusmenu_menuitem_child_append (root, mi); g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_user_session), user); } -- cgit v1.2.3