This fixes a problem of overaggressively grouping windows in the tasklist with our default size 24 panel. See bnc #148840 for details and a screenshot. Index: libwnck/tasklist.c =================================================================== --- libwnck/tasklist.c.orig +++ libwnck/tasklist.c @@ -216,6 +216,9 @@ struct _WnckTasklistPrivate int *size_hints; int size_hints_len; + gint last_width; + gint last_height; + WnckLoadIconFunction icon_loader; void *icon_loader_data; GDestroyNotify free_icon_loader_data; @@ -692,6 +695,9 @@ wnck_tasklist_init (WnckTasklist *taskli for (i = 0; i < N_SCREEN_CONNECTIONS; i++) tasklist->priv->screen_connections[i] = 0; + tasklist->priv->last_width = -1; + tasklist->priv->last_height = -1; + tasklist->priv->idle_callback_tag = 0; tasklist->priv->size_hints = NULL; @@ -1324,8 +1330,16 @@ wnck_tasklist_size_request (GtkWidget tasklist->priv->max_button_width = wnck_tasklist_get_button_size (widget); tasklist->priv->max_button_height = max_height; - fake_allocation.width = GTK_WIDGET (tasklist)->allocation.width; - fake_allocation.height = GTK_WIDGET (tasklist)->allocation.height; + /* fake_allocation.width = GTK_WIDGET (tasklist)->allocation.width; + fake_allocation.height = GTK_WIDGET (tasklist)->allocation.height; */ + if (tasklist->priv->last_width != -1) + fake_allocation.width = tasklist->priv->last_width; + else + fake_allocation.width = GTK_WIDGET (tasklist)->allocation.width; + if (tasklist->priv->last_height != -1) + fake_allocation.height = tasklist->priv->last_height; + else + fake_allocation.height = GTK_WIDGET (tasklist)->allocation.height; array = g_array_new (FALSE, FALSE, sizeof (int)); @@ -1501,6 +1515,9 @@ wnck_tasklist_size_allocate (GtkWidget tasklist = WNCK_TASKLIST (widget); + tasklist->priv->last_width = allocation->width; + tasklist->priv->last_height = allocation->height; + n_windows = g_list_length (tasklist->priv->windows); n_startup_sequences = g_list_length (tasklist->priv->startup_sequences); n_grouped_buttons = 0;