Merge branch 'wip/chergert/macos-fix-backdrop' into 'main'

macos: fix backdrop when displaying popover

See merge request GNOME/gtk!4505
This commit is contained in:
Matthias Clasen 2022-02-22 17:54:20 +00:00
commit 9fccbeaa75

View File

@ -480,6 +480,21 @@ _gdk_macos_display_surface_became_key (GdkMacosDisplay *self,
event = gdk_focus_event_new (GDK_SURFACE (surface), keyboard, TRUE); event = gdk_focus_event_new (GDK_SURFACE (surface), keyboard, TRUE);
_gdk_event_queue_append (GDK_DISPLAY (self), event); _gdk_event_queue_append (GDK_DISPLAY (self), event);
/* For each parent surface, we want them to look like they
* are also still focused, so ensure they have that same
* state associated with them.
*/
if (GDK_IS_POPUP (surface))
{
for (GdkSurface *parent = GDK_SURFACE (surface)->parent;
parent != NULL;
parent = parent->parent)
{
if (GDK_IS_TOPLEVEL (parent))
gdk_synthesize_surface_state (parent, 0, GDK_TOPLEVEL_STATE_FOCUSED);
}
}
/* We just became the active window. Unlike X11, Mac OS X does /* We just became the active window. Unlike X11, Mac OS X does
* not send us motion events while the window does not have focus * not send us motion events while the window does not have focus
* ("is not key"). We send a dummy motion notify event now, so that * ("is not key"). We send a dummy motion notify event now, so that
@ -516,6 +531,21 @@ _gdk_macos_display_surface_resigned_key (GdkMacosDisplay *self,
_gdk_display_get_next_serial (GDK_DISPLAY (self))); _gdk_display_get_next_serial (GDK_DISPLAY (self)));
} }
/* For each parent surface, we want them to look like they
* are also still focused, so ensure they have that same
* state associated with them.
*/
if (GDK_IS_POPUP (surface))
{
for (GdkSurface *parent = GDK_SURFACE (surface)->parent;
parent != NULL;
parent = parent->parent)
{
if (GDK_IS_TOPLEVEL (parent))
gdk_synthesize_surface_state (parent, GDK_TOPLEVEL_STATE_FOCUSED, 0);
}
}
_gdk_macos_display_clear_sorting (self); _gdk_macos_display_clear_sorting (self);
} }