diff options
-rw-r--r-- | docs/reference/endless/endless-sections.txt | 4 | ||||
-rw-r--r-- | endless/Makefile.am | 1 | ||||
-rw-r--r-- | endless/eosmainarea-private.h | 63 | ||||
-rw-r--r-- | endless/eosmainarea.c | 435 | ||||
-rw-r--r-- | endless/eospagemanager.c | 185 | ||||
-rw-r--r-- | endless/eospagemanager.h | 18 | ||||
-rw-r--r-- | endless/eoswindow.c | 97 | ||||
-rw-r--r-- | test/endless/test-page-manager.c | 115 | ||||
-rw-r--r-- | test/endless/test-window.c | 73 |
9 files changed, 23 insertions, 968 deletions
diff --git a/docs/reference/endless/endless-sections.txt b/docs/reference/endless/endless-sections.txt index 9715286..0799fba 100644 --- a/docs/reference/endless/endless-sections.txt +++ b/docs/reference/endless/endless-sections.txt @@ -64,10 +64,6 @@ 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_actions -eos_page_manager_set_page_actions -eos_page_manager_get_page_custom_toolbox_widget -eos_page_manager_set_page_custom_toolbox_widget eos_page_manager_get_page_left_topbar_widget eos_page_manager_set_page_left_topbar_widget eos_page_manager_get_page_center_topbar_widget diff --git a/endless/Makefile.am b/endless/Makefile.am index 74d8b3c..a1d4e15 100644 --- a/endless/Makefile.am +++ b/endless/Makefile.am @@ -44,7 +44,6 @@ endless_library_sources = \ endless/eoshello.c \ endless/eosinit.c endless/eosinit-private.h \ endless/eospagemanager.c endless/eospagemanager-private.h \ - endless/eosmainarea.c endless/eosmainarea-private.h \ endless/eosresource.c endless/eosresource-private.h \ endless/eossplashpagemanager.c \ endless/eostopbar.c endless/eostopbar-private.h \ diff --git a/endless/eosmainarea-private.h b/endless/eosmainarea-private.h deleted file mode 100644 index 9edb535..0000000 --- a/endless/eosmainarea-private.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2013 Endless Mobile, Inc. */ - -#ifndef EOS_MAIN_AREA_H -#define EOS_MAIN_AREA_H - -#include "eostypes.h" - -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define EOS_TYPE_MAIN_AREA eos_main_area_get_type() - -#define EOS_MAIN_AREA(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - EOS_TYPE_MAIN_AREA, EosMainArea)) - -#define EOS_MAIN_AREA_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - EOS_TYPE_MAIN_AREA, EosMainAreaClass)) - -#define EOS_IS_MAIN_AREA(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - EOS_TYPE_MAIN_AREA)) - -#define EOS_IS_MAIN_AREA_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - EOS_TYPE_MAIN_AREA)) - -#define EOS_MAIN_AREA_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - EOS_TYPE_MAIN_AREA, EosMainAreaClass)) - -typedef struct _EosMainArea EosMainArea; -typedef struct _EosMainAreaClass EosMainAreaClass; - -struct _EosMainArea -{ - GtkContainer parent; -}; - -struct _EosMainAreaClass -{ - GtkContainerClass parent_class; -}; - -GType eos_main_area_get_type (void) G_GNUC_CONST; - -GtkWidget *eos_main_area_new (void); - -void eos_main_area_set_toolbox (EosMainArea *self, - GtkWidget *toolbox); -GtkWidget *eos_main_area_get_toolbox (EosMainArea *self); -void eos_main_area_set_content (EosMainArea *self, - GtkWidget *content); -GtkWidget *eos_main_area_get_content (EosMainArea *self); -void eos_main_area_set_actions (EosMainArea *self, - gboolean actions_visible); -gboolean eos_main_area_get_actions (EosMainArea *self); - -G_END_DECLS - -#endif /* EOS_MAIN_AREA_H */ diff --git a/endless/eosmainarea.c b/endless/eosmainarea.c deleted file mode 100644 index 81920d8..0000000 --- a/endless/eosmainarea.c +++ /dev/null @@ -1,435 +0,0 @@ -/* Copyright 2013 Endless Mobile, Inc. */ - -#include "config.h" -#include "eosmainarea-private.h" - -#include <gtk/gtk.h> - -/* - * SECTION:main_area - * @short_description: The main area for your application, under the top bar. - * @title: EosMainArea - * - * EosMainArea has three areas it manages for you: the left toolbar area, the - * right action area, and the center content area. They can be set with the - * toolbar, actions and content properties. You will just about always want to - * set the content widget to display something, but the toolbar and action - * area will not appear unless set. - */ - -typedef struct { - GtkWidget *toolbox; - GtkWidget *content; - GtkWidget *actions_standin; - guint actions_visible : 1; -} EosMainAreaPrivate; - -G_DEFINE_TYPE_WITH_PRIVATE (EosMainArea, eos_main_area, GTK_TYPE_CONTAINER) - -static void -eos_main_area_get_preferred_width (GtkWidget *widget, - gint *minimal, - gint *natural) -{ - EosMainArea *self = EOS_MAIN_AREA (widget); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - GtkWidget *toolbox = priv->toolbox; - GtkWidget *content = priv->content; - *minimal = *natural = 0; - - if ((toolbox && gtk_widget_get_visible (toolbox)) || - priv->actions_visible) - { - gint toolbox_minimal, toolbox_natural; - gtk_widget_get_preferred_width (toolbox, - &toolbox_minimal, &toolbox_natural); - - *minimal += 2 * toolbox_minimal; - *natural += 2 * toolbox_natural; - } - - if (content && gtk_widget_get_visible (content)) - { - gint content_minimal, content_natural; - gtk_widget_get_preferred_width (content, - &content_minimal, &content_natural); - - *minimal += content_minimal; - *natural += content_natural; - } -} - -static void -eos_main_area_get_preferred_height (GtkWidget *widget, - gint *minimal, - gint *natural) -{ - EosMainArea *self = EOS_MAIN_AREA (widget); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - GtkWidget *toolbox = priv->toolbox; - GtkWidget *content = priv->content; - *minimal = *natural = 0; - - if (toolbox && gtk_widget_get_visible (toolbox)) - { - gint toolbox_minimal, toolbox_natural; - gtk_widget_get_preferred_height (toolbox, - &toolbox_minimal, &toolbox_natural); - - *minimal = MAX (*minimal, toolbox_minimal); - *natural = MAX (*natural, toolbox_natural); - } - - if (content && gtk_widget_get_visible (content)) - { - gint content_minimal, content_natural; - gtk_widget_get_preferred_height (content, - &content_minimal, &content_natural); - - *minimal = MAX (*minimal, content_minimal); - *natural = MAX (*natural, content_natural); - } -} - -/* Don't size width for height or height for width, at least for now... */ -static void -eos_main_area_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - EosMainArea *self = EOS_MAIN_AREA (widget); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - GtkWidget *toolbox = priv->toolbox; - GtkWidget *content = priv->content; - - gtk_widget_set_allocation (widget, allocation); - - gint num_sidebars = 0; - gboolean content_visible = content && gtk_widget_get_visible (content); - gboolean toolbox_visible = toolbox && gtk_widget_get_visible (toolbox); - if (toolbox_visible) - num_sidebars++; - if (priv->actions_visible) - num_sidebars++; - - gint toolbox_min_width = 0, toolbox_nat_width = 0; - gint toolbox_min_height, toolbox_nat_height; - if (toolbox_visible) - { - gtk_widget_get_preferred_width (toolbox, - &toolbox_min_width, &toolbox_nat_width); - gtk_widget_get_preferred_height (toolbox, - &toolbox_min_height, &toolbox_nat_height); - } - - gint content_min_width = 0, content_nat_width = 0; - gint content_min_height, content_nat_height; - if (content_visible) - { - gtk_widget_get_preferred_width (content, - &content_min_width, &content_nat_width); - gtk_widget_get_preferred_height (content, - &content_min_height, &content_nat_height); - } - - /* Calculate width of sidebars. We allocate space in the following order: - Sidebars min width, content min width, sidebars natural width, content - natural width. */ - gint sidebar_width = 0; - gint total_sidebars_width = allocation->width - content_min_width; - if (num_sidebars > 0) - { - if (allocation->width < toolbox_min_width * num_sidebars) - { - sidebar_width = allocation->width / num_sidebars; - } - else if (content_visible && - total_sidebars_width < toolbox_nat_width * num_sidebars) - { - sidebar_width = total_sidebars_width / num_sidebars; - } - else - { - sidebar_width = toolbox_nat_width; - } - } - - /* Allocate size */ - gint x = allocation->x; - gint y = allocation->y; - if (toolbox_visible) - { - GtkAllocation toolbox_allocation; - toolbox_allocation.x = x; - toolbox_allocation.y = y; - toolbox_allocation.width = sidebar_width; - toolbox_allocation.height = MIN (toolbox_nat_height, allocation->height); - gtk_widget_size_allocate (toolbox, &toolbox_allocation); - x += toolbox_allocation.width; - } - if (priv->actions_visible) - { - GtkAllocation actions_allocation; - actions_allocation.x = allocation->x + allocation->width - sidebar_width; - actions_allocation.y = y; - actions_allocation.width = sidebar_width; - actions_allocation.height = allocation->height; - gtk_widget_size_allocate (priv->actions_standin, - &actions_allocation); - } - if (content_visible) - { - GtkAllocation content_allocation; - content_allocation.x = x; - content_allocation.y = y; - content_allocation.width = MAX (0, - allocation->width - num_sidebars * sidebar_width); - content_allocation.height = allocation->height; - gtk_widget_size_allocate (content, &content_allocation); - } -} - -static void -eos_main_area_add (GtkContainer *container, - GtkWidget *widget) -{ - EosMainArea *self = EOS_MAIN_AREA (container); - - /* Print out warning message?? */ - - eos_main_area_set_content(self, widget); -} - -static void -eos_main_area_remove (GtkContainer *container, - GtkWidget *widget) -{ - EosMainArea *self = EOS_MAIN_AREA(container); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - if (priv->content == widget) - eos_main_area_set_content (self, NULL); - else if (priv->toolbox == widget) - eos_main_area_set_toolbox (self, NULL); -} - -static void -eos_main_area_forall(GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - EosMainArea *self = EOS_MAIN_AREA (container); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - if (priv->toolbox) - (*callback) (priv->toolbox, callback_data); - - if (priv->content) - (*callback) (priv->content, callback_data); - - if (include_internals && priv->actions_visible) - (*callback) (priv->actions_standin, callback_data); -} - -static void -eos_main_area_destroy (GtkWidget *widget) -{ - EosMainArea *self = EOS_MAIN_AREA (widget); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - - gtk_widget_destroy (priv->actions_standin); - - GTK_WIDGET_CLASS (eos_main_area_parent_class)->destroy (widget); -} - -static void -eos_main_area_class_init (EosMainAreaClass *klass) -{ - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); - - widget_class->get_preferred_width = eos_main_area_get_preferred_width; - widget_class->get_preferred_height = eos_main_area_get_preferred_height; - widget_class->size_allocate = eos_main_area_size_allocate; - widget_class->destroy = eos_main_area_destroy; - - container_class->forall = eos_main_area_forall; - container_class->add = eos_main_area_add; - container_class->remove = eos_main_area_remove; -} - -static void -eos_main_area_init (EosMainArea *self) -{ - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - gtk_widget_set_has_window(GTK_WIDGET(self), FALSE); - - priv->actions_standin = gtk_event_box_new (); - g_object_ref_sink (priv->actions_standin); - GdkRGBA red = { 1.0, 0.0, 0.0, 1.0 }; - gtk_widget_override_background_color (priv->actions_standin, - GTK_STATE_FLAG_NORMAL, - &red); - gtk_widget_show (priv->actions_standin); -} - -/* Internal Public API */ - -/* - * eos_main_area_new: - * - * Creates a main area. It is invisible by default. - * - * Returns: a pointer to the main area widget. - */ -GtkWidget * -eos_main_area_new (void) -{ - return GTK_WIDGET (g_object_new (EOS_TYPE_MAIN_AREA, NULL)); -} - - -/* - * eos_main_area_set_toolbox: - * @self: a #EosMainArea - * @toolbox: the toolbox widget to be displayed on left of content. - * - * Adds the toolbox widget to the main area. Passing %NULL will hide the - * toolbox area. - */ -void -eos_main_area_set_toolbox (EosMainArea *self, - GtkWidget *toolbox) -{ - g_return_if_fail (EOS_IS_MAIN_AREA (self)); - g_return_if_fail (toolbox == NULL || GTK_IS_WIDGET (toolbox)); - - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - GtkWidget *self_widget = GTK_WIDGET (self); - - if (priv->toolbox == toolbox) - return; - - if (priv->toolbox) - gtk_widget_unparent (priv->toolbox); - - priv->toolbox = toolbox; - if (toolbox) - { - gtk_widget_set_parent (toolbox, self_widget); - gtk_widget_show (toolbox); - } -} - -/* - * eos_main_area_get_toolbox: - * @self: a #EosMainArea - * - * Retrieves the toolbox widget for the main area. - * - * Return value: (transfer none): the toolbox widget, - * or %NULL if there is none - */ -GtkWidget * -eos_main_area_get_toolbox (EosMainArea *self) -{ - g_return_val_if_fail (EOS_IS_MAIN_AREA (self), NULL); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - return priv->toolbox; -} - -/* - * eos_main_area_set_content: - * @self: a #EosMainArea - * @content: the content widget to be displayed in the center. - * - * Adds the content widget to the main area. - */ -void -eos_main_area_set_content (EosMainArea *self, - GtkWidget *content) -{ - g_return_if_fail (EOS_IS_MAIN_AREA (self)); - g_return_if_fail (content == NULL || GTK_IS_WIDGET (content)); - g_return_if_fail (content == NULL || gtk_widget_get_parent (content) == NULL); - - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - GtkWidget *self_widget = GTK_WIDGET (self); - - if (priv->content == content) - return; - - if (priv->content) - gtk_widget_unparent (priv->content); - - priv->content = content; - if (content) - gtk_widget_set_parent (content, self_widget); -} - -/* - * eos_main_area_get_content: - * @self: a #EosMainArea - * - * Retrieves the content widget for the main area. - * - * Return value: (transfer none): the content widget, - * or %NULL if there is none - */ -GtkWidget * -eos_main_area_get_content (EosMainArea *self) -{ - g_return_val_if_fail (EOS_IS_MAIN_AREA (self), NULL); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - return priv->content; -} - -/* - * eos_main_area_set_actions: - * @self: a #EosMainArea - * @actions: %TRUE if there will be actions area on right of content. - * - * Sets whether an actions area should be displayed on the right of the - * content. For now just a boolean eventually a widget/list of actions or - * something. - */ -void -eos_main_area_set_actions (EosMainArea *self, - gboolean actions_visible) -{ - g_return_if_fail (EOS_IS_MAIN_AREA (self)); - - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - GtkWidget *self_widget = GTK_WIDGET (self); - - actions_visible = actions_visible != FALSE; - - if (priv->actions_visible == actions_visible) - return; - - priv->actions_visible = actions_visible; - - if (priv->actions_visible) - gtk_widget_set_parent (priv->actions_standin, self_widget); - else - gtk_widget_unparent (priv->actions_standin); -} - -/* - * eos_main_area_get_actions: - * @self: a #EosMainArea - * - * Retrieves the actions boolean value. See set_actions. - * - * Return value: stand in actions boolean, for now. - */ -gboolean -eos_main_area_get_actions (EosMainArea *self) -{ - g_return_val_if_fail (EOS_IS_MAIN_AREA (self), FALSE); - EosMainAreaPrivate *priv = eos_main_area_get_instance_private (self); - return priv->actions_visible; -} diff --git a/endless/eospagemanager.c b/endless/eospagemanager.c index f1812da..af36b3e 100644 --- a/endless/eospagemanager.c +++ b/endless/eospagemanager.c @@ -93,8 +93,6 @@ typedef struct { GtkWidget *page; gchar *name; - gboolean fake_page_actions_visible; - GtkWidget *custom_toolbox_widget; GtkWidget *left_topbar_widget; GtkWidget *center_topbar_widget; gchar *background_uri; @@ -147,8 +145,6 @@ enum { CHILD_PROP_0, CHILD_PROP_NAME, - CHILD_PROP_PAGE_ACTIONS, - CHILD_PROP_CUSTOM_TOOLBOX_WIDGET, CHILD_PROP_LEFT_TOPBAR_WIDGET, CHILD_PROP_CENTER_TOPBAR_WIDGET, CHILD_PROP_BACKGROUND_URI, @@ -594,17 +590,6 @@ eos_page_manager_get_child_property (GtkContainer *container, child)); break; - case CHILD_PROP_PAGE_ACTIONS: - g_value_set_boolean (value, - eos_page_manager_get_page_actions (self, child)); - break; - - case CHILD_PROP_CUSTOM_TOOLBOX_WIDGET: - g_value_set_object (value, - eos_page_manager_get_page_custom_toolbox_widget (self, - child)); - break; - case CHILD_PROP_LEFT_TOPBAR_WIDGET: g_value_set_object (value, eos_page_manager_get_page_left_topbar_widget (self, @@ -658,16 +643,6 @@ eos_page_manager_set_child_property (GtkContainer *container, g_value_get_boolean (value)); break; - case CHILD_PROP_PAGE_ACTIONS: - eos_page_manager_set_page_actions (self, child, - g_value_get_boolean (value)); - break; - - case CHILD_PROP_CUSTOM_TOOLBOX_WIDGET: - eos_page_manager_set_page_custom_toolbox_widget (self, child, - g_value_get_object (value)); - break; - case CHILD_PROP_LEFT_TOPBAR_WIDGET: eos_page_manager_set_page_left_topbar_widget (self, child, g_value_get_object (value)); @@ -784,39 +759,6 @@ eos_page_manager_class_init (EosPageManagerClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** - * EosPageManager:page-actions: - * - * The actions exported by this page, to be displayed in the action area on - * the right of the window. - * - * <warning><para>Currently, this property is a boolean value. %TRUE means - * to display a fake action area, and %FALSE means don't display. - * </para></warning> - */ - eos_page_manager_child_props[CHILD_PROP_PAGE_ACTIONS] = - g_param_spec_boolean ("page-actions", "Page Actions", - "Actions the page exports into the action area", - FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - - /** - * EosPageManager:custom-toolbox-widget: - * - * The custom toolbox widget belonging to this page, to be displayed on the - * left of the window when the page is displaying. Setting this to %NULL - * indicates that there should be no toolbox widget. - * - * <warning><para>Currently, there is no such thing as a - * <emphasis>non-</emphasis>custom toolbox widget. - * </para></warning> - */ - eos_page_manager_child_props[CHILD_PROP_CUSTOM_TOOLBOX_WIDGET] = - g_param_spec_object ("custom-toolbox-widget", "Custom toolbox widget", - "Custom toolbox widget displayed left of the page", - GTK_TYPE_WIDGET, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - - /** * EosPageManager:left-topbar-widget: * * The left topbar widget belonging to this page, to be displayed on the @@ -1116,133 +1058,6 @@ eos_page_manager_set_page_name (EosPageManager *self, } /** - * eos_page_manager_get_page_actions: - * @self: the page manager - * @page: the page to be queried - * - * Gets whether to display a fake actions area when displaying @page. - * See #EosPageManager:page-actions for more information. - * - * <warning><para>This function is a temporary implementation, do not expect - * this API to remain stable. - * </para></warning> - * - * Returns: %TRUE if the fake actions area should be visible when displaying - * @page, or %FALSE if it should not. - */ -gboolean -eos_page_manager_get_page_actions (EosPageManager *self, - GtkWidget *page) -{ - g_return_val_if_fail (self != NULL && EOS_IS_PAGE_MANAGER (self), FALSE); - g_return_val_if_fail (page != NULL && GTK_IS_WIDGET (page), FALSE); - - EosPageManagerPageInfo *info = find_page_info_by_widget (self, page); - g_return_val_if_fail (info != NULL, FALSE); - - return info->fake_page_actions_visible; -} - -/** - * eos_page_manager_set_page_actions: - * @self: the page manager - * @page: the page - * @actions_visible: whether to display an action area beside @page - * - * Sets whether to display a fake actions area when displaying @page. - * See #EosPageManager:page-actions for more information. - * - * <warning><para>This function is a temporary implementation, do not expect - * this API to remain stable. - * </para></warning> - */ -void -eos_page_manager_set_page_actions (EosPageManager *self, - GtkWidget *page, - gboolean actions_visible) -{ - g_return_if_fail (self != NULL && EOS_IS_PAGE_MANAGER (self)); - g_return_if_fail (page != NULL && GTK_IS_WIDGET (page)); - - EosPageManagerPageInfo *info = find_page_info_by_widget (self, page); - g_return_if_fail (info != NULL); - - if (info->fake_page_actions_visible == actions_visible) - return; - - info->fake_page_actions_visible = actions_visible; - - gtk_container_child_notify (GTK_CONTAINER (self), page, "page-actions"); -} - -/** - * eos_page_manager_get_page_custom_toolbox_widget: - * @self: the page manager - * @page: the page to be queried - * - * Retrieves @page's custom toolbox widget, if it has one. - * See #EosPageManager:custom-toolbox-widget for more information. - * - * <note><para> - * Currently, there is no possible way to have a non-custom toolbox widget. - * </para></note> - * - * Returns: (transfer none): the custom toolbox #GtkWidget of @page, or %NULL if - * there is none. - */ -GtkWidget * -eos_page_manager_get_page_custom_toolbox_widget (EosPageManager *self, - GtkWidget *page) -{ - g_return_val_if_fail (self != NULL && EOS_IS_PAGE_MANAGER (self), NULL); - g_return_val_if_fail (page != NULL && GTK_IS_WIDGET (page), NULL); - - EosPageManagerPageInfo *info = find_page_info_by_widget (self, page); - g_return_val_if_fail (info != NULL, NULL); - - return info->custom_toolbox_widget; -} - -/** - * eos_page_manager_set_page_custom_toolbox_widget: - * @self: the page manager - * @page: the page - * @custom_toolbox_widget: (allow-none): custom toolbox widget for @page - * - * Sets the custom toolbox widget to display to the left of @page. - * See #EosPageManager:custom-toolbox-widget for more information. - * - * <note><para> - * Currently, there is no possible way to have a non-custom toolbox widget. - * </para></note> - */ -void -eos_page_manager_set_page_custom_toolbox_widget (EosPageManager *self, - GtkWidget *page, - GtkWidget *custom_toolbox_widget) -{ - g_return_if_fail (self != NULL && EOS_IS_PAGE_MANAGER (self)); - g_return_if_fail (page != NULL && GTK_IS_WIDGET (page)); - g_return_if_fail (custom_toolbox_widget == NULL || - GTK_IS_WIDGET (custom_toolbox_widget)); - - EosPageManagerPageInfo *info = find_page_info_by_widget (self, page); - g_return_if_fail (info != NULL); - - if (info->custom_toolbox_widget == custom_toolbox_widget) - return; - - if (info->custom_toolbox_widget) - g_object_unref (info->custom_toolbox_widget); - - g_object_ref (custom_toolbox_widget); - info->custom_toolbox_widget = custom_toolbox_widget; - - gtk_container_child_notify (GTK_CONTAINER (self), page, - "custom-toolbox-widget"); -} - -/** * eos_page_manager_get_page_left_topbar_widget: * @self: the page manager * @page: the page to be queried diff --git a/endless/eospagemanager.h b/endless/eospagemanager.h index 7ec4d97..d0dd8eb 100644 --- a/endless/eospagemanager.h +++ b/endless/eospagemanager.h @@ -112,24 +112,6 @@ void eos_page_manager_set_page_name (EosPageManage const gchar *name); EOS_SDK_ALL_API_VERSIONS -gboolean eos_page_manager_get_page_actions (EosPageManager *self, - GtkWidget *page); - -EOS_SDK_ALL_API_VERSIONS -void eos_page_manager_set_page_actions (EosPageManager *self, - GtkWidget *page, - gboolean actions_visible); - -EOS_SDK_ALL_API_VERSIONS -GtkWidget *eos_page_manager_get_page_custom_toolbox_widget (EosPageManager *self, - GtkWidget *page); - -EOS_SDK_ALL_API_VERSIONS -void eos_page_manager_set_page_custom_toolbox_widget (EosPageManager *self, - GtkWidget *page, - GtkWidget *custom_toolbox_widget); - -EOS_SDK_ALL_API_VERSIONS GtkWidget *eos_page_manager_get_page_left_topbar_widget (EosPageManager *self, GtkWidget *page); diff --git a/endless/eoswindow.c b/endless/eoswindow.c index ce95ae8..1ac5678 100644 --- a/endless/eoswindow.c +++ b/endless/eoswindow.c @@ -8,7 +8,6 @@ #include "eospagemanager.h" #include "eospagemanager-private.h" #include "eostopbar-private.h" -#include "eosmainarea-private.h" #include <gtk/gtk.h> @@ -89,7 +88,6 @@ typedef struct { EosApplication *application; GtkWidget *top_bar; - GtkWidget *main_area; GtkWidget *overlay; GtkSizeGroup *overlay_size_group; GtkWidget *edge_finishing; @@ -149,59 +147,6 @@ override_background_css(EosWindow *self, gchar *background_css) GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } -/* - * update_page_actions: - * @self: the window - * - * Ensures that the currently shown state of the action area is in line with - * the child properties of the currently showing page. - */ -static void -update_page_actions (EosWindow *self) -{ - EosWindowPrivate *priv = eos_window_get_instance_private (self); - EosPageManager *pm = EOS_PAGE_MANAGER (priv->page_manager); - EosMainArea *ma = EOS_MAIN_AREA (priv->main_area); - GtkWidget *page = priv->current_page; - - if (page != NULL) - { - gboolean fake_action_area = eos_page_manager_get_page_actions (pm, page); - eos_main_area_set_actions (ma, fake_action_area); - } - else - { - eos_main_area_set_actions (ma, FALSE); - } -} - -/* - * update_page_toolbox: - * @self: the window - * - * Ensures that the currently shown state of the toolbox is in line with - * the child properties of the currently showing page. - */ -static void -update_page_toolbox (EosWindow *self) -{ - EosWindowPrivate *priv = eos_window_get_instance_private (self); - EosPageManager *pm = EOS_PAGE_MANAGER (priv->page_manager); - EosMainArea *ma = EOS_MAIN_AREA (priv->main_area); - GtkWidget *page = priv->current_page; - - if (page != NULL) - { - GtkWidget *custom_toolbox_widget = - eos_page_manager_get_page_custom_toolbox_widget (pm, page); - eos_main_area_set_toolbox (ma, custom_toolbox_widget); - } - else - { - eos_main_area_set_toolbox (ma, NULL); - } -} - /** * update_page_left_topbar: * @self: the window @@ -346,11 +291,7 @@ update_visible_page_properties (GtkWidget *widget, { EosWindow *self = (EosWindow *)data; const gchar *property_name = child_property->name; - if (g_strcmp0 (property_name, "page-actions") == 0) - update_page_actions (self); - else if (g_strcmp0 (property_name, "custom-toolbox-widget") == 0) - update_page_toolbox (self); - else if (g_strcmp0 (property_name, "left-topbar-widget") == 0) + if (g_strcmp0 (property_name, "left-topbar-widget") == 0) update_page_left_topbar (self); else if (g_strcmp0 (property_name, "center-topbar-widget") == 0) update_page_center_topbar (self); @@ -365,8 +306,8 @@ update_visible_page_properties (GtkWidget *widget, * update_page: * @self: the window * - * Ensures that the state of the window, the window's main area and top bar are - * in line with the currently showing page and its child properties. + * Ensures that the state of the window and top bar are in line with the + * currently showing page and its child properties. */ static void update_page (EosWindow *self) @@ -381,8 +322,6 @@ update_page (EosWindow *self) } priv->current_page = eos_page_manager_get_visible_page (pm); - update_page_actions (self); - update_page_toolbox (self); sync_stack_animation (self); update_page_left_topbar (self); update_page_center_topbar (self); @@ -505,6 +444,7 @@ eos_window_finalize (GObject *object) EosWindow *self = EOS_WINDOW (object); EosWindowPrivate *priv = eos_window_get_instance_private (self); + g_object_unref (priv->edge_finishing); g_object_unref (priv->background_provider); g_object_unref (priv->font_size_provider); g_free (priv->current_background_css_props); @@ -848,15 +788,11 @@ eos_window_init (EosWindow *self) override_background_css (self, background_css); g_free (background_css); - priv->main_area = eos_main_area_new (); - gtk_overlay_add_overlay (GTK_OVERLAY (priv->overlay), priv->main_area); - - // We want the overlay to size to the main area, the widget on top. The + // We want the overlay to size to the page manager, the widget on top. The // overlay gets its size request from the widget on the bottom, the // background frame with no minimum size. So we use a size group. priv->overlay_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); gtk_size_group_add_widget (priv->overlay_size_group, priv->background_stack); - gtk_size_group_add_widget (priv->overlay_size_group, priv->main_area); priv->edge_finishing = gtk_drawing_area_new (); gtk_widget_set_vexpand (priv->edge_finishing, FALSE); @@ -869,8 +805,8 @@ eos_window_init (EosWindow *self) G_CALLBACK (after_edge_finishing_realize_cb), NULL); g_signal_connect (priv->edge_finishing, "draw", G_CALLBACK (on_edge_finishing_draw_cb), NULL); - gtk_overlay_add_overlay (GTK_OVERLAY (priv->overlay), - priv->edge_finishing); + // We ref the edge finishing as it gets reparented when page managers change + g_object_ref(priv->edge_finishing); gtk_window_maximize (GTK_WINDOW (self)); gtk_window_set_default_size (GTK_WINDOW (self), DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT); @@ -940,11 +876,24 @@ eos_window_set_page_manager (EosWindow *self, g_return_if_fail (page_manager != NULL && EOS_IS_PAGE_MANAGER (page_manager)); EosWindowPrivate *priv = eos_window_get_instance_private (self); - EosMainArea *main_area = EOS_MAIN_AREA (priv->main_area); + if (priv->page_manager != NULL) + { + // We need to remove the edge finishing and add it again so it always + // appears over the page manager + gtk_container_remove (GTK_CONTAINER (priv->overlay), + priv->edge_finishing); + gtk_size_group_remove_widget (priv->overlay_size_group, + GTK_WIDGET (priv->page_manager)); + gtk_container_remove (GTK_CONTAINER (priv->overlay), + GTK_WIDGET (priv->page_manager)); + } priv->page_manager = page_manager; - - eos_main_area_set_content (main_area, + gtk_overlay_add_overlay (GTK_OVERLAY (priv->overlay), + GTK_WIDGET (priv->page_manager)); + gtk_overlay_add_overlay (GTK_OVERLAY (priv->overlay), + priv->edge_finishing); + gtk_size_group_add_widget (priv->overlay_size_group, GTK_WIDGET (priv->page_manager)); update_page (self); diff --git a/test/endless/test-page-manager.c b/test/endless/test-page-manager.c index a39fb3f..3eadd67 100644 --- a/test/endless/test-page-manager.c +++ b/test/endless/test-page-manager.c @@ -38,7 +38,6 @@ typedef struct GtkWidget *page1; GtkWidget *page2; GtkWidget *page3; - GtkWidget *toolbox2; } PageManagerFixture; static void @@ -49,7 +48,6 @@ pm_fixture_setup (PageManagerFixture *fixture, fixture->page1 = gtk_label_new ("1"); fixture->page2 = gtk_label_new ("2"); fixture->page3 = gtk_label_new ("3"); - fixture->toolbox2 = gtk_label_new ("toolbox2"); gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page1, "name", PAGE1_NAME, @@ -60,7 +58,6 @@ pm_fixture_setup (PageManagerFixture *fixture, gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page2, "name", PAGE2_NAME, - "custom-toolbox-widget", fixture->toolbox2, "background-uri", PAGE2_PROP_STRING, "background-size", PAGE2_PROP_STRING, "background-position", PAGE2_PROP_STRING, @@ -68,7 +65,6 @@ pm_fixture_setup (PageManagerFixture *fixture, gtk_container_add_with_properties (GTK_CONTAINER (fixture->pm), fixture->page3, "name", PAGE3_NAME, - "page-actions", TRUE, "background-uri", PAGE3_PROP_STRING, "background-size", PAGE3_PROP_STRING, "background-position", PAGE3_PROP_STRING, @@ -195,47 +191,6 @@ test_pm_child_prop_name (PageManagerFixture *fixture, } static void -test_pm_get_set_page_actions (PageManagerFixture *fixture, - gconstpointer unused) -{ - gboolean actions; - actions = eos_page_manager_get_page_actions (EOS_PAGE_MANAGER (fixture->pm), - fixture->page1); - g_assert (actions == FALSE); - actions = eos_page_manager_get_page_actions (EOS_PAGE_MANAGER (fixture->pm), - fixture->page3); - g_assert (actions == TRUE); - eos_page_manager_set_page_actions (EOS_PAGE_MANAGER (fixture->pm), - fixture->page3, - FALSE); - actions = eos_page_manager_get_page_actions (EOS_PAGE_MANAGER (fixture->pm), - fixture->page3); - g_assert (actions == FALSE); -} - -static void -test_pm_child_prop_page_actions (PageManagerFixture *fixture, - gconstpointer unused) -{ - gboolean actions; - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page1, - "page-actions", &actions, - NULL); - g_assert (actions == FALSE); - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page3, - "page-actions", &actions, - NULL); - g_assert (actions == TRUE); - gtk_container_child_set (GTK_CONTAINER (fixture->pm), fixture->page3, - "page-actions", FALSE, - NULL); - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page3, - "page-actions", &actions, - NULL); - g_assert (actions == FALSE); -} - -static void test_pm_get_set_background_repeats (PageManagerFixture *fixture, gconstpointer unused) { @@ -277,68 +232,6 @@ test_pm_child_prop_background_repeats (PageManagerFixture *fixture, } static void -test_pm_get_set_page_custom_toolbox (PageManagerFixture *fixture, - gconstpointer unused) -{ - GtkWidget *new_tb = gtk_label_new ("Another toolbox"); - GtkWidget *tb; - - tb = eos_page_manager_get_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page1); - g_assert (tb == NULL); - tb = eos_page_manager_get_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page2); - g_assert (tb == fixture->toolbox2); - - eos_page_manager_set_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page1, - new_tb); - eos_page_manager_set_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page2, - new_tb); - - tb = eos_page_manager_get_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page1); - g_assert (tb == new_tb); - tb = eos_page_manager_get_page_custom_toolbox_widget (EOS_PAGE_MANAGER (fixture->pm), - fixture->page2); - g_assert (tb == new_tb); -} - -static void -test_pm_child_prop_custom_toolbox (PageManagerFixture *fixture, - gconstpointer unused) -{ - GtkWidget *new_tb = gtk_label_new ("Another toolbox"); - GtkWidget *tb; - - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page1, - "custom-toolbox-widget", &tb, - NULL); - g_assert (tb == NULL); - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2, - "custom-toolbox-widget", &tb, - NULL); - g_assert (tb == fixture->toolbox2); - - gtk_container_child_set (GTK_CONTAINER (fixture->pm), fixture->page1, - "custom-toolbox-widget", new_tb, - NULL); - gtk_container_child_set (GTK_CONTAINER (fixture->pm), fixture->page2, - "custom-toolbox-widget", new_tb, - NULL); - - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page1, - "custom-toolbox-widget", &tb, - NULL); - g_assert (tb == new_tb); - gtk_container_child_get (GTK_CONTAINER (fixture->pm), fixture->page2, - "custom-toolbox-widget", &tb, - NULL); - g_assert (tb == new_tb); -} - -static void test_pm_child_prop_string (PageManagerFixture *fixture, gconstpointer data) { @@ -702,14 +595,6 @@ add_page_manager_tests (void) 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/get-set-page-actions", - test_pm_get_set_page_actions); - ADD_PAGE_MANAGER_TEST ("/page-manager/child-prop-page-actions", - test_pm_child_prop_page_actions); - ADD_PAGE_MANAGER_TEST ("/page-manager/get-set-page-custom-toolbox", - test_pm_get_set_page_custom_toolbox); - ADD_PAGE_MANAGER_TEST ("/page-manager/child-prop-custom-toolbox", - test_pm_child_prop_custom_toolbox); 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); diff --git a/test/endless/test-window.c b/test/endless/test-window.c index 3e648d3..a6fc28a 100644 --- a/test/endless/test-window.c +++ b/test/endless/test-window.c @@ -4,7 +4,6 @@ #include <gtk/gtk.h> #include <endless/endless.h> #include "endless/eostopbar-private.h" -#include "endless/eosmainarea-private.h" #include "run-tests.h" @@ -53,17 +52,6 @@ test_has_top_bar (GApplication *app) } static void -test_has_main_area (GApplication *app) -{ - GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); - GtkWidget *main_area = container_find_descendant_with_type (GTK_CONTAINER (win), EOS_TYPE_MAIN_AREA); - g_assert (main_area != NULL); - g_assert (EOS_IS_MAIN_AREA (main_area)); - - gtk_widget_destroy (win); -} - -static void test_has_default_page_manager (GApplication *app) { GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); @@ -169,64 +157,6 @@ test_prop_page_manager (GApplication *app) } static void -test_main_area_widgets_visibility (GApplication *app) -{ - GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); - EosPageManager *pm = eos_window_get_page_manager (EOS_WINDOW (win)); - GtkWidget *main_area = container_find_descendant_with_type (GTK_CONTAINER (win), EOS_TYPE_MAIN_AREA); - - GtkWidget *page0 = gtk_label_new ("no-no"); - GtkWidget *page1 = gtk_label_new ("yes-no"); - GtkWidget *page2 = gtk_label_new ("no-yes"); - GtkWidget *page3 = gtk_label_new ("yes-yes"); - - GtkWidget *toolbox1 = gtk_label_new ("toolbox1"); - GtkWidget *toolbox3 = gtk_label_new ("toolbox3"); - - gtk_container_add (GTK_CONTAINER (pm), page0); - gtk_container_add_with_properties (GTK_CONTAINER (pm), page1, - "custom-toolbox-widget", toolbox1, - NULL); - gtk_container_add_with_properties (GTK_CONTAINER (pm), page2, - "page-actions", TRUE, - NULL); - gtk_container_add_with_properties (GTK_CONTAINER (pm), page3, - "custom-toolbox-widget", toolbox3, - "page-actions", TRUE, - NULL); - - GtkWidget *tb; - gboolean actions; - EosMainArea *ma = EOS_MAIN_AREA (main_area); - - eos_page_manager_set_visible_page (pm, page0); - tb = eos_main_area_get_toolbox (ma); - actions = eos_main_area_get_actions (ma); - g_assert (tb == NULL); - g_assert (actions == FALSE); - - eos_page_manager_set_visible_page (pm, page1); - tb = eos_main_area_get_toolbox (ma); - actions = eos_main_area_get_actions (ma); - g_assert (tb == toolbox1); - g_assert (actions == FALSE); - - eos_page_manager_set_visible_page (pm, page2); - tb = eos_main_area_get_toolbox (ma); - actions = eos_main_area_get_actions (ma); - g_assert (tb == NULL); - g_assert (actions == TRUE); - - eos_page_manager_set_visible_page (pm, page3); - tb = eos_main_area_get_toolbox (ma); - actions = eos_main_area_get_actions (ma); - g_assert (tb == toolbox3); - g_assert (actions == TRUE); - - gtk_widget_destroy (win); -} - -static void test_internal_widget_visibility (GApplication *app) { GtkWidget *win = eos_window_new (EOS_APPLICATION (app)); EosPageManager *pm = eos_window_get_page_manager (EOS_WINDOW (win)); @@ -252,7 +182,6 @@ add_window_tests (void) ADD_APP_WINDOW_TEST ("/window/application-not-null", test_application_not_null); ADD_APP_WINDOW_TEST ("/window/has-top-bar", test_has_top_bar); - ADD_APP_WINDOW_TEST ("/window/has-main-area", test_has_main_area); ADD_APP_WINDOW_TEST ("/window/has-default-page-manager", test_has_default_page_manager); ADD_APP_WINDOW_TEST ("/window/get-set-page-manager", @@ -266,8 +195,6 @@ add_window_tests (void) ADD_APP_WINDOW_TEST ("/window/get-set-font-scaling-min-font-size", test_get_set_font_scaling_min_font_size); ADD_APP_WINDOW_TEST ("/window/prop-page-manager", test_prop_page_manager); - ADD_APP_WINDOW_TEST ("/window/main-area-widgets-visibility", - test_main_area_widgets_visibility); ADD_APP_WINDOW_TEST ("/window/internal-widget-visibility", test_internal_widget_visibility); } |