From 799c49aa4a564e9135b93a435bc8e7f7f5047708 Mon Sep 17 00:00:00 2001 From: Matt Watson Date: Tue, 4 Jun 2013 17:09:22 -0700 Subject: visible-page property update if visible page is removed Before the visible page would be set to null if it was removed, instead of pointing to another page in the page manager. Also signals for property changes were not emitted. [endlessm/eos-sdk#101] --- endless/eospagemanager.c | 16 ++++++++++++++-- test/test-page-manager.c | 17 ++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/endless/eospagemanager.c b/endless/eospagemanager.c index 2db0975..e066f84 100644 --- a/endless/eospagemanager.c +++ b/endless/eospagemanager.c @@ -462,9 +462,21 @@ eos_page_manager_remove (GtkContainer *container, if (info->name != NULL) g_hash_table_remove (self->priv->pages_by_name, info->name); - /* If this was the only page */ if (self->priv->visible_page_info == info) - self->priv->visible_page_info = NULL; + { + /* If this was the only page */ + if (self->priv->page_info == NULL) + { + self->priv->visible_page_info = NULL; + } + /* Otherwise set visible page as the first in our list. */ + else + { + EosPageManagerPageInfo *visible_info = g_list_first (self->priv->page_info)->data; + set_visible_page_from_info (self, visible_info); + } + + } page_info_free (info); diff --git a/test/test-page-manager.c b/test/test-page-manager.c index 4122d7e..ecff997 100644 --- a/test/test-page-manager.c +++ b/test/test-page-manager.c @@ -411,11 +411,18 @@ test_pm_remove_page_undefined_behavior (PageManagerFixture *fixture, gconstpointer unused) { GtkWidget *visible_page; + GtkWidget *page1 = gtk_label_new ("page1"); + GtkWidget *page2 = gtk_label_new ("page2"); + gtk_container_add (GTK_CONTAINER (fixture->pm), page1); + gtk_container_add (GTK_CONTAINER (fixture->pm), page2); + eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (fixture->pm), + page1); visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); - g_assert (visible_page == fixture->page1); - gtk_container_remove (GTK_CONTAINER (fixture->pm), fixture->page1); + g_assert (visible_page == page1); + gtk_container_remove (GTK_CONTAINER (fixture->pm), page1); + // Only one page left, so it should be the visible page. visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm)); - g_assert (visible_page != fixture->page1); + g_assert (visible_page == page2); } static void @@ -599,7 +606,7 @@ add_page_manager_tests (void) { ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-behavior", test_pm_remove_page_behavior); - ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-undefined-behavior", - test_pm_remove_page_undefined_behavior); + ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/remove-page-undefined-behavior", + test_pm_remove_page_undefined_behavior); } } -- cgit v1.2.3