]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed missing paint events when overriding DoMoveWindow()
authorRobert Roebling <robert@roebling.de>
Tue, 14 Mar 2000 20:08:31 +0000 (20:08 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 14 Mar 2000 20:08:31 +0000 (20:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6717 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/win_gtk.h
include/wx/gtk1/win_gtk.h
samples/calendar/calendar.cpp
src/gtk/frame.cpp
src/gtk/win_gtk.c
src/gtk/window.cpp
src/gtk1/frame.cpp
src/gtk1/win_gtk.c
src/gtk1/window.cpp

index b3c92cec54bc92993ecaf55474b71992dc811ec3..12e51bd18068ee75a0ff8735084c6e7efe383be0 100644 (file)
@@ -97,6 +97,9 @@ void       gtk_pizza_set_external    (GtkPizza          *pizza,
 void       gtk_pizza_scroll          (GtkPizza          *pizza,        
                                       gint               dx,
                                       gint               dy);
+
+gint       gtk_pizza_child_resized   (GtkPizza          *pizza,
+                                      GtkWidget         *widget);
                                        
 void       gtk_pizza_put             (GtkPizza          *pizza,
                                       GtkWidget         *widget,
index b3c92cec54bc92993ecaf55474b71992dc811ec3..12e51bd18068ee75a0ff8735084c6e7efe383be0 100644 (file)
@@ -97,6 +97,9 @@ void       gtk_pizza_set_external    (GtkPizza          *pizza,
 void       gtk_pizza_scroll          (GtkPizza          *pizza,        
                                       gint               dx,
                                       gint               dy);
+
+gint       gtk_pizza_child_resized   (GtkPizza          *pizza,
+                                      GtkWidget         *widget);
                                        
 void       gtk_pizza_put             (GtkPizza          *pizza,
                                       GtkWidget         *widget,
index 50a42c800f5cef0727aecc5672d658e81da4cb11..1a05ab23d7d1a9ebf09eb04431d4086d4837c80f 100644 (file)
@@ -301,7 +301,7 @@ MyPanel::MyPanel(wxFrame *frame)
 {
     // using constraints doesn't work under GTK - the calendar window is never
     // repainted after it had been moved at least once!
-#if 0
+#if 1
     SetAutoLayout(TRUE);
 
     wxString date;
index c20496ef80773680808539d03abdf10bf9bd7999..13d018c53b6ab980107ce6d2ee2449696e0c9cac 100644 (file)
@@ -126,6 +126,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
 
         win->m_width = alloc->width;
         win->m_height = alloc->height;
+        win->m_queuedFullRedraw = TRUE;
         win->GtkUpdateSize();
     }
 }
@@ -402,7 +403,7 @@ void wxFrame::Init()
     m_menuBarDetached = FALSE;
     m_toolBarDetached = FALSE;
     m_insertInClientArea = TRUE;
-    m_isFrame = TRUE;
+    m_isFrame = FALSE;
 }
 
 bool wxFrame::Create( wxWindow *parent,
@@ -416,6 +417,7 @@ bool wxFrame::Create( wxWindow *parent,
     wxTopLevelWindows.Append( this );
 
     m_needParent = FALSE;
+    m_isFrame = TRUE;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
index 20d0181db6d4cdc22fc4e66afb2239c9c62c6abe..a79465d94f964e631a3002595ed1f0b9a4be0f0b 100644 (file)
@@ -424,6 +424,33 @@ gtk_pizza_set_size (GtkPizza   *pizza,
     }
 }
 
+gint       
+gtk_pizza_child_resized  (GtkPizza   *pizza,
+                          GtkWidget  *widget)
+{
+    GtkPizzaChild *child;
+    GList *children;
+
+    g_return_val_if_fail (pizza != NULL, FALSE);
+    g_return_val_if_fail (GTK_IS_PIZZA (pizza), FALSE);
+    g_return_val_if_fail (widget != NULL, FALSE);
+
+    children = pizza->children;
+    while (children)
+    {
+        child = children->data;
+        children = children->next;
+
+        if (child->widget == widget)
+        {
+            return ((child->width == widget->allocation.width) &&
+                    (child->height == widget->allocation.height));
+        }
+    }
+    
+    return FALSE;
+}
+                                       
 static void
 gtk_pizza_map (GtkWidget *widget)
 {
index ba648e96bf0eb0e4a0dae323cbc8b2e35b1e0dcf..74e06e0af0acf0414f06c531cb3424a6be418311 100644 (file)
 #include <gtk/gtk.h>
 #include <gdk/gdkprivate.h>
 #include <gdk/gdkkeysyms.h>
-#include <wx/gtk/win_gtk.h>
-
 #include <gdk/gdkx.h>
 
+#include <gtk/gtk.h>
+#include <gtk/gtkprivate.h>
+
+#include "wx/gtk/win_gtk.h"
+
 //-----------------------------------------------------------------------------
 // documentation on internals
 //-----------------------------------------------------------------------------
@@ -621,7 +624,7 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev
         wxapp_install_idle_handler();
         
 /*
-    if (win->GetName() == wxT("status_line"))
+    if (win->GetName() == wxT("panel"))
     {
         wxPrintf( wxT("OnExpose from ") );
         if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -721,7 +724,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
         wxapp_install_idle_handler();
         
 /*
-    if (win->GetName() == wxT("status_line"))
+    if (win->GetName() == wxT("panel"))
     {
         wxPrintf( wxT("OnDraw from ") );
         if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -737,6 +740,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
         
     if (!win->m_queuedFullRedraw)
     {
+    
         if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
              (pizza->clear_on_draw))
         {
@@ -2571,8 +2575,14 @@ void wxWindow::OnInternalIdle()
            the actual size of window, in which case all expose events that resulted
            from resizing the window have been sent (and discarded) and we can
            now do our full redraw and switch on expose event handling again. */
-           
-        if ((m_width == m_widget->allocation.width) && (m_height == m_widget->allocation.height))
+        
+        bool child_already_resized = FALSE;
+        if (m_isFrame)
+            child_already_resized = gtk_pizza_child_resized( GTK_PIZZA(m_wxwindow->parent), m_wxwindow );
+        else
+            child_already_resized = gtk_pizza_child_resized( GTK_PIZZA(m_widget->parent), m_widget );
+        
+        if (child_already_resized)
         {
             m_queuedFullRedraw = FALSE;
             m_updateRegion.Clear();
index c20496ef80773680808539d03abdf10bf9bd7999..13d018c53b6ab980107ce6d2ee2449696e0c9cac 100644 (file)
@@ -126,6 +126,7 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
 
         win->m_width = alloc->width;
         win->m_height = alloc->height;
+        win->m_queuedFullRedraw = TRUE;
         win->GtkUpdateSize();
     }
 }
@@ -402,7 +403,7 @@ void wxFrame::Init()
     m_menuBarDetached = FALSE;
     m_toolBarDetached = FALSE;
     m_insertInClientArea = TRUE;
-    m_isFrame = TRUE;
+    m_isFrame = FALSE;
 }
 
 bool wxFrame::Create( wxWindow *parent,
@@ -416,6 +417,7 @@ bool wxFrame::Create( wxWindow *parent,
     wxTopLevelWindows.Append( this );
 
     m_needParent = FALSE;
+    m_isFrame = TRUE;
 
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
index 20d0181db6d4cdc22fc4e66afb2239c9c62c6abe..a79465d94f964e631a3002595ed1f0b9a4be0f0b 100644 (file)
@@ -424,6 +424,33 @@ gtk_pizza_set_size (GtkPizza   *pizza,
     }
 }
 
+gint       
+gtk_pizza_child_resized  (GtkPizza   *pizza,
+                          GtkWidget  *widget)
+{
+    GtkPizzaChild *child;
+    GList *children;
+
+    g_return_val_if_fail (pizza != NULL, FALSE);
+    g_return_val_if_fail (GTK_IS_PIZZA (pizza), FALSE);
+    g_return_val_if_fail (widget != NULL, FALSE);
+
+    children = pizza->children;
+    while (children)
+    {
+        child = children->data;
+        children = children->next;
+
+        if (child->widget == widget)
+        {
+            return ((child->width == widget->allocation.width) &&
+                    (child->height == widget->allocation.height));
+        }
+    }
+    
+    return FALSE;
+}
+                                       
 static void
 gtk_pizza_map (GtkWidget *widget)
 {
index ba648e96bf0eb0e4a0dae323cbc8b2e35b1e0dcf..74e06e0af0acf0414f06c531cb3424a6be418311 100644 (file)
 #include <gtk/gtk.h>
 #include <gdk/gdkprivate.h>
 #include <gdk/gdkkeysyms.h>
-#include <wx/gtk/win_gtk.h>
-
 #include <gdk/gdkx.h>
 
+#include <gtk/gtk.h>
+#include <gtk/gtkprivate.h>
+
+#include "wx/gtk/win_gtk.h"
+
 //-----------------------------------------------------------------------------
 // documentation on internals
 //-----------------------------------------------------------------------------
@@ -621,7 +624,7 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev
         wxapp_install_idle_handler();
         
 /*
-    if (win->GetName() == wxT("status_line"))
+    if (win->GetName() == wxT("panel"))
     {
         wxPrintf( wxT("OnExpose from ") );
         if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -721,7 +724,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
         wxapp_install_idle_handler();
         
 /*
-    if (win->GetName() == wxT("status_line"))
+    if (win->GetName() == wxT("panel"))
     {
         wxPrintf( wxT("OnDraw from ") );
         if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -737,6 +740,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
         
     if (!win->m_queuedFullRedraw)
     {
+    
         if (!(GTK_WIDGET_APP_PAINTABLE (widget)) &&
              (pizza->clear_on_draw))
         {
@@ -2571,8 +2575,14 @@ void wxWindow::OnInternalIdle()
            the actual size of window, in which case all expose events that resulted
            from resizing the window have been sent (and discarded) and we can
            now do our full redraw and switch on expose event handling again. */
-           
-        if ((m_width == m_widget->allocation.width) && (m_height == m_widget->allocation.height))
+        
+        bool child_already_resized = FALSE;
+        if (m_isFrame)
+            child_already_resized = gtk_pizza_child_resized( GTK_PIZZA(m_wxwindow->parent), m_wxwindow );
+        else
+            child_already_resized = gtk_pizza_child_resized( GTK_PIZZA(m_widget->parent), m_widget );
+        
+        if (child_already_resized)
         {
             m_queuedFullRedraw = FALSE;
             m_updateRegion.Clear();