]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/window.cpp
added wxGet/Set/UnsetEnv() for Unix
[wxWidgets.git] / src / gtk / window.cpp
index 5288cfcfd85146e32b5332d5080816c51904c269..937692b0514797746e26a5b16b8f3a661584a33f 100644 (file)
@@ -680,11 +680,17 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev
 */
                                 
     GtkPizza *pizza = GTK_PIZZA (widget);
-        
-    if (win->IsTopLevel())
+
+    if (win->GetThemeEnabled())
     {
-        gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, 
-                     GTK_SHADOW_NONE, &gdk_event->area, win->m_widget, "base", 0, 0, -1, -1);
+        wxWindow *parent = win->GetParent();
+        while (parent && !parent->IsTopLevel())
+            parent = parent->GetParent();
+        if (!parent)
+            parent = win;
+
+        gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+                   GTK_SHADOW_NONE, &gdk_event->area, parent->m_widget, "base", 0, 0, -1, -1);
     }
         
     win->GetUpdateRegion().Union( gdk_event->area.x,
@@ -692,18 +698,22 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev
                                   gdk_event->area.width,
                                   gdk_event->area.height );
 
-        if (gdk_event->count == 0)
-        {
-            wxEraseEvent eevent( win->GetId() );
-            eevent.SetEventObject( win );
-            win->GetEventHandler()->ProcessEvent(eevent);
-
-            wxPaintEvent event( win->GetId() );
-            event.SetEventObject( win );
-            win->GetEventHandler()->ProcessEvent( event );
+    if (gdk_event->count == 0)
+    {
+        win->m_clipPaintRegion = TRUE;
+    
+        wxEraseEvent eevent( win->GetId() );
+        eevent.SetEventObject( win );
+        win->GetEventHandler()->ProcessEvent(eevent);
 
-            win->GetUpdateRegion().Clear();
-        }
+        wxPaintEvent event( win->GetId() );
+        event.SetEventObject( win );
+        win->GetEventHandler()->ProcessEvent( event );
+        
+        win->GetUpdateRegion().Clear();
+        
+        win->m_clipPaintRegion = FALSE;
+    }
     
         /* The following code will result in all window-less widgets
            being redrawn if the wxWindows class is given a chance to
@@ -767,7 +777,13 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
 
     if (g_isIdle)
         wxapp_install_idle_handler();
-        
+
+    if ((win->HasFlag(wxNO_FULL_REPAINT_ON_RESIZE)) &&
+        (win->GetChildren().GetCount() == 0))
+    {
+        return;
+    }
+
 /*
     if (win->GetName() == wxT("panel"))
     {
@@ -783,39 +799,46 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
    
     GtkPizza *pizza = GTK_PIZZA (widget);
 
-    if (win->IsTopLevel())
+    if (win->GetThemeEnabled())
     {
-        gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, 
-                     GTK_SHADOW_NONE, rect, win->m_widget, "base", 0, 0, -1, -1);
+        wxWindow *parent = win->GetParent();
+        while (parent && !parent->IsTopLevel())
+            parent = parent->GetParent();
+        if (!parent)
+            parent = win;
+
+        gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
+                   GTK_SHADOW_NONE, rect, parent->m_widget, "base", 0, 0, -1, -1);
     }
         
-        if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
-             (pizza->clear_on_draw))
-        {
-            gdk_window_clear_area( pizza->bin_window,
+        
+    if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
+         (pizza->clear_on_draw))
+    {
+        gdk_window_clear_area( pizza->bin_window,
                                rect->x, rect->y, rect->width, rect->height);
-        }
+    }
     
-        win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
+    win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
 
-        win->m_clipPaintRegion = TRUE;
+    win->m_clipPaintRegion = TRUE;
     
-        wxEraseEvent eevent( win->GetId() );
-        eevent.SetEventObject( win );
-        win->GetEventHandler()->ProcessEvent(eevent);
+    wxEraseEvent eevent( win->GetId() );
+    eevent.SetEventObject( win );
+    win->GetEventHandler()->ProcessEvent(eevent);
 
-        wxPaintEvent event( win->GetId() );
-        event.SetEventObject( win );
-        win->GetEventHandler()->ProcessEvent( event );
+    wxPaintEvent event( win->GetId() );
+    event.SetEventObject( win );
+    win->GetEventHandler()->ProcessEvent( event );
 
-        win->GetUpdateRegion().Clear();
+    win->GetUpdateRegion().Clear();
     
-        win->m_clipPaintRegion = FALSE;
+    win->m_clipPaintRegion = FALSE;
     
     
-        GList *children = pizza->children;
-        while (children)
-        {
+    GList *children = pizza->children;
+    while (children)
+    {
             GtkPizzaChild *child = (GtkPizzaChild*) children->data;
             children = children->next;
 
@@ -824,7 +847,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
             {
                 gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
             }
-        }
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -2377,14 +2400,17 @@ void wxWindow::PostCreation()
             
             gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE );
 
-            gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
-                GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this );
-
             gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
                 GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
 
             gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
                 GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
+
+            if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE))
+            {
+                gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
+                    GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this );
+            }
         }
 
 #if (GTK_MINOR_VERSION > 0)