}
}
XFree(children);
-
- if (config_focus_new)
- focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS);
}
void client_manage(Window window)
(resized && config_redraw_resize))));
/* if the client is enlarging, the resize the client before the frame */
- if (send_resize_client && (w > oldw || h > oldh))
- XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh));
+ if (send_resize_client && user && (w > oldw || h > oldh))
+ XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh));
/* move/resize the frame to match the request */
if (self->frame) {
event.xconfigure.override_redirect = FALSE;
XSendEvent(event.xconfigure.display, event.xconfigure.window,
FALSE, StructureNotifyMask, &event);
- }
+ }
}
/* if the client is shrinking, then resize the frame before the client */
- if (send_resize_client && (w <= oldw || h <= oldh))
- XResizeWindow(ob_display, self->window, w, h);
+ if (send_resize_client && (!user || (w <= oldw || h <= oldh)))
+ XResizeWindow(ob_display, self->window, w, h);
XFlush(ob_display);
}
void client_unfocus(ObClient *self)
{
- g_assert(focus_client == self);
+ if (focus_client == self) {
#ifdef DEBUG_FOCUS
- ob_debug("client_unfocus for %lx\n", self->window);
+ ob_debug("client_unfocus for %lx\n", self->window);
#endif
- focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
+ focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
+ }
}
void client_activate(ObClient *self, gboolean here)
}
return dest;
}
+
+ObClient* client_under_pointer()
+{
+ int x, y;
+ GList *it;
+ ObClient *ret = NULL;
+
+ if (screen_pointer_pos(&x, &y)) {
+ for (it = stacking_list; it != NULL; it = it->next) {
+ if (WINDOW_IS_CLIENT(it->data)) {
+ ObClient *c = WINDOW_AS_CLIENT(it->data);
+ if (c->desktop == screen_desktop &&
+ RECT_CONTAINS(c->frame->area, x, y)) {
+ ret = c;
+ break;
+ }
+ }
+ }
+ }
+ return ret;
+}