From 12437e9197ed19111cc15bfecd0f9ff0e25926cd Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 21:18:21 -0600 Subject: add missing G_BEGIN_DECLS call --- src/idomessagedialog.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/idomessagedialog.h b/src/idomessagedialog.h index 4313fb3..e11cd59 100644 --- a/src/idomessagedialog.h +++ b/src/idomessagedialog.h @@ -29,6 +29,8 @@ #ifndef __IDO_MESSAGE_DIALOG_H__ #define __IDO_MESSAGE_DIALOG_H__ +G_BEGIN_DECLS + #include #define IDO_TYPE_MESSAGE_DIALOG (ido_message_dialog_get_type ()) -- cgit v1.2.3 From 8008ec3c0dbd2dca7697f4f22c90f1d84819d1e0 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 23 Jun 2013 18:06:39 -0500 Subject: add ido_guest_menu_item_new_for_model() --- src/idomenuitemfactory.c | 3 + src/idousermenuitem.c | 182 +++++++++++++++++++++++++++++++---------------- src/idousermenuitem.h | 3 + 3 files changed, 128 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/idomenuitemfactory.c b/src/idomenuitemfactory.c index 650c95f..5ded309 100644 --- a/src/idomenuitemfactory.c +++ b/src/idomenuitemfactory.c @@ -54,6 +54,9 @@ ido_menu_item_factory_create_menu_item (UbuntuMenuItemFactory *factory, if (g_str_equal (type, "indicator.user-menu-item")) item = ido_user_menu_item_new_from_model (menuitem, actions); + if (g_str_equal (type, "indicator.guest-menu-item")) + item = ido_guest_menu_item_new_from_model (menuitem, actions); + else if (g_str_equal (type, "com.canonical.indicator.calendar")) item = ido_calendar_menu_item_new_from_model (menuitem, actions); diff --git a/src/idousermenuitem.c b/src/idousermenuitem.c index 655ae21..ab95d66 100644 --- a/src/idousermenuitem.c +++ b/src/idousermenuitem.c @@ -342,6 +342,86 @@ ido_user_menu_item_new (void) return GTK_WIDGET (g_object_new (IDO_USER_MENU_ITEM_TYPE, NULL)); } +/*** +**** +***/ + +/** + * This is a helper function for creating user menuitems for both + * "indicator.user-menu-item" and "indicator.guest-menu-item", + * since they only differ in how they use their action's state. + */ +static GtkMenuItem * +user_menu_item_new_from_model (GMenuItem * menuitem, + GActionGroup * actions, + GCallback state_changed_callback) +{ + guint i; + guint n; + IdoUserMenuItem * ido_user; + gchar * str; + gchar * action; + GVariant * v; + GParameter parameters[4]; + + /* create the ido_user */ + + n = 0; + + if (g_menu_item_get_attribute (menuitem, G_MENU_ATTRIBUTE_LABEL, "s", &str)) + { + GParameter p = { "label", G_VALUE_INIT }; + g_value_init (&p.value, G_TYPE_STRING); + g_value_take_string (&p.value, str); + parameters[n++] = p; + } + + if ((v = g_menu_item_get_attribute_value (menuitem, G_MENU_ATTRIBUTE_ICON, NULL))) + { + GParameter p = { "icon", G_VALUE_INIT }; + GIcon * icon = g_icon_deserialize (v); + g_value_init (&p.value, G_TYPE_OBJECT); + g_value_take_object (&p.value, icon); + g_variant_unref (v); + parameters[n++] = p; + } + + g_assert (n <= G_N_ELEMENTS (parameters)); + ido_user = g_object_newv (IDO_USER_MENU_ITEM_TYPE, n, parameters); + + for (i=0; i Date: Sun, 23 Jun 2013 18:37:38 -0500 Subject: silence console warnings when a NULL filename is passed into ido_user_menu_item_set_icon_from_filename() --- example/menus.c | 47 ++++++++++++++++++++++++++--------------------- src/idousermenuitem.c | 4 ++-- 2 files changed, 28 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/example/menus.c b/example/menus.c index da2103a..d30f920 100644 --- a/example/menus.c +++ b/example/menus.c @@ -26,8 +26,8 @@ create_user_menu (const char * username, gboolean is_active) { GtkWidget * ret; - GFile * file = g_file_new_for_path (filename); - GIcon * icon = g_file_icon_new (file); + GFile * file = filename ? g_file_new_for_path (filename) : NULL; + GIcon * icon = file ? g_file_icon_new (file) : NULL; ret = g_object_new (IDO_USER_MENU_ITEM_TYPE, "label", username, @@ -36,8 +36,8 @@ create_user_menu (const char * username, "is-current-user", is_active, NULL); - g_object_unref (icon); - g_object_unref (file); + g_clear_object (&icon); + g_clear_object (&file); return ret; } @@ -122,23 +122,28 @@ main (int argc, char *argv[]) *** Users **/ - menuitem = create_user_menu ("Guest", NULL, FALSE, FALSE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - - menuitem = ido_user_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - - menuitem = create_user_menu ("Bobby Fischer", "/usr/share/pixmaps/faces/chess.jpg", FALSE, FALSE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - - menuitem = create_user_menu ("Linus Torvalds", "/usr/share/pixmaps/faces/penguin.jpg", TRUE, FALSE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - - menuitem = create_user_menu ("Mark Shuttleworth", "/usr/share/pixmaps/faces/astronaut.jpg", TRUE, TRUE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - - menuitem = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), + create_user_menu ("Guest", + NULL, + FALSE, FALSE)); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), + create_user_menu ("Bobby Fischer", + "/usr/share/pixmaps/faces/chess.jpg", + FALSE, FALSE)); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), + create_user_menu ("Linus Torvalds", + "/usr/share/pixmaps/faces/penguin.jpg", + TRUE, FALSE)); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), + create_user_menu ("Mark Shuttleworth", + "/usr/share/pixmaps/faces/astronaut.jpg", + TRUE, TRUE)); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), ido_user_menu_item_new ()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); /* Add the menubar */ gtk_menu_shell_append (GTK_MENU_SHELL (menubar), root); diff --git a/src/idousermenuitem.c b/src/idousermenuitem.c index ab95d66..e6ba710 100644 --- a/src/idousermenuitem.c +++ b/src/idousermenuitem.c @@ -308,8 +308,8 @@ ido_user_menu_item_set_icon (IdoUserMenuItem * self, GIcon * icon) void ido_user_menu_item_set_icon_from_file (IdoUserMenuItem * self, const char * filename) { - GFile * file = g_file_new_for_path (filename); - GIcon * icon = g_file_icon_new (file); + GFile * file = filename ? g_file_new_for_path (filename) : NULL; + GIcon * icon = file ? g_file_icon_new (file) : NULL; ido_user_menu_item_set_icon (self, icon); -- cgit v1.2.3