Fixed missing paint events when overriding DoMoveWindow()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6717 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2000-03-14 20:08:31 +00:00
parent 07a9af327e
commit 8cb9f0d0f8
9 changed files with 99 additions and 15 deletions

View 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,

View 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,

View 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;

View 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 ))

View 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)
{

View File

@ -46,10 +46,13 @@
#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();

View 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 ))

View 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)
{

View File

@ -46,10 +46,13 @@
#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();