diff options
| author | rcaridade145 <[email protected]> | 2020-01-25 18:27:26 +0000 | 
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2020-02-06 08:10:39 -0500 | 
| commit | bf89c4c4221f060006a2fef93c72ce9d949adcec (patch) | |
| tree | ed25e0fab40d140c5021b2ccc1ae142ca44c23ee /src | |
| parent | 98db062b3319428a2b2b1e97b4d6890d263c0eef (diff) | |
| download | marco-bf89c4c4221f060006a2fef93c72ce9d949adcec.tar.bz2 marco-bf89c4c4221f060006a2fef93c72ce9d949adcec.tar.xz | |
window: handle legacy fullscreen requests
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/constraints.c | 23 | ||||
| -rw-r--r-- | 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 4a1bb71f..83d0a33e 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -4964,13 +4964,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 | 
