/* try on the client's desktop */
for (it = c->group->members; it; it = g_slist_next(it)) {
- ObClient *itc = it->data;
+ ObClient *itc = it->data;
if (itc != c &&
(itc->desktop == c->desktop ||
itc->desktop == DESKTOP_ALL || c->desktop == DESKTOP_ALL))
/* try on all desktops */
for (it = c->group->members; it; it = g_slist_next(it)) {
- ObClient *itc = it->data;
+ ObClient *itc = it->data;
if (itc != c) {
add_choice(choice, client_monitor(it->data));
ob_debug("placement adding choice %d for group sibling on "
for (i = 0; i < screen_num_monitors; ++i)
area[i] = screen_area(c->desktop, choice[i], NULL);
+ g_free(choice);
+
return area;
}
if (!RECT_INTERSECTS_RECT(*r, *a)) {
result = g_slist_prepend(result, r);
- r = NULL; /* dont free it */
+ /* dont free r, it's moved to the result list */
} else {
Rect isect, extra;
r->width, RECT_BOTTOM(*r) - RECT_BOTTOM(isect));
result = area_add(result, &extra);
}
- }
- g_free(r);
+ /* 'r' is not being added to the result list, so free it */
+ g_free(r);
+ }
}
g_slist_free(list);
return result;
if (r->width >= c->frame->area.width &&
r->height >= c->frame->area.height &&
- r->width > maxsize)
+ r->width * r->height > maxsize)
{
- maxsize = r->width;
+ maxsize = r->width * r->height;
maxit = sit;
}
}
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)
}
}
if (!first) {
- *x = ((r + 1 - l) - client->frame->area.width) / 2 + l;
+ *x = ((r + 1 - l) - client->frame->area.width) / 2 + l;
*y = ((b + 1 - t) - client->frame->area.height) / 2 + t;
return TRUE;
}
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;
}