[gtk/wip/matthiasc/popup5: 132/152] GDK W32: Fix the code to compile
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/popup5: 132/152] GDK W32: Fix the code to compile
- Date: Sun, 26 May 2019 05:30:41 +0000 (UTC)
commit 584f4cb071c0e82d05c73b95a528181724bdb814
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date: Tue May 21 21:20:15 2019 +0000
GDK W32: Fix the code to compile
Somewhat change the order of initialization (to be closer
to what Wayland backend does).
Also remove the wrapper field that is no longer needed -
it used to hold a pointer to the main GdkWindow instance,
which wrapped GdkWin32ImplWindow. Since impls are gone,
nothing is wrapping anything anymore.
Fix a substitution error, where wrong pointer was added
to the hash table. Added a comment to ensure that future readers
(including myself) won't be confused by the fact that we're
inserting a pointer instead of the handle itself.
gdk/win32/gdksurface-win32.c | 38 +++++++++++++++++++++++++++-----------
gdk/win32/gdksurface-win32.h | 1 -
2 files changed, 27 insertions(+), 12 deletions(-)
---
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index c5f448a6be..6b3d012db4 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -36,7 +36,7 @@
#include "gdkenumtypes.h"
#include "gdkwin32.h"
#include "gdkdisplayprivate.h"
-#include "gdkframeclockprivate.h"
+#include "gdkframeclockidleprivate.h"
#include "gdkmonitorprivate.h"
#include "gdkwin32surface.h"
#include "gdkwin32cursor.h"
@@ -158,16 +158,13 @@ gdk_surface_win32_dispose (GObject *object)
static void
gdk_surface_win32_finalize (GObject *object)
{
- GdkSurface *wrapper;
GdkWin32Surface *surface;
g_return_if_fail (GDK_IS_WIN32_SURFACE (object));
surface = GDK_WIN32_SURFACE (object);
- wrapper = surface->wrapper;
-
- if (!GDK_SURFACE_DESTROYED (wrapper))
+ if (!GDK_SURFACE_DESTROYED (surface))
{
gdk_win32_handle_table_remove (surface->handle);
}
@@ -195,7 +192,7 @@ gdk_surface_win32_finalize (GObject *object)
surface->cache_surface = NULL;
}
- _gdk_win32_surface_unregister_dnd (wrapper);
+ _gdk_win32_surface_unregister_dnd (GDK_SURFACE (surface));
g_clear_object (&surface->drop);
g_assert (surface->transient_owner == NULL);
@@ -503,12 +500,22 @@ _gdk_win32_display_create_surface (GdkDisplay *display,
hparent = (parent != NULL) ? GDK_SURFACE_HWND (parent) : NULL;
- impl = g_object_new (GDK_TYPE_WIN32_SURFACE, NULL);
+ display_win32 = GDK_WIN32_DISPLAY (display);
+
+ if (parent)
+ frame_clock = g_object_ref (gdk_surface_get_frame_clock (parent));
+ else
+ frame_clock = _gdk_frame_clock_idle_new ();
+
+ impl = g_object_new (GDK_TYPE_WIN32_SURFACE,
+ "display", display,
+ "parent", parent,
+ "frame-clock", frame_clock,
+ NULL);
impl->layered = FALSE;
impl->layered_opacity = 1.0;
- display_win32 = GDK_WIN32_DISPLAY (display);
impl->surface_scale = _gdk_win32_display_get_monitor_scale_factor (display_win32, NULL, NULL, NULL);
impl->unscaled_width = width * impl->surface_scale;
impl->unscaled_height = height * impl->surface_scale;
@@ -601,7 +608,7 @@ _gdk_win32_display_create_surface (GdkDisplay *display,
hparent,
NULL,
_gdk_dll_hinstance,
- NULL);
+ GDK_SURFACE (impl));
impl->handle = hwndNew;
GetWindowRect (hwndNew, &rect);
@@ -618,7 +625,15 @@ _gdk_win32_display_create_surface (GdkDisplay *display,
}
g_object_ref (impl);
- gdk_win32_handle_table_insert (&hwndNew, impl);
+ /* Take note: we're inserting a pointer into a heap-allocated
+ * object (impl). Inserting a pointer to a stack variable
+ * will break the logic, since stack variables are short-lived.
+ * We insert a pointer to the handle instead of the handle itself
+ * probably because we need to hash them differently depending
+ * on the bitness of the OS. That pointer is still unique,
+ * so this works out in the end.
+ */
+ gdk_win32_handle_table_insert (&GDK_SURFACE_HWND (impl), impl);
GDK_NOTE (MISC, g_print ("... \"%s\" %dx%d@%+d%+d %p = %p\n",
title,
@@ -639,12 +654,13 @@ _gdk_win32_display_create_surface (GdkDisplay *display,
_gdk_win32_surface_enable_transparency (GDK_SURFACE (impl));
- frame_clock = gdk_surface_get_frame_clock (GDK_SURFACE (impl));
g_signal_connect (frame_clock,
"after-paint",
G_CALLBACK (gdk_win32_impl_frame_clock_after_paint),
impl);
+ g_object_unref (frame_clock);
+
return GDK_SURFACE (impl);
}
diff --git a/gdk/win32/gdksurface-win32.h b/gdk/win32/gdksurface-win32.h
index 7f774668e1..cbe0472fb5 100644
--- a/gdk/win32/gdksurface-win32.h
+++ b/gdk/win32/gdksurface-win32.h
@@ -211,7 +211,6 @@ struct _GdkWin32Surface
{
GdkSurface parent_instance;
- GdkSurface *wrapper;
HANDLE handle;
HICON hicon_big;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]