summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark McLoughlin <mark@skynet.ie>2003-12-10 11:40:07 +0000
committerMark McLoughlin <markmc@src.gnome.org>2003-12-10 11:40:07 +0000
commit37f12c964a2e2fc23b8fc14e4f8b29b9e21ce416 (patch)
treea2cf137a9a8fa346446155eeb8670d8901b375ea
parent7f7960b6a970e1743a58e69d86e7340cfb743a1b (diff)
downloadlibwnck-gnome-2-4.tar.gz
Fixes bug #124148 - minimize animation goes to wrong place with groupedgnome-2-4
2003-12-10 Mark McLoughlin <mark@skynet.ie> 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.
-rw-r--r--ChangeLog12
-rw-r--r--libwnck/tasklist.c36
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 <mark@skynet.ie>
+
+ 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 <federico@ximian.com>
* 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);
+ }
+ }
}
}