focus code updates
Dana Jansens danakj@orodu.net
6 files changed,
37 insertions(+),
41 deletions(-)
M
src/Screen.cc
→
src/Screen.cc
@@ -483,9 +483,6 @@ }
} } - XSetInputFocus(getBaseDisplay().getXDisplay(), - PointerRoot, None, CurrentTime); - XFree(children); XFlush(getBaseDisplay().getXDisplay()); }
M
src/Toolbar.cc
→
src/Toolbar.cc
@@ -1154,9 +1154,9 @@ openbox.setNoFocus(False);
if (openbox.focusedWindow()) { openbox.focusedWindow()->setInputFocus(); openbox.focusedWindow()->setFocusFlag(True); - } else { - XSetInputFocus(display, PointerRoot, None, CurrentTime); - } + } else + openbox.focusWindow((OpenboxWindow *) 0); + // check to make sure that new_name[0] != 0... otherwise we have a null // workspace name which causes serious problems, especially for the // Openbox::LoadRC() method.
M
src/Window.cc
→
src/Window.cc
@@ -1353,7 +1353,7 @@ }
} -Bool OpenboxWindow::setInputFocus(void) { +bool OpenboxWindow::setInputFocus(void) { if (((signed) (frame.x + frame.width)) < 0) { if (((signed) (frame.y + frame.y_border)) < 0) configure(frame.border_w, frame.border_w, frame.width, frame.height);@@ -1378,39 +1378,36 @@
openbox.grab(); if (! validateClient()) return False; - Bool ret = False; + bool ret = false; if (client.transient && flags.modal) { ret = client.transient->setInputFocus(); } else if (! flags.focused) { - if (focus_mode == F_LocallyActive || focus_mode == F_Passive) + if (focus_mode == F_LocallyActive || focus_mode == F_Passive) { XSetInputFocus(display, client.window, RevertToPointerRoot, CurrentTime); - else - XSetInputFocus(display, screen->getRootWindow(), - RevertToNone, CurrentTime); + openbox.focusWindow(this); + + if (flags.send_focus_message) { + XEvent ce; + ce.xclient.type = ClientMessage; + ce.xclient.message_type = openbox.getWMProtocolsAtom(); + ce.xclient.display = display; + ce.xclient.window = client.window; + ce.xclient.format = 32; + ce.xclient.data.l[0] = openbox.getWMTakeFocusAtom(); + ce.xclient.data.l[1] = openbox.getLastTime(); + ce.xclient.data.l[2] = 0l; + ce.xclient.data.l[3] = 0l; + ce.xclient.data.l[4] = 0l; + XSendEvent(display, client.window, False, NoEventMask, &ce); + } - openbox.focusWindow(this); + if (screen->sloppyFocus() && screen->autoRaise()) + timer->start(); - if (flags.send_focus_message) { - XEvent ce; - ce.xclient.type = ClientMessage; - ce.xclient.message_type = openbox.getWMProtocolsAtom(); - ce.xclient.display = display; - ce.xclient.window = client.window; - ce.xclient.format = 32; - ce.xclient.data.l[0] = openbox.getWMTakeFocusAtom(); - ce.xclient.data.l[1] = openbox.getLastTime(); - ce.xclient.data.l[2] = 0l; - ce.xclient.data.l[3] = 0l; - ce.xclient.data.l[4] = 0l; - XSendEvent(display, client.window, False, NoEventMask, &ce); + ret = true; } - - if (screen->sloppyFocus() && screen->autoRaise()) - timer->start(); - - ret = True; } openbox.ungrab();@@ -3015,7 +3012,7 @@ }
#endif // SHAPE -Bool OpenboxWindow::validateClient(void) { +bool OpenboxWindow::validateClient(void) { XSync(display, False); XEvent e;@@ -3024,10 +3021,10 @@ XCheckTypedWindowEvent(display, client.window, UnmapNotify, &e)) {
XPutBackEvent(display, &e); openbox.ungrab(); - return False; + return false; } - return True; + return true; }
M
src/Window.h
→
src/Window.h
@@ -316,8 +316,8 @@ }
inline void setWindowNumber(int n) { window_number = n; } - Bool validateClient(); - Bool setInputFocus(); + bool validateClient(); + bool setInputFocus(); void setFocusFlag(Bool); void iconify();
M
src/Workspace.cc
→
src/Workspace.cc
@@ -119,8 +119,6 @@ if (screen.sloppyFocus() || // sloppy focus
_zorder.empty() || // click focus but no windows !_zorder.front()->setInputFocus()) { // tried window, but wont focus screen.getOpenbox().focusWindow((OpenboxWindow *) 0); - XSetInputFocus(screen.getOpenbox().getXDisplay(), - PointerRoot, None, CurrentTime); } } }
M
src/openbox.cc
→
src/openbox.cc
@@ -227,6 +227,8 @@ timer->setTimeout(0);
timer->fireOnce(True); ungrab(); + + focusWindow((OpenboxWindow *) 0); }@@ -865,7 +867,7 @@
void Openbox::shutdown() { BaseDisplay::shutdown(); - XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime); + focusWindow((OpenboxWindow *) 0); std::for_each(screenList.begin(), screenList.end(), std::mem_fun(&BScreen::shutdown));@@ -1094,8 +1096,10 @@
if (tbar) tbar->redrawWindowLabel(true); focused_screen->updateNetizenWindowFocus(); - //} else { - // focused_window = (OpenboxWindow *) 0; + } else { + ASSERT(focused_screen != (BScreen *) 0); + XSetInputFocus(getXDisplay(), focused_screen->getRootWindow(), + None, CurrentTime); } if (old_tbar && old_tbar != tbar)