summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2020-12-11 10:29:28 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2021-01-11 17:53:38 +0800
commit291ad17a226f345835906066cb027f097cedfe18 (patch)
treec04da1255c3de48b89b200f3983e051903d1bae8
parent506423cf23be826851715c97be976278b15d65b9 (diff)
downloadgtk+-291ad17a226f345835906066cb027f097cedfe18.tar.gz
gdksurface-win32.c: Decouple mapped state from surface creation
In line with what is done with the Wayland backend, enable the mapped state independently as needed from the toplevel surface presentation, and also enable the mapped state if necessary when presenting the popup surface.
-rw-r--r--gdk/win32/gdksurface-win32.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index 4c6a5067a0..6b53b37d7f 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -1257,10 +1257,23 @@ gdk_win32_surface_layout_popup (GdkSurface *surface,
}
static void
+maybe_notify_mapped (GdkSurface *surface)
+{
+ if (surface->destroyed)
+ return;
+
+ if (!GDK_SURFACE_IS_MAPPED (surface))
+ {
+ gdk_surface_set_is_mapped (surface, TRUE);
+ gdk_surface_invalidate_rect (surface, NULL);
+ }
+}
+
+static void
show_popup (GdkSurface *surface)
{
gdk_win32_surface_raise (surface);
- gdk_surface_set_is_mapped (surface, TRUE);
+ maybe_notify_mapped (surface);
show_window_internal (surface, FALSE, FALSE);
gdk_surface_invalidate_rect (surface, NULL);
}
@@ -4911,25 +4924,6 @@ gdk_win32_toplevel_class_init (GdkWin32ToplevelClass *class)
gdk_toplevel_install_properties (object_class, 1);
}
-static void
-show_surface (GdkSurface *surface)
-{
- gboolean was_mapped;
-
- if (surface->destroyed)
- return;
-
- was_mapped = GDK_SURFACE_IS_MAPPED (surface);
-
- if (!was_mapped)
- gdk_surface_set_is_mapped (surface, TRUE);
-
- gdk_win32_surface_show (surface, FALSE);
-
- if (!was_mapped)
- gdk_surface_invalidate_rect (surface, NULL);
-}
-
static gboolean
gdk_win32_toplevel_present (GdkToplevel *toplevel,
GdkToplevelLayout *layout)
@@ -4999,7 +4993,8 @@ gdk_win32_toplevel_present (GdkToplevel *toplevel,
gdk_win32_surface_unfullscreen (surface);
}
- show_surface (surface);
+ gdk_win32_surface_show (surface, FALSE);
+ maybe_notify_mapped (surface);
if (size.shadow.is_valid)
{
@@ -5093,8 +5088,9 @@ gdk_win32_drag_surface_present (GdkDragSurface *drag_surface,
{
GdkSurface *surface = GDK_SURFACE (drag_surface);
- gdk_win32_surface_resize (surface, width, height);
- show_surface (surface);
+ gdk_win32_surface_resize (surface, width, height);
+ gdk_win32_surface_show (surface, FALSE);
+ maybe_notify_mapped (surface);
return TRUE;
}