[mutter] frame: Fix crash when clicking below titlebar with broken gtk themes



commit c2968c89fef3d67f161cb01481a8a2939c45a425
Author: Sebastian Keller <skeller gnome org>
Date:   Sat Feb 27 01:00:25 2021 +0100

    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>

 src/ui/frames.c | 9 +++++++++
 1 file changed, 9 insertions(+)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 46e62682c7..48b2a361c2 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]