/* get the hints from the window */
if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) {
- self->positioned = (size.flags & (PPosition|USPosition));
+ self->positioned = !!(size.flags & (PPosition|USPosition));
if (size.flags & PWinGravity) {
self->gravity = size.win_gravity;
if (old == DESKTOP_ALL) {
for (i = 0; i < screen_num_desktops; ++i)
focus_order[i] = g_list_remove(focus_order[i], self);
+ } else
+ focus_order[old] = g_list_remove(focus_order[old], self);
+ if (target == DESKTOP_ALL) {
+ for (i = 0; i < screen_num_desktops; ++i) {
+ if (focus_new.bool)
+ focus_order[i] = g_list_prepend(focus_order[i], self);
+ else
+ focus_order[i] = g_list_append(focus_order[i], self);
+ }
+ } else {
if (focus_new.bool)
focus_order[target] = g_list_prepend(focus_order[target], self);
else
focus_order[target] = g_list_append(focus_order[target], self);
- } else {
- focus_order[old] = g_list_remove(focus_order[old], self);
- if (target == DESKTOP_ALL)
- for (i = 0; i < screen_num_desktops; ++i) {
- if (focus_new.bool)
- focus_order[i] = g_list_prepend(focus_order[i], self);
- else
- focus_order[i] = g_list_append(focus_order[i], self);
- }
}
dispatch_client(Event_Client_Desktop, self, target, old);
}
if (self->can_focus)
- /* RevertToNone is used so that windows dont get focused inadvertantly
- by having the pointer in them, and then FocusIn events go missing */
- XSetInputFocus(ob_display, self->window, RevertToNone,
+ /* RevertToPointerRoot causes much more headache than TevertToNone, so
+ I choose to use it always, hopefully to find errors quicker, if any
+ are left. (I hate X. I hate focus events.) */
+ XSetInputFocus(ob_display, self->window, RevertToPointerRoot,
event_lasttime);
if (self->focus_notify) {