X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2aee749cb188d42282f54043a9723778f1cf1a05..a8da90b85318f633ca53470d52a1dc0144a6be88:/src/gtk/nativewin.cpp diff --git a/src/gtk/nativewin.cpp b/src/gtk/nativewin.cpp index 8647cc0aca..91cb1ce613 100644 --- a/src/gtk/nativewin.cpp +++ b/src/gtk/nativewin.cpp @@ -29,9 +29,10 @@ #include "wx/nativewin.h" #include +#include "wx/gtk/private/gtk2-compat.h" #ifdef GDK_WINDOWING_X11 - #include + #include #endif // ============================================================================ @@ -71,7 +72,7 @@ bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle win) // we need to realize the window first before reparenting it gtk_widget_realize(m_widget); - gdk_window_reparent(m_widget->window, win, 0, 0); + gdk_window_reparent(gtk_widget_get_window(m_widget), win, 0, 0); #ifdef GDK_WINDOWING_X11 // if the native window is destroyed, our own window will be destroyed too @@ -79,7 +80,7 @@ bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle win) // destroyed" GdkWindow, so intercept to DestroyNotify ourselves to fix // this and also destroy the associated C++ object when its window is // destroyed - gdk_window_add_filter(m_widget->window, wxNativeContainerWindowFilter, this); + gdk_window_add_filter(gtk_widget_get_window(m_widget), wxNativeContainerWindowFilter, this); #endif // GDK_WINDOWING_X11 // we should be initially visible as we suppose that the native window we @@ -94,7 +95,15 @@ bool wxNativeContainerWindow::Create(wxNativeContainerWindowHandle win) bool wxNativeContainerWindow::Create(wxNativeContainerWindowId anid) { bool rc; +#ifdef __WXGTK3__ +#ifdef GDK_WINDOWING_X11 + GdkWindow * const win = gdk_x11_window_foreign_new_for_display(gdk_display_get_default(), anid); +#else + GdkWindow * const win = NULL; +#endif +#else GdkWindow * const win = gdk_window_foreign_new(anid); +#endif if ( win ) { rc = Create(win); @@ -116,6 +125,7 @@ void wxNativeContainerWindow::OnNativeDestroyed() // because it's a private GDK function and calling normal // gdk_window_destroy() results in X errors while nulling just the window // pointer and destroying m_widget results in many GTK errors + GTKDisconnect(m_widget); m_widget = NULL; // notice that we intentionally don't use Close() nor Delete() here as our