summaryrefslogtreecommitdiff
path: root/gdk/wayland/gdksurface-wayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/wayland/gdksurface-wayland.c')
-rw-r--r--gdk/wayland/gdksurface-wayland.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 09328bdb89..acf24da73f 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -113,6 +113,7 @@ struct _GdkWaylandSurface
PopupState popup_state;
+ unsigned int popup_thaw_upon_show : 1;
unsigned int initial_configure_received : 1;
unsigned int has_uncommitted_ack_configure : 1;
unsigned int mapped : 1;
@@ -2994,6 +2995,8 @@ gdk_wayland_surface_hide_surface (GdkSurface *surface)
thaw_popup_toplevel_state (surface);
break;
case POPUP_STATE_IDLE:
+ impl->popup_thaw_upon_show = TRUE;
+ gdk_surface_freeze_updates (surface);
break;
default:
g_assert_not_reached ();
@@ -3223,6 +3226,12 @@ show_popup (GdkSurface *surface,
if (!impl->display_server.wl_surface)
gdk_wayland_surface_create_surface (surface);
+ if (impl->popup_thaw_upon_show)
+ {
+ impl->popup_thaw_upon_show = FALSE;
+ gdk_surface_thaw_updates (surface);
+ }
+
gdk_wayland_surface_map_popup (surface, width, height, layout);
}