From ac2490118e389085081768f1d8d0238e5bfa42b0 Mon Sep 17 00:00:00 2001 From: "P. F. Chimento" Date: Tue, 14 May 2013 12:19:21 +0200 Subject: Treat pages with no name as having name NULL [endlessm/eos-sdk#58] --- endless/eospagemanager.c | 36 ++++++++++++++++++++---------------- test/test-page-manager.c | 22 +++++++++++++++++++--- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/endless/eospagemanager.c b/endless/eospagemanager.c index a76f397..051ccce 100644 --- a/endless/eospagemanager.c +++ b/endless/eospagemanager.c @@ -540,9 +540,8 @@ eos_page_manager_class_init (EosPageManagerClass *klass) * EosPageManager:visible-page-name: * * The name of the page that is currently being displayed by the page manager. - * If the page manager has no pages, then this is %NULL. - * However, if there is a page currently being displayed but it has no name, - * then this is the empty string (""). + * If the page manager has no pages, or if there is a page currently being + * displayed but it has no name, then this is %NULL. */ eos_page_manager_props[PROP_VISIBLE_PAGE_NAME] = g_param_spec_string ("visible-page-name", "Visible page name", @@ -659,8 +658,8 @@ eos_page_manager_set_visible_page (EosPageManager *self, * Gets the name of the page widget that @self is currently displaying. * See #EosPageManager:visible-page for more information. * - * Returns: the name of the page, or %NULL if @self does not have any pages, - * or the empty string if the page does not have a name. + * Returns: (allow-none): the name of the page, or %NULL if @self does not have + * any pages or if the visible page does not have a name. */ const gchar * eos_page_manager_get_visible_page_name (EosPageManager *self) @@ -687,6 +686,7 @@ eos_page_manager_set_visible_page_name (EosPageManager *self, const gchar *page_name) { g_return_if_fail (EOS_IS_PAGE_MANAGER (self)); + g_return_if_fail (page_name != NULL); EosPageManagerPageInfo *info = find_page_info_by_name (self, page_name); if (info == NULL) @@ -707,7 +707,7 @@ eos_page_manager_set_visible_page_name (EosPageManager *self, * page manager. * See #EosPageManager:name for more information. * - * Returns: the name of @page, or the empty string if @page does not have a + * Returns: (allow-none): the name of @page, or %NULL if @page does not have a * name. */ const gchar * @@ -724,9 +724,6 @@ eos_page_manager_get_page_name (EosPageManager *self, return NULL; } - if (info->name == NULL) - return ""; - return info->name; } @@ -734,10 +731,11 @@ eos_page_manager_get_page_name (EosPageManager *self, * eos_page_manager_set_page_name: * @self: the page manager * @page: the page to be renamed - * @name: the new name for @page + * @name: (allow-none): the new name for @page * * Changes the name of @page, which must previously have been added to the * page manager. + * To remove @page's name, pass %NULL for @name. * See #EosPageManager:name for more information. */ void @@ -745,17 +743,22 @@ eos_page_manager_set_page_name (EosPageManager *self, GtkWidget *page, const gchar *name) { + EosPageManagerPageInfo *info; + g_return_if_fail (EOS_IS_PAGE_MANAGER (self)); g_return_if_fail (GTK_IS_WIDGET (page)); /* Two pages with the same name are not allowed */ - EosPageManagerPageInfo *info = find_page_info_by_name (self, name); - if (info != NULL && info->page != page) + if (name != NULL) { - g_critical ("Not setting page name to \"%s\", because page manager " - "already contains a page by that name", - name); - return; + info = find_page_info_by_name (self, name); + if (info != NULL && info->page != page) + { + g_critical ("Not setting page name to \"%s\", because page manager " + "already contains a page by that name", + name); + return; + } } info = find_page_info_by_widget (self, page); @@ -797,6 +800,7 @@ eos_page_manager_remove_page_by_name (EosPageManager *self, const gchar *name) { g_return_if_fail (EOS_IS_PAGE_MANAGER (self)); + g_return_if_fail (name != NULL); EosPageManagerPageInfo *info = find_page_info_by_name (self, name); if (info == NULL) diff --git a/test/test-page-manager.c b/test/test-page-manager.c index 00ce0ad..b1d862f 100644 --- a/test/test-page-manager.c +++ b/test/test-page-manager.c @@ -176,12 +176,26 @@ test_pm_page_no_name (PageManagerFixture *fixture, GtkWidget *new_page = gtk_label_new("new"); gtk_container_add (GTK_CONTAINER (fixture->pm), new_page); name_get = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), new_page); - g_assert_cmpstr (name_get, ==, ""); + g_assert (name_get == NULL); gtk_container_child_get (GTK_CONTAINER (fixture->pm), new_page, "name", &name_prop, NULL); - g_assert_cmpstr (name_prop, ==, ""); - g_free (name_prop); + g_assert (name_prop == NULL); +} + +static void +test_pm_set_page_no_name (PageManagerFixture *fixture, + gconstpointer unused) +{ + const gchar *name; + eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm), + fixture->page1, + NULL); + name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm), + fixture->page1); + g_assert (name == NULL); + name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm)); + g_assert (name == NULL); } static void @@ -310,6 +324,8 @@ add_page_manager_tests (void) ADD_PAGE_MANAGER_TEST ("/page-manager/child-prop-name", test_pm_child_prop_name); ADD_PAGE_MANAGER_TEST ("/page-manager/page-no-name", test_pm_page_no_name); + ADD_PAGE_MANAGER_TEST ("/page-manager/set-page-no-name", + test_pm_set_page_no_name); ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-by-name", test_pm_remove_page_by_name); ADD_PAGE_MANAGER_TEST ("/page-manager/duplicate-page-name", -- cgit v1.2.3