static gboolean place_under_mouse(ObClient *client, gint *x, gint *y,
Size frame_size)
{
- if (config_place_policy != OB_PLACE_POLICY_MOUSE)
- return FALSE;
-
gint l, r, t, b;
gint px, py;
Rect *area;
+ if (config_place_policy != OB_PLACE_POLICY_MOUSE)
+ return FALSE;
+
ob_debug("placing under mouse");
if (!screen_pointer_pos(&px, &py))
ob_debug("placing by per-app settings");
- if (settings->position.x.center)
- *x = screen->x + screen->width / 2 - client->area.width / 2;
- else if (settings->position.x.opposite)
- *x = screen->x + screen->width - frame_size.width -
- settings->position.x.pos;
- else
- *x = screen->x + settings->position.x.pos;
- if (settings->position.x.denom)
- *x = (*x * screen->width) / settings->position.x.denom;
-
- if (settings->position.y.center)
- *y = screen->y + screen->height / 2 - client->area.height / 2;
- else if (settings->position.y.opposite)
- *y = screen->y + screen->height - frame_size.height -
- settings->position.y.pos;
- else
- *y = screen->y + settings->position.y.pos;
- if (settings->position.y.denom)
- *y = (*y * screen->height) / settings->position.y.denom;
+ screen_apply_gravity_point(x, y, frame_size.width, frame_size.height,
+ &settings->position, screen);
return TRUE;
}
n_client_rects += 1;
}
}
- Rect client_rects[n_client_rects];
-
- GSList* it;
- guint i = 0;
- if (!config_dock_hide)
- dock_get_area(&client_rects[i++]);
- for (it = potential_overlap_clients; it != NULL; it = g_slist_next(it)) {
- ObClient* potential_overlap_client = (ObClient*)it->data;
- client_rects[i] = potential_overlap_client->frame->area;
- i += 1;
- }
- g_slist_free(potential_overlap_clients);
- Point result;
- place_overlap_find_least_placement(client_rects, n_client_rects, head,
- &frame_size, &result);
- *x = result.x;
- *y = result.y;
+ if (n_client_rects) {
+ Rect client_rects[n_client_rects];
+ GSList* it;
+ Point result;
+ guint i = 0;
+
+ if (!config_dock_hide)
+ dock_get_area(&client_rects[i++]);
+ for (it = potential_overlap_clients; it != NULL; it = g_slist_next(it)) {
+ ObClient* potential_overlap_client = (ObClient*)it->data;
+ client_rects[i] = potential_overlap_client->frame->area;
+ i += 1;
+ }
+ g_slist_free(potential_overlap_clients);
+
+ place_overlap_find_least_placement(client_rects, n_client_rects, head,
+ &frame_size, &result);
+ *x = result.x;
+ *y = result.y;
+ }
return TRUE;
}