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

@ -98,6 +98,9 @@ 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,
gint x,

View File

@ -98,6 +98,9 @@ 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,
gint x,

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))
{
@ -2572,7 +2576,13 @@ void wxWindow::OnInternalIdle()
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))
{
@ -2572,7 +2576,13 @@ void wxWindow::OnInternalIdle()
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();