diff options
author | Timm Bäder <mail@baedert.org> | 2017-06-04 17:30:40 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-07-19 21:27:13 -0400 |
commit | 9e5044725396a55faa43b3f620d9712d18bb68ff (patch) | |
tree | 015d13eedd3799f640d11761b655f6862dae1137 /gtk/gtkstack.c | |
parent | 12d2679aacedfeff87fcb802103f930f9f55a53a (diff) | |
download | gtk+-9e5044725396a55faa43b3f620d9712d18bb68ff.tar.gz |
stack: Remove bin_window
Diffstat (limited to 'gtk/gtkstack.c')
-rw-r--r-- | gtk/gtkstack.c | 137 |
1 files changed, 20 insertions, 117 deletions
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 81f2f4d68d..cb2276c13a 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -131,8 +131,6 @@ struct _GtkStackChildInfo { typedef struct { GList *children; - GdkWindow* bin_window; - GtkStackChildInfo *visible_child; gboolean hhomogeneous; @@ -201,10 +199,6 @@ static void gtk_stack_set_child_property (GtkContainer *contain const GValue *value, GParamSpec *pspec); static void gtk_stack_unschedule_ticks (GtkStack *stack); -static gint get_bin_window_x (GtkStack *stack, - const GtkAllocation *allocation); -static gint get_bin_window_y (GtkStack *stack, - const GtkAllocation *allocation); G_DEFINE_TYPE_WITH_PRIVATE (GtkStack, gtk_stack, GTK_TYPE_CONTAINER) @@ -305,72 +299,6 @@ gtk_stack_set_property (GObject *object, } static void -gtk_stack_realize (GtkWidget *widget) -{ - GtkStack *stack = GTK_STACK (widget); - GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); - GtkAllocation allocation; - GtkStackChildInfo *info; - GList *l; - - GTK_WIDGET_CLASS (gtk_stack_parent_class)->realize (widget); - - gtk_widget_get_content_allocation (widget, &allocation); - - priv->bin_window = - gdk_window_new_child (gtk_widget_get_window (widget), - GDK_ALL_EVENTS_MASK, - &(GdkRectangle) { - get_bin_window_x (stack, &allocation), - get_bin_window_y (stack, &allocation), - allocation.width, - allocation.height}); - gtk_widget_register_window (widget, priv->bin_window); - - for (l = priv->children; l != NULL; l = l->next) - { - info = l->data; - - gtk_widget_set_parent_window (info->widget, priv->bin_window); - } -} - -static void -gtk_stack_unrealize (GtkWidget *widget) -{ - GtkStack *stack = GTK_STACK (widget); - GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); - - gtk_widget_unregister_window (widget, priv->bin_window); - gdk_window_destroy (priv->bin_window); - priv->bin_window = NULL; - - GTK_WIDGET_CLASS (gtk_stack_parent_class)->unrealize (widget); -} - -static void -gtk_stack_map (GtkWidget *widget) -{ - GtkStack *stack = GTK_STACK (widget); - GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); - - GTK_WIDGET_CLASS (gtk_stack_parent_class)->map (widget); - - gdk_window_show (priv->bin_window); -} - -static void -gtk_stack_unmap (GtkWidget *widget) -{ - GtkStack *stack = GTK_STACK (widget); - GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); - - gdk_window_hide (priv->bin_window); - - GTK_WIDGET_CLASS (gtk_stack_parent_class)->unmap (widget); -} - -static void gtk_stack_class_init (GtkStackClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -383,10 +311,6 @@ gtk_stack_class_init (GtkStackClass *klass) widget_class->size_allocate = gtk_stack_size_allocate; widget_class->snapshot = gtk_stack_snapshot; - widget_class->realize = gtk_stack_realize; - widget_class->unrealize = gtk_stack_unrealize; - widget_class->map = gtk_stack_map; - widget_class->unmap = gtk_stack_unmap; widget_class->measure = gtk_stack_measure; widget_class->compute_expand = gtk_stack_compute_expand; @@ -792,39 +716,43 @@ get_simple_transition_type (gboolean new_child_first, } static gint -get_bin_window_x (GtkStack *stack, - const GtkAllocation *allocation) +get_bin_window_x (GtkStack *stack) { GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); + GtkAllocation allocation; int x = 0; + gtk_widget_get_content_allocation (GTK_WIDGET (stack), &allocation); + if (gtk_progress_tracker_get_state (&priv->tracker) != GTK_PROGRESS_STATE_AFTER) { if (is_left_transition (priv->active_transition_type)) - x = allocation->width * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); + x = allocation.width * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); if (is_right_transition (priv->active_transition_type)) - x = -allocation->width * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); + x = -allocation.width * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); } - return x + allocation->x; + return x; } static gint -get_bin_window_y (GtkStack *stack, - const GtkAllocation *allocation) +get_bin_window_y (GtkStack *stack) { GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); + GtkAllocation allocation; int y = 0; + gtk_widget_get_content_allocation (GTK_WIDGET (stack), &allocation); + if (gtk_progress_tracker_get_state (&priv->tracker) != GTK_PROGRESS_STATE_AFTER) { if (is_up_transition (priv->active_transition_type)) - y = allocation->height * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); + y = allocation.height * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); if (is_down_transition(priv->active_transition_type)) - y = -allocation->height * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); + y = -allocation.height * (1 - gtk_progress_tracker_get_ease_out_cubic (&priv->tracker, FALSE)); } - return y + allocation->y; + return y; } static void @@ -836,15 +764,8 @@ gtk_stack_progress_updated (GtkStack *stack) if (!priv->vhomogeneous || !priv->hhomogeneous) gtk_widget_queue_resize (GTK_WIDGET (stack)); - - if (priv->bin_window != NULL && - is_window_moving_transition (priv->active_transition_type)) - { - GtkAllocation allocation; - gtk_widget_get_allocation (GTK_WIDGET (stack), &allocation); - gdk_window_move (priv->bin_window, - get_bin_window_x (stack, &allocation), get_bin_window_y (stack, &allocation)); - } + else if (is_window_moving_transition (priv->active_transition_type)) + gtk_widget_queue_allocate (GTK_WIDGET (stack)); if (gtk_progress_tracker_get_state (&priv->tracker) == GTK_PROGRESS_STATE_AFTER) { @@ -1209,13 +1130,8 @@ gtk_stack_add (GtkContainer *container, priv->children = g_list_append (priv->children, child_info); gtk_widget_set_child_visible (child, FALSE); - gtk_widget_set_parent_window (child, priv->bin_window); gtk_widget_set_parent (child, GTK_WIDGET (stack)); - if (priv->bin_window) - gdk_window_set_events (priv->bin_window, - GDK_ALL_EVENTS_MASK); - g_signal_connect (child, "notify::visible", G_CALLBACK (stack_child_visibility_notify_cb), stack); @@ -1990,8 +1906,8 @@ gtk_stack_snapshot_slide (GtkWidget *widget, gtk_widget_get_allocation (widget, &allocation); - x = get_bin_window_x (stack, &allocation) - allocation.x; - y = get_bin_window_y (stack, &allocation) - allocation.y; + x = get_bin_window_x (stack); + y = get_bin_window_y (stack); switch (priv->active_transition_type) { @@ -2020,9 +1936,6 @@ gtk_stack_snapshot_slide (GtkWidget *widget, break; } - x += priv->last_visible_surface_allocation.x; - y += priv->last_visible_surface_allocation.y; - if (gtk_widget_get_valign (priv->last_visible_child->widget) == GTK_ALIGN_END && priv->last_visible_widget_height > allocation.height) y -= priv->last_visible_widget_height - allocation.height; @@ -2118,15 +2031,8 @@ gtk_stack_size_allocate (GtkWidget *widget, GtkAllocation clip = *allocation; GtkAllocation child_allocation; - child_allocation.x = 0; - child_allocation.y = 0; - - if (gtk_widget_get_realized (widget)) - { - gdk_window_move_resize (priv->bin_window, - get_bin_window_x (stack, allocation), get_bin_window_y (stack, allocation), - allocation->width, allocation->height); - } + child_allocation.x = get_bin_window_x (stack); + child_allocation.y = get_bin_window_y (stack); if (priv->last_visible_child) { @@ -2191,9 +2097,6 @@ gtk_stack_size_allocate (GtkWidget *widget, gtk_container_get_children_clip (GTK_CONTAINER (widget), &clip); - clip.x += allocation->x; - clip.y += allocation->y; - gtk_widget_set_clip (widget, &clip); } |