From 30c542ddc3f73aa625c5f88167da6700c45b9f33 Mon Sep 17 00:00:00 2001 From: Sebastian Keller Date: Sat, 27 Feb 2021 00:00:25 +0000 Subject: 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: (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 5cbfb09e9..5e3961630 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; -- cgit v1.2.1