From eed27ba9296562da861b5b7626bfe54244b74c8c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 29 Sep 2017 12:58:19 +0000 Subject: [PATCH] ugly workaround to get the window handle on win32 with GTK3 git-svn-id: https://xpra.org/svn/Xpra/trunk@16993 3bb7dfac-3a0b-4e04-842a-767bc560f471 --- src/xpra/platform/win32/gl_context.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/xpra/platform/win32/gl_context.py b/src/xpra/platform/win32/gl_context.py index 17e3c84f05..01c797c1db 100644 --- a/src/xpra/platform/win32/gl_context.py +++ b/src/xpra/platform/win32/gl_context.py @@ -7,6 +7,7 @@ log = Logger("opengl") from ctypes import sizeof, byref +from xpra.os_util import PYTHON2 from xpra.client.gl.gl_check import check_PyOpenGL_support from xpra.platform.win32.common import GetDC, SwapBuffers, ChoosePixelFormat, DescribePixelFormat, SetPixelFormat, BeginPaint, EndPaint, GetDesktopWindow from xpra.platform.win32.glwin32 import wglCreateContext, wglMakeCurrent, wglDeleteContext , PIXELFORMATDESCRIPTOR, PFD_TYPE_RGBA, PFD_DRAW_TO_WINDOW, PFD_SUPPORT_OPENGL, PFD_DOUBLEBUFFER, PFD_DEPTH_DONTCARE, PFD_MAIN_PLANE, PAINTSTRUCT @@ -72,7 +73,20 @@ def is_double_buffered(self): return DOUBLE_BUFFERED #self.pixel_format_props.get("double-buffered", False) def get_paint_context(self, gdk_window): - hwnd = gdk_window.handle + if PYTHON2: + hwnd = gdk_window.handle + else: + from ctypes import CDLL, pythonapi, c_void_p, py_object + gdkdll = CDLL("libgdk-3-0.dll") + log("gdkdll=%s", gdkdll) + PyCapsule_GetPointer = pythonapi.PyCapsule_GetPointer + PyCapsule_GetPointer.restype = c_void_p + PyCapsule_GetPointer.argtypes = [py_object] + log("PyCapsute_GetPointer=%s", PyCapsule_GetPointer) + gpointer = PyCapsule_GetPointer(gdk_window.__gpointer__, None) + log("gpointer=%s", gpointer) + hwnd = gdkdll.gdk_win32_window_get_handle(gpointer) + log("hwnd=%s", hwnd) if self.hwnd!=hwnd: #(this shouldn't happen) #just make sure we don't keep using a context for a different handle: