[mutter/cherry-pick-c2968c89] frame: Fix crash when clicking below titlebar with broken gtk themes




commit 30c542ddc3f73aa625c5f88167da6700c45b9f33
Author: Sebastian Keller <skeller gnome org>
Date:   Sat Feb 27 00:00:25 2021 +0000

    frame: Fix crash when clicking below titlebar with broken gtk themes
    
    When a gtk theme uses larger shadows for the unfocused state than for
    the focused one, this can cause a crash in meta_frame_left_click_event.
    Since whether to call meta_frame_left_click_event is decided based on
    the decoration size before focusing and the control that was clicked on
    after focusing, this can result in an event handled in
    meta_frame_left_click_event being on the client area.
    
    Fixes https://gitlab.gnome.org/GNOME/mutter/-/issues/1668
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1748>
    
    
    (cherry picked from commit c2968c89fef3d67f161cb01481a8a2939c45a425)

 src/ui/frames.c | 9 +++++++++
 1 file changed, 9 insertions(+)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 5cbfb09e94..5e39616309 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -1112,6 +1112,15 @@ meta_frame_left_click_event (MetaUIFrame        *frame,
        * that cannot be resized (e. g. it is maximized and the theme
        * currently used has borders for maximized windows), see #751884 */
       return FALSE;
+    case META_FRAME_CONTROL_CLIENT_AREA:
+      /* This can happen with broken gtk themes that have a larger shadow size
+       * in the unfocused state than in the focused one. Then when clicking
+       * below the titlebar area in the unfocused state would still be
+       * considered a click on the titlebar due to it being shifted down because
+       * of the shadow. This then causes the window to be focused before this
+       * function is called, which removes the shadow such that the same
+       * position is now considered to be on the client area */
+      return FALSE;
     default:
       g_assert_not_reached ();
       return FALSE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]