summaryrefslogtreecommitdiff
path: root/libwnck/tasklist.c
diff options
context:
space:
mode:
Diffstat (limited to 'libwnck/tasklist.c')
-rw-r--r--libwnck/tasklist.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libwnck/tasklist.c b/libwnck/tasklist.c
index 63586c2..deb31ef 100644
--- a/libwnck/tasklist.c
+++ b/libwnck/tasklist.c
@@ -2054,14 +2054,21 @@ wnck_tasklist_active_window_changed (WnckScreen *screen,
WnckTasklist *tasklist)
{
WnckWindow *active_window;
+ WnckWindow *initial_window;
WnckTask *active_task = NULL;
/* FIXME: check for group modal window */
- for (active_window = wnck_screen_get_active_window (screen);
- active_window && !active_task;
- active_window = wnck_window_get_transient (active_window))
- active_task = g_hash_table_lookup (tasklist->priv->win_hash,
- active_window);
+ initial_window = active_window = wnck_screen_get_active_window (screen);
+ active_task = g_hash_table_lookup (tasklist->priv->win_hash, active_window);
+ while (active_window && !active_task)
+ {
+ active_window = wnck_window_get_transient (active_window);
+ active_task = g_hash_table_lookup (tasklist->priv->win_hash,
+ active_window);
+ /* Check for transient cycles */
+ if (active_window == initial_window)
+ break;
+ }
wnck_tasklist_change_active_task (tasklist, active_task);
}