diff --git a/src/stacking.c b/src/stacking.c index b7d201bb8c7a79faee8373560e147b67ec411bf9..195c63798aaaa7f86ae3b606c7b4bef7b2a365e4 100644 --- a/src/stacking.c +++ b/src/stacking.c @@ -156,7 +156,8 @@ gboolean clientIsTopMost (Client *c) { ScreenInfo *screen_info; - GList *index; + GList *index, *index2; + Client *c2; g_return_val_if_fail (c != NULL, FALSE); TRACE ("entering clientIsTopMost"); @@ -166,18 +167,18 @@ clientIsTopMost (Client *c) index = g_list_find (screen_info->windows_stack, (gconstpointer) c); if (index) { - GList *index2 = g_list_next (index); - if (index2) - { - Client *c2 = (Client *) index2->data; - return (c2->win_layer > c->win_layer); - } - else + index2 = g_list_next (index); + while (index2) { - return TRUE; + c2 = (Client *) index2->data; + if (FLAG_TEST (c2->xfwm_flags, XFWM_FLAG_VISIBLE) && (c2->win_layer == c->win_layer)) + { + return FALSE; + } + index2 = g_list_next (index2); } } - return FALSE; + return TRUE; } Client * diff --git a/src/workspaces.c b/src/workspaces.c index 910223118dc89080988faaece370cbedf519e523..3668e2528ab2b8b7a645b49bc7dfe88bf4b7b3a4 100644 --- a/src/workspaces.c +++ b/src/workspaces.c @@ -385,7 +385,7 @@ workspaceSwitch (ScreenInfo *screen_info, int new_ws, Client * c2, gboolean upda { if ((screen_info->params->click_to_focus) && (screen_info->params->raise_on_click)) { - if (!clientIsTopMost (new_focus)) + if (!(screen_info->params->raise_on_focus) && !clientIsTopMost (new_focus)) { clientRaise (new_focus, None); }