*/
ob_state() == OB_STATE_RUNNING &&
(transient ||
- (!(self->positioned & USPosition) &&
+ (!((self->positioned & USPosition) ||
+ (settings && settings->pos_given)) &&
client_normal(self) &&
!self->session)));
}
for (i = 0; i < screen_num_monitors; ++i) {
Rect *a;
- if (!screen_physical_area_monitor_contains(i, &desired))
- continue;
+ if (!screen_physical_area_monitor_contains(i, &desired)) {
+ if (i < screen_num_monitors - 1)
+ continue;
- a = screen_area(self->desktop, SCREEN_AREA_ONE_MONITOR, &desired);
+ /* the window is not inside any monitor! so just use the first
+ one */
+ a = screen_area(self->desktop, 0, NULL);
+ } else
+ a = screen_area(self->desktop, SCREEN_AREA_ONE_MONITOR, &desired);
/* This makes sure windows aren't entirely outside of the screen so you
can't see them at all.
else
*x = screen->x + settings->position.x;
- ob_debug("x %d settings %d\n", *x, settings->position.x);
-
if (settings->center_y)
*y = screen->y + screen->height / 2 - client->area.height / 2;
else if (settings->opposite_y)
ObAppSettings *settings)
{
gboolean ret;
+ gboolean userplaced = FALSE;
/* per-app settings override program specified position
* but not user specified */
/* try a number of methods */
ret = place_transient_splash(client, x, y) ||
- place_per_app_setting(client, x, y, settings) ||
+ (userplaced = place_per_app_setting(client, x, y, settings)) ||
(config_place_policy == OB_PLACE_POLICY_MOUSE &&
place_under_mouse(client, x, y)) ||
place_nooverlap(client, x, y) ||
/* get where the client should be */
frame_frame_gravity(client->frame, x, y);
- return ret;
+ return !userplaced;
}