]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
Various compile fixes.
[wxWidgets.git] / src / gtk1 / window.cpp
index 748fa87aa0f849864fba8defe5241c298996cac6..b2941feb0a3e4cf27b0fa462099cb00df48acae0 100644 (file)
@@ -800,10 +800,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
                                   gdk_event->area.width,
                                   gdk_event->area.height );
 
-    // Actually send the various events based on the
-    // current update region.
-    if (gdk_event->count == 0)
-        win->GtkSendPaintEvents();
+    // Actual redrawing takes place in idle time.
 
     return TRUE;
 }
@@ -898,10 +895,9 @@ static void gtk_window_draw_callback( GtkWidget *widget,
 
     win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
 
-    // Actually send the various events based on the
-    // current update region.
-    win->GtkSendPaintEvents();
+    // Actual redrawing takes place in idle time.
 
+#ifndef __WXUNIVERSAL__
     // Redraw child widgets
     GList *children = pizza->children;
     while (children)
@@ -915,6 +911,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
             gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
         }
     }
+#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -2729,10 +2726,15 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags
              if (height == -1) m_height = 26;
         }
 
-        if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
-        if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
-        if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
-        if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
+        int minWidth = GetMinWidth(),
+            minHeight = GetMinHeight(),
+            maxWidth = GetMaxWidth(),
+            maxHeight = GetMaxHeight();
+
+        if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth;
+        if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
+        if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth;
+        if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight;
 
         int border = 0;
         int bottom_border = 0;
@@ -3417,34 +3419,49 @@ void wxWindowGTK::GtkSendPaintEvents()
 
     m_clipPaintRegion = FALSE;
 
+#ifndef __WXUNIVERSAL__
+    // The following code will result in all window-less widgets
+    // being redrawn because the wxWindows class is allowed to
+    // paint over the window-less widgets.
+    
     GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
-    if (g_list_length(pizza->children) > 0)
+    
+    GList *children = pizza->children;
+    while (children)
     {
-        // The following code will result in all window-less widgets
-        // being redrawn because the wxWindows class is allowed to
-        // paint over the window-less widgets.
-        GList *children = pizza->children;
-        while (children)
-        {
-            GtkPizzaChild *child = (GtkPizzaChild*) children->data;
-            children = children->next;
+        GtkPizzaChild *child = (GtkPizzaChild*) children->data;
+        children = children->next;
 
-            if (GTK_WIDGET_NO_WINDOW (child->widget) &&
-                GTK_WIDGET_DRAWABLE (child->widget))
+        if (GTK_WIDGET_NO_WINDOW (child->widget) &&
+            GTK_WIDGET_DRAWABLE (child->widget))
+        {
+            // Get intersection of widget area and update region
+            wxRegion region( m_updateRegion );
+            
+            GdkEventExpose gdk_event;
+            gdk_event.type = GDK_EXPOSE;
+            gdk_event.window = pizza->bin_window;
+            gdk_event.count = 0;
+            
+            wxRegionIterator upd( m_updateRegion );
+            while (upd)
             {
-                // Get intersection of widget area and update region
-                wxRegion region( m_updateRegion );
-                region.Intersect( child->widget->allocation.x,
-                                  child->widget->allocation.y,
-                                  child->widget->allocation.width,
-                                  child->widget->allocation.height );
+                GdkRectangle rect;
+                rect.x = upd.GetX();
+                rect.y = upd.GetY();
+                rect.width = upd.GetWidth();
+                rect.height = upd.GetHeight();
                 
-                // Redraw the whole widget anyway
-                if (!region.IsEmpty())
-                    gtk_widget_draw( child->widget, NULL );
+                if (gtk_widget_intersect (child->widget, &rect, &gdk_event.area))
+                {
+                    gtk_widget_event (child->widget, (GdkEvent*) &gdk_event);
+                }
+                
+                upd ++;
             }
         }
     }
+#endif
 
     m_updateRegion.Clear();
 }
@@ -3583,7 +3600,7 @@ GtkStyle *wxWindowGTK::GetWidgetStyle()
 
 void wxWindowGTK::SetWidgetStyle()
 {
-#if DISABLE_STYLE_IF_BROKEN_THEM
+#if DISABLE_STYLE_IF_BROKEN_THEME
     if (m_widget->style->engine_data)
     {
         static bool s_warningPrinted = FALSE;