From d2c974f31f0441cc4e9745fe571f3d94fa5fa273 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 20:59:43 -0600 Subject: extract-method: TestMenuItems::PutInMenu() --- tests/gtest-menuitems.cpp | 64 +++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 44 deletions(-) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index 269d360..901c7bc 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -15,6 +15,22 @@ public: gtk_init(&argc, (gchar ***)&argv); return; } + +protected: + void PutInMenu (GtkWidget * item) + { + GtkWidget * menu = gtk_menu_new(); + gtk_widget_show(menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + + gtk_widget_show(item); + gtk_widget_realize(item); + + EXPECT_TRUE(gtk_widget_get_realized(item)); + + g_object_ref_sink(menu); + g_object_unref(menu); + } }; TEST_F(TestMenuitems, BuildCalendar) { @@ -24,17 +40,7 @@ TEST_F(TestMenuitems, BuildCalendar) { EXPECT_TRUE(IDO_IS_CALENDAR_MENU_ITEM(cal)); EXPECT_TRUE(GTK_IS_MENU_ITEM(cal)); - GtkWidget * menu = gtk_menu_new(); - gtk_widget_show(menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), cal); - - gtk_widget_show(cal); - gtk_widget_realize(cal); - - EXPECT_TRUE(gtk_widget_get_realized(cal)); - - g_object_ref_sink(menu); - g_object_unref(menu); + PutInMenu (cal); return; } @@ -45,17 +51,7 @@ TEST_F(TestMenuitems, BuildEntry) { EXPECT_TRUE(IDO_IS_ENTRY_MENU_ITEM(entry)); EXPECT_TRUE(GTK_IS_MENU_ITEM(entry)); - GtkWidget * menu = gtk_menu_new(); - gtk_widget_show(menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); - - gtk_widget_show(entry); - gtk_widget_realize(entry); - - EXPECT_TRUE(gtk_widget_get_realized(entry)); - - g_object_ref_sink(menu); - g_object_unref(menu); + PutInMenu (entry); return; } @@ -66,17 +62,7 @@ TEST_F(TestMenuitems, BuildScaleDefault) { EXPECT_TRUE(IDO_IS_SCALE_MENU_ITEM(scale)); EXPECT_TRUE(GTK_IS_MENU_ITEM(scale)); - GtkWidget * menu = gtk_menu_new(); - gtk_widget_show(menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), scale); - - gtk_widget_show(scale); - gtk_widget_realize(scale); - - EXPECT_TRUE(gtk_widget_get_realized(scale)); - - g_object_ref_sink(menu); - g_object_unref(menu); + PutInMenu (scale); return; } @@ -87,16 +73,6 @@ TEST_F(TestMenuitems, BuildScaleSmall) { EXPECT_TRUE(IDO_IS_SCALE_MENU_ITEM(scale)); EXPECT_TRUE(GTK_IS_MENU_ITEM(scale)); - GtkWidget * menu = gtk_menu_new(); - gtk_widget_show(menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), scale); - - gtk_widget_show(scale); - gtk_widget_realize(scale); - - EXPECT_TRUE(gtk_widget_get_realized(scale)); - - g_object_ref_sink(menu); - g_object_unref(menu); + PutInMenu (scale); return; } -- cgit v1.2.3 From 9d88f5c12288602cd430e42e900bff244dd4baa0 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 21:04:57 -0600 Subject: add IdoSwitchMenuItem test --- tests/gtest-menuitems.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index 901c7bc..55fa4d9 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -4,6 +4,7 @@ #include "idocalendarmenuitem.h" #include "idoentrymenuitem.h" #include "idoscalemenuitem.h" +#include "idoswitchmenuitem.h" class TestMenuitems : public ::testing::Test { @@ -76,3 +77,18 @@ TEST_F(TestMenuitems, BuildScaleSmall) { PutInMenu (scale); return; } + + +TEST_F(TestMenuitems, BuildSwitch) { + GtkWidget * item = ido_switch_menu_item_new (); + EXPECT_TRUE (item != NULL); + EXPECT_TRUE (IDO_IS_SWITCH_MENU_ITEM(item)); + EXPECT_TRUE (GTK_IS_MENU_ITEM(item)); + + GtkContainer * content_area = ido_switch_menu_item_get_content_area (IDO_SWITCH_MENU_ITEM(item)); + EXPECT_TRUE (content_area != NULL); + EXPECT_TRUE (GTK_IS_CONTAINER (content_area)); + + PutInMenu (item); + return; +} -- cgit v1.2.3 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(+) 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 0b83123924f907e93780baf015a330c74166235a Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 22:06:59 -0600 Subject: add tests for idomessagedialog --- tests/Makefile.am | 22 +++++++ tests/gtest-dialog.cpp | 152 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 tests/gtest-dialog.cpp diff --git a/tests/Makefile.am b/tests/Makefile.am index 89b9b5b..39ad2d3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -45,3 +45,25 @@ gtest_menuitems_LDADD = \ $(IDOLIB) \ libgtest.a +############################# +# Dialog tests +############################# + +TESTS += gtest-dialog +check_PROGRAMS += gtest-dialog + +gtest_dialog_SOURCES = \ + gtest-dialog.cpp +gtest_dialog_CPPFLAGS = \ + $(GCC_CFLAGS) \ + $(GTK_CFLAGS) \ + $(MAINTAINER_CFLAGS) \ + $(AM_CPPFLAGS) +gtest_dialog_LDFLAGS = \ + -pthread +gtest_dialog_LDADD = \ + $(GTK_LIBS) \ + $(IDOLIB) \ + libgtest.a + + diff --git a/tests/gtest-dialog.cpp b/tests/gtest-dialog.cpp new file mode 100644 index 0000000..c35a6cc --- /dev/null +++ b/tests/gtest-dialog.cpp @@ -0,0 +1,152 @@ + +#include +#include +#include "idomessagedialog.h" + +class TestDialog : public ::testing::Test +{ + private: + + guint log_handler_id; + + int log_count_actual; + + static void log_count_func (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *message, + gpointer user_data) + { + reinterpret_cast(user_data)->log_count_actual++; + } + + protected: + + int log_count_expected; + + GMainLoop * main_loop; + + protected: + + virtual void SetUp() + { + const GLogLevelFlags flags = GLogLevelFlags(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING); + log_handler_id = g_log_set_handler ("Gdk", flags, log_count_func, this); + log_count_expected = 0; + log_count_actual = 0; + + main_loop = NULL; + + static bool initialized = false; + if (G_UNLIKELY (!initialized)) + { + g_type_init(); + initialized = true; + } + + main_loop = g_main_loop_new (NULL, FALSE); + } + + virtual void TearDown() + { + ASSERT_EQ (log_count_expected, log_count_actual); + + g_clear_pointer (&main_loop, g_main_loop_unref); + } + + public: + + TestDialog() + { + gint argc = 0; + gchar * argv[] = {NULL}; + gtk_init (&argc, (gchar ***)&argv); + } + + protected: + + static gboolean + on_wait_timeout (gpointer main_loop) + { + g_main_loop_quit (static_cast(main_loop)); + return G_SOURCE_REMOVE; + } + + void + WaitForSignal (gpointer instance, const gchar * detailed_signal) + { + guint timeout_id; + gulong handler_id; + const int timeout_seconds = 5; + + ASSERT_TRUE (instance != NULL); + ASSERT_TRUE (main_loop != NULL); + + + handler_id = g_signal_connect_swapped (instance, + detailed_signal, + G_CALLBACK(g_main_loop_quit), + main_loop); + + timeout_id = g_timeout_add_seconds (timeout_seconds, + on_wait_timeout, + main_loop); + + // wait for the signal or for timeout, whichever comes first + g_main_loop_run (main_loop); + ASSERT_TRUE (g_main_context_find_source_by_id(NULL,timeout_id) != NULL); + g_signal_handler_disconnect (instance, handler_id); + g_source_remove (timeout_id); + } + + protected: + + void ShowDialog (GtkWidget * dialog) + { + EXPECT_TRUE (dialog != NULL); + EXPECT_TRUE (IDO_IS_MESSAGE_DIALOG (dialog)); + + gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), + "Some Secondary Text"); + + GtkWidget * action_area; + action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); + EXPECT_TRUE (GTK_IS_WIDGET (action_area)); + + gtk_widget_show (dialog); + + // synthesize a focus-in event to activate the idotimeline + GdkEventFocus focus; + focus.type = GDK_FOCUS_CHANGE; + focus.window = gtk_widget_get_window (dialog); + focus.send_event = FALSE; + focus.in = TRUE; + gtk_main_do_event ((GdkEvent*)&focus); + ++log_count_expected; // this will throw up a synthesized event warning + + g_timeout_add_seconds (1, on_wait_timeout, main_loop); + g_main_loop_run (main_loop); + } +}; + +TEST_F (TestDialog, BuildMessageDialog) +{ + GtkWidget * dialog = ido_message_dialog_new (NULL, + GtkDialogFlags(0), + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "%s", + "Hello World"); + ShowDialog (dialog); +} + +TEST_F (TestDialog, BuildMessageDialogWithMarkup) +{ + GtkWidget * dialog = ido_message_dialog_new_with_markup (NULL, + GtkDialogFlags(0), + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "%s", + "Hello World"); + ShowDialog (dialog); +} + -- cgit v1.2.3 From 33683f3166434cf1540ac5ad66910c7e04e516de Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 22:20:20 -0600 Subject: add more coverage for idocalendar. total package's line coverage is up to 50% now --- tests/gtest-menuitems.cpp | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index 55fa4d9..20bafc4 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -41,7 +41,25 @@ TEST_F(TestMenuitems, BuildCalendar) { EXPECT_TRUE(IDO_IS_CALENDAR_MENU_ITEM(cal)); EXPECT_TRUE(GTK_IS_MENU_ITEM(cal)); + const guint year_in = 1963; + const guint month_in = 10; + const guint day_in = 23; + ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM(cal), year_in, month_in, day_in); + guint year_out = 0; + guint month_out = 0; + guint day_out = 0; + ido_calendar_menu_item_get_date (IDO_CALENDAR_MENU_ITEM(cal), &year_out, &month_out, &day_out); + ASSERT_EQ (year_in, year_out); + ASSERT_EQ (month_in, month_out); + ASSERT_EQ (day_in, day_out); + + const GtkCalendarDisplayOptions options_in = GTK_CALENDAR_SHOW_DAY_NAMES; + ido_calendar_menu_item_set_display_options (IDO_CALENDAR_MENU_ITEM(cal), options_in); + const GtkCalendarDisplayOptions options_out = ido_calendar_menu_item_get_display_options (IDO_CALENDAR_MENU_ITEM(cal)); + ASSERT_EQ (options_in, options_out); + PutInMenu (cal); + return; } @@ -80,15 +98,14 @@ TEST_F(TestMenuitems, BuildScaleSmall) { TEST_F(TestMenuitems, BuildSwitch) { - GtkWidget * item = ido_switch_menu_item_new (); - EXPECT_TRUE (item != NULL); - EXPECT_TRUE (IDO_IS_SWITCH_MENU_ITEM(item)); - EXPECT_TRUE (GTK_IS_MENU_ITEM(item)); + GtkWidget * item = ido_switch_menu_item_new (); + EXPECT_TRUE (item != NULL); + EXPECT_TRUE (IDO_IS_SWITCH_MENU_ITEM(item)); + EXPECT_TRUE (GTK_IS_MENU_ITEM(item)); - GtkContainer * content_area = ido_switch_menu_item_get_content_area (IDO_SWITCH_MENU_ITEM(item)); - EXPECT_TRUE (content_area != NULL); - EXPECT_TRUE (GTK_IS_CONTAINER (content_area)); + GtkContainer * content_area = ido_switch_menu_item_get_content_area (IDO_SWITCH_MENU_ITEM(item)); + EXPECT_TRUE (content_area != NULL); + EXPECT_TRUE (GTK_IS_CONTAINER (content_area)); - PutInMenu (item); - return; + PutInMenu (item); } -- cgit v1.2.3 From 07d422b45e3bf9bba3598dc614a2c6d3799803c4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 22:31:24 -0600 Subject: add tests for IdoScaleMenuItem, bringing package line coverage to 54% --- tests/gtest-menuitems.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index 20bafc4..2c80f69 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -74,6 +74,14 @@ TEST_F(TestMenuitems, BuildEntry) { return; } +namespace +{ + void increment_the_userdata (GObject * scale, gpointer userdata) + { + ++*static_cast(userdata); + } +} + TEST_F(TestMenuitems, BuildScaleDefault) { GtkWidget * scale = ido_scale_menu_item_new("Label", IDO_RANGE_STYLE_DEFAULT, gtk_adjustment_new(0.5, 0.0, 1.0, 0.01, 0.1, 0.1)); @@ -81,6 +89,26 @@ TEST_F(TestMenuitems, BuildScaleDefault) { EXPECT_TRUE(IDO_IS_SCALE_MENU_ITEM(scale)); EXPECT_TRUE(GTK_IS_MENU_ITEM(scale)); + const gchar * str_in = "Primary Text"; + ido_scale_menu_item_set_primary_label (IDO_SCALE_MENU_ITEM(scale), str_in); + const gchar * str_out = ido_scale_menu_item_get_primary_label (IDO_SCALE_MENU_ITEM(scale)); + ASSERT_TRUE (str_in != str_out); + ASSERT_STREQ (str_in, str_out); + + str_in = "Secondary Text"; + ido_scale_menu_item_set_secondary_label (IDO_SCALE_MENU_ITEM(scale), str_in); + str_out = ido_scale_menu_item_get_secondary_label (IDO_SCALE_MENU_ITEM(scale)); + ASSERT_TRUE (str_in != str_out); + ASSERT_STREQ (str_in, str_out); + + int i = 0; + g_signal_connect (scale, "primary-clicked", G_CALLBACK(increment_the_userdata), &i); + g_signal_connect (scale, "secondary-clicked", G_CALLBACK(increment_the_userdata), &i); + ido_scale_menu_item_primary_clicked (IDO_SCALE_MENU_ITEM (scale)); + ASSERT_EQ (1, i); + ido_scale_menu_item_secondary_clicked (IDO_SCALE_MENU_ITEM (scale)); + ASSERT_EQ (2, i); + PutInMenu (scale); return; } -- cgit v1.2.3 From 38965ac92f5a8e8b94263a8083716f5be4fff272 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 22:40:20 -0600 Subject: add tests for IdoCalendarMenuItems's mark/unmark/clear days, bringing package line coverage up to 55.2% --- tests/gtest-menuitems.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index 2c80f69..ff95148 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -36,6 +36,7 @@ protected: TEST_F(TestMenuitems, BuildCalendar) { GtkWidget * cal = ido_calendar_menu_item_new(); + IdoCalendarMenuItem * c = IDO_CALENDAR_MENU_ITEM (cal); EXPECT_TRUE(cal != NULL); EXPECT_TRUE(IDO_IS_CALENDAR_MENU_ITEM(cal)); @@ -44,20 +45,35 @@ TEST_F(TestMenuitems, BuildCalendar) { const guint year_in = 1963; const guint month_in = 10; const guint day_in = 23; - ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM(cal), year_in, month_in, day_in); + ido_calendar_menu_item_set_date (c, year_in, month_in, day_in); guint year_out = 0; guint month_out = 0; guint day_out = 0; - ido_calendar_menu_item_get_date (IDO_CALENDAR_MENU_ITEM(cal), &year_out, &month_out, &day_out); + ido_calendar_menu_item_get_date (c, &year_out, &month_out, &day_out); ASSERT_EQ (year_in, year_out); ASSERT_EQ (month_in, month_out); ASSERT_EQ (day_in, day_out); const GtkCalendarDisplayOptions options_in = GTK_CALENDAR_SHOW_DAY_NAMES; - ido_calendar_menu_item_set_display_options (IDO_CALENDAR_MENU_ITEM(cal), options_in); - const GtkCalendarDisplayOptions options_out = ido_calendar_menu_item_get_display_options (IDO_CALENDAR_MENU_ITEM(cal)); + ido_calendar_menu_item_set_display_options (c, options_in); + const GtkCalendarDisplayOptions options_out = ido_calendar_menu_item_get_display_options (c); ASSERT_EQ (options_in, options_out); + GtkWidget * w; + w = ido_calendar_menu_item_get_calendar (c); + ASSERT_TRUE (w != NULL); + ASSERT_TRUE (GTK_IS_CALENDAR (w)); + + // test clear/mark/unmark days + ido_calendar_menu_item_clear_marks (c); + ido_calendar_menu_item_mark_day (c, 0); + ido_calendar_menu_item_mark_day (c, 1); + ido_calendar_menu_item_mark_day (c, 2); + ido_calendar_menu_item_unmark_day (c, 0); + ido_calendar_menu_item_unmark_day (c, 2); + for (int i=0; i<28; i++) + ASSERT_EQ (gtk_calendar_get_day_is_marked(GTK_CALENDAR(w), i), i==1); + PutInMenu (cal); return; -- cgit v1.2.3 From 8b984ae8ec050b9f33b92abb1655e774f3025e95 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 22:45:17 -0600 Subject: add tests for ido_entry_menu_item_get_entry, bringing package line coverage up to 55.5% --- tests/gtest-menuitems.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/gtest-menuitems.cpp b/tests/gtest-menuitems.cpp index ff95148..3942bfc 100644 --- a/tests/gtest-menuitems.cpp +++ b/tests/gtest-menuitems.cpp @@ -79,12 +79,16 @@ TEST_F(TestMenuitems, BuildCalendar) { return; } -TEST_F(TestMenuitems, BuildEntry) { +TEST_F(TestMenuitems, BuildEntry) +{ GtkWidget * entry = ido_entry_menu_item_new(); + EXPECT_TRUE (entry != NULL); + EXPECT_TRUE (IDO_IS_ENTRY_MENU_ITEM(entry)); + EXPECT_TRUE (GTK_IS_MENU_ITEM(entry)); - EXPECT_TRUE(entry != NULL); - EXPECT_TRUE(IDO_IS_ENTRY_MENU_ITEM(entry)); - EXPECT_TRUE(GTK_IS_MENU_ITEM(entry)); + GtkWidget * w = ido_entry_menu_item_get_entry (IDO_ENTRY_MENU_ITEM(entry)); + ASSERT_TRUE (w != NULL); + ASSERT_TRUE (GTK_IS_ENTRY (w)); PutInMenu (entry); return; -- 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(-) 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(-) 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 From 90116502dc544ed9317e195fac9152a01e90618d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 23 Jun 2013 18:44:39 -0500 Subject: in debian/libido3-0.1-0.symbols, add the new symbols --- debian/libido3-0.1-0.symbols | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debian/libido3-0.1-0.symbols b/debian/libido3-0.1-0.symbols index d253c59..2e13216 100644 --- a/debian/libido3-0.1-0.symbols +++ b/debian/libido3-0.1-0.symbols @@ -26,6 +26,7 @@ libido3-0.1.so.0 libido3-0.1-0 #MINVER# ido_entry_menu_item_get_entry@Base 0.1.0 ido_entry_menu_item_get_type@Base 0.1.0 ido_entry_menu_item_new@Base 0.1.0 + ido_guest_menu_item_new_from_model@Base 0replaceme ido_init@Base 13.10.0daily13.06.19 ido_location_menu_item_get_type@Base 13.10.0daily13.06.19 ido_location_menu_item_new@Base 13.10.0daily13.06.19 @@ -86,6 +87,7 @@ libido3-0.1.so.0 libido3-0.1-0 #MINVER# ido_user_menu_item_new_from_model@Base 13.10.0daily13.06.19 ido_user_menu_item_set_current_user@Base 13.10.0daily13.06.19 ido_user_menu_item_set_icon@Base 13.10.0daily13.06.19 + ido_user_menu_item_set_icon_from_file@Base @replaceme ido_user_menu_item_set_label@Base 13.10.0daily13.06.19 ido_user_menu_item_set_logged_in@Base 13.10.0daily13.06.19 ido_media_player_menu_item_get_type@Base 0replaceme -- cgit v1.2.3 From db32e752ebd0a368e30d65ffd9c2f360a473fecc Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 23 Jun 2013 19:20:58 -0500 Subject: oops, that @replaceme should have been 0replaceme... --- debian/libido3-0.1-0.symbols | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/libido3-0.1-0.symbols b/debian/libido3-0.1-0.symbols index 2e13216..d245d43 100644 --- a/debian/libido3-0.1-0.symbols +++ b/debian/libido3-0.1-0.symbols @@ -87,7 +87,7 @@ libido3-0.1.so.0 libido3-0.1-0 #MINVER# ido_user_menu_item_new_from_model@Base 13.10.0daily13.06.19 ido_user_menu_item_set_current_user@Base 13.10.0daily13.06.19 ido_user_menu_item_set_icon@Base 13.10.0daily13.06.19 - ido_user_menu_item_set_icon_from_file@Base @replaceme + ido_user_menu_item_set_icon_from_file@Base 0replaceme ido_user_menu_item_set_label@Base 13.10.0daily13.06.19 ido_user_menu_item_set_logged_in@Base 13.10.0daily13.06.19 ido_media_player_menu_item_get_type@Base 0replaceme -- cgit v1.2.3