static Rect *pick_pointer_head(ObClient *c)
{
- guint i;
- gint px, py;
-
- if (screen_pointer_pos(&px, &py)) {
- for (i = 0; i < screen_num_monitors; ++i) {
- Rect *monitor = screen_physical_area_monitor(i);
- gboolean contain = RECT_CONTAINS(*monitor, px, py);
- g_free(monitor);
- if (contain)
- return screen_area(c->desktop, i, NULL);
- }
- g_assert_not_reached();
- } else
- return NULL;
+ return screen_area(c->desktop, screen_monitor_pointer(), NULL);
}
/*! Pick a monitor to place a window on. */
screen_pointer_pos(&px, &py);
for (i = 0; i < screen_num_monitors; i++) {
- Rect *monitor = screen_physical_area_monitor(i);
+ const Rect *monitor = screen_physical_area_monitor(i);
gboolean contain = RECT_CONTAINS(*monitor, px, py);
- g_free(monitor);
if (contain) {
add_choice(choice, i);
ob_debug("placement adding choice %d for mouse pointer", i);
else *y = areas[i]->y;
for (i = 0; i < screen_num_monitors; ++i)
- g_free(areas[i]);
+ g_slice_free(Rect, areas[i]);
g_free(areas);
return TRUE;
static GSList* area_add(GSList *list, Rect *a)
{
- Rect *r = g_new(Rect, 1);
+ Rect *r = g_slice_new(Rect);
*r = *a;
return g_slist_prepend(list, r);
}
}
/* 'r' is not being added to the result list, so free it */
- g_free(r);
+ g_slice_free(Rect, r);
}
}
g_slist_free(list);
}
while (spaces) {
- g_free(spaces->data);
+ g_slice_free(Rect, spaces->data);
spaces = g_slist_delete_link(spaces, spaces);
}
}
}
for (i = 0; i < screen_num_monitors; ++i)
- g_free(areas[i]);
+ g_slice_free(Rect, areas[i]);
g_free(areas);
return ret;
}
*y = py - client->area.height / 2 - client->frame->size.top;
*y = MIN(MAX(*y, t), b);
+ g_slice_free(Rect, area);
+
return TRUE;
}
/* don't free the first one, it's being set as "screen" */
for (i = 1; i < screen_num_monitors; ++i)
- g_free(areas[i]);
+ g_slice_free(Rect, areas[i]);
g_free(areas);
}
else
*y = screen->y + settings->position.y.pos;
- g_free(screen);
+ g_slice_free(Rect, screen);
return TRUE;
}
*y = (areas[0]->height - client->frame->area.height) / 2 + areas[0]->y;
for (i = 0; i < screen_num_monitors; ++i)
- g_free(areas[i]);
+ g_slice_free(Rect, areas[i]);
g_free(areas);
return TRUE;
}
return FALSE;
}
-/* Return TRUE if we want client.c to enforce on-screen-keeping */
+/*! Return TRUE if openbox chose the position for the window, and FALSE if
+ the application chose it */
gboolean place_client(ObClient *client, gint *x, gint *y,
ObAppSettings *settings)
{
gboolean ret;
- gboolean userplaced = FALSE;
/* per-app settings override program specified position
* but not user specified, unless pos_force is enabled */
return FALSE;
/* try a number of methods */
- ret = place_transient_splash(client, x, y) ||
- (userplaced = place_per_app_setting(client, x, y, settings)) ||
+ ret = place_per_app_setting(client, x, y, settings) ||
+ place_transient_splash(client, x, y) ||
(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 !userplaced;
+ return TRUE;
}