diff options
author | Matt Watson <mattdangerw@gmail.com> | 2013-06-04 17:09:22 -0700 |
---|---|---|
committer | Matt Watson <mattdangerw@gmail.com> | 2013-06-10 13:38:01 -0700 |
commit | 799c49aa4a564e9135b93a435bc8e7f7f5047708 (patch) | |
tree | 82a090bee5b52cfb1eea3581a21a02025fbf4b2e | |
parent | ff976f3f6031439d473fd7c60a09a26c0f2b0e71 (diff) |
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]
-rw-r--r-- | endless/eospagemanager.c | 16 | ||||
-rw-r--r-- | 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); } } |