summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/screen.c2
-rw-r--r--src/core/window.c46
2 files changed, 31 insertions, 17 deletions
diff --git a/src/core/screen.c b/src/core/screen.c
index 6ba2e68c..737c6052 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -392,6 +392,8 @@ int
meta_screen_monitor_index_to_xinerama_index (MetaScreen *screen,
int index)
{
+ g_return_val_if_fail (index >= 0 && index < screen->n_monitor_infos, -1);
+
meta_screen_ensure_xinerama_indices (screen);
return screen->monitor_infos[index].xinerama_index;
diff --git a/src/core/window.c b/src/core/window.c
index fdbd3b4a..7a02c013 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2059,23 +2059,35 @@ set_net_wm_state (MetaWindow *window)
if (window->fullscreen)
{
- data[0] = meta_screen_monitor_index_to_xinerama_index (window->screen,
- window->fullscreen_monitors[0]);
- data[1] = meta_screen_monitor_index_to_xinerama_index (window->screen,
- window->fullscreen_monitors[1]);
- data[2] = meta_screen_monitor_index_to_xinerama_index (window->screen,
- window->fullscreen_monitors[2]);
- data[3] = meta_screen_monitor_index_to_xinerama_index (window->screen,
- window->fullscreen_monitors[3]);
-
- meta_verbose ("Setting _NET_WM_FULLSCREEN_MONITORS\n");
- meta_error_trap_push (window->display);
- XChangeProperty (window->display->xdisplay,
- window->xwindow,
- window->display->atom__NET_WM_FULLSCREEN_MONITORS,
- XA_CARDINAL, 32, PropModeReplace,
- (guchar*) data, 4);
- meta_error_trap_pop (window->display);
+ if (window->fullscreen_monitors[0] >= 0)
+ {
+ data[0] = meta_screen_monitor_index_to_xinerama_index (window->screen,
+ window->fullscreen_monitors[0]);
+ data[1] = meta_screen_monitor_index_to_xinerama_index (window->screen,
+ window->fullscreen_monitors[1]);
+ data[2] = meta_screen_monitor_index_to_xinerama_index (window->screen,
+ window->fullscreen_monitors[2]);
+ data[3] = meta_screen_monitor_index_to_xinerama_index (window->screen,
+ window->fullscreen_monitors[3]);
+
+ meta_verbose ("Setting _NET_WM_FULLSCREEN_MONITORS\n");
+ meta_error_trap_push (window->display);
+ XChangeProperty (window->display->xdisplay,
+ window->xwindow,
+ window->display->atom__NET_WM_FULLSCREEN_MONITORS,
+ XA_CARDINAL, 32, PropModeReplace,
+ (guchar*) data, 4);
+ meta_error_trap_pop (window->display);
+ }
+ else
+ {
+ meta_verbose ("Clearing _NET_WM_FULLSCREEN_MONITORS\n");
+ meta_error_trap_push (window->display);
+ XDeleteProperty (window->display->xdisplay,
+ window->xwindow,
+ window->display->atom__NET_WM_FULLSCREEN_MONITORS);
+ meta_error_trap_pop (window->display);
+ }
}
}