]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/nativewin.cpp
Fix crash in wxDC::GetMultiLineTextExtent() after last commit.
[wxWidgets.git] / src / gtk / nativewin.cpp
index 8647cc0aca100ccb08de341e6c492f0aee7ab8ec..91cb1ce6139c3bfa77ee22754dadbb765aa6a08a 100644 (file)
 #include "wx/nativewin.h"
 
 #include <gtk/gtk.h>
+#include "wx/gtk/private/gtk2-compat.h"
 
 #ifdef GDK_WINDOWING_X11
-    #include <X11/Xlib.h>
+    #include <gdk/gdkx.h>
 #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