From 37f12c964a2e2fc23b8fc14e4f8b29b9e21ce416 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Wed, 10 Dec 2003 11:40:07 +0000 Subject: Fixes bug #124148 - minimize animation goes to wrong place with grouped 2003-12-10 Mark McLoughlin Fixes bug #124148 - minimize animation goes to wrong place with grouped windows. * libwnck/tasklist.c: (wnck_tasklist_size_allocate): pass in visible_windows to update_icon_geometries. (wnck_tasklist_update_icon_geometries): iterate over the visible tasks updating the associated window's icon geometries from there. --- ChangeLog | 12 ++++++++++++ libwnck/tasklist.c | 36 ++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index dee8790..d5d36d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2003-12-10 Mark McLoughlin + + Fixes bug #124148 - minimize animation goes to wrong place + with grouped windows. + + * libwnck/tasklist.c: + (wnck_tasklist_size_allocate): pass in visible_windows to + update_icon_geometries. + (wnck_tasklist_update_icon_geometries): iterate over the + visible tasks updating the associated window's icon + geometries from there. + 2003-11-28 Federico Mena Quintero * libwnck/tasklist.c (WnckTaskType): Added a WNCK_TASK_CLASS_GROUP diff --git a/libwnck/tasklist.c b/libwnck/tasklist.c index d40f566..62feb44 100644 --- a/libwnck/tasklist.c +++ b/libwnck/tasklist.c @@ -235,7 +235,8 @@ static void wnck_tasklist_change_active_task (WnckTasklist *tasklist, static gboolean wnck_tasklist_change_active_timeout (gpointer data); static void wnck_tasklist_activate_task_window (WnckTask *task); -static void wnck_tasklist_update_icon_geometries (WnckTasklist *tasklist); +static void wnck_tasklist_update_icon_geometries (WnckTasklist *tasklist, + GList *visible_tasks); static void wnck_tasklist_connect_screen (WnckTasklist *tasklist, WnckScreen *screen); static void wnck_tasklist_disconnect_screen (WnckTasklist *tasklist); @@ -1097,10 +1098,11 @@ wnck_tasklist_size_allocate (GtkWidget *widget, i++; l = l->next; } - g_list_free (visible_tasks); /* Update icon geometries. */ - wnck_tasklist_update_icon_geometries (tasklist); + wnck_tasklist_update_icon_geometries (tasklist, visible_tasks); + + g_list_free (visible_tasks); GTK_WIDGET_CLASS (tasklist_parent_class)->size_allocate (widget, allocation); } @@ -1551,24 +1553,38 @@ wnck_tasklist_change_active_task (WnckTasklist *tasklist, WnckTask *active_task) } static void -wnck_tasklist_update_icon_geometries (WnckTasklist *tasklist) +wnck_tasklist_update_icon_geometries (WnckTasklist *tasklist, + GList *visible_tasks) { gint x, y, width, height; - GList *list; + GList *l1; - for (list = tasklist->priv->windows; list; list = list->next) { - WnckTask *task = WNCK_TASK (list->data); + for (l1 = visible_tasks; l1; l1 = l1->next) { + WnckTask *task = WNCK_TASK (l1->data); if (!GTK_WIDGET_REALIZED (task->button)) continue; gdk_window_get_origin (GTK_BUTTON (task->button)->event_window, - &x, &y); + &x, &y); width = task->button->allocation.width; height = task->button->allocation.height; - wnck_window_set_icon_geometry (task->window, - x, y, width, height); + if (task->window) + wnck_window_set_icon_geometry (task->window, + x, y, width, height); + else { + GList *l2; + + for (l2 = task->windows; l2; l2 = l2->next) { + WnckTask *win_task = WNCK_TASK (l2->data); + + g_assert (win_task->window); + + wnck_window_set_icon_geometry (win_task->window, + x, y, width, height); + } + } } } -- cgit v1.2.1