lock the size/position of maximized and fullscreen clients
This commit is contained in:
parent
2725bb5da1
commit
f76b26e4ad
1 changed files with 38 additions and 24 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue