summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Watson <mattdangerw@gmail.com>2013-06-04 17:09:22 -0700
committerMatt Watson <mattdangerw@gmail.com>2013-06-10 13:38:01 -0700
commit799c49aa4a564e9135b93a435bc8e7f7f5047708 (patch)
tree82a090bee5b52cfb1eea3581a21a02025fbf4b2e
parentff976f3f6031439d473fd7c60a09a26c0f2b0e71 (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.c16
-rw-r--r--test/test-page-manager.c17
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);
}
}