diff --git a/gdk/gdk-private.c b/gdk/gdk-private.c index 0a7438162c..463619bdad 100644 --- a/gdk/gdk-private.c +++ b/gdk/gdk-private.c @@ -24,6 +24,7 @@ gdk__private__ (void) gdk_profiler_start, gdk_profiler_stop, gdk_window_titlebar_gesture, + gdk_window_is_impl_offscreen, }; return &table; diff --git a/gdk/gdk-private.h b/gdk/gdk-private.h index e962fc9751..687ba061e9 100644 --- a/gdk/gdk-private.h +++ b/gdk/gdk-private.h @@ -71,6 +71,8 @@ typedef struct { gboolean (* gdk_window_titlebar_gesture) (GdkWindow *window, GdkTitlebarGesture gesture); + + gboolean (* gdk_window_is_impl_offscreen) (GdkWindow *window); } GdkPrivateVTable; GDK_AVAILABLE_IN_ALL diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 3f1a7bc9fa..18bef6957d 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -5218,7 +5218,8 @@ gtk_menu_position (GtkMenu *menu, rect_anchor_dx = priv->rect_anchor_dx; rect_anchor_dy = priv->rect_anchor_dy; - if (priv->rect_window) + if (priv->rect_window && + !GDK_PRIVATE_CALL (gdk_window_is_impl_offscreen (priv->rect_window))) { rect_window = priv->rect_window; rect = priv->rect; @@ -5264,7 +5265,7 @@ gtk_menu_position (GtkMenu *menu, } if (rect_window != NULL && - GDK_WINDOW_TYPE (rect_window) == GDK_WINDOW_OFFSCREEN) + GDK_PRIVATE_CALL (gdk_window_is_impl_offscreen (rect_window))) { GdkWindow *effective = gdk_offscreen_window_get_embedder (rect_window);