lock the size/position of maximized and fullscreen clients

This commit is contained in:
Dana Jansens 2003-03-20 21:49:39 +00:00
parent 2725bb5da1
commit f76b26e4ad

View file

@ -237,6 +237,9 @@ void client_unmanage(Client *client)
engine_frame_hide(client->frame); engine_frame_hide(client->frame);
/* dispatch the unmapped event */
dispatch_client(Event_Client_Unmapped, client, 0, 0);
/* give the client its border back */ /* give the client its border back */
client_toggle_border(client, TRUE); client_toggle_border(client, TRUE);
@ -1281,15 +1284,30 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h,
{ {
gboolean moved = FALSE, resized = FALSE; gboolean moved = FALSE, resized = FALSE;
/* lock if maximized */ /* set the size and position if fullscreen */
if (self->fullscreen) {
x = 0;
y = 0;
w = screen_physical_size.width;
h = screen_physical_size.height;
} else {
/* set the size and position if maximized */
if (self->max_horz) { if (self->max_horz) {
x = self->area.x; x = screen_area(self->desktop)->x - self->frame->size.left;
w = self->area.width; w = screen_area(self->desktop)->x +
screen_area(self->desktop)->width;
} }
if (self->max_vert) { if (self->max_vert) {
y = self->area.y; y = screen_area(self->desktop)->y;
h = self->area.height; h = screen_area(self->desktop)->y +
screen_area(self->desktop)->height -
self->frame->size.top - self->frame->size.bottom;
} }
}
if (x == self->area.x && y == self->area.y && w == self->area.width &&
h == self->area.height)
return; /* no change */
w -= self->base_size.width; w -= self->base_size.width;
h -= self->base_size.height; h -= self->base_size.height;
@ -1430,10 +1448,10 @@ void client_fullscreen(Client *self, gboolean fs, gboolean savearea)
PROP_SET32A(self->window, openbox_premax, cardinal, PROP_SET32A(self->window, openbox_premax, cardinal,
dimensions, 4); dimensions, 4);
} }
x = 0;
y = 0; /* these are not actually used cuz client_configure will set them
w = screen_physical_size.width; as appropriate when the window is fullscreened */
h = screen_physical_size.height; x = y = w = h = 0;
} else { } else {
long *dimensions; long *dimensions;
@ -1549,17 +1567,13 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
PROP_SET32A(self->window, openbox_premax, cardinal, PROP_SET32A(self->window, openbox_premax, cardinal,
dimensions, 4); dimensions, 4);
} }
if (dir == 0 || dir == 1) { /* horz */
x = screen_area(self->desktop)->x - self->frame->size.left; /* pass the client's current position info. the client_configure
w = screen_area(self->desktop)->x + will move/size stuff as appropriate for a maximized window */
screen_area(self->desktop)->width; x = self->area.x;
} y = self->area.y;
if (dir == 0 || dir == 2) { /* vert */ w = self->area.width;
y = screen_area(self->desktop)->y; h = self->area.height;
h = screen_area(self->desktop)->y +
screen_area(self->desktop)->height -
self->frame->size.top - self->frame->size.bottom;
}
} else { } else {
long *dimensions; long *dimensions;