X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fblackbox.cc;h=56782248dddd5b9a3ef6802df26ef17e8f20cd0c;hb=8941da8e41d15ae6729c04b2933d74869c25e857;hp=c93b28a6331683a727333f07ac746234483e31a1;hpb=b8ee3dbc4565efb19338c5cf1948f0f4e2f24fd6;p=chaz%2Fopenbox diff --git a/src/blackbox.cc b/src/blackbox.cc index c93b28a6..56782248 100644 --- a/src/blackbox.cc +++ b/src/blackbox.cc @@ -90,6 +90,8 @@ extern "C" { #endif // HAVE_LIBGEN_H } +#include + #include #include using std::string; @@ -559,11 +561,14 @@ void Blackbox::process_event(XEvent *e) { } case FocusIn: { - if (e->xfocus.detail != NotifyNonlinear) { + if (e->xfocus.detail != NotifyNonlinear && + e->xfocus.detail != NotifyAncestor) { /* don't process FocusIns when: 1. the new focus window isn't an ancestor or inferior of the old focus window (NotifyNonlinear) + make sure to allow the FocusIn when the old focus window was an + ancestor but didn't have a parent, such as root (NotifyAncestor) */ break; } @@ -650,7 +655,7 @@ void Blackbox::process_event(XEvent *e) { case ClientMessage: { if (e->xclient.format == 32) { - if (e->xclient.message_type == getWMChangeStateAtom()) { + if (e->xclient.message_type == xatom->getAtom(XAtom::wm_change_state)) { BlackboxWindow *win = searchWindow(e->xclient.window); if (! win || ! win->validateClient()) return; @@ -661,10 +666,9 @@ void Blackbox::process_event(XEvent *e) { } else if(e->xclient.message_type == getBlackboxChangeWorkspaceAtom()) { BScreen *screen = searchScreen(e->xclient.window); - if (screen && e->xclient.data.l[0] >= 0 && - e->xclient.data.l[0] < - static_cast(screen->getWorkspaceCount())) - screen->changeWorkspaceID(e->xclient.data.l[0]); + unsigned int workspace = e->xclient.data.l[0]; + if (screen && workspace < screen->getWorkspaceCount()) + screen->changeWorkspaceID(workspace); } else if (e->xclient.message_type == getBlackboxChangeWindowFocusAtom()) { BlackboxWindow *win = searchWindow(e->xclient.window);