xwm: Detect legacy fullscreen modes
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index 93a912b..8b2d780 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -1898,12 +1898,36 @@
send_configure
};
+static int
+legacy_fullscreen(struct weston_wm *wm,
+ struct weston_wm_window *window,
+ struct weston_output **output_ret)
+{
+ struct weston_compositor *compositor = wm->server->compositor;
+ struct weston_output *output;
+
+ /* Heuristics for detecting legacy fullscreen windows... */
+
+ wl_list_for_each(output, &compositor->output_list, link) {
+ if (output->x == window->x &&
+ output->y == window->y &&
+ output->width == window->width &&
+ output->height == window->height &&
+ window->override_redirect) {
+ *output_ret = output;
+ return 1;
+ }
+ }
+
+ return 0;
+}
static void
xserver_map_shell_surface(struct weston_wm *wm,
struct weston_wm_window *window)
{
struct weston_shell_interface *shell_interface =
&wm->server->compositor->shell_interface;
+ struct weston_output *output;
if (!shell_interface->create_shell_surface)
return;
@@ -1923,6 +1947,11 @@
} else if (!window->override_redirect) {
shell_interface->set_toplevel(window->shsurf);
return;
+ } else if (legacy_fullscreen(wm, window, &output)) {
+ window->fullscreen = 1;
+ shell_interface->set_fullscreen(window->shsurf,
+ WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
+ 0, output);
} else {
shell_interface->set_xwayland(window->shsurf,
window->x,