Merge branch 'offscreen-window-fixes-for-gimp-3' into 'gtk-3-24'

Offscreen window fixes for GIMP3

See merge request GNOME/gtk!6665
This commit is contained in:
Matthias Clasen 2023-12-14 11:56:49 +00:00
commit c70612ba1d
6 changed files with 22 additions and 5 deletions

View File

@ -24,6 +24,7 @@ gdk__private__ (void)
gdk_profiler_start,
gdk_profiler_stop,
gdk_window_titlebar_gesture,
gdk_window_is_impl_offscreen,
};
return &table;

View File

@ -31,6 +31,8 @@ gboolean gdk_display_get_debug_updates (GdkDisplay *display);
void gdk_display_set_debug_updates (GdkDisplay *display,
gboolean debug_updates);
gboolean gdk_window_is_impl_offscreen (GdkWindow *window);
const gchar * gdk_get_desktop_startup_id (void);
const gchar * gdk_get_desktop_autostart_id (void);
@ -69,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

View File

@ -2710,6 +2710,9 @@ gdk_display_get_monitor_at_window (GdkDisplay *display,
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
if (window && gdk_window_is_impl_offscreen (window))
window = gdk_offscreen_window_get_embedder (window);
class = GDK_DISPLAY_GET_CLASS (display);
if (class->get_monitor_at_window)
{

View File

@ -780,3 +780,12 @@ gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
impl_class->delete_property = NULL;
impl_class->get_scale_factor = gdk_offscreen_window_get_scale_factor;
}
gboolean
gdk_window_is_impl_offscreen (GdkWindow *window)
{
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
return GDK_IS_OFFSCREEN_WINDOW (window->impl);
}

View File

@ -10542,9 +10542,8 @@ void
gdk_window_set_transient_for (GdkWindow *window,
GdkWindow *parent)
{
if (!gdk_window_is_offscreen (window) &&
parent != NULL &&
gdk_window_is_offscreen (parent))
if (parent != NULL &&
GDK_WINDOW_IMPL_GET_CLASS (window->impl) != GDK_WINDOW_IMPL_GET_CLASS (parent->impl))
{
return;
}

View File

@ -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);