From 89a5825eb20bfa91b91055e5a3dfe6445e6b9bd2 Mon Sep 17 00:00:00 2001 From: raveit65 Date: Fri, 11 Jun 2021 21:26:40 +0200 Subject: [PATCH] Revert "pager: do not change workspace size from size_allocate" This reverts commit 3456b747b6381f17d48629dd8fdd4d511e739b10. --- libwnck/pager.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/libwnck/pager.c b/libwnck/pager.c index c769d62..a563a4d 100644 --- a/libwnck/pager.c +++ b/libwnck/pager.c @@ -122,6 +122,8 @@ static void wnck_pager_get_preferred_height_for_width (GtkWidget *widget, int width, int *minimum_height, int *natural_height); +static void wnck_pager_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); static gboolean wnck_pager_draw (GtkWidget *widget, cairo_t *cr); static gboolean wnck_pager_button_press (GtkWidget *widget, @@ -247,6 +249,7 @@ wnck_pager_class_init (WnckPagerClass *klass) widget_class->get_preferred_width_for_height = wnck_pager_get_preferred_width_for_height; widget_class->get_preferred_height = wnck_pager_get_preferred_height; widget_class->get_preferred_height_for_width = wnck_pager_get_preferred_height_for_width; + widget_class->size_allocate = wnck_pager_size_allocate; widget_class->draw = wnck_pager_draw; widget_class->button_press_event = wnck_pager_button_press; widget_class->button_release_event = wnck_pager_button_release; @@ -684,6 +687,62 @@ wnck_pager_get_preferred_height_for_width (GtkWidget *widget, *natural_height = *minimum_height = MAX (height, 0); } +static gboolean +_wnck_pager_queue_resize (gpointer data) +{ + gtk_widget_queue_resize (GTK_WIDGET (data)); + return FALSE; +} + +static void +wnck_pager_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + WnckPager *pager; + int workspace_size; + GtkBorder padding; + int width; + int height; + + pager = WNCK_PAGER (widget); + + width = allocation->width; + height = allocation->height; + + _wnck_pager_get_padding (pager, &padding); + width -= padding.left + padding.right; + height -= padding.top + padding.bottom; + + g_assert (pager->priv->n_rows > 0); + + if (pager->priv->orientation == GTK_ORIENTATION_VERTICAL) + { + if (pager->priv->show_all_workspaces) + workspace_size = (width - (pager->priv->n_rows - 1)) / pager->priv->n_rows; + else + workspace_size = width; + } + else + { + if (pager->priv->show_all_workspaces) + workspace_size = (height - (pager->priv->n_rows - 1))/ pager->priv->n_rows; + else + workspace_size = height; + } + + workspace_size = MAX (workspace_size, 1); + + if (workspace_size != pager->priv->workspace_size) + { + pager->priv->workspace_size = workspace_size; + g_idle_add (_wnck_pager_queue_resize, pager); + return; + } + + GTK_WIDGET_CLASS (wnck_pager_parent_class)->size_allocate (widget, + allocation); +} + static void get_workspace_rect (WnckPager *pager, int space, -- 2.31.1