focus code updates

This commit is contained in:
Dana Jansens 2002-05-13 00:23:59 +00:00
parent 6486b64576
commit 6d16679486
6 changed files with 37 additions and 41 deletions

View file

@ -483,9 +483,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
} }
} }
XSetInputFocus(getBaseDisplay().getXDisplay(),
PointerRoot, None, CurrentTime);
XFree(children); XFree(children);
XFlush(getBaseDisplay().getXDisplay()); XFlush(getBaseDisplay().getXDisplay());
} }

View file

@ -1154,9 +1154,9 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
if (openbox.focusedWindow()) { if (openbox.focusedWindow()) {
openbox.focusedWindow()->setInputFocus(); openbox.focusedWindow()->setInputFocus();
openbox.focusedWindow()->setFocusFlag(True); openbox.focusedWindow()->setFocusFlag(True);
} else { } else
XSetInputFocus(display, PointerRoot, None, CurrentTime); openbox.focusWindow((OpenboxWindow *) 0);
}
// check to make sure that new_name[0] != 0... otherwise we have a null // check to make sure that new_name[0] != 0... otherwise we have a null
// workspace name which causes serious problems, especially for the // workspace name which causes serious problems, especially for the
// Openbox::LoadRC() method. // Openbox::LoadRC() method.

View file

@ -1353,7 +1353,7 @@ void OpenboxWindow::configure(int dx, int dy,
} }
Bool OpenboxWindow::setInputFocus(void) { bool OpenboxWindow::setInputFocus(void) {
if (((signed) (frame.x + frame.width)) < 0) { if (((signed) (frame.x + frame.width)) < 0) {
if (((signed) (frame.y + frame.y_border)) < 0) if (((signed) (frame.y + frame.y_border)) < 0)
configure(frame.border_w, frame.border_w, frame.width, frame.height); configure(frame.border_w, frame.border_w, frame.width, frame.height);
@ -1378,39 +1378,36 @@ Bool OpenboxWindow::setInputFocus(void) {
openbox.grab(); openbox.grab();
if (! validateClient()) return False; if (! validateClient()) return False;
Bool ret = False; bool ret = false;
if (client.transient && flags.modal) { if (client.transient && flags.modal) {
ret = client.transient->setInputFocus(); ret = client.transient->setInputFocus();
} else if (! flags.focused) { } 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, XSetInputFocus(display, client.window,
RevertToPointerRoot, CurrentTime); RevertToPointerRoot, CurrentTime);
else openbox.focusWindow(this);
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);
}
if (flags.send_focus_message) { if (screen->sloppyFocus() && screen->autoRaise())
XEvent ce; timer->start();
ce.xclient.type = ClientMessage;
ce.xclient.message_type = openbox.getWMProtocolsAtom(); ret = true;
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);
} }
if (screen->sloppyFocus() && screen->autoRaise())
timer->start();
ret = True;
} }
openbox.ungrab(); openbox.ungrab();
@ -3015,7 +3012,7 @@ void OpenboxWindow::shapeEvent(XShapeEvent *) {
#endif // SHAPE #endif // SHAPE
Bool OpenboxWindow::validateClient(void) { bool OpenboxWindow::validateClient(void) {
XSync(display, False); XSync(display, False);
XEvent e; XEvent e;
@ -3024,10 +3021,10 @@ Bool OpenboxWindow::validateClient(void) {
XPutBackEvent(display, &e); XPutBackEvent(display, &e);
openbox.ungrab(); openbox.ungrab();
return False; return false;
} }
return True; return true;
} }

View file

@ -316,8 +316,8 @@ public:
inline void setWindowNumber(int n) { window_number = n; } inline void setWindowNumber(int n) { window_number = n; }
Bool validateClient(); bool validateClient();
Bool setInputFocus(); bool setInputFocus();
void setFocusFlag(Bool); void setFocusFlag(Bool);
void iconify(); void iconify();

View file

@ -119,8 +119,6 @@ const int Workspace::removeWindow(OpenboxWindow *w) {
_zorder.empty() || // click focus but no windows _zorder.empty() || // click focus but no windows
!_zorder.front()->setInputFocus()) { // tried window, but wont focus !_zorder.front()->setInputFocus()) { // tried window, but wont focus
screen.getOpenbox().focusWindow((OpenboxWindow *) 0); screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
XSetInputFocus(screen.getOpenbox().getXDisplay(),
PointerRoot, None, CurrentTime);
} }
} }
} }

View file

@ -227,6 +227,8 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
timer->fireOnce(True); timer->fireOnce(True);
ungrab(); ungrab();
focusWindow((OpenboxWindow *) 0);
} }
@ -865,7 +867,7 @@ void Openbox::restart(const char *prog) {
void Openbox::shutdown() { void Openbox::shutdown() {
BaseDisplay::shutdown(); BaseDisplay::shutdown();
XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime); focusWindow((OpenboxWindow *) 0);
std::for_each(screenList.begin(), screenList.end(), std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::shutdown)); std::mem_fun(&BScreen::shutdown));
@ -1094,8 +1096,10 @@ void Openbox::focusWindow(OpenboxWindow *win) {
if (tbar) if (tbar)
tbar->redrawWindowLabel(true); tbar->redrawWindowLabel(true);
focused_screen->updateNetizenWindowFocus(); focused_screen->updateNetizenWindowFocus();
//} else { } else {
// focused_window = (OpenboxWindow *) 0; ASSERT(focused_screen != (BScreen *) 0);
XSetInputFocus(getXDisplay(), focused_screen->getRootWindow(),
None, CurrentTime);
} }
if (old_tbar && old_tbar != tbar) if (old_tbar && old_tbar != tbar)