← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/indicator-session/user-icons into lp:indicator-session

 

Ted Gould has proposed merging lp:~ted/indicator-session/user-icons into lp:indicator-session.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Putting user icons into the menu.  Use the stock person if there is no
user icon available for the user.
-- 
https://code.launchpad.net/~ted/indicator-session/user-icons/+merge/21599
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'src/dbus-shared-names.h'
--- src/dbus-shared-names.h	2010-03-12 23:38:33 +0000
+++ src/dbus-shared-names.h	2010-03-17 22:05:29 +0000
@@ -44,6 +44,8 @@
 #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"
+#define USER_ITEM_PROP_ICON       "user-item-icon-path"
+#define USER_ITEM_ICON_DEFAULT    "default-icon"
 
 #define RESTART_ITEM_TYPE         "x-canonical-restart-item"
 #define RESTART_ITEM_LABEL        "restart-label"

=== modified file 'src/indicator-session.c'
--- src/indicator-session.c	2010-03-15 15:03:56 +0000
+++ src/indicator-session.c	2010-03-17 22:05:29 +0000
@@ -28,6 +28,7 @@
 #include <glib-object.h>
 #include <glib/gi18n-lib.h>
 #include <gtk/gtk.h>
+#include <gio/gio.h>
 #include <libdbusmenu-gtk/menu.h>
 
 #include <dbus/dbus-glib.h>
@@ -221,7 +222,27 @@
 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);
+	gint padding = 0;
+	gtk_widget_style_get(GTK_WIDGET(gmi), "horizontal-padding", &padding, NULL);
+	GtkWidget * hbox = gtk_hbox_new(FALSE, padding);
+
+	GtkWidget * usericon = NULL;
+	const gchar * icon_name = dbusmenu_menuitem_property_get(newitem, USER_ITEM_PROP_ICON);
+	g_debug("Using user icon for '%s' from file: %s", dbusmenu_menuitem_property_get(newitem, USER_ITEM_PROP_NAME), icon_name);
+	if (icon_name != NULL && icon_name[0] != '\0') {
+		if (g_strcmp0(icon_name, USER_ITEM_ICON_DEFAULT) == 0 || !g_file_test(icon_name, G_FILE_TEST_EXISTS)) {
+			GIcon * gicon = g_themed_icon_new_with_default_fallbacks("stock_person-panel");
+			usericon = gtk_image_new_from_gicon(gicon, GTK_ICON_SIZE_MENU);
+			g_object_unref(gicon);
+		} else {
+			usericon = gtk_image_new_from_file(icon_name);
+		}
+	}
+	if (usericon != NULL) {
+		gtk_misc_set_alignment(GTK_MISC(usericon), 0.0, 0.5);
+		gtk_box_pack_start(GTK_BOX(hbox), usericon, FALSE, FALSE, 0);
+		gtk_widget_show(usericon);
+	}
 
 	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);

=== modified file 'src/session-service.c'
--- src/session-service.c	2010-03-16 15:06:31 +0000
+++ src/session-service.c	2010-03-17 22:05:29 +0000
@@ -590,6 +590,11 @@
 					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);
+				if (user->icon_url != NULL && user->icon_url[0] != '\0' && g_str_has_prefix(user->icon_url, "file://")) {
+					dbusmenu_menuitem_property_set(mi, USER_ITEM_PROP_ICON, user->icon_url + strlen("file://"));
+				} else {
+					dbusmenu_menuitem_property_set(mi, USER_ITEM_PROP_ICON, USER_ITEM_ICON_DEFAULT);
+				}
 				dbusmenu_menuitem_child_append (root, mi);
 				g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_user_session), user);
 			}


Follow ups