diff --git a/src/core/screen.c b/src/core/screen.c index e8e8c56e0..c68ee10ff 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -389,6 +389,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-x11.c b/src/core/window-x11.c index d984a59c3..150390a65 100644 --- a/src/core/window-x11.c +++ b/src/core/window-x11.c @@ -127,23 +127,35 @@ meta_window_x11_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]); + 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); + 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); + } } }