]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
Compile fixes for the const patch
[wxWidgets.git] / src / gtk1 / window.cpp
index 75df72073fa5020ea9bae60c91b4051193a7239d..03c6f88e39f27021e4c775a414dcdc9d3f26c5fb 100644 (file)
@@ -7,11 +7,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "window.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -2883,11 +2878,22 @@ wxWindowGTK::~wxWindowGTK()
     m_isBeingDeleted = true;
     m_hasVMT = false;
 
+    // destroy children before destroying this window itself
+    DestroyChildren();
+
+    // unhook focus handlers to prevent stray events being
+    // propagated to this (soon to be) dead object
+    if (m_focusWidget != NULL)
+    {
+        gtk_signal_disconnect_by_func( GTK_OBJECT(m_focusWidget),
+            (GtkSignalFunc) gtk_window_focus_in_callback, (gpointer) this );
+        gtk_signal_disconnect_by_func( GTK_OBJECT(m_focusWidget),
+            (GtkSignalFunc) gtk_window_focus_out_callback, (gpointer) this );
+    }
+
     if (m_widget)
         Show( false );
 
-    DestroyChildren();
-
 #ifdef HAVE_XIM
     if (m_ic)
         gdk_ic_destroy (m_ic);
@@ -2895,6 +2901,11 @@ wxWindowGTK::~wxWindowGTK()
         gdk_ic_attr_destroy (m_icattr);
 #endif
 
+#ifdef __WXGTK20__
+    // delete before the widgets to avoid a crash on solaris
+    delete m_imData;
+#endif
+
     if (m_wxwindow)
     {
         gtk_widget_destroy( m_wxwindow );
@@ -2906,10 +2917,6 @@ wxWindowGTK::~wxWindowGTK()
         gtk_widget_destroy( m_widget );
         m_widget = (GtkWidget*) NULL;
     }
-
-#ifdef __WXGTK20__
-    delete m_imData;
-#endif
 }
 
 bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos,  const wxSize &size )
@@ -4151,8 +4158,7 @@ void wxWindowGTK::GtkSendPaintEvents()
 
     m_clipPaintRegion = false;
 
-#ifndef __WXUNIVERSAL__
-#ifndef __WXGTK20__
+#if !defined(__WXUNIVERSAL__) && !defined(__WXGTK20__)
     // The following code will result in all window-less widgets
     // being redrawn because the wxWidgets class is allowed to
     // paint over the window-less widgets.
@@ -4173,6 +4179,7 @@ void wxWindowGTK::GtkSendPaintEvents()
             gdk_event.type = GDK_EXPOSE;
             gdk_event.window = pizza->bin_window;
             gdk_event.count = 0;
+            gdk_event.send_event = TRUE;
 
             wxRegionIterator upd( m_updateRegion );
             while (upd)
@@ -4192,8 +4199,7 @@ void wxWindowGTK::GtkSendPaintEvents()
             }
         }
     }
-#endif
-#endif
+#endif // native GTK 1
 
     m_updateRegion.Clear();
 }
@@ -4280,12 +4286,10 @@ PangoContext *wxWindowGTK::GtkGetPangoDefaultContext()
     return gtk_widget_get_pango_context( m_widget );
 }
 
+// MR: Returns the same as GtkGetPangoDefaultContext until the symbol can be removed in 2.7.x
 PangoContext *wxWindowGTK::GtkGetPangoX11Context()
 {
-    if (!m_x11Context)
-        m_x11Context = pango_x_get_context( gdk_display );
-
-    return m_x11Context;
+    return gtk_widget_get_pango_context( m_widget );
 }
 #endif