if (WINDOW_IS_CLIENT(it->data)) {
ObClient *c = WINDOW_AS_CLIENT(it->data);
if (c->frame->visible &&
+ /* check the desktop, this is done during desktop
+ switching and windows are shown/hidden status is not
+ reliable */
+ (c->desktop == screen_desktop ||
+ c->desktop == DESKTOP_ALL) &&
/* ignore all animating windows */
!frame_iconify_animating(c->frame) &&
RECT_CONTAINS(c->frame->area, x, y))
dst->pos_given = TRUE;
dst->center_x = src->center_x;
dst->center_y = src->center_y;
+ dst->opposite_x = src->opposite_x;
+ dst->opposite_y = src->opposite_y;
dst->position.x = src->position.x;
dst->position.y = src->position.y;
dst->monitor = src->monitor;
settings->center_x = TRUE;
x_pos_given = TRUE;
} else {
- settings->position.x = parse_int(doc, c);
+ if (s[0] == '-')
+ settings->opposite_x = TRUE;
+ if (s[0] == '-' || s[0] == '+')
+ settings->position.x = atoi(s+1);
+ else
+ settings->position.x = atoi(s);
x_pos_given = TRUE;
}
g_free(s);
settings->center_y = TRUE;
settings->pos_given = TRUE;
} else {
- settings->position.y = parse_int(doc, c);
+ if (s[0] == '-')
+ settings->opposite_y = TRUE;
+ if (s[0] == '-' || s[0] == '+')
+ settings->position.y = atoi(s+1);
+ else
+ settings->position.y = atoi(s);
settings->pos_given = TRUE;
}
g_free(s);
if (settings->center_x)
*x = screen->x + screen->width / 2 - client->area.width / 2;
+ else if (settings->opposite_x)
+ *x = screen->x + screen->width - client->frame->area.width -
+ settings->position.x;
else
*x = screen->x + settings->position.x;
if (settings->center_y)
*y = screen->y + screen->height / 2 - client->area.height / 2;
+ else if (settings->opposite_y)
+ *y = screen->y + screen->height - client->frame->area.height -
+ settings->position.y;
else
*y = screen->y + settings->position.y;