-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);
- else if (frame.y > (signed) screen->size().h())
- configure(frame.border_w, screen->size().h() - frame.height,
- frame.width, frame.height);
- else
- configure(frame.border_w, frame.y + frame.border_w,
- frame.width, frame.height);
- } else if (frame.x > (signed) screen->size().w()) {
- if (((signed) (frame.y + frame.y_border)) < 0)
- configure(screen->size().w() - frame.width, frame.border_w,
- frame.width, frame.height);
- else if (frame.y > (signed) screen->size().h())
- configure(screen->size().w() - frame.width,
- screen->size().h() - frame.height, frame.width, frame.height);
- else
- configure(screen->size().w() - frame.width,
- frame.y + frame.border_w, frame.width, frame.height);
- }
-
- openbox.grab();
- if (! validateClient()) return 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) {
- XSetInputFocus(display, client.window,
- RevertToPointerRoot, 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);
- }