all repos — openbox @ 6d16679486a9268a17f3bfd03b05febf1644a87e

openbox fork - make it a bit more like ryudo

focus code updates
Dana Jansens danakj@orodu.net
commit

6d16679486a9268a17f3bfd03b05febf1644a87e

parent

6486b6457693414862fdc34ea07457ed5cbf0a0d

6 files changed, 37 insertions(+), 41 deletions(-)

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

@@ -483,9 +483,6 @@ }

} } - XSetInputFocus(getBaseDisplay().getXDisplay(), - PointerRoot, None, CurrentTime); - XFree(children); XFlush(getBaseDisplay().getXDisplay()); }
M src/Toolbar.ccsrc/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.ccsrc/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.hsrc/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.ccsrc/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.ccsrc/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)