focus code updates
This commit is contained in:
parent
6486b64576
commit
6d16679486
6 changed files with 37 additions and 41 deletions
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue