client_apply_startup_state(self, place.x, place.y,
place.width, place.height);
+ /* set the initial value of the desktop hint, when one wasn't requested
+ on map. */
+ OBT_PROP_SET32(self->window, NET_WM_DESKTOP, CARDINAL, self->desktop);
+
/* grab mouse bindings before showing the window */
mouse_grab_for_client(self, TRUE);
self->area = oldarea;
client_configure(self, x, y, w, h, FALSE, TRUE, FALSE);
- /* set the desktop hint, to make sure that it always exists */
- OBT_PROP_SET32(self->window, NET_WM_DESKTOP, CARDINAL, self->desktop);
-
/* nothing to do for the other states:
skip_taskbar
skip_pager
the updated frame dimensions. */
frame_adjust_area(self->frame, FALSE, TRUE, TRUE);
+ /* cap any X windows at the size of an unsigned short */
+ *w = MIN(*w,
+ G_MAXUSHORT - self->frame->size.left - self->frame->size.right);
+ *h = MIN(*h,
+ G_MAXUSHORT - self->frame->size.top - self->frame->size.bottom);
+
+
/* gets the frame's position */
frame_client_gravity(self->frame, x, y);
}
/* search for edges of clients */
- if (((dir == OB_DIRECTION_NORTH || dir == OB_DIRECTION_SOUTH) &&
- !self->max_vert) ||
- ((dir == OB_DIRECTION_EAST || dir == OB_DIRECTION_WEST) &&
- !self->max_horz))
- {
- for (it = client_list; it; it = g_list_next(it)) {
- ObClient *cur = it->data;
+ for (it = client_list; it; it = g_list_next(it)) {
+ ObClient *cur = it->data;
- /* skip windows to not bump into */
- if (cur == self)
- continue;
- if (cur->iconic)
- continue;
- if (self->desktop != cur->desktop && cur->desktop != DESKTOP_ALL &&
- cur->desktop != screen_desktop)
- continue;
+ /* skip windows to not bump into */
+ if (cur == self)
+ continue;
+ if (cur->iconic)
+ continue;
+ if (self->desktop != cur->desktop && cur->desktop != DESKTOP_ALL &&
+ cur->desktop != screen_desktop)
+ continue;
- ob_debug("trying window %s", cur->title);
+ ob_debug("trying window %s", cur->title);
- detect_edge(cur->frame->area, dir, my_head, my_size, my_edge_start,
- my_edge_size, dest, near_edge);
- }
- dock_get_area(&dock_area);
- detect_edge(dock_area, dir, my_head, my_size, my_edge_start,
+ detect_edge(cur->frame->area, dir, my_head, my_size, my_edge_start,
my_edge_size, dest, near_edge);
}
+ dock_get_area(&dock_area);
+ detect_edge(dock_area, dir, my_head, my_size, my_edge_start,
+ my_edge_size, dest, near_edge);
g_slice_free(Rect, a);
}