summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Watson <mattdangerw@gmail.com>2014-05-12 16:35:18 -0700
committerMatt Watson <mattdangerw@gmail.com>2014-05-13 12:50:02 -0700
commit396bfe04660e17d02c147488edd0c752682afecf (patch)
treef3ca112de3b227468b85ecb6cb9fbb3dafff650f
parent7a2edd48f30f1f0bd1496c69c58ca9ac0e791d49 (diff)
EosPageManager uses GtkStack properties directly
Use the visible-child and visible-child-name properties of GtkStack in lieu of visible-page and visible-page-name. Use the transition-duration, transition-type and name properties of GtkStack instead of proxying in page manager with properties of that same name. The page manger becomes nothing more than a stack with custom child properties for use in EosWindow, and becomes a lot simpler. This breaks the page manager api and will require changes in the apps as well [endlessm/eos-sdk#985]
-rw-r--r--docs/reference/endless/endless-sections.txt13
-rw-r--r--endless/Makefile.am2
-rw-r--r--endless/eospagemanager-private.h18
-rw-r--r--endless/eospagemanager.c566
-rw-r--r--endless/eospagemanager.h63
-rw-r--r--endless/eossplashpagemanager.c6
-rw-r--r--endless/eoswindow.c24
-rw-r--r--test/endless/test-page-manager.c338
-rw-r--r--test/endless/test-splash-page-manager.c35
-rw-r--r--test/smoke-tests/app-window.js72
-rw-r--r--test/smoke-tests/webhelper/webview.js8
-rw-r--r--wikipedia/views/domain_wiki_view.js22
12 files changed, 77 insertions, 1090 deletions
diff --git a/docs/reference/endless/endless-sections.txt b/docs/reference/endless/endless-sections.txt
index 0799fba..0dc0428 100644
--- a/docs/reference/endless/endless-sections.txt
+++ b/docs/reference/endless/endless-sections.txt
@@ -58,12 +58,6 @@ EosWindowPrivate
<FILE>page-manager</FILE>
EosPageManager
eos_page_manager_new
-eos_page_manager_get_visible_page
-eos_page_manager_set_visible_page
-eos_page_manager_get_visible_page_name
-eos_page_manager_set_visible_page_name
-eos_page_manager_get_page_name
-eos_page_manager_set_page_name
eos_page_manager_get_page_left_topbar_widget
eos_page_manager_set_page_left_topbar_widget
eos_page_manager_get_page_center_topbar_widget
@@ -76,12 +70,7 @@ eos_page_manager_get_page_background_position
eos_page_manager_set_page_background_position
eos_page_manager_get_page_background_repeats
eos_page_manager_set_page_background_repeats
-eos_page_manager_get_transition_duration
-eos_page_manager_set_transition_duration
-eos_page_manager_get_transition_type
-eos_page_manager_set_transition_type
eos_page_manager_remove_page_by_name
-EosPageManagerTransitionType
<SUBSECTION Standard>
EOS_IS_PAGE_MANAGER
EOS_IS_PAGE_MANAGER_CLASS
@@ -89,10 +78,8 @@ EOS_PAGE_MANAGER
EOS_PAGE_MANAGER_CLASS
EOS_PAGE_MANAGER_GET_CLASS
EOS_TYPE_PAGE_MANAGER
-EOS_TYPE_PAGE_MANAGER_TRANSITION_TYPE
EosPageManagerClass
eos_page_manager_get_type
-eos_page_manager_transition_type_get_type
<SUBSECTION Private>
EosPageManagerPrivate
</SECTION>
diff --git a/endless/Makefile.am b/endless/Makefile.am
index a1d4e15..f0a6a6a 100644
--- a/endless/Makefile.am
+++ b/endless/Makefile.am
@@ -43,7 +43,7 @@ endless_library_sources = \
endless/eoscustomcontainer.c \
endless/eoshello.c \
endless/eosinit.c endless/eosinit-private.h \
- endless/eospagemanager.c endless/eospagemanager-private.h \
+ endless/eospagemanager.c \
endless/eosresource.c endless/eosresource-private.h \
endless/eossplashpagemanager.c \
endless/eostopbar.c endless/eostopbar-private.h \
diff --git a/endless/eospagemanager-private.h b/endless/eospagemanager-private.h
deleted file mode 100644
index c39a118..0000000
--- a/endless/eospagemanager-private.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2013 Endless Mobile, Inc. */
-
-#ifndef EOS_PAGE_MANAGER_PRIVATE_H
-#define EOS_PAGE_MANAGER_PRIVATE_H
-
-#include "eostypes.h"
-
-#include "eospagemanager.h"
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-GtkStackTransitionType eos_page_manager_get_gtk_stack_transition_type (EosPageManager *self);
-
-G_END_DECLS
-
-#endif /* EOS_PAGE_MANAGER_PRIVATE_H */
diff --git a/endless/eospagemanager.c b/endless/eospagemanager.c
index 3100d74..78d5b56 100644
--- a/endless/eospagemanager.c
+++ b/endless/eospagemanager.c
@@ -2,7 +2,6 @@
#include "config.h"
#include "eospagemanager.h"
-#include "eospagemanager-private.h"
#include <gtk/gtk.h>
@@ -73,16 +72,10 @@
* If the removed page was the only page, then the page manager will display
* nothing.
* If there are multiple pages still in the page manager, you should never
- * remove the visible-page. Always set a new visible page before removing the
+ * remove the visible-child. Always set a new visible child before removing the
* current one. A critical warning will be emitted if you remove the visible-
* page when there are still other pages in the page manager.
*
- * <warning>
- * <para>Removing pages with gtk_container_remove() is currently broken due to
- * a bug in GTK. Use eos_page_manager_remove_page_by_name() for the time
- * being.</para>
- * </warning>
- *
* In general, it is convenient to refer to a page by its name when dealing with
* the page manager, so you should make a point of giving all your pages names.
*/
@@ -92,7 +85,6 @@
typedef struct {
GtkWidget *page;
- gchar *name;
GtkWidget *left_topbar_widget;
GtkWidget *center_topbar_widget;
gchar *background_uri;
@@ -103,47 +95,14 @@ typedef struct {
typedef struct {
GList *page_info; /* GList<EosPageManagerPageInfo> */
- GHashTable *pages_by_name; /* GHashTable<gchar *, EosPageManagerPageInfo *> */
GHashTable *pages_by_widget; /* GHashTable<GtkWidget *, EosPageManagerPageInfo *> */
- EosPageManagerPageInfo *visible_page_info;
- EosPageManagerTransitionType transition_type;
} EosPageManagerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (EosPageManager, eos_page_manager, GTK_TYPE_STACK)
-GType
-eos_page_manager_transition_type_get_type (void)
-{
- static GType etype = 0;
- if (G_UNLIKELY(etype == 0)) {
- static const GEnumValue values[] = {
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE, "EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE", "none" },
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE, "EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE", "crossfade" },
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_RIGHT, "EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_RIGHT", "slide_right" },
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_LEFT, "EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_LEFT", "slide_left" },
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_UP, "EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_UP", "slide_up" },
- { EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_DOWN, "EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_DOWN", "slide_down" },
- { 0, NULL, NULL }
- };
- etype = g_enum_register_static (g_intern_static_string ("EosPageManagerTransitionType"), values);
- }
- return etype;
-}
-
-enum
-{
- PROP_0,
- PROP_VISIBLE_PAGE,
- PROP_VISIBLE_PAGE_NAME,
- PROP_TRANSITION_DURATION,
- PROP_TRANSITION_TYPE,
- NPROPS
-};
-
enum
{
CHILD_PROP_0,
- CHILD_PROP_NAME,
CHILD_PROP_LEFT_TOPBAR_WIDGET,
CHILD_PROP_CENTER_TOPBAR_WIDGET,
CHILD_PROP_BACKGROUND_URI,
@@ -153,13 +112,11 @@ enum
NCHILDPROPS
};
-static GParamSpec *eos_page_manager_props[NPROPS] = { NULL, };
static GParamSpec *eos_page_manager_child_props[NCHILDPROPS] = { NULL, };
static void
page_info_free (EosPageManagerPageInfo *info)
{
- g_free (info->name);
g_free (info->background_uri);
g_free (info->background_size);
g_free (info->background_position);
@@ -191,24 +148,6 @@ find_page_info_by_widget (EosPageManager *self,
return g_hash_table_lookup (priv->pages_by_widget, page);
}
-/*
- * find_page_info_by_name:
- * @self: the page manager
- * @name: the name to look for
- *
- * Searches for the page info corresponding to the child with name @name.
- *
- * Returns: the #EosPageManagerPageInfo for @name, or %NULL if @name is not the
- * name of a child of @self.
- */
-static EosPageManagerPageInfo *
-find_page_info_by_name (EosPageManager *self,
- const gchar *name)
-{
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- return g_hash_table_lookup (priv->pages_by_name, name);
-}
-
/* Convenience function, since this warning occurs at several places */
static void
warn_page_widget_not_found (EosPageManager *self,
@@ -220,16 +159,6 @@ warn_page_widget_not_found (EosPageManager *self,
self);
}
-/* Convenience function, since this warning occurs at several places */
-static void
-warn_page_name_not_found (EosPageManager *self,
- const gchar *name)
-{
- g_critical ("EosPageManager %p has no page named %s",
- self,
- name);
-}
-
/* Invariants: number of pages in list and number of pages in pages_by_widget
hash table must be equal; and number of pages in pages_by_name hash table must
be equal or less. This check is expensive, should only be enabled for debugging.
@@ -243,97 +172,16 @@ assert_internal_state (EosPageManager *self)
g_assert_cmpuint (list_length,
==,
g_hash_table_size (priv->pages_by_widget));
- g_assert_cmpuint (list_length,
- >=,
- g_hash_table_size (priv->pages_by_name));
#endif
}
static void
-set_visible_page_from_info (EosPageManager *self,
- EosPageManagerPageInfo *info)
-{
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- gtk_stack_set_visible_child (GTK_STACK (self), info->page);
-
- priv->visible_page_info = info;
-
- GObject *self_object = G_OBJECT (self);
- g_object_notify(self_object, "visible-page");
- g_object_notify(self_object, "visible-page-name");
-}
-
-static void
-eos_page_manager_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EosPageManager *self = EOS_PAGE_MANAGER (object);
-
- switch (property_id)
- {
- case PROP_VISIBLE_PAGE:
- g_value_set_object (value, eos_page_manager_get_visible_page (self));
- break;
-
- case PROP_VISIBLE_PAGE_NAME:
- g_value_set_string (value, eos_page_manager_get_visible_page_name (self));
- break;
-
- case PROP_TRANSITION_DURATION:
- g_value_set_uint (value, eos_page_manager_get_transition_duration (self));
- break;
-
- case PROP_TRANSITION_TYPE:
- g_value_set_enum (value, eos_page_manager_get_transition_type (self));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-eos_page_manager_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EosPageManager *self = EOS_PAGE_MANAGER (object);
-
- switch (property_id)
- {
- case PROP_VISIBLE_PAGE:
- eos_page_manager_set_visible_page (self, g_value_get_object (value));
- break;
-
- case PROP_VISIBLE_PAGE_NAME:
- eos_page_manager_set_visible_page_name (self, g_value_get_string (value));
- break;
-
- case PROP_TRANSITION_DURATION:
- eos_page_manager_set_transition_duration (self, g_value_get_uint (value));
- break;
-
- case PROP_TRANSITION_TYPE:
- eos_page_manager_set_transition_type (self, g_value_get_enum (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
eos_page_manager_dispose (GObject *object)
{
EosPageManager *self = EOS_PAGE_MANAGER (object);
EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
g_list_foreach (priv->page_info, (GFunc)top_bars_unref, NULL);
- // Unset visible page so it doesn't keep updating as widgets are removed
- priv->visible_page_info = NULL;
G_OBJECT_CLASS (eos_page_manager_parent_class)->dispose (object);
}
@@ -343,11 +191,10 @@ eos_page_manager_finalize (GObject *object)
EosPageManager *self = EOS_PAGE_MANAGER (object);
EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
+ G_OBJECT_CLASS (eos_page_manager_parent_class)->finalize (object);
+
g_list_foreach (priv->page_info, (GFunc)page_info_free, NULL);
g_hash_table_destroy(priv->pages_by_widget);
- g_hash_table_destroy(priv->pages_by_name);
-
- G_OBJECT_CLASS (eos_page_manager_parent_class)->finalize (object);
}
static void
@@ -357,7 +204,6 @@ eos_page_manager_add (GtkContainer *container,
EosPageManager *self = EOS_PAGE_MANAGER (container);
EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- GTK_CONTAINER_CLASS (eos_page_manager_parent_class)->add (container, new_page);
EosPageManagerPageInfo *info = g_slice_new0 (EosPageManagerPageInfo);
info->background_size = g_strdup (DEFAULT_BACKGROUND_SIZE);
info->background_position = g_strdup (DEFAULT_BACKGROUND_POSITION);
@@ -366,10 +212,7 @@ eos_page_manager_add (GtkContainer *container,
priv->page_info = g_list_prepend (priv->page_info, info);
g_hash_table_insert (priv->pages_by_widget, new_page, info);
- /* If there were no pages yet, then this one must become the visible one */
- if (priv->visible_page_info == NULL)
- eos_page_manager_set_visible_page (self, new_page);
-
+ GTK_CONTAINER_CLASS (eos_page_manager_parent_class)->add (container, new_page);
assert_internal_state (self);
}
@@ -389,26 +232,6 @@ eos_page_manager_remove (GtkContainer *container,
}
priv->page_info = g_list_remove (priv->page_info, info);
g_hash_table_remove (priv->pages_by_widget, page);
- if (info->name != NULL)
- g_hash_table_remove (priv->pages_by_name, info->name);
-
- if (priv->visible_page_info == info)
- {
- /* If this was the only page */
- if (priv->page_info == NULL)
- {
- priv->visible_page_info = NULL;
- }
- /* Otherwise set visible page as the first in our list. */
- else
- {
- g_critical ("Removing the currently visible page %p from the page manager.",
- page);
- EosPageManagerPageInfo *visible_info = g_list_first (priv->page_info)->data;
- set_visible_page_from_info (self, visible_info);
- }
-
- }
page_info_free (info);
@@ -426,10 +249,6 @@ eos_page_manager_get_child_property (GtkContainer *container,
switch (property_id)
{
- case CHILD_PROP_NAME:
- g_value_set_string (value, eos_page_manager_get_page_name (self, child));
- break;
-
case CHILD_PROP_BACKGROUND_URI:
g_value_set_string (value,
eos_page_manager_get_page_background_uri (self,
@@ -483,10 +302,6 @@ eos_page_manager_set_child_property (GtkContainer *container,
switch (property_id)
{
- case CHILD_PROP_NAME:
- eos_page_manager_set_page_name (self, child, g_value_get_string (value));
- break;
-
case CHILD_PROP_BACKGROUND_URI:
eos_page_manager_set_page_background_uri (self, child,
g_value_get_string (value));
@@ -529,8 +344,6 @@ eos_page_manager_class_init (EosPageManagerClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
- object_class->get_property = eos_page_manager_get_property;
- object_class->set_property = eos_page_manager_set_property;
object_class->dispose = eos_page_manager_dispose;
object_class->finalize = eos_page_manager_finalize;
@@ -540,73 +353,6 @@ eos_page_manager_class_init (EosPageManagerClass *klass)
container_class->set_child_property = eos_page_manager_set_child_property;
/**
- * EosPageManager:visible-page:
- *
- * A reference to the page widget that is currently being displayed by the
- * page manager.
- * If the page manager has no pages, then this is %NULL.
- */
- eos_page_manager_props[PROP_VISIBLE_PAGE] =
- g_param_spec_object ("visible-page", "Visible page",
- "Page widget currently displaying in the page manager",
- GTK_TYPE_WIDGET,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- /**
- * 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, 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",
- "Name of page currently displaying in the page "
- "manager",
- "",
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
- * EosPageManager:transition-duration:
- *
- * The time it will take to animate between pages in the page managers, in
- * milliseconds.
- */
- eos_page_manager_props[PROP_TRANSITION_DURATION] =
- g_param_spec_uint ("transition-duration", "Transition duration",
- "The animation duration, in milliseconds",
- 0, G_MAXUINT,
- 200,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
-
-
- /**
- * EosPageManager:transition-type:
- *
- * The type of animation to use when switching between pages in the page
- * manager. The pages can crossfade from one to the next, or slide in from
- * any direction.
- */
- eos_page_manager_props[PROP_TRANSITION_TYPE] =
- g_param_spec_enum ("transition-type", "Transition type",
- "The type of animation used to transition",
- EOS_TYPE_PAGE_MANAGER_TRANSITION_TYPE,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
-
- g_object_class_install_properties (object_class, NPROPS,
- eos_page_manager_props);
-
- /**
- * EosPageManager:name:
- *
- * The name of this page. Make sure to choose a unique name.
- */
- eos_page_manager_child_props[CHILD_PROP_NAME] =
- g_param_spec_string ("name", "Name", "Unique ID for the page",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
* EosPageManager:left-topbar-widget:
*
* The left topbar widget belonging to this page, to be displayed on the
@@ -685,7 +431,7 @@ eos_page_manager_class_init (EosPageManagerClass *klass)
/* Install child properties all at once, because there is no
gtk_container_class_install_child_properties() function */
int count;
- for (count = PROP_0 + 1; count < NCHILDPROPS; count++)
+ for (count = CHILD_PROP_0 + 1; count < NCHILDPROPS; count++)
gtk_container_class_install_child_property (container_class, count,
eos_page_manager_child_props[count]);
}
@@ -696,10 +442,6 @@ eos_page_manager_init (EosPageManager *self)
EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
priv->pages_by_widget = g_hash_table_new (g_direct_hash,
g_direct_equal);
- priv->pages_by_name = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
}
/* Public API */
@@ -718,187 +460,6 @@ eos_page_manager_new (void)
}
/**
- * eos_page_manager_get_visible_page:
- * @self: the page manager
- *
- * Gets the page widget that @self is currently displaying.
- * See #EosPageManager:visible-page for more information.
- *
- * Returns: (transfer none): the page #GtkWidget, or %NULL if @self does not
- * have any pages.
- */
-GtkWidget *
-eos_page_manager_get_visible_page (EosPageManager *self)
-{
- g_return_val_if_fail (EOS_IS_PAGE_MANAGER (self), NULL);
-
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- if (priv->visible_page_info == NULL)
- return NULL;
-
- return priv->visible_page_info->page;
-}
-
-/**
- * eos_page_manager_set_visible_page:
- * @self: the page manager
- * @page: the page to switch to
- *
- * Switches the page manager @self to display @page.
- * The @page widget must previously have been added to the page manager.
- * See #EosPageManager:visible-page for more information.
- */
-void
-eos_page_manager_set_visible_page (EosPageManager *self,
- GtkWidget *page)
-{
- g_return_if_fail (EOS_IS_PAGE_MANAGER (self));
-
- EosPageManagerPageInfo *info = find_page_info_by_widget (self, page);
- if (info == NULL)
- {
- warn_page_widget_not_found (self, page);
- return;
- }
-
- set_visible_page_from_info (self, info);
-}
-
-/**
- * eos_page_manager_get_visible_page_name:
- * @self: the page manager
- *
- * Gets the name of the page widget that @self is currently displaying.
- * See #EosPageManager:visible-page for more information.
- *
- * 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)
-{
- g_return_val_if_fail (EOS_IS_PAGE_MANAGER (self), NULL);
-
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- if (priv->visible_page_info == NULL)
- return NULL;
-
- return priv->visible_page_info->name;
-}
-
-/**
- * eos_page_manager_set_visible_page_name:
- * @self: the page manager
- * @page_name: the name of the page to switch to
- *
- * Switches the page manager @self to display the page called @page_name.
- * This page must previously have been added to the page manager.
- * See #EosPageManager:visible-page for more information.
- */
-void
-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)
- {
- warn_page_name_not_found (self, page_name);
- return;
- }
-
- set_visible_page_from_info (self, info);
-}
-
-/**
- * eos_page_manager_get_page_name:
- * @self: the page manager
- * @page: the page to be queried
- *
- * Gets the name of @page, which must previously have been added to the
- * page manager.
- * See #EosPageManager:name for more information.
- *
- * Returns: (allow-none): the name of @page, or %NULL if @page does not have a
- * name.
- */
-const gchar *
-eos_page_manager_get_page_name (EosPageManager *self,
- GtkWidget *page)
-{
- g_return_val_if_fail (EOS_IS_PAGE_MANAGER (self), NULL);
- g_return_val_if_fail (GTK_IS_WIDGET (page), NULL);
-
- EosPageManagerPageInfo *info = find_page_info_by_widget (self, page);
- if (info == NULL)
- {
- warn_page_widget_not_found (self, page);
- return NULL;
- }
-
- return info->name;
-}
-
-/**
- * eos_page_manager_set_page_name:
- * @self: the page manager
- * @page: the page to be renamed
- * @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
-eos_page_manager_set_page_name (EosPageManager *self,
- GtkWidget *page,
- const gchar *name)
-{
- g_return_if_fail (EOS_IS_PAGE_MANAGER (self));
- g_return_if_fail (GTK_IS_WIDGET (page));
-
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- EosPageManagerPageInfo *info;
-
- /* Two pages with the same name are not allowed */
- if (name != NULL)
- {
- 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);
- if (info == NULL)
- {
- warn_page_widget_not_found (self, page);
- return;
- }
-
- if (g_strcmp0(info->name, name) == 0)
- return;
-
- if (info->name != NULL)
- g_hash_table_remove (priv->pages_by_name, info->name);
- g_free (info->name);
- info->name = g_strdup (name);
- if (name != NULL)
- g_hash_table_insert (priv->pages_by_name, g_strdup (name), info);
-
- gtk_container_child_notify (GTK_CONTAINER (self), page, "name");
-
- assert_internal_state (self);
-}
-
-/**
* eos_page_manager_get_page_left_topbar_widget:
* @self: the page manager
* @page: the page to be queried
@@ -1241,115 +802,16 @@ eos_page_manager_remove_page_by_name (EosPageManager *self,
{
g_return_if_fail (EOS_IS_PAGE_MANAGER (self));
g_return_if_fail (name != NULL);
+ GtkContainer *container = GTK_CONTAINER (self);
- EosPageManagerPageInfo *info = find_page_info_by_name (self, name);
- if (info == NULL)
- {
- warn_page_name_not_found (self, name);
- return;
- }
-
- gtk_container_remove (GTK_CONTAINER (self), info->page);
-
- assert_internal_state (self);
-}
-
-/**
- * eos_page_manager_get_transition_duration:
- * @self: the page manager
- *
- * Gets the animation duration of page transitions, in milliseconds. See
- * #EosPageManager:transition-duration for more information.
- *
- * Returns: the current transition time of the page manager.
- */
-guint
-eos_page_manager_get_transition_duration (EosPageManager *self)
-{
- g_return_val_if_fail (EOS_IS_PAGE_MANAGER (self), 0);
- return gtk_stack_get_transition_duration (GTK_STACK (self));
-}
-
-/**
- * eos_page_manager_set_transition_duration:
- * @self: the page manager
- * @duration: the duration of page transitions, in milliseconds
- *
- * Sets the animation duration of page transitions, in milliseconds. See
- * #EosPageManager:transition-duration for more information.
- */
-void
-eos_page_manager_set_transition_duration (EosPageManager *self,
- guint duration)
-{
- g_return_if_fail (EOS_IS_PAGE_MANAGER (self));
- gtk_stack_set_transition_duration (GTK_STACK (self), duration);
- g_object_notify (G_OBJECT (self), "transition-duration");
-}
-
-/**
- * eos_page_manager_get_transition_type:
- * @self: the page manager
- *
- * Gets the animation type of page transitions. See
- * #EosPageManager:transition-type for more information.
- *
- * Returns: the current transition type of the page manager.
- */
-EosPageManagerTransitionType
-eos_page_manager_get_transition_type (EosPageManager *self)
-{
- g_return_val_if_fail (EOS_IS_PAGE_MANAGER (self), EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE);
-
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- return priv->transition_type;
-}
-
-
-/**
- * eos_page_manager_set_transition_type:
- * @self: the page manager
- * @transition_type: the type of page transitions
- *
- * Sets the animation type of page transitions. See
- * #EosPageManager:transition-type for more information.
- */
-void
-eos_page_manager_set_transition_type (EosPageManager *self,
- EosPageManagerTransitionType transition_type)
-{
- g_return_if_fail (EOS_IS_PAGE_MANAGER (self));
-
- EosPageManagerPrivate *priv = eos_page_manager_get_instance_private (self);
- priv->transition_type = transition_type;
- GtkStackTransitionType gtk_stack_transition;
- switch (transition_type)
+ GList *l;
+ for (l = gtk_container_get_children (container); l != NULL; l = l->next)
{
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE:
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE:
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_RIGHT:
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_LEFT:
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_UP:
- case EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_DOWN:
- gtk_stack_transition = (GtkStackTransitionType)priv->transition_type;
- break;
- default:
- gtk_stack_transition = GTK_STACK_TRANSITION_TYPE_NONE;
- break;
+ GtkWidget *child = l->data;
+ gchar *child_name = NULL;
+ gtk_container_child_get (container, child, "name", &child_name, NULL);
+ if (child_name != NULL && g_strcmp0 (child_name, name) == 0)
+ gtk_container_remove (container, child);
+ g_free (child_name);
}
- gtk_stack_set_transition_type (GTK_STACK (self),
- gtk_stack_transition);
- g_object_notify (G_OBJECT (self), "transition-type");
-}
-
-/*
- * eos_page_manager_get_gtk_stack_transition_type:
- * @self: the page manager
- *
- * Gets the internal gtk_stack transition type used to animate the page manager.
- */
-GtkStackTransitionType
-eos_page_manager_get_gtk_stack_transition_type (EosPageManager *self)
-{
- return gtk_stack_get_transition_type (GTK_STACK (self));
}
diff --git a/endless/eospagemanager.h b/endless/eospagemanager.h
index e2d4a2b..38e0ac0 100644
--- a/endless/eospagemanager.h
+++ b/endless/eospagemanager.h
@@ -38,29 +38,6 @@ G_BEGIN_DECLS
typedef struct _EosPageManager EosPageManager;
typedef struct _EosPageManagerClass EosPageManagerClass;
-#define EOS_TYPE_PAGE_MANAGER_TRANSITION_TYPE (eos_page_manager_transition_type_get_type ())
-
-/**
- * EosPageManagerTransitionType:
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE: No animation, regardless of duration.
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE: Pages will not move, but fade into one another.
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_RIGHT: The old page will slide off to the right.
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_LEFT: The old page will slide off to the left.
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_UP: The old page will slide up the screen.
- * @EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_DOWN: The old page will slide down the screen.
- *
- * Enum values to specify the type of animation to use when transitioning
- * between pages.
- **/
-typedef enum {
- EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_RIGHT,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_LEFT,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_UP,
- EOS_PAGE_MANAGER_TRANSITION_TYPE_SLIDE_DOWN
-} EosPageManagerTransitionType;
-
/**
* EosPageManager:
*
@@ -83,35 +60,9 @@ EOS_SDK_ALL_API_VERSIONS
GType eos_page_manager_get_type (void) G_GNUC_CONST;
EOS_SDK_ALL_API_VERSIONS
-GType eos_page_manager_transition_type_get_type (void) G_GNUC_CONST;
-
-EOS_SDK_ALL_API_VERSIONS
GtkWidget *eos_page_manager_new (void);
EOS_SDK_ALL_API_VERSIONS
-GtkWidget *eos_page_manager_get_visible_page (EosPageManager *self);
-
-EOS_SDK_ALL_API_VERSIONS
-void eos_page_manager_set_visible_page (EosPageManager *self,
- GtkWidget *page);
-
-EOS_SDK_ALL_API_VERSIONS
-const gchar *eos_page_manager_get_visible_page_name (EosPageManager *self);
-
-EOS_SDK_ALL_API_VERSIONS
-void eos_page_manager_set_visible_page_name (EosPageManager *self,
- const gchar *page_name);
-
-EOS_SDK_ALL_API_VERSIONS
-const gchar *eos_page_manager_get_page_name (EosPageManager *self,
- GtkWidget *page);
-
-EOS_SDK_ALL_API_VERSIONS
-void eos_page_manager_set_page_name (EosPageManager *self,
- GtkWidget *page,
- const gchar *name);
-
-EOS_SDK_ALL_API_VERSIONS
GtkWidget *eos_page_manager_get_page_left_topbar_widget (EosPageManager *self,
GtkWidget *page);
@@ -130,20 +81,6 @@ void eos_page_manager_set_page_center_topbar_widget (EosPageManage
GtkWidget *center_topbar_widget);
EOS_SDK_ALL_API_VERSIONS
-void eos_page_manager_set_transition_duration (EosPageManager *self,
- guint duration);
-
-EOS_SDK_ALL_API_VERSIONS
-guint eos_page_manager_get_transition_duration (EosPageManager *self);
-
-EOS_SDK_ALL_API_VERSIONS
-void eos_page_manager_set_transition_type (EosPageManager *self,
- EosPageManagerTransitionType transition_type);
-
-EOS_SDK_ALL_API_VERSIONS
-EosPageManagerTransitionType eos_page_manager_get_transition_type (EosPageManager *self);
-
-EOS_SDK_ALL_API_VERSIONS
const gchar *eos_page_manager_get_page_background_uri (EosPageManager *self,
GtkWidget *page);
diff --git a/endless/eossplashpagemanager.c b/endless/eossplashpagemanager.c
index a22ff26..781c9e5 100644
--- a/endless/eossplashpagemanager.c
+++ b/endless/eossplashpagemanager.c
@@ -246,7 +246,7 @@ eos_splash_page_manager_set_splash_page (EosSplashPageManager *self,
{
GTK_CONTAINER_CLASS (eos_splash_page_manager_parent_class)->add (GTK_CONTAINER (self), page);
if (!priv->main_page_shown)
- eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (self), page);
+ gtk_stack_set_visible_child (GTK_STACK (self), page);
}
priv->splash_page = page;
g_object_notify( G_OBJECT (self), "splash-page");
@@ -322,7 +322,7 @@ eos_splash_page_manager_show_main_page (EosSplashPageManager *self)
return;
}
priv->main_page_shown = TRUE;
- eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (self), priv->main_page);
+ gtk_stack_set_visible_child (GTK_STACK (self), priv->main_page);
}
/**
@@ -345,5 +345,5 @@ eos_splash_page_manager_show_splash_page (EosSplashPageManager *self)
return;
}
priv->main_page_shown = FALSE;
- eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (self), priv->splash_page);
+ gtk_stack_set_visible_child (GTK_STACK (self), priv->splash_page);
}
diff --git a/endless/eoswindow.c b/endless/eoswindow.c
index 1ac5678..b6bd192 100644
--- a/endless/eoswindow.c
+++ b/endless/eoswindow.c
@@ -6,7 +6,6 @@
#include "eosapplication.h"
#include "eospagemanager.h"
-#include "eospagemanager-private.h"
#include "eostopbar-private.h"
#include <gtk/gtk.h>
@@ -109,7 +108,7 @@ typedef struct {
/* For keeping track of what to display alongside the current page */
GtkWidget *current_page;
- gulong visible_page_property_handler;
+ gulong visible_child_property_handler;
GtkCssProvider *background_provider;
gchar *current_background_css_props;
} EosWindowPrivate;
@@ -207,9 +206,9 @@ sync_stack_animation (EosWindow *self)
EosWindowPrivate *priv = eos_window_get_instance_private (self);
EosPageManager *pm = EOS_PAGE_MANAGER (priv->page_manager);
gtk_stack_set_transition_type (GTK_STACK (priv->background_stack),
- eos_page_manager_get_gtk_stack_transition_type (pm));
+ gtk_stack_get_transition_type (GTK_STACK (pm)));
gtk_stack_set_transition_duration (GTK_STACK (priv->background_stack),
- eos_page_manager_get_transition_duration (pm));
+ gtk_stack_get_transition_duration (GTK_STACK (pm)));
}
// Helper to generate frame css override
@@ -276,7 +275,7 @@ update_page_background (EosWindow *self)
}
/*
- * update_visible_page_properties:
+ * update_visible_child_properties:
* @widget: the page
* @child_property: the property that changed
* @user_data: pointer to the window
@@ -285,7 +284,7 @@ update_page_background (EosWindow *self)
* changes.
*/
static void
-update_visible_page_properties (GtkWidget *widget,
+update_visible_child_properties (GtkWidget *widget,
GParamSpec *child_property,
gpointer data)
{
@@ -312,15 +311,18 @@ update_visible_page_properties (GtkWidget *widget,
static void
update_page (EosWindow *self)
{
+ if (gtk_widget_in_destruction (GTK_WIDGET (self)))
+ return;
+
EosWindowPrivate *priv = eos_window_get_instance_private (self);
EosPageManager *pm = EOS_PAGE_MANAGER (priv->page_manager);
if (priv->current_page)
{
g_signal_handler_disconnect (priv->current_page,
- priv->visible_page_property_handler);
+ priv->visible_child_property_handler);
}
- priv->current_page = eos_page_manager_get_visible_page (pm);
+ priv->current_page = gtk_stack_get_visible_child (GTK_STACK (pm));
sync_stack_animation (self);
update_page_left_topbar (self);
@@ -331,10 +333,10 @@ update_page (EosWindow *self)
if (priv->current_page)
{
- priv->visible_page_property_handler =
+ priv->visible_child_property_handler =
g_signal_connect (priv->current_page,
"child-notify",
- G_CALLBACK (update_visible_page_properties),
+ G_CALLBACK (update_visible_child_properties),
self);
}
}
@@ -898,7 +900,7 @@ eos_window_set_page_manager (EosWindow *self,
update_page (self);
- g_signal_connect_swapped (priv->page_manager, "notify::visible-page",
+ g_signal_connect_swapped (priv->page_manager, "notify::visible-child",
G_CALLBACK (update_page), self);
}
diff --git a/test/endless/test-page-manager.c b/test/endless/test-page-manager.c
index 3eadd67..98cdadc 100644
--- a/test/endless/test-page-manager.c
+++ b/test/endless/test-page-manager.c
@@ -9,12 +9,6 @@
#define PAGE1_PROP_STRING "prop1"
#define PAGE2_PROP_STRING "prop2"
#define PAGE3_PROP_STRING "prop3"
-#define EXPECTED_PAGE_NAME PAGE2_NAME
-#define EXPECTED_CHANGED_PAGE_NAME "changed-name"
-#define DUPLICATE_PAGE_NAME "duplicate-name"
-#define EXPECTED_DUPLICATE_PAGE_NAME_ERRMSG "*Not setting page name to \"" \
- DUPLICATE_PAGE_NAME "\", because page manager already contains a page by " \
- "that name*"
#define EXPECTED_PAGE_PROP_STRING PAGE2_PROP_STRING
#define EXPECTED_CHANGED_NAME "changed-name"
#define ADD_PAGE_MANAGER_TEST(path, test_func) \
@@ -23,12 +17,6 @@
#define ADD_PAGE_MANAGER_TEST_WITH_ARGS(path, test_func, args) \
g_test_add ((path), PageManagerFixture, args, \
pm_fixture_setup, (test_func), pm_fixture_teardown)
-#define ADD_EMPTY_PAGE_MANAGER_TEST(path, test_func) \
- g_test_add ((path), PageManagerFixture, NULL, \
- empty_pm_fixture_setup, (test_func), pm_fixture_teardown);
-#define DURATION_DEFAULT 200
-#define DURATION_1 1
-#define DURATION_2 9999
#define BACKGROUND_SIZE_DEFAULT "100% 100%"
#define BACKGROUND_POSITION_DEFAULT "0% 0%"
@@ -73,13 +61,6 @@ pm_fixture_setup (PageManagerFixture *fixture,
}
static void
-empty_pm_fixture_setup (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- fixture->pm = eos_page_manager_new ();
-}
-
-static void
pm_fixture_teardown (PageManagerFixture *fixture,
gconstpointer unused)
{
@@ -87,110 +68,6 @@ pm_fixture_teardown (PageManagerFixture *fixture,
}
static void
-test_pm_get_set_visible_page (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- GtkWidget *visible_page;
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page != fixture->page2);
- eos_page_manager_set_visible_page (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2);
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page == fixture->page2);
-}
-
-static void
-test_pm_prop_visible_page (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- GtkWidget *visible_page;
- g_object_get (fixture->pm, "visible-page", &visible_page, NULL);
- g_assert (visible_page != fixture->page2);
- g_object_set (fixture->pm, "visible-page", fixture->page2, NULL);
- g_object_get (fixture->pm, "visible-page", &visible_page, NULL);
- g_assert (visible_page == fixture->page2);
-}
-
-static void
-test_pm_get_set_visible_page_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- const gchar *name;
- name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm));
- g_assert_cmpstr (name, !=, EXPECTED_PAGE_NAME);
- eos_page_manager_set_visible_page_name (EOS_PAGE_MANAGER (fixture->pm),
- EXPECTED_PAGE_NAME);
- name = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm));
- g_assert_cmpstr (name, ==, EXPECTED_PAGE_NAME);
-}
-
-static void
-test_pm_prop_visible_page_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- gchar *name;
- g_object_get (fixture->pm, "visible-page-name", &name, NULL);
- g_assert_cmpstr (name, !=, EXPECTED_PAGE_NAME);
- g_free (name);
- g_object_set (fixture->pm, "visible-page-name", EXPECTED_PAGE_NAME, NULL);
- g_object_get (fixture->pm, "visible-page-name", &name, NULL);
- g_assert_cmpstr (name, ==, EXPECTED_PAGE_NAME);
- g_free (name);
-}
-
-static void
-test_pm_get_set_page_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- const gchar *name;
- name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page1);
- g_assert_cmpstr (name, ==, PAGE1_NAME);
- name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2);
- g_assert_cmpstr (name, ==, PAGE2_NAME);
- name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page3);
- g_assert_cmpstr (name, ==, PAGE3_NAME);
- eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2,
- EXPECTED_CHANGED_NAME);
- name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2);
- g_assert_cmpstr (name, ==, EXPECTED_CHANGED_NAME);
-}
-
-static void
-test_pm_child_prop_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- gchar *name;
- gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page1,
- "name", &name,
- NULL);
- g_assert_cmpstr (name, ==, PAGE1_NAME);
- g_free (name);
- gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2,
- "name", &name,
- NULL);
- g_assert_cmpstr (name, ==, PAGE2_NAME);
- g_free (name);
- gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page3,
- "name", &name,
- NULL);
- g_assert_cmpstr (name, ==, PAGE3_NAME);
- g_free (name);
- gtk_container_child_set (GTK_CONTAINER (fixture->pm), fixture->page2,
- "name", EXPECTED_CHANGED_NAME,
- NULL);
- gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2,
- "name", &name,
- NULL);
- g_assert_cmpstr (name, ==, EXPECTED_CHANGED_NAME);
- g_free (name);
-}
-
-static void
test_pm_get_set_background_repeats (PageManagerFixture *fixture,
gconstpointer unused)
{
@@ -263,37 +140,6 @@ test_pm_child_prop_string (PageManagerFixture *fixture,
}
static void
-test_pm_page_no_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- const gchar *name_get;
- gchar *name_prop;
- 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 (name_get == NULL);
- gtk_container_child_get (GTK_CONTAINER (fixture->pm), new_page,
- "name", &name_prop,
- NULL);
- 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
test_pm_no_background_uri (PageManagerFixture *fixture,
gconstpointer unused)
{
@@ -420,43 +266,6 @@ test_pm_get_set_background_position (PageManagerFixture *fixture,
}
static void
-test_pm_remove_page_behavior (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- GtkWidget *visible_page;
- 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->page3);
- 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->page2);
- 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);
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page == NULL);
-}
-
-static void
-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 == 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 == page2);
-}
-
-static void
test_pm_remove_page_by_name (PageManagerFixture *fixture,
gconstpointer unused)
{
@@ -474,130 +283,9 @@ test_pm_remove_page_by_name (PageManagerFixture *fixture,
g_list_free (pages);
}
-static void
-test_pm_duplicate_page_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page1,
- DUPLICATE_PAGE_NAME);
- /* Should not complain */
- eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page1,
- DUPLICATE_PAGE_NAME);
-
- g_test_expect_message (TEST_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
- EXPECTED_DUPLICATE_PAGE_NAME_ERRMSG);
- eos_page_manager_set_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2,
- DUPLICATE_PAGE_NAME);
- g_test_assert_expected_messages ();
-
- const gchar *name = eos_page_manager_get_page_name (EOS_PAGE_MANAGER (fixture->pm),
- fixture->page2);
- g_assert_cmpstr (name, !=, DUPLICATE_PAGE_NAME);
-}
-
-static void
-test_pm_prop_transition_duration (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- guint duration;
- g_object_get (fixture->pm, "transition-duration", &duration, NULL);
- g_assert (duration == DURATION_DEFAULT);
- g_object_set (fixture->pm, "transition-duration", DURATION_2, NULL);
- g_object_get (fixture->pm, "transition-duration", &duration, NULL);
- g_assert (duration == DURATION_2);
-}
-
-static void
-test_pm_get_set_transition_duration (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- g_assert (DURATION_DEFAULT == eos_page_manager_get_transition_duration (EOS_PAGE_MANAGER (fixture->pm)));
- eos_page_manager_set_transition_duration (EOS_PAGE_MANAGER (fixture->pm), DURATION_1);
- g_assert (DURATION_1 == eos_page_manager_get_transition_duration (EOS_PAGE_MANAGER (fixture->pm)));
- eos_page_manager_set_transition_duration (EOS_PAGE_MANAGER (fixture->pm), DURATION_2);
- g_assert (DURATION_2 == eos_page_manager_get_transition_duration (EOS_PAGE_MANAGER (fixture->pm)));
-}
-
-static void
-test_pm_prop_transition_type (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- EosPageManagerTransitionType type;
- g_object_get (fixture->pm, "transition-type", &type, NULL);
- g_assert (type == EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE);
- g_object_set (fixture->pm, "transition-type", EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE, NULL);
- g_object_get (fixture->pm, "transition-type", &type, NULL);
- g_assert (type == EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE);
-}
-
-static void
-test_pm_get_set_transition_type (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- g_assert (EOS_PAGE_MANAGER_TRANSITION_TYPE_NONE == eos_page_manager_get_transition_type (EOS_PAGE_MANAGER (fixture->pm)));
- eos_page_manager_set_transition_type (EOS_PAGE_MANAGER (fixture->pm), EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE);
- g_assert (EOS_PAGE_MANAGER_TRANSITION_TYPE_CROSSFADE == eos_page_manager_get_transition_type (EOS_PAGE_MANAGER (fixture->pm)));
-}
-
-static void
-test_empty_pm_visible_page (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- GtkWidget *visible_page_get, *visible_page_prop;
- visible_page_get = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page_get == NULL);
- g_object_get (fixture->pm, "visible-page", &visible_page_prop, NULL);
- g_assert (visible_page_prop == NULL);
-}
-
-static void
-test_empty_pm_visible_page_name (PageManagerFixture *fixture,
- gconstpointer unused)
-{
- const gchar *name_get;
- gchar *name_prop;
- name_get = eos_page_manager_get_visible_page_name (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (name_get == NULL);
- g_object_get (fixture->pm, "visible-page-name", &name_prop, NULL);
- g_assert (name_prop == NULL);
-}
-
-static void
-test_empty_pm_add_page_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);
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page == page1);
- gtk_container_add (GTK_CONTAINER (fixture->pm), page2);
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->pm));
- g_assert (visible_page == page1); /* Not page2! */
-}
-
void
add_page_manager_tests (void)
{
- ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-visible-page",
- test_pm_get_set_visible_page);
- ADD_PAGE_MANAGER_TEST ("/page-manager/prop-visible-page",
- test_pm_prop_visible_page);
- ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-visible-page-name",
- test_pm_get_set_visible_page_name);
- ADD_PAGE_MANAGER_TEST ("/page-manager/prop-visible-page-name",
- test_pm_prop_visible_page_name);
- ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-page-name",
- test_pm_get_set_page_name);
- 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_WITH_ARGS ("/page-manager/child-prop-background-uri",
test_pm_child_prop_string,
"background-uri");
@@ -625,30 +313,4 @@ add_page_manager_tests (void)
test_pm_child_prop_background_repeats);
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",
- test_pm_duplicate_page_name);
- ADD_PAGE_MANAGER_TEST ("/page-manager/prop-transition-duration",
- test_pm_prop_transition_duration);
- ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-transition-duration",
- test_pm_get_set_transition_duration);
- ADD_PAGE_MANAGER_TEST ("/page-manager/prop-transition-type",
- test_pm_prop_transition_type);
- ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-transition-type",
- test_pm_get_set_transition_type);
- ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/empty-visible-page",
- test_empty_pm_visible_page);
- ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/empty-visible-page-name",
- test_empty_pm_visible_page_name);
- ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/add-page-behavior",
- test_empty_pm_add_page_behavior);
-
- /* Disabled until https://bugzilla.gnome.org/show_bug.cgi?id=699756 is fixed
- [endlessm/eos-sdk#67] */
- if (FALSE)
- {
- ADD_PAGE_MANAGER_TEST ("/page-manager/remove-page-behavior",
- test_pm_remove_page_behavior);
- ADD_EMPTY_PAGE_MANAGER_TEST ("/page-manager/remove-page-undefined-behavior",
- test_pm_remove_page_undefined_behavior);
- }
}
diff --git a/test/endless/test-splash-page-manager.c b/test/endless/test-splash-page-manager.c
index 06105aa..735f872 100644
--- a/test/endless/test-splash-page-manager.c
+++ b/test/endless/test-splash-page-manager.c
@@ -24,10 +24,15 @@ empty_spm_fixture_setup (SplashPageManagerFixture *fixture,
gconstpointer unused)
{
fixture->first_splash_page = gtk_label_new ("splash");
+ gtk_widget_show (fixture->first_splash_page);
fixture->second_splash_page = gtk_label_new ("ham sandwich");
+ gtk_widget_show (fixture->second_splash_page);
fixture->first_main_page = gtk_label_new ("main");
+ gtk_widget_show (fixture->first_main_page);
fixture->second_main_page = gtk_label_new ("pikachu");
+ gtk_widget_show (fixture->second_main_page);
fixture->spm = eos_splash_page_manager_new ();
+ gtk_widget_show (fixture->spm);
}
static void
@@ -102,12 +107,12 @@ static void
test_spm_show_main_page (SplashPageManagerFixture *fixture,
gconstpointer unused)
{
- GtkWidget *visible_page;
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page != fixture->first_main_page);
+ GtkWidget *visible_child;
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child != fixture->first_main_page);
eos_splash_page_manager_show_main_page (EOS_SPLASH_PAGE_MANAGER (fixture->spm));
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page == fixture->first_main_page);
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child == fixture->first_main_page);
}
@@ -115,15 +120,15 @@ static void
test_spm_show_splash_page (SplashPageManagerFixture *fixture,
gconstpointer unused)
{
- GtkWidget *visible_page;
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page == fixture->first_splash_page);
+ GtkWidget *visible_child;
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child == fixture->first_splash_page);
eos_splash_page_manager_show_main_page (EOS_SPLASH_PAGE_MANAGER (fixture->spm));
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page != fixture->first_splash_page);
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child != fixture->first_splash_page);
eos_splash_page_manager_show_splash_page (EOS_SPLASH_PAGE_MANAGER (fixture->spm));
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page == fixture->first_splash_page);
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child == fixture->first_splash_page);
}
static void
@@ -131,13 +136,13 @@ test_spm_default_visible_splash (SplashPageManagerFixture *fixture,
gconstpointer unused)
{
// Even though main page is added first splash page should be visible after it is added.
- GtkWidget *visible_page;
+ GtkWidget *visible_child;
eos_splash_page_manager_set_main_page (EOS_SPLASH_PAGE_MANAGER (fixture->spm),
fixture->first_main_page);
eos_splash_page_manager_set_splash_page (EOS_SPLASH_PAGE_MANAGER (fixture->spm),
fixture->first_splash_page);
- visible_page = eos_page_manager_get_visible_page (EOS_PAGE_MANAGER (fixture->spm));
- g_assert (visible_page == fixture->first_splash_page);
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (fixture->spm));
+ g_assert (visible_child == fixture->first_splash_page);
}
static void
diff --git a/test/smoke-tests/app-window.js b/test/smoke-tests/app-window.js
index d7554b9..bbfd461 100644
--- a/test/smoke-tests/app-window.js
+++ b/test/smoke-tests/app-window.js
@@ -32,12 +32,12 @@ const Page0 = new Lang.Class ({
// Combo box for transition type...
let typeMenu = new Gtk.ComboBoxText();
let type_options = {
- "Transition type: None": Endless.PageManagerTransitionType.NONE,
- "Transition type: Fade": Endless.PageManagerTransitionType.CROSSFADE,
- "Transition type: Slide Right": Endless.PageManagerTransitionType.SLIDE_RIGHT,
- "Transition type: Slide Left": Endless.PageManagerTransitionType.SLIDE_LEFT,
- "Transition type: Slide Down": Endless.PageManagerTransitionType.SLIDE_DOWN,
- "Transition type: Slide Up": Endless.PageManagerTransitionType.SLIDE_UP
+ "Transition type: None": Gtk.StackTransitionType.NONE,
+ "Transition type: Fade": Gtk.StackTransitionType.CROSSFADE,
+ "Transition type: Slide Right": Gtk.StackTransitionType.SLIDE_RIGHT,
+ "Transition type: Slide Left": Gtk.StackTransitionType.SLIDE_LEFT,
+ "Transition type: Slide Down": Gtk.StackTransitionType.SLIDE_DOWN,
+ "Transition type: Slide Up": Gtk.StackTransitionType.SLIDE_UP
}
for (let key in type_options) {
typeMenu.append_text(key);
@@ -90,33 +90,6 @@ const Page1 = new Lang.Class ({
}
});
-const Toolbox = new Lang.Class ({
- Name: 'Toolbox',
- Extends: Gtk.Grid,
-
- _init: function(props) {
- props = props || {};
- props.orientation = Gtk.Orientation.VERTICAL;
- this.parent(props);
-
- this._label = new Gtk.Label({ label: 'The Toolbox' });
- this._label1 = new Gtk.Label({ label: 'Actions on page 0' });
- this._label2 = new Gtk.Label({ label: 'Actions on page 1' });
- this.switch1 = new Gtk.Switch({ active: false });
- this.switch2 = new Gtk.Switch({ active: true });
- this.button1 = new Gtk.Button({ label: 'Scale font down' });
- this.button2 = new Gtk.Button({ label: 'Scale font up' });
-
- this.add(this._label);
- this.add(this._label1);
- this.add(this.switch1);
- this.add(this._label2);
- this.add(this.switch2);
- this.add(this.button1);
- this.add(this.button2);
- }
-});
-
const LeftTopbar = new Lang.Class ({
Name: 'LeftTopBar',
Extends: Gtk.Grid,
@@ -159,19 +132,19 @@ const TestApplication = new Lang.Class ({
// First page
this._page0 = new Page0(this._pm);
this._page0.button1.connect('clicked', Lang.bind(this, function () {
- this._pm.visible_page = this._page1;
+ this._pm.visible_child = this._page1;
}));
this._page0.button2.connect('clicked', Lang.bind(this, function () {
- this._pm.visible_page_name = "page1";
+ this._pm.visible_child_name = "page1";
}));
// Second page
this._page1 = new Page1();
this._page1.button1.connect('clicked', Lang.bind(this, function () {
- this._pm.visible_page = this._page0;
+ this._pm.visible_child = this._page0;
}));
this._page1.button2.connect('clicked', Lang.bind(this, function () {
- this._pm.visible_page_name = "page0";
+ this._pm.visible_child_name = "page0";
}));
this._page1.button3.connect('clicked', Lang.bind(this, function () {
this._setupDogBackground(this._page1);
@@ -183,17 +156,6 @@ const TestApplication = new Lang.Class ({
this._setupCatBackground(this._page1);
}));
-
- this._toolbox = new Toolbox();
- this._toolbox.switch1.connect('notify::active', Lang.bind(this, function () {
- this._pm.set_page_actions(this._page0,
- this._toolbox.switch1.active);
- }));
- this._toolbox.switch2.connect('notify::active', Lang.bind(this, function () {
- this._pm.set_page_actions(this._page1,
- this._toolbox.switch2.active);
- }));
-
this._left_topbar = new LeftTopbar();
this._center_topbar = new CenterTopbar();
@@ -201,17 +163,14 @@ const TestApplication = new Lang.Class ({
this._pm.add(this._page0, {
name: "page0",
background_uri: CAT_BACKGROUND_PATH,
- custom_toolbox_widget: this._toolbox,
left_topbar_widget: this._left_topbar,
center_topbar_widget: this._center_topbar
});
this._pm.add(this._page1, {
name: "page1",
- custom_toolbox_widget: this._toolbox,
left_topbar_widget: this._left_topbar,
- center_topbar_widget: this._center_topbar,
- page_actions: true
+ center_topbar_widget: this._center_topbar
});
this._setupDogBackground(this._page0);
@@ -224,15 +183,6 @@ const TestApplication = new Lang.Class ({
'font-scaling-default-size': 16
});
- this._toolbox.button1.connect('clicked', Lang.bind(this, function () {
- let current_font_size = this._window.get_font_scaling_default_size();
- this._window.set_font_scaling_default_size(current_font_size - 1);
- }));
- this._toolbox.button2.connect('clicked', Lang.bind(this, function () {
- let current_font_size = this._window.get_font_scaling_default_size();
- this._window.set_font_scaling_default_size(current_font_size + 1);
- }));
-
let provider = new Gtk.CssProvider();
provider.load_from_data("EosWindow { font-size: 1em; }");
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider,
diff --git a/test/smoke-tests/webhelper/webview.js b/test/smoke-tests/webhelper/webview.js
index a3b91e5..a1dba65 100644
--- a/test/smoke-tests/webhelper/webview.js
+++ b/test/smoke-tests/webhelper/webview.js
@@ -64,7 +64,7 @@ const TestApplication = new Lang.Class({
/* dict['name'] is the name of the page to move to */
moveToPage: function(dict) {
- this._pm.visible_page_name = dict['name'];
+ this._pm.visible_child_name = dict['name'];
},
/* dict['msg'] is the message to display */
@@ -134,7 +134,7 @@ const TestApplication = new Lang.Class({
this._page2 = new Gtk.Grid();
let back_button = new Gtk.Button({ label:"Go back to page 1" });
back_button.connect('clicked', Lang.bind(this, function() {
- this._pm.visible_page_name = 'page1';
+ this._pm.visible_child_name = 'page1';
}));
this._page2.add(back_button);
@@ -144,10 +144,10 @@ const TestApplication = new Lang.Class({
});
this._pm = this._window.page_manager;
- this._pm.set_transition_type(Endless.PageManagerTransitionType.CROSSFADE);
+ this._pm.set_transition_type(Gtk.StackTransitionType.CROSSFADE);
this._pm.add(this._page1, { name: 'page1' });
this._pm.add(this._page2, { name: 'page2' });
- this._pm.visible_page = this._page1;
+ this._pm.visible_child = this._page1;
this._window.show_all();
}
diff --git a/wikipedia/views/domain_wiki_view.js b/wikipedia/views/domain_wiki_view.js
index a2f7419..06a936d 100644
--- a/wikipedia/views/domain_wiki_view.js
+++ b/wikipedia/views/domain_wiki_view.js
@@ -196,10 +196,10 @@ const DomainWikiView = new Lang.Class({
* Transition to the front page of the view
*/
show_front_page: function () {
- if (this._window.page_manager.visible_page_name === "front")
+ if (this._window.page_manager.visible_child_name === "front")
return;
- this._window.page_manager.transition_type = Endless.PageManagerTransitionType.SLIDE_RIGHT;
- this._window.page_manager.visible_page_name = "front";
+ this._window.page_manager.transition_type = Gtk.StackTransitionType.SLIDE_RIGHT;
+ this._window.page_manager.visible_child_name = "front";
},
/**
@@ -207,14 +207,14 @@ const DomainWikiView = new Lang.Class({
* Transition to the category page of the view
*/
show_category_page: function () {
- if (this._window.page_manager.visible_page_name === "category")
+ if (this._window.page_manager.visible_child_name === "category")
return;
this._category_article_list.scrollToTop();
- if (this._window.page_manager.visible_page_name === "front")
- this._window.page_manager.transition_type = Endless.PageManagerTransitionType.SLIDE_LEFT;
+ if (this._window.page_manager.visible_child_name === "front")
+ this._window.page_manager.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
else
- this._window.page_manager.transition_type = Endless.PageManagerTransitionType.SLIDE_RIGHT;
- this._window.page_manager.visible_page_name = "category";
+ this._window.page_manager.transition_type = Gtk.StackTransitionType.SLIDE_RIGHT;
+ this._window.page_manager.visible_child_name = "category";
},
/**
@@ -222,11 +222,11 @@ const DomainWikiView = new Lang.Class({
* Transition to the article page of the view
*/
show_article_page: function () {
- if (this._window.page_manager.visible_page_name === "article")
+ if (this._window.page_manager.visible_child_name === "article")
return;
this._article_list.scrollToTop();
- this._window.page_manager.transition_type = Endless.PageManagerTransitionType.SLIDE_LEFT;
- this._window.page_manager.visible_page_name = "article";
+ this._window.page_manager.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
+ this._window.page_manager.visible_child_name = "article";
},
set_categories: function(categories){