diff options
Diffstat (limited to 'libwnck/tasklist.c')
-rw-r--r-- | libwnck/tasklist.c | 17 |
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); } |