Index: stacking.c =================================================================== --- stacking.c (revision 25171) +++ stacking.c (working copy) @@ -156,7 +156,8 @@ 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 @@ index = g_list_find (screen_info->windows_stack, (gconstpointer) c); if (index) { - GList *index2 = g_list_next (index); - if (index2) + index2 = g_list_next (index); + while (index2) { - Client *c2 = (Client *) index2->data; - return (c2->win_layer > c->win_layer); + 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); } - else - { - return TRUE; - } } - return FALSE; + return TRUE; } Client * Index: workspaces.c =================================================================== --- workspaces.c (revision 25171) +++ workspaces.c (working copy) @@ -385,7 +385,7 @@ { 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); }