-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);
- }
+#ifdef SHAPE
+void BlackboxWindow::configureShape(void) {
+ XShapeCombineShape(blackbox->getXDisplay(), frame.window, ShapeBounding,
+ frame.margin.left - frame.border_w,
+ frame.margin.top - frame.border_w,
+ client.window, ShapeBounding, ShapeSet);
+
+ int num = 0;
+ XRectangle xrect[2];
+
+ if (decorations & Decor_Titlebar) {
+ xrect[0].x = xrect[0].y = -frame.border_w;
+ xrect[0].width = frame.rect.width();
+ xrect[0].height = frame.title_h + (frame.border_w * 2);
+ ++num;
+ }
+
+ if (decorations & Decor_Handle) {
+ xrect[1].x = -frame.border_w;
+ xrect[1].y = frame.rect.height() - frame.margin.bottom +
+ frame.mwm_border_w - frame.border_w;
+ xrect[1].width = frame.rect.width();
+ xrect[1].height = frame.handle_h + (frame.border_w * 2);
+ ++num;
+ }