all repos — fluxbox @ 6defd9391d16fe99422d12c2ab5475929087c11f

custom fork of the fluxbox windowmanager

handle both Focusable's as m_cycling_next

m_cycling_next can either be WinClient or a FluxboxWindow
In case of the latter, client->fbwindow() needs to be matched in
setFocusedWindow when protecting against client side focus juggling.

BUG: 1148
Thomas Lübking thomas.luebking@gmail.com
commit

6defd9391d16fe99422d12c2ab5475929087c11f

parent

f6132b7602263672a97b89a30c6f9efe0355b7ee

1 files changed, 5 insertions(+), 2 deletions(-)

jump to
M src/FocusControl.ccsrc/FocusControl.cc

@@ -591,11 +591,14 @@

BScreen *screen = client ? &client->screen() : 0; if (client && screen && screen->focusControl().isCycling()) { Focusable *next = screen->focusControl().m_cycling_next; - if (next && next != client && screen->focusControl().m_cycling_list->contains(*next)) { + WinClient *nextClient = dynamic_cast<WinClient*>(next); + FluxboxWindow *nextWindow = nextClient ? 0 : dynamic_cast<FluxboxWindow*>(next); + if (next && nextClient != client && nextWindow != client->fbwindow() && + screen->focusControl().m_cycling_list->contains(*next)) { // if we're currently cycling and the client tries to juggle around focus // on FocusIn events to provide client-side modality - don't let him next->focus(); - if (WinClient *nextClient = dynamic_cast<WinClient*>(next)) + if (nextClient) setFocusedWindow(nextClient); // doesn't happen automatically while cycling, 1148 return; }