make sure clients stay on screen when the root window changes size, and maximized/fullscreen windows must be on some monitor or it doesn't make much sense (and asserts)
This commit is contained in:
parent
145d526df4
commit
b3023ac55b
2 changed files with 21 additions and 2 deletions
|
@ -3197,6 +3197,11 @@ void client_fullscreen(ObClient *self, gboolean fs)
|
|||
ob_debug("Window %s going fullscreen (%d)",
|
||||
self->title, self->fullscreen);
|
||||
|
||||
if (fs) {
|
||||
/* make sure the window is on some monitor */
|
||||
client_find_onscreen(self, &x, &y, w, h, FALSE);
|
||||
}
|
||||
|
||||
client_setup_decor_and_functions(self, FALSE);
|
||||
client_move_resize(self, x, y, w, h);
|
||||
|
||||
|
@ -3339,6 +3344,11 @@ void client_maximize(ObClient *self, gboolean max, gint dir)
|
|||
if (dir == 0 || dir == 2) /* vert */
|
||||
self->max_vert = max;
|
||||
|
||||
if (max) {
|
||||
/* make sure the window is on some monitor */
|
||||
client_find_onscreen(self, &x, &y, w, h, FALSE);
|
||||
}
|
||||
|
||||
client_change_state(self); /* change the state hints on the client */
|
||||
|
||||
client_setup_decor_and_functions(self, FALSE);
|
||||
|
|
|
@ -1374,7 +1374,14 @@ void screen_update_areas(void)
|
|||
{
|
||||
guint i;
|
||||
gulong *dims;
|
||||
GList *it;
|
||||
GList *it, *onscreen;
|
||||
|
||||
/* collect the clients that are on screen */
|
||||
onscreen = NULL;
|
||||
for (it = client_list; it; it = g_list_next(it)) {
|
||||
if (client_monitor(it->data) != screen_num_monitors)
|
||||
onscreen = g_list_prepend(onscreen, it->data);
|
||||
}
|
||||
|
||||
g_free(monitor_area);
|
||||
get_xinerama_screens(&monitor_area, &screen_num_monitors);
|
||||
|
@ -1448,8 +1455,10 @@ void screen_update_areas(void)
|
|||
dims, 4 * screen_num_desktops);
|
||||
|
||||
/* the area has changed, adjust all the windows if they need it */
|
||||
for (it = client_list; it; it = g_list_next(it))
|
||||
for (it = onscreen; it; it = g_list_next(it)) {
|
||||
client_move_onscreen(it->data, FALSE);
|
||||
client_reconfigure(it->data, FALSE);
|
||||
}
|
||||
|
||||
g_free(dims);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue