Blob Blame History Raw
From 897a11c196081a31b3cd6035270da28039cb0e52 Mon Sep 17 00:00:00 2001
From: rcaridade145 <rcaridade145@gmail.com>
Date: Sat, 25 Jan 2020 18:27:26 +0000
Subject: [PATCH 5/9] window: handle legacy fullscreen requests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

https://gitlab.gnome.org/GNOME/metacity/commit/1fafd279006ece8cf664fd777143cdfafbefad6d

window: handle legacy fullscreen requests

Doing this on the actual resize requests makes more sense
than handling it as a window-manager imposed constraints,
so move the code accordingly.

Adapted from mutter patch by Florian Müllner:
https://git.gnome.org/browse/mutter/commit/?id=fba022cc06b8c7e80ef36f48d6577a251384cc4b

https://bugzilla.gnome.org/show_bug.cgi?id=781946

Bug 781946 - Non-native decorated windows stuck maximised on secondary screen with Marco/Metacity
---
 src/core/constraints.c | 23 -----------------------
 src/core/window.c      | 31 ++++++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/src/core/constraints.c b/src/core/constraints.c
index a82154e0..ed70b40b 100644
--- a/src/core/constraints.c
+++ b/src/core/constraints.c
@@ -447,29 +447,6 @@ setup_constraint_info (ConstraintInfo      *info,
     meta_workspace_get_onxinerama_region (cur_workspace,
                                           xinerama_info->number);
 
-  /* Workaround braindead legacy apps that don't know how to
-   * fullscreen themselves properly - don't get fooled by
-   * windows which hide their titlebar when maximized or which are
-   * client decorated; that's not the same as fullscreen, even
-   * if there are no struts making the workarea smaller than
-   * the monitor.
-   */
-
-  if (meta_prefs_get_force_fullscreen() &&
-      (window->decorated || !meta_window_is_client_decorated (window)) &&
-      meta_rectangle_equal (new, &xinerama_info->rect) &&
-      window->has_fullscreen_func &&
-      !window->fullscreen)
-    {
-      /*
-      meta_topic (META_DEBUG_GEOMETRY,
-      */
-      meta_warning (
-                  "Treating resize request of legacy application %s as a "
-                  "fullscreen request\n",
-                  window->desc);
-      meta_window_make_fullscreen_internal (window);
-    }
 
   /* Log all this information for debugging */
   meta_topic (META_DEBUG_GEOMETRY,
diff --git a/src/core/window.c b/src/core/window.c
index bc10e272..99ac36b8 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -4974,13 +4974,42 @@ meta_window_move_resize_request (MetaWindow *window,
     flags |= META_IS_RESIZE_ACTION;
 
   if (flags & (META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION))
-    meta_window_move_resize_internal (window,
+   {
+      const MetaXineramaScreenInfo *xinerama_info;
+      MetaRectangle rect;
+
+      rect.x = x;
+      rect.y = y;
+      rect.width = width;
+      rect.height = height;
+
+      xinerama_info = meta_screen_get_xinerama_for_rect (window->screen, &rect);
+
+      /* Workaround braindead legacy apps that don't know how to
+       * fullscreen themselves properly - don't get fooled by
+       * windows which are client decorated; that's not the same
+       * as fullscreen, even if there are no struts making the
+       * workarea smaller than the monitor.
+       */
+      if (meta_prefs_get_force_fullscreen() &&
+          (window->decorated || !meta_window_is_client_decorated (window)) &&
+          meta_rectangle_equal (&rect, &xinerama_info->rect) &&
+          window->has_fullscreen_func &&
+          !window->fullscreen)
+        {
+          g_warning ("Treating resize request of legacy application %s as a "
+                     "fullscreen request", window->desc);
+          meta_window_make_fullscreen_internal (window);
+        }
+      meta_window_move_resize_internal (window,
                                       flags,
                                       gravity,
                                       x,
                                       y,
                                       width,
                                       height);
+  
+   }    
 
   /* window->user_rect exists to allow "snapping-back" the window if a
    * new strut is set (causing the window to move) and then the strut
-- 
2.21.1