]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/dcclient.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / gtk1 / dcclient.cpp
index ee0bc0092948e204b9831495aeddb55558fab94c..a99a0791e724807d638783b0db9d8be0b9be93d6 100644 (file)
@@ -1452,13 +1452,23 @@ void wxWindowDC::SetPen( const wxPen &pen )
         {
             for (int i = 0; i < req_nb_dash; i++)
                 real_req_dash[i] = req_dash[i] * width;
         {
             for (int i = 0; i < req_nb_dash; i++)
                 real_req_dash[i] = req_dash[i] * width;
-            gdk_gc_set_dashes( m_penGC, 0, real_req_dash, req_nb_dash );
+#if GTK_CHECK_VERSION(1,2,7)
+            gdk_gc_set_dashes( m_penGC, 0, (gint8*) real_req_dash,
+                             req_nb_dash );
+#else
+            gdk_gc_set_dashes( m_penGC, 0, real_req_dash,
+                             req_nb_dash );
+#endif
             delete[] real_req_dash;
         }
         else
         {
             // No Memory. We use non-scaled dash pattern...
             delete[] real_req_dash;
         }
         else
         {
             // No Memory. We use non-scaled dash pattern...
+#if GTK_CHECK_VERSION(1,2,7)
+            gdk_gc_set_dashes( m_penGC, 0, (gint8*)req_dash, req_nb_dash );
+#else
             gdk_gc_set_dashes( m_penGC, 0, (char*)req_dash, req_nb_dash );
             gdk_gc_set_dashes( m_penGC, 0, (char*)req_dash, req_nb_dash );
+#endif
         }
     }
 #endif
         }
     }
 #endif
@@ -1698,8 +1708,6 @@ void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoo
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-    wxDC::DoSetClippingRegion( x, y, width, height );
-
     if (!m_window) return;
 
     wxRect rect;
     if (!m_window) return;
 
     wxRect rect;
@@ -1718,6 +1726,10 @@ void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoo
         m_currentClippingRegion.Intersect( m_paintClippingRegion );
 #endif
 
         m_currentClippingRegion.Intersect( m_paintClippingRegion );
 #endif
 
+    wxCoord xx, yy, ww, hh;
+    m_currentClippingRegion.GetBox( xx, yy, ww, hh );
+    wxDC::DoSetClippingRegion( xx, yy, ww, hh );
+
     gdk_gc_set_clip_region( m_penGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_brushGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_textGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_penGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_brushGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_textGC, m_currentClippingRegion.GetRegion() );
@@ -1734,11 +1746,6 @@ void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region  )
         return;
     }
 
         return;
     }
 
-    wxCoord x,y,w,h;
-    region.GetBox( x, y, w, h );
-
-    wxDC::DoSetClippingRegion( x, y, w, h );
-
     if (!m_window) return;
     
     if (!m_currentClippingRegion.IsNull())
     if (!m_window) return;
     
     if (!m_currentClippingRegion.IsNull())
@@ -1751,6 +1758,10 @@ void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region  )
         m_currentClippingRegion.Intersect( m_paintClippingRegion );
 #endif
 
         m_currentClippingRegion.Intersect( m_paintClippingRegion );
 #endif
 
+    wxCoord xx, yy, ww, hh;
+    m_currentClippingRegion.GetBox( xx, yy, ww, hh );
+    wxDC::DoSetClippingRegion( xx, yy, ww, hh );
+
     gdk_gc_set_clip_region( m_penGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_brushGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_textGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_penGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_brushGC, m_currentClippingRegion.GetRegion() );
     gdk_gc_set_clip_region( m_textGC, m_currentClippingRegion.GetRegion() );
@@ -2017,7 +2028,10 @@ wxPaintDC::wxPaintDC()
 wxPaintDC::wxPaintDC( wxWindow *win )
   : wxWindowDC( win )
 {
 wxPaintDC::wxPaintDC( wxWindow *win )
   : wxWindowDC( win )
 {
-#if USE_PAINT_REGION    
+#if USE_PAINT_REGION
+    if (!win->m_clipPaintRegion)
+        return;
+        
     m_paintClippingRegion = win->GetUpdateRegion();
     m_currentClippingRegion.Union( m_paintClippingRegion );
         
     m_paintClippingRegion = win->GetUpdateRegion();
     m_currentClippingRegion.Union( m_paintClippingRegion );