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