Some make corrections for HP and related,
Changed refresh order so that window-less widgets don't get overdrawn anymore, Prevent GTK from filtering our supposedly unneeded expose events, Block all expose calls if a resize is requested and do a full redraw then, thus removing flicker and behaving like wxMSW, Moved some doubled expose and draw code from GtkPizza to the respective callbacks in window.cpp, Set idle priority to a higher value (which should indicate a lower priority if I interpret glib.h correctly) but the desired side-effect didn't really show up. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6533 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -751,6 +751,7 @@ SAMPLES_DIST: ALL_GUI_DIST
|
|||||||
cp $(SAMPDIR)/drawing/makefile.unx $(DISTDIR)/samples/drawing
|
cp $(SAMPDIR)/drawing/makefile.unx $(DISTDIR)/samples/drawing
|
||||||
cp $(SAMPDIR)/drawing/*.cpp $(DISTDIR)/samples/drawing
|
cp $(SAMPDIR)/drawing/*.cpp $(DISTDIR)/samples/drawing
|
||||||
cp $(SAMPDIR)/drawing/*.xpm $(DISTDIR)/samples/drawing
|
cp $(SAMPDIR)/drawing/*.xpm $(DISTDIR)/samples/drawing
|
||||||
|
cp $(SAMPDIR)/drawing/*.bmp $(DISTDIR)/samples/drawing
|
||||||
|
|
||||||
mkdir $(DISTDIR)/samples/dynamic
|
mkdir $(DISTDIR)/samples/dynamic
|
||||||
cp $(SAMPDIR)/dynamic/Makefile.in $(DISTDIR)/samples/dynamic
|
cp $(SAMPDIR)/dynamic/Makefile.in $(DISTDIR)/samples/dynamic
|
||||||
@@ -806,6 +807,7 @@ SAMPLES_DIST: ALL_GUI_DIST
|
|||||||
cp $(SAMPDIR)/html/test/*.cpp $(DISTDIR)/samples/html/test
|
cp $(SAMPDIR)/html/test/*.cpp $(DISTDIR)/samples/html/test
|
||||||
cp $(SAMPDIR)/html/test/*.bmp $(DISTDIR)/samples/html/test
|
cp $(SAMPDIR)/html/test/*.bmp $(DISTDIR)/samples/html/test
|
||||||
cp $(SAMPDIR)/html/test/*.png $(DISTDIR)/samples/html/test
|
cp $(SAMPDIR)/html/test/*.png $(DISTDIR)/samples/html/test
|
||||||
|
cp $(SAMPDIR)/html/test/*.gif $(DISTDIR)/samples/html/test
|
||||||
cp $(SAMPDIR)/html/test/*.htm $(DISTDIR)/samples/html/test
|
cp $(SAMPDIR)/html/test/*.htm $(DISTDIR)/samples/html/test
|
||||||
cp $(SAMPDIR)/html/test/*.html $(DISTDIR)/samples/html/test
|
cp $(SAMPDIR)/html/test/*.html $(DISTDIR)/samples/html/test
|
||||||
mkdir $(DISTDIR)/samples/html/virtual
|
mkdir $(DISTDIR)/samples/html/virtual
|
||||||
@@ -839,10 +841,10 @@ SAMPLES_DIST: ALL_GUI_DIST
|
|||||||
cp $(SAMPDIR)/internat/*.xpm $(DISTDIR)/samples/internat
|
cp $(SAMPDIR)/internat/*.xpm $(DISTDIR)/samples/internat
|
||||||
cp $(SAMPDIR)/internat/*.txt $(DISTDIR)/samples/internat
|
cp $(SAMPDIR)/internat/*.txt $(DISTDIR)/samples/internat
|
||||||
cp $(SAMPDIR)/internat/*.po $(DISTDIR)/samples/internat
|
cp $(SAMPDIR)/internat/*.po $(DISTDIR)/samples/internat
|
||||||
cp $(SAMPDIR)/internat/fr/*.po $(DISTDIR)/samples/internat/fr
|
cp $(SAMPDIR)/internat/fr/*.mo $(DISTDIR)/samples/internat/fr
|
||||||
cp $(SAMPDIR)/internat/de/*.mo $(DISTDIR)/samples/internat/de
|
cp $(SAMPDIR)/internat/de/*.mo $(DISTDIR)/samples/internat/de
|
||||||
cp $(SAMPDIR)/internat/fr/*.po $(DISTDIR)/samples/internat/fr
|
cp $(SAMPDIR)/internat/fr/*.po $(DISTDIR)/samples/internat/fr
|
||||||
cp $(SAMPDIR)/internat/de/*.mo $(DISTDIR)/samples/internat/de
|
cp $(SAMPDIR)/internat/de/*.po $(DISTDIR)/samples/internat/de
|
||||||
|
|
||||||
mkdir $(DISTDIR)/samples/ipc
|
mkdir $(DISTDIR)/samples/ipc
|
||||||
cp $(SAMPDIR)/ipc/Makefile.in $(DISTDIR)/samples/ipc
|
cp $(SAMPDIR)/ipc/Makefile.in $(DISTDIR)/samples/ipc
|
||||||
|
@@ -51,6 +51,7 @@ dnl
|
|||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <gtk/gtkfeatures.h>
|
#include <gtk/gtkfeatures.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
|
@@ -33,9 +33,19 @@ typedef enum
|
|||||||
GTK_MYSHADOW_OUT
|
GTK_MYSHADOW_OUT
|
||||||
} GtkMyShadowType;
|
} GtkMyShadowType;
|
||||||
|
|
||||||
|
typedef struct _GtkPizzaChild GtkPizzaChild;
|
||||||
typedef struct _GtkPizza GtkPizza;
|
typedef struct _GtkPizza GtkPizza;
|
||||||
typedef struct _GtkPizzaClass GtkPizzaClass;
|
typedef struct _GtkPizzaClass GtkPizzaClass;
|
||||||
|
|
||||||
|
struct _GtkPizzaChild
|
||||||
|
{
|
||||||
|
GtkWidget *widget;
|
||||||
|
gint x;
|
||||||
|
gint y;
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
};
|
||||||
|
|
||||||
struct _GtkPizza
|
struct _GtkPizza
|
||||||
{
|
{
|
||||||
GtkContainer container;
|
GtkContainer container;
|
||||||
|
@@ -186,6 +186,8 @@ public:
|
|||||||
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
||||||
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
||||||
bool m_isScrolling;
|
bool m_isScrolling;
|
||||||
|
bool m_clipPaintRegion; /* TRUE after ScrollWindow() */
|
||||||
|
bool m_queuedFullRedraw; /* TRUE after DoMoveWindow */
|
||||||
|
|
||||||
// these are true if the style were set before the widget was realized
|
// these are true if the style were set before the widget was realized
|
||||||
// (typcally in the constructor) but the actual GTK style must not be set
|
// (typcally in the constructor) but the actual GTK style must not be set
|
||||||
|
@@ -33,9 +33,19 @@ typedef enum
|
|||||||
GTK_MYSHADOW_OUT
|
GTK_MYSHADOW_OUT
|
||||||
} GtkMyShadowType;
|
} GtkMyShadowType;
|
||||||
|
|
||||||
|
typedef struct _GtkPizzaChild GtkPizzaChild;
|
||||||
typedef struct _GtkPizza GtkPizza;
|
typedef struct _GtkPizza GtkPizza;
|
||||||
typedef struct _GtkPizzaClass GtkPizzaClass;
|
typedef struct _GtkPizzaClass GtkPizzaClass;
|
||||||
|
|
||||||
|
struct _GtkPizzaChild
|
||||||
|
{
|
||||||
|
GtkWidget *widget;
|
||||||
|
gint x;
|
||||||
|
gint y;
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
};
|
||||||
|
|
||||||
struct _GtkPizza
|
struct _GtkPizza
|
||||||
{
|
{
|
||||||
GtkContainer container;
|
GtkContainer container;
|
||||||
|
@@ -186,6 +186,8 @@ public:
|
|||||||
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
bool m_isFrame:1; /* faster than IS_KIND_OF */
|
||||||
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
bool m_acceptsFocus:1; /* not wxStaticBox, not wxStaticBitmap etc. */
|
||||||
bool m_isScrolling;
|
bool m_isScrolling;
|
||||||
|
bool m_clipPaintRegion; /* TRUE after ScrollWindow() */
|
||||||
|
bool m_queuedFullRedraw; /* TRUE after DoMoveWindow */
|
||||||
|
|
||||||
// these are true if the style were set before the widget was realized
|
// these are true if the style were set before the widget was realized
|
||||||
// (typcally in the constructor) but the actual GTK style must not be set
|
// (typcally in the constructor) but the actual GTK style must not be set
|
||||||
|
@@ -128,7 +128,7 @@ enum
|
|||||||
Minimal_Test2,
|
Minimal_Test2,
|
||||||
|
|
||||||
// controls start here (the numbers are, of course, arbitrary)
|
// controls start here (the numbers are, of course, arbitrary)
|
||||||
Minimal_Text = 1000,
|
Minimal_Text = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -127,7 +127,7 @@ enum
|
|||||||
HelpDemo_Help_GNOME,
|
HelpDemo_Help_GNOME,
|
||||||
HelpDemo_Help_Netscape,
|
HelpDemo_Help_Netscape,
|
||||||
// controls start here (the numbers are, of course, arbitrary)
|
// controls start here (the numbers are, of course, arbitrary)
|
||||||
HelpDemo_Text = 1000,
|
HelpDemo_Text = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -74,7 +74,7 @@
|
|||||||
Minimal_Forward,
|
Minimal_Forward,
|
||||||
|
|
||||||
// controls start here (the numbers are, of course, arbitrary)
|
// controls start here (the numbers are, of course, arbitrary)
|
||||||
Minimal_Text = 1000,
|
Minimal_Text = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -75,7 +75,7 @@
|
|||||||
Minimal_Forward,
|
Minimal_Forward,
|
||||||
|
|
||||||
// controls start here (the numbers are, of course, arbitrary)
|
// controls start here (the numbers are, of course, arbitrary)
|
||||||
Minimal_Text = 1000,
|
Minimal_Text = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -928,9 +928,11 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
|
|||||||
|
|
||||||
Centre( wxBOTH );
|
Centre( wxBOTH );
|
||||||
|
|
||||||
|
/*
|
||||||
if (m_fileName.IsEmpty())
|
if (m_fileName.IsEmpty())
|
||||||
m_list->SetFocus();
|
m_list->SetFocus();
|
||||||
else
|
else
|
||||||
|
*/
|
||||||
m_text->SetFocus();
|
m_text->SetFocus();
|
||||||
|
|
||||||
wxEndBusyCursor();
|
wxEndBusyCursor();
|
||||||
|
@@ -95,8 +95,8 @@ bool wxYield()
|
|||||||
|
|
||||||
if (has_idle)
|
if (has_idle)
|
||||||
{
|
{
|
||||||
/* re-add idle handler */
|
/* re-add idle handler (very low priority) */
|
||||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
wxTheApp->m_idleTag = gtk_idle_add_priority( 500, wxapp_idle_callback, (gpointer) NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
// disable log flushing from here because a call to wxYield() shouldn't
|
// disable log flushing from here because a call to wxYield() shouldn't
|
||||||
@@ -177,9 +177,9 @@ void wxapp_install_idle_handler()
|
|||||||
indicating that the idle is over. It may also
|
indicating that the idle is over. It may also
|
||||||
get called from other thread for sending events
|
get called from other thread for sending events
|
||||||
to the main thread (and processing these in
|
to the main thread (and processing these in
|
||||||
idle time). */
|
idle time). Very low priority. */
|
||||||
|
|
||||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
wxTheApp->m_idleTag = gtk_idle_add_priority( 500, wxapp_idle_callback, (gpointer) NULL );
|
||||||
|
|
||||||
g_isIdle = FALSE;
|
g_isIdle = FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -2019,7 +2019,10 @@ wxPaintDC::wxPaintDC()
|
|||||||
wxPaintDC::wxPaintDC( wxWindow *win )
|
wxPaintDC::wxPaintDC( wxWindow *win )
|
||||||
: wxWindowDC( win )
|
: wxWindowDC( win )
|
||||||
{
|
{
|
||||||
#if USE_PAINT_REGION
|
#if USE_PAINT_REGION
|
||||||
|
if (!win->m_clipPaintRegion)
|
||||||
|
return;
|
||||||
|
|
||||||
m_paintClippingRegion = win->GetUpdateRegion();
|
m_paintClippingRegion = win->GetUpdateRegion();
|
||||||
m_currentClippingRegion.Union( m_paintClippingRegion );
|
m_currentClippingRegion.Union( m_paintClippingRegion );
|
||||||
|
|
||||||
|
@@ -834,6 +834,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y),
|
|||||||
gtk_pizza_set_size( GTK_PIZZA(m_wxwindow),
|
gtk_pizza_set_size( GTK_PIZZA(m_wxwindow),
|
||||||
m_frameStatusBar->m_widget,
|
m_frameStatusBar->m_widget,
|
||||||
xx, yy, ww, hh );
|
xx, yy, ww, hh );
|
||||||
|
gtk_widget_draw( m_frameStatusBar->m_widget, (GdkRectangle*) NULL );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -30,7 +30,6 @@ extern "C" {
|
|||||||
(y >= G_MINSHORT) && (y <= G_MAXSHORT))
|
(y >= G_MINSHORT) && (y <= G_MAXSHORT))
|
||||||
|
|
||||||
typedef struct _GtkPizzaAdjData GtkPizzaAdjData;
|
typedef struct _GtkPizzaAdjData GtkPizzaAdjData;
|
||||||
typedef struct _GtkPizzaChild GtkPizzaChild;
|
|
||||||
|
|
||||||
struct _GtkPizzaAdjData
|
struct _GtkPizzaAdjData
|
||||||
{
|
{
|
||||||
@@ -38,22 +37,13 @@ struct _GtkPizzaAdjData
|
|||||||
gint dy;
|
gint dy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkPizzaChild
|
static void gtk_pizza_class_init (GtkPizzaClass *klass);
|
||||||
{
|
static void gtk_pizza_init (GtkPizza *pizza);
|
||||||
GtkWidget *widget;
|
|
||||||
gint x;
|
|
||||||
gint y;
|
|
||||||
gint width;
|
|
||||||
gint height;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void gtk_pizza_class_init (GtkPizzaClass *klass);
|
static void gtk_pizza_realize (GtkWidget *widget);
|
||||||
static void gtk_pizza_init (GtkPizza *pizza);
|
static void gtk_pizza_unrealize (GtkWidget *widget);
|
||||||
|
|
||||||
static void gtk_pizza_realize (GtkWidget *widget);
|
static void gtk_pizza_map (GtkWidget *widget);
|
||||||
static void gtk_pizza_unrealize (GtkWidget *widget);
|
|
||||||
|
|
||||||
static void gtk_pizza_map (GtkWidget *widget);
|
|
||||||
|
|
||||||
static void gtk_pizza_size_request (GtkWidget *widget,
|
static void gtk_pizza_size_request (GtkWidget *widget,
|
||||||
GtkRequisition *requisition);
|
GtkRequisition *requisition);
|
||||||
@@ -67,42 +57,42 @@ static void gtk_pizza_add (GtkContainer *container,
|
|||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
static void gtk_pizza_remove (GtkContainer *container,
|
static void gtk_pizza_remove (GtkContainer *container,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
static void gtk_pizza_forall (GtkContainer *container,
|
static void gtk_pizza_forall (GtkContainer *container,
|
||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data);
|
gpointer callback_data);
|
||||||
|
|
||||||
static void gtk_pizza_position_child (GtkPizza *pizza,
|
static void gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
static void gtk_pizza_position_children (GtkPizza *pizza);
|
static void gtk_pizza_position_children (GtkPizza *pizza);
|
||||||
|
|
||||||
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data);
|
gpointer cb_data);
|
||||||
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
||||||
gint dx,
|
gint dx,
|
||||||
gint dy);
|
gint dy);
|
||||||
|
|
||||||
|
|
||||||
static void gtk_pizza_expose_area (GtkPizza *pizza,
|
static void gtk_pizza_expose_area (GtkPizza *pizza,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
static void gtk_pizza_adjustment_changed (GtkAdjustment *adjustment,
|
static void gtk_pizza_adjustment_changed (GtkAdjustment *adjustment,
|
||||||
GtkPizza *pizza);
|
GtkPizza *pizza);
|
||||||
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static GdkFilterReturn gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
|
|
||||||
static GtkType gtk_pizza_child_type (GtkContainer *container);
|
static GtkType gtk_pizza_child_type (GtkContainer *container);
|
||||||
|
|
||||||
static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
||||||
GtkAdjustment *hadj,
|
GtkAdjustment *hadj,
|
||||||
GtkAdjustment *vadj);
|
GtkAdjustment *vadj);
|
||||||
|
|
||||||
@@ -200,7 +190,7 @@ gtk_pizza_init (GtkPizza *pizza)
|
|||||||
pizza->visibility = GDK_VISIBILITY_PARTIAL;
|
pizza->visibility = GDK_VISIBILITY_PARTIAL;
|
||||||
|
|
||||||
pizza->clear_on_draw = TRUE;
|
pizza->clear_on_draw = TRUE;
|
||||||
pizza->use_filter = FALSE;
|
pizza->use_filter = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget*
|
||||||
@@ -222,7 +212,7 @@ gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
||||||
GtkMyShadowType type)
|
GtkMyShadowType type)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
@@ -241,8 +231,8 @@ gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_clear (GtkPizza *pizza,
|
gtk_pizza_set_clear (GtkPizza *pizza,
|
||||||
gboolean clear)
|
gboolean clear)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
||||||
@@ -251,8 +241,8 @@ gtk_pizza_set_clear (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_filter (GtkPizza *pizza,
|
gtk_pizza_set_filter (GtkPizza *pizza,
|
||||||
gboolean use)
|
gboolean use)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
||||||
@@ -261,12 +251,12 @@ gtk_pizza_set_filter (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_put (GtkPizza *pizza,
|
gtk_pizza_put (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child_info;
|
GtkPizzaChild *child_info;
|
||||||
|
|
||||||
@@ -311,10 +301,10 @@ gtk_pizza_put (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_move (GtkPizza *pizza,
|
gtk_pizza_move (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y)
|
gint y)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -345,10 +335,10 @@ gtk_pizza_move (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_resize (GtkPizza *pizza,
|
gtk_pizza_resize (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -381,12 +371,12 @@ gtk_pizza_resize (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_size (GtkPizza *pizza,
|
gtk_pizza_set_size (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -539,7 +529,7 @@ gtk_pizza_realize (GtkWidget *widget)
|
|||||||
|
|
||||||
widget->style = gtk_style_attach (widget->style, widget->window);
|
widget->style = gtk_style_attach (widget->style, widget->window);
|
||||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
||||||
gtk_style_set_background (widget->style, pizza->bin_window, GTK_STATE_NORMAL);
|
gtk_style_set_background (widget->style, pizza->bin_window, GTK_STATE_NORMAL );
|
||||||
|
|
||||||
/* add filters for intercepting visibility and expose events */
|
/* add filters for intercepting visibility and expose events */
|
||||||
gdk_window_add_filter (widget->window, gtk_pizza_main_filter, pizza);
|
gdk_window_add_filter (widget->window, gtk_pizza_main_filter, pizza);
|
||||||
@@ -579,7 +569,7 @@ gtk_pizza_unrealize (GtkWidget *widget)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_size_request (GtkWidget *widget,
|
gtk_pizza_size_request (GtkWidget *widget,
|
||||||
GtkRequisition *requisition)
|
GtkRequisition *requisition)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -612,7 +602,7 @@ gtk_pizza_size_request (GtkWidget *widget,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_size_allocate (GtkWidget *widget,
|
gtk_pizza_size_allocate (GtkWidget *widget,
|
||||||
GtkAllocation *allocation)
|
GtkAllocation *allocation)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
gint border;
|
gint border;
|
||||||
@@ -660,70 +650,17 @@ gtk_pizza_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_draw (GtkWidget *widget,
|
gtk_pizza_draw (GtkWidget *widget,
|
||||||
GdkRectangle *area)
|
GdkRectangle *area)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
/* We handle all draws events in window.cpp now. */
|
||||||
GtkPizzaChild *child;
|
return;
|
||||||
GdkRectangle child_area;
|
|
||||||
GList *children;
|
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
|
||||||
g_return_if_fail (GTK_IS_PIZZA (widget));
|
|
||||||
|
|
||||||
pizza = GTK_PIZZA (widget);
|
|
||||||
|
|
||||||
children = pizza->children;
|
|
||||||
if ( !(GTK_WIDGET_APP_PAINTABLE (widget)) &&
|
|
||||||
(pizza->clear_on_draw))
|
|
||||||
{
|
|
||||||
gdk_window_clear_area( pizza->bin_window,
|
|
||||||
area->x, area->y, area->width, area->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
child = children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
if (gtk_widget_intersect (child->widget, area, &child_area))
|
|
||||||
gtk_widget_draw (child->widget, &child_area);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
gtk_pizza_expose (GtkWidget *widget,
|
gtk_pizza_expose (GtkWidget *widget,
|
||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
/* We handle all expose events in window.cpp now. */
|
||||||
GtkPizzaChild *child;
|
|
||||||
GdkEventExpose child_event;
|
|
||||||
GList *children;
|
|
||||||
|
|
||||||
g_return_val_if_fail (widget != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
|
||||||
g_return_val_if_fail (event != NULL, FALSE);
|
|
||||||
|
|
||||||
pizza = GTK_PIZZA (widget);
|
|
||||||
|
|
||||||
if (event->window != pizza->bin_window)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
children = pizza->children;
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
child = children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
child_event = *event;
|
|
||||||
|
|
||||||
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
|
||||||
GTK_WIDGET_DRAWABLE (child->widget) &&
|
|
||||||
gtk_widget_intersect (child->widget, &event->area, &child_event.area))
|
|
||||||
{
|
|
||||||
gtk_widget_event (child->widget, (GdkEvent*) &child_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -740,7 +677,7 @@ gtk_pizza_add (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_remove (GtkContainer *container,
|
gtk_pizza_remove (GtkContainer *container,
|
||||||
GtkWidget *widget)
|
GtkWidget *widget)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -782,9 +719,9 @@ gtk_pizza_remove (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_forall (GtkContainer *container,
|
gtk_pizza_forall (GtkContainer *container,
|
||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data)
|
gpointer callback_data)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -812,7 +749,7 @@ gtk_pizza_forall (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_position_child (GtkPizza *pizza,
|
gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child)
|
GtkPizzaChild *child)
|
||||||
{
|
{
|
||||||
gint x;
|
gint x;
|
||||||
gint y;
|
gint y;
|
||||||
@@ -844,7 +781,7 @@ gtk_pizza_position_child (GtkPizza *pizza,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_allocate_child (GtkPizza *pizza,
|
gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child)
|
GtkPizzaChild *child)
|
||||||
{
|
{
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
GtkRequisition requisition;
|
GtkRequisition requisition;
|
||||||
@@ -1166,6 +1103,9 @@ gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
pizza = GTK_PIZZA (data);
|
pizza = GTK_PIZZA (data);
|
||||||
|
|
||||||
|
if (!pizza->use_filter)
|
||||||
|
return GDK_FILTER_CONTINUE;
|
||||||
|
|
||||||
switch (xevent->type)
|
switch (xevent->type)
|
||||||
{
|
{
|
||||||
case Expose:
|
case Expose:
|
||||||
@@ -1210,6 +1150,9 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
xevent = (XEvent *)gdk_xevent;
|
xevent = (XEvent *)gdk_xevent;
|
||||||
pizza = GTK_PIZZA (data);
|
pizza = GTK_PIZZA (data);
|
||||||
|
|
||||||
|
if (!pizza->use_filter)
|
||||||
|
return GDK_FILTER_CONTINUE;
|
||||||
|
|
||||||
if (xevent->type == VisibilityNotify)
|
if (xevent->type == VisibilityNotify)
|
||||||
{
|
{
|
||||||
|
@@ -381,10 +381,13 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
|
|||||||
// "expose_event" of m_widget
|
// "expose_event" of m_widget
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_own_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
gint gtk_window_own_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
||||||
{
|
{
|
||||||
if (gdk_event->count > 0) return;
|
if (gdk_event->count > 0) return FALSE;
|
||||||
|
|
||||||
draw_frame( widget, win );
|
draw_frame( widget, win );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -610,12 +613,18 @@ static long map_to_wx_keysym( KeySym keysym )
|
|||||||
// "expose_event" of m_wxwindow
|
// "expose_event" of m_wxwindow
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
|
static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
|
if (win->m_queuedFullRedraw)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (win->GetName() == wxT("grid window"))
|
if (win->GetName() == wxT("htmlWindow"))
|
||||||
{
|
{
|
||||||
wxPrintf( wxT("OnExpose from ") );
|
wxPrintf( wxT("OnExpose from ") );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
@@ -634,10 +643,7 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
|
|||||||
|
|
||||||
|
|
||||||
if (gdk_event->count > 0)
|
if (gdk_event->count > 0)
|
||||||
return;
|
return TRUE;
|
||||||
|
|
||||||
if (!win->m_hasVMT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
wxEraseEvent eevent( win->GetId() );
|
wxEraseEvent eevent( win->GetId() );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
@@ -648,25 +654,85 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
|
|||||||
win->GetEventHandler()->ProcessEvent( event );
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
win->GetUpdateRegion().Clear();
|
win->GetUpdateRegion().Clear();
|
||||||
|
|
||||||
|
/* The following code will result in all window-less widgets
|
||||||
|
being redrawn if the wxWindows class is given a chance to
|
||||||
|
paint *anything* because it will then be allowed to paint
|
||||||
|
over the window-less widgets */
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA (widget);
|
||||||
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
|
children = children->next;
|
||||||
|
|
||||||
|
GdkEventExpose child_event = *gdk_event;
|
||||||
|
|
||||||
|
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
||||||
|
GTK_WIDGET_DRAWABLE (child->widget))
|
||||||
|
{
|
||||||
|
child_event.area.x = child->widget->allocation.x;
|
||||||
|
child_event.area.y = child->widget->allocation.y;
|
||||||
|
child_event.area.width = child->widget->allocation.width;
|
||||||
|
child_event.area.height = child->widget->allocation.height;
|
||||||
|
gtk_widget_event (child->widget, (GdkEvent*) &child_event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// "event" of m_wxwindow
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/* GTK thinks it is clever and filters out a certain amount of "unneeded"
|
||||||
|
expose events. We need them, of course, so we override the main event
|
||||||
|
procedure in GtkWidget by giving our own handler for all system events,
|
||||||
|
looking for the expose events and then we can always send them. */
|
||||||
|
|
||||||
|
gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, wxWindow *win )
|
||||||
|
{
|
||||||
|
if (event->type == GDK_EXPOSE)
|
||||||
|
{
|
||||||
|
gint ret = gtk_window_expose_callback( widget, event, win );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "draw" of m_wxwindow
|
// "draw" of m_wxwindow
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
/* This callback is a complete replacement of the gtk_pizza_draw() function,
|
||||||
GdkRectangle *rect, wxWindow *win )
|
which disabled. */
|
||||||
|
|
||||||
|
static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
if ((rect->x == 0) && (rect->y == 0) && (rect->width <= 1) && (rect->height <= 1))
|
if (win->m_queuedFullRedraw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA (widget);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (win->GetName() == wxT("grid window"))
|
if (win->GetName() == wxT("htmlWindow"))
|
||||||
{
|
{
|
||||||
wxPrintf( wxT("OnDraw from ") );
|
wxPrintf( wxT("OnDraw from ") );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
@@ -677,13 +743,10 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
(int)rect->height );
|
(int)rect->height );
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
win->GetUpdateRegion().Union( rect->x, rect->y,
|
win->GetUpdateRegion().Union( rect->x, rect->y,
|
||||||
rect->width, rect->height );
|
rect->width, rect->height );
|
||||||
|
|
||||||
if (!win->m_hasVMT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
wxEraseEvent eevent( win->GetId() );
|
wxEraseEvent eevent( win->GetId() );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
@@ -693,6 +756,17 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
win->GetEventHandler()->ProcessEvent( event );
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
win->GetUpdateRegion().Clear();
|
win->GetUpdateRegion().Clear();
|
||||||
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
|
children = children->next;
|
||||||
|
|
||||||
|
GdkRectangle child_area;
|
||||||
|
if (gtk_widget_intersect (child->widget, rect, &child_area))
|
||||||
|
gtk_widget_draw (child->widget, (GdkRectangle*) NULL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1974,6 +2048,9 @@ void wxWindow::Init()
|
|||||||
m_isFrame = FALSE;
|
m_isFrame = FALSE;
|
||||||
m_acceptsFocus = FALSE;
|
m_acceptsFocus = FALSE;
|
||||||
|
|
||||||
|
m_clipPaintRegion = FALSE;
|
||||||
|
m_queuedFullRedraw = FALSE;
|
||||||
|
|
||||||
m_cursor = *wxSTANDARD_CURSOR;
|
m_cursor = *wxSTANDARD_CURSOR;
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
#ifdef HAVE_XIM
|
||||||
@@ -2008,21 +2085,12 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_insertCallback = wxInsertChildInWindow;
|
m_insertCallback = wxInsertChildInWindow;
|
||||||
|
|
||||||
m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
|
m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
|
||||||
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
|
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( m_widget, wxT("wxWindow::m_widget"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
|
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( scrolledWindow->hscrollbar, wxT("wxWindow::hsrcollbar"), name );
|
|
||||||
debug_focus_in( scrolledWindow->vscrollbar, wxT("wxWindow::vsrcollbar"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
|
GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
|
||||||
scroll_class->scrollbar_spacing = 0;
|
scroll_class->scrollbar_spacing = 0;
|
||||||
|
|
||||||
@@ -2033,10 +2101,6 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
m_wxwindow = gtk_pizza_new();
|
m_wxwindow = gtk_pizza_new();
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( m_wxwindow, wxT("wxWindow::m_wxwindow"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
|
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
|
||||||
|
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
#if (GTK_MINOR_VERSION > 0)
|
||||||
@@ -2221,6 +2285,9 @@ void wxWindow::PostCreation()
|
|||||||
if (!m_noExpose)
|
if (!m_noExpose)
|
||||||
{
|
{
|
||||||
/* these get reported to wxWindows -> wxPaintEvent */
|
/* these get reported to wxWindows -> wxPaintEvent */
|
||||||
|
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_connect( GTK_OBJECT(m_wxwindow), "expose_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
|
||||||
|
|
||||||
@@ -2320,6 +2387,24 @@ bool wxWindow::Destroy()
|
|||||||
|
|
||||||
void wxWindow::DoMoveWindow(int x, int y, int width, int height)
|
void wxWindow::DoMoveWindow(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
if (m_wxwindow && GTK_PIZZA(m_wxwindow)->bin_window)
|
||||||
|
{
|
||||||
|
/* Normally, GTK will send expose events only for the regions
|
||||||
|
which actually got exposed. Sadly, wxMSW invalidates
|
||||||
|
the whole window so we have to do that, too. We could
|
||||||
|
simply add a complete refresh, but we would then get
|
||||||
|
the normal GTK expose events in surplus, so we shut
|
||||||
|
off the expose events and schedule a full redraw to
|
||||||
|
be done in OnInternalIdle, where we restore the handling
|
||||||
|
of expose events. */
|
||||||
|
|
||||||
|
m_queuedFullRedraw = TRUE;
|
||||||
|
|
||||||
|
GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window );
|
||||||
|
mask = (GdkEventMask)(mask & ~GDK_EXPOSURE_MASK);
|
||||||
|
gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask );
|
||||||
|
}
|
||||||
|
|
||||||
gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height );
|
gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2330,7 +2415,7 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
|
|||||||
|
|
||||||
if (m_resizing) return; /* I don't like recursions */
|
if (m_resizing) return; /* I don't like recursions */
|
||||||
m_resizing = TRUE;
|
m_resizing = TRUE;
|
||||||
|
|
||||||
if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
|
if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
|
||||||
{
|
{
|
||||||
/* don't set the size for children of wxNotebook, just take the values. */
|
/* don't set the size for children of wxNotebook, just take the values. */
|
||||||
@@ -2391,6 +2476,12 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
|
|||||||
|
|
||||||
if (m_hasScrolling)
|
if (m_hasScrolling)
|
||||||
{
|
{
|
||||||
|
/* Sometimes the client area changes size without the
|
||||||
|
whole windows's size changing, but if the whole
|
||||||
|
windows's size doesn't change, no wxSizeEvent will
|
||||||
|
normally be sent. Here we add an extra test if
|
||||||
|
the client test has been changed and this will
|
||||||
|
be used then. */
|
||||||
GetClientSize( &m_oldClientWidth, &m_oldClientHeight );
|
GetClientSize( &m_oldClientWidth, &m_oldClientHeight );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2461,6 +2552,27 @@ void wxWindow::OnInternalIdle()
|
|||||||
}
|
}
|
||||||
|
|
||||||
UpdateWindowUI();
|
UpdateWindowUI();
|
||||||
|
|
||||||
|
if (m_queuedFullRedraw)
|
||||||
|
{
|
||||||
|
/* See also wxWindow::DoMoveWindow for explanation of this code. What
|
||||||
|
we test here is if the requested size of the window is the same as
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
m_queuedFullRedraw = FALSE;
|
||||||
|
m_updateRegion.Clear();
|
||||||
|
m_updateRegion.Union( 0,0,m_width,m_height );
|
||||||
|
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
||||||
|
|
||||||
|
GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window );
|
||||||
|
mask = (GdkEventMask)(mask | GDK_EXPOSURE_MASK);
|
||||||
|
gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindow::DoGetSize( int *width, int *height ) const
|
void wxWindow::DoGetSize( int *width, int *height ) const
|
||||||
@@ -2898,37 +3010,65 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
|
|||||||
{
|
{
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
gboolean old_clear = pizza->clear_on_draw;
|
gboolean old_clear = pizza->clear_on_draw;
|
||||||
gtk_pizza_set_clear( pizza, FALSE );
|
gtk_pizza_set_clear( pizza, FALSE );
|
||||||
|
|
||||||
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
||||||
|
|
||||||
gtk_pizza_set_clear( pizza, old_clear );
|
gtk_pizza_set_clear( pizza, old_clear );
|
||||||
|
*/
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
gdk_event.area.x = 0;
|
||||||
|
gdk_event.area.y = 0;
|
||||||
|
gdk_event.area.width = m_wxwindow->allocation.width;
|
||||||
|
gdk_event.area.height = m_wxwindow->allocation.height;
|
||||||
|
gtk_window_expose_callback( m_wxwindow, &gdk_event, this );
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
|
gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GdkRectangle gdk_rect;
|
|
||||||
gdk_rect.x = rect->x;
|
|
||||||
gdk_rect.y = rect->y;
|
|
||||||
gdk_rect.width = rect->width;
|
|
||||||
gdk_rect.height = rect->height;
|
|
||||||
|
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
gboolean old_clear = pizza->clear_on_draw;
|
gboolean old_clear = pizza->clear_on_draw;
|
||||||
gtk_pizza_set_clear( pizza, FALSE );
|
gtk_pizza_set_clear( pizza, FALSE );
|
||||||
|
|
||||||
|
GdkRectangle gdk_rect;
|
||||||
|
gdk_rect.x = rect->x;
|
||||||
|
gdk_rect.y = rect->y;
|
||||||
|
gdk_rect.width = rect->width;
|
||||||
|
gdk_rect.height = rect->height;
|
||||||
gtk_widget_draw( m_wxwindow, &gdk_rect );
|
gtk_widget_draw( m_wxwindow, &gdk_rect );
|
||||||
|
gtk_window_draw_callback( m_wxwindow, &gdk_rect, this );
|
||||||
|
|
||||||
gtk_pizza_set_clear( pizza, old_clear );
|
gtk_pizza_set_clear( pizza, old_clear );
|
||||||
|
*/
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
gdk_event.area.x = rect->x;
|
||||||
|
gdk_event.area.y = rect->y;
|
||||||
|
gdk_event.area.width = rect->width;
|
||||||
|
gdk_event.area.height = rect->height;
|
||||||
|
gtk_window_expose_callback( m_wxwindow, &gdk_event, this );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
GdkRectangle gdk_rect;
|
||||||
|
gdk_rect.x = rect->x;
|
||||||
|
gdk_rect.y = rect->y;
|
||||||
|
gdk_rect.width = rect->width;
|
||||||
|
gdk_rect.height = rect->height;
|
||||||
gtk_widget_draw( m_widget, &gdk_rect );
|
gtk_widget_draw( m_widget, &gdk_rect );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3452,7 +3592,9 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
|
|||||||
|
|
||||||
if ((dx == 0) && (dy == 0)) return;
|
if ((dx == 0) && (dy == 0)) return;
|
||||||
|
|
||||||
|
m_clipPaintRegion = TRUE;
|
||||||
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
||||||
|
m_clipPaintRegion = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (m_children.GetCount() > 0)
|
if (m_children.GetCount() > 0)
|
||||||
|
@@ -95,8 +95,8 @@ bool wxYield()
|
|||||||
|
|
||||||
if (has_idle)
|
if (has_idle)
|
||||||
{
|
{
|
||||||
/* re-add idle handler */
|
/* re-add idle handler (very low priority) */
|
||||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
wxTheApp->m_idleTag = gtk_idle_add_priority( 500, wxapp_idle_callback, (gpointer) NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
// disable log flushing from here because a call to wxYield() shouldn't
|
// disable log flushing from here because a call to wxYield() shouldn't
|
||||||
@@ -177,9 +177,9 @@ void wxapp_install_idle_handler()
|
|||||||
indicating that the idle is over. It may also
|
indicating that the idle is over. It may also
|
||||||
get called from other thread for sending events
|
get called from other thread for sending events
|
||||||
to the main thread (and processing these in
|
to the main thread (and processing these in
|
||||||
idle time). */
|
idle time). Very low priority. */
|
||||||
|
|
||||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
wxTheApp->m_idleTag = gtk_idle_add_priority( 500, wxapp_idle_callback, (gpointer) NULL );
|
||||||
|
|
||||||
g_isIdle = FALSE;
|
g_isIdle = FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -2019,7 +2019,10 @@ wxPaintDC::wxPaintDC()
|
|||||||
wxPaintDC::wxPaintDC( wxWindow *win )
|
wxPaintDC::wxPaintDC( wxWindow *win )
|
||||||
: wxWindowDC( win )
|
: wxWindowDC( win )
|
||||||
{
|
{
|
||||||
#if USE_PAINT_REGION
|
#if USE_PAINT_REGION
|
||||||
|
if (!win->m_clipPaintRegion)
|
||||||
|
return;
|
||||||
|
|
||||||
m_paintClippingRegion = win->GetUpdateRegion();
|
m_paintClippingRegion = win->GetUpdateRegion();
|
||||||
m_currentClippingRegion.Union( m_paintClippingRegion );
|
m_currentClippingRegion.Union( m_paintClippingRegion );
|
||||||
|
|
||||||
|
@@ -834,6 +834,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y),
|
|||||||
gtk_pizza_set_size( GTK_PIZZA(m_wxwindow),
|
gtk_pizza_set_size( GTK_PIZZA(m_wxwindow),
|
||||||
m_frameStatusBar->m_widget,
|
m_frameStatusBar->m_widget,
|
||||||
xx, yy, ww, hh );
|
xx, yy, ww, hh );
|
||||||
|
gtk_widget_draw( m_frameStatusBar->m_widget, (GdkRectangle*) NULL );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -30,7 +30,6 @@ extern "C" {
|
|||||||
(y >= G_MINSHORT) && (y <= G_MAXSHORT))
|
(y >= G_MINSHORT) && (y <= G_MAXSHORT))
|
||||||
|
|
||||||
typedef struct _GtkPizzaAdjData GtkPizzaAdjData;
|
typedef struct _GtkPizzaAdjData GtkPizzaAdjData;
|
||||||
typedef struct _GtkPizzaChild GtkPizzaChild;
|
|
||||||
|
|
||||||
struct _GtkPizzaAdjData
|
struct _GtkPizzaAdjData
|
||||||
{
|
{
|
||||||
@@ -38,22 +37,13 @@ struct _GtkPizzaAdjData
|
|||||||
gint dy;
|
gint dy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkPizzaChild
|
static void gtk_pizza_class_init (GtkPizzaClass *klass);
|
||||||
{
|
static void gtk_pizza_init (GtkPizza *pizza);
|
||||||
GtkWidget *widget;
|
|
||||||
gint x;
|
|
||||||
gint y;
|
|
||||||
gint width;
|
|
||||||
gint height;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void gtk_pizza_class_init (GtkPizzaClass *klass);
|
static void gtk_pizza_realize (GtkWidget *widget);
|
||||||
static void gtk_pizza_init (GtkPizza *pizza);
|
static void gtk_pizza_unrealize (GtkWidget *widget);
|
||||||
|
|
||||||
static void gtk_pizza_realize (GtkWidget *widget);
|
static void gtk_pizza_map (GtkWidget *widget);
|
||||||
static void gtk_pizza_unrealize (GtkWidget *widget);
|
|
||||||
|
|
||||||
static void gtk_pizza_map (GtkWidget *widget);
|
|
||||||
|
|
||||||
static void gtk_pizza_size_request (GtkWidget *widget,
|
static void gtk_pizza_size_request (GtkWidget *widget,
|
||||||
GtkRequisition *requisition);
|
GtkRequisition *requisition);
|
||||||
@@ -67,42 +57,42 @@ static void gtk_pizza_add (GtkContainer *container,
|
|||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
static void gtk_pizza_remove (GtkContainer *container,
|
static void gtk_pizza_remove (GtkContainer *container,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
static void gtk_pizza_forall (GtkContainer *container,
|
static void gtk_pizza_forall (GtkContainer *container,
|
||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data);
|
gpointer callback_data);
|
||||||
|
|
||||||
static void gtk_pizza_position_child (GtkPizza *pizza,
|
static void gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
static void gtk_pizza_position_children (GtkPizza *pizza);
|
static void gtk_pizza_position_children (GtkPizza *pizza);
|
||||||
|
|
||||||
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data);
|
gpointer cb_data);
|
||||||
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
||||||
gint dx,
|
gint dx,
|
||||||
gint dy);
|
gint dy);
|
||||||
|
|
||||||
|
|
||||||
static void gtk_pizza_expose_area (GtkPizza *pizza,
|
static void gtk_pizza_expose_area (GtkPizza *pizza,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
static void gtk_pizza_adjustment_changed (GtkAdjustment *adjustment,
|
static void gtk_pizza_adjustment_changed (GtkAdjustment *adjustment,
|
||||||
GtkPizza *pizza);
|
GtkPizza *pizza);
|
||||||
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static GdkFilterReturn gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
|
|
||||||
static GtkType gtk_pizza_child_type (GtkContainer *container);
|
static GtkType gtk_pizza_child_type (GtkContainer *container);
|
||||||
|
|
||||||
static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
static void gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
||||||
GtkAdjustment *hadj,
|
GtkAdjustment *hadj,
|
||||||
GtkAdjustment *vadj);
|
GtkAdjustment *vadj);
|
||||||
|
|
||||||
@@ -200,7 +190,7 @@ gtk_pizza_init (GtkPizza *pizza)
|
|||||||
pizza->visibility = GDK_VISIBILITY_PARTIAL;
|
pizza->visibility = GDK_VISIBILITY_PARTIAL;
|
||||||
|
|
||||||
pizza->clear_on_draw = TRUE;
|
pizza->clear_on_draw = TRUE;
|
||||||
pizza->use_filter = FALSE;
|
pizza->use_filter = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget*
|
||||||
@@ -222,7 +212,7 @@ gtk_pizza_scroll_set_adjustments (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
||||||
GtkMyShadowType type)
|
GtkMyShadowType type)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
@@ -241,8 +231,8 @@ gtk_pizza_set_shadow_type (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_clear (GtkPizza *pizza,
|
gtk_pizza_set_clear (GtkPizza *pizza,
|
||||||
gboolean clear)
|
gboolean clear)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
||||||
@@ -251,8 +241,8 @@ gtk_pizza_set_clear (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_filter (GtkPizza *pizza,
|
gtk_pizza_set_filter (GtkPizza *pizza,
|
||||||
gboolean use)
|
gboolean use)
|
||||||
{
|
{
|
||||||
g_return_if_fail (pizza != NULL);
|
g_return_if_fail (pizza != NULL);
|
||||||
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
g_return_if_fail (GTK_IS_PIZZA (pizza));
|
||||||
@@ -261,12 +251,12 @@ gtk_pizza_set_filter (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_put (GtkPizza *pizza,
|
gtk_pizza_put (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child_info;
|
GtkPizzaChild *child_info;
|
||||||
|
|
||||||
@@ -311,10 +301,10 @@ gtk_pizza_put (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_move (GtkPizza *pizza,
|
gtk_pizza_move (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y)
|
gint y)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -345,10 +335,10 @@ gtk_pizza_move (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_resize (GtkPizza *pizza,
|
gtk_pizza_resize (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -381,12 +371,12 @@ gtk_pizza_resize (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_pizza_set_size (GtkPizza *pizza,
|
gtk_pizza_set_size (GtkPizza *pizza,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GList *children;
|
GList *children;
|
||||||
@@ -539,7 +529,7 @@ gtk_pizza_realize (GtkWidget *widget)
|
|||||||
|
|
||||||
widget->style = gtk_style_attach (widget->style, widget->window);
|
widget->style = gtk_style_attach (widget->style, widget->window);
|
||||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
||||||
gtk_style_set_background (widget->style, pizza->bin_window, GTK_STATE_NORMAL);
|
gtk_style_set_background (widget->style, pizza->bin_window, GTK_STATE_NORMAL );
|
||||||
|
|
||||||
/* add filters for intercepting visibility and expose events */
|
/* add filters for intercepting visibility and expose events */
|
||||||
gdk_window_add_filter (widget->window, gtk_pizza_main_filter, pizza);
|
gdk_window_add_filter (widget->window, gtk_pizza_main_filter, pizza);
|
||||||
@@ -579,7 +569,7 @@ gtk_pizza_unrealize (GtkWidget *widget)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_size_request (GtkWidget *widget,
|
gtk_pizza_size_request (GtkWidget *widget,
|
||||||
GtkRequisition *requisition)
|
GtkRequisition *requisition)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -612,7 +602,7 @@ gtk_pizza_size_request (GtkWidget *widget,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_size_allocate (GtkWidget *widget,
|
gtk_pizza_size_allocate (GtkWidget *widget,
|
||||||
GtkAllocation *allocation)
|
GtkAllocation *allocation)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
gint border;
|
gint border;
|
||||||
@@ -660,70 +650,17 @@ gtk_pizza_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_draw (GtkWidget *widget,
|
gtk_pizza_draw (GtkWidget *widget,
|
||||||
GdkRectangle *area)
|
GdkRectangle *area)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
/* We handle all draws events in window.cpp now. */
|
||||||
GtkPizzaChild *child;
|
return;
|
||||||
GdkRectangle child_area;
|
|
||||||
GList *children;
|
|
||||||
|
|
||||||
g_return_if_fail (widget != NULL);
|
|
||||||
g_return_if_fail (GTK_IS_PIZZA (widget));
|
|
||||||
|
|
||||||
pizza = GTK_PIZZA (widget);
|
|
||||||
|
|
||||||
children = pizza->children;
|
|
||||||
if ( !(GTK_WIDGET_APP_PAINTABLE (widget)) &&
|
|
||||||
(pizza->clear_on_draw))
|
|
||||||
{
|
|
||||||
gdk_window_clear_area( pizza->bin_window,
|
|
||||||
area->x, area->y, area->width, area->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
child = children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
if (gtk_widget_intersect (child->widget, area, &child_area))
|
|
||||||
gtk_widget_draw (child->widget, &child_area);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
gtk_pizza_expose (GtkWidget *widget,
|
gtk_pizza_expose (GtkWidget *widget,
|
||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
/* We handle all expose events in window.cpp now. */
|
||||||
GtkPizzaChild *child;
|
|
||||||
GdkEventExpose child_event;
|
|
||||||
GList *children;
|
|
||||||
|
|
||||||
g_return_val_if_fail (widget != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
|
||||||
g_return_val_if_fail (event != NULL, FALSE);
|
|
||||||
|
|
||||||
pizza = GTK_PIZZA (widget);
|
|
||||||
|
|
||||||
if (event->window != pizza->bin_window)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
children = pizza->children;
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
child = children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
child_event = *event;
|
|
||||||
|
|
||||||
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
|
||||||
GTK_WIDGET_DRAWABLE (child->widget) &&
|
|
||||||
gtk_widget_intersect (child->widget, &event->area, &child_event.area))
|
|
||||||
{
|
|
||||||
gtk_widget_event (child->widget, (GdkEvent*) &child_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -740,7 +677,7 @@ gtk_pizza_add (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_remove (GtkContainer *container,
|
gtk_pizza_remove (GtkContainer *container,
|
||||||
GtkWidget *widget)
|
GtkWidget *widget)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -782,9 +719,9 @@ gtk_pizza_remove (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_forall (GtkContainer *container,
|
gtk_pizza_forall (GtkContainer *container,
|
||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data)
|
gpointer callback_data)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
@@ -812,7 +749,7 @@ gtk_pizza_forall (GtkContainer *container,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_position_child (GtkPizza *pizza,
|
gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child)
|
GtkPizzaChild *child)
|
||||||
{
|
{
|
||||||
gint x;
|
gint x;
|
||||||
gint y;
|
gint y;
|
||||||
@@ -844,7 +781,7 @@ gtk_pizza_position_child (GtkPizza *pizza,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_allocate_child (GtkPizza *pizza,
|
gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child)
|
GtkPizzaChild *child)
|
||||||
{
|
{
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
GtkRequisition requisition;
|
GtkRequisition requisition;
|
||||||
@@ -1166,6 +1103,9 @@ gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
pizza = GTK_PIZZA (data);
|
pizza = GTK_PIZZA (data);
|
||||||
|
|
||||||
|
if (!pizza->use_filter)
|
||||||
|
return GDK_FILTER_CONTINUE;
|
||||||
|
|
||||||
switch (xevent->type)
|
switch (xevent->type)
|
||||||
{
|
{
|
||||||
case Expose:
|
case Expose:
|
||||||
@@ -1210,6 +1150,9 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
xevent = (XEvent *)gdk_xevent;
|
xevent = (XEvent *)gdk_xevent;
|
||||||
pizza = GTK_PIZZA (data);
|
pizza = GTK_PIZZA (data);
|
||||||
|
|
||||||
|
if (!pizza->use_filter)
|
||||||
|
return GDK_FILTER_CONTINUE;
|
||||||
|
|
||||||
if (xevent->type == VisibilityNotify)
|
if (xevent->type == VisibilityNotify)
|
||||||
{
|
{
|
||||||
|
@@ -381,10 +381,13 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
|
|||||||
// "expose_event" of m_widget
|
// "expose_event" of m_widget
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_own_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
gint gtk_window_own_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
||||||
{
|
{
|
||||||
if (gdk_event->count > 0) return;
|
if (gdk_event->count > 0) return FALSE;
|
||||||
|
|
||||||
draw_frame( widget, win );
|
draw_frame( widget, win );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -610,12 +613,18 @@ static long map_to_wx_keysym( KeySym keysym )
|
|||||||
// "expose_event" of m_wxwindow
|
// "expose_event" of m_wxwindow
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxWindow *win )
|
static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_event, wxWindow *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
|
if (g_isIdle)
|
||||||
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
|
if (win->m_queuedFullRedraw)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (win->GetName() == wxT("grid window"))
|
if (win->GetName() == wxT("htmlWindow"))
|
||||||
{
|
{
|
||||||
wxPrintf( wxT("OnExpose from ") );
|
wxPrintf( wxT("OnExpose from ") );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
@@ -634,10 +643,7 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
|
|||||||
|
|
||||||
|
|
||||||
if (gdk_event->count > 0)
|
if (gdk_event->count > 0)
|
||||||
return;
|
return TRUE;
|
||||||
|
|
||||||
if (!win->m_hasVMT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
wxEraseEvent eevent( win->GetId() );
|
wxEraseEvent eevent( win->GetId() );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
@@ -648,25 +654,85 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
|
|||||||
win->GetEventHandler()->ProcessEvent( event );
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
win->GetUpdateRegion().Clear();
|
win->GetUpdateRegion().Clear();
|
||||||
|
|
||||||
|
/* The following code will result in all window-less widgets
|
||||||
|
being redrawn if the wxWindows class is given a chance to
|
||||||
|
paint *anything* because it will then be allowed to paint
|
||||||
|
over the window-less widgets */
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA (widget);
|
||||||
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
|
children = children->next;
|
||||||
|
|
||||||
|
GdkEventExpose child_event = *gdk_event;
|
||||||
|
|
||||||
|
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
||||||
|
GTK_WIDGET_DRAWABLE (child->widget))
|
||||||
|
{
|
||||||
|
child_event.area.x = child->widget->allocation.x;
|
||||||
|
child_event.area.y = child->widget->allocation.y;
|
||||||
|
child_event.area.width = child->widget->allocation.width;
|
||||||
|
child_event.area.height = child->widget->allocation.height;
|
||||||
|
gtk_widget_event (child->widget, (GdkEvent*) &child_event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// "event" of m_wxwindow
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/* GTK thinks it is clever and filters out a certain amount of "unneeded"
|
||||||
|
expose events. We need them, of course, so we override the main event
|
||||||
|
procedure in GtkWidget by giving our own handler for all system events,
|
||||||
|
looking for the expose events and then we can always send them. */
|
||||||
|
|
||||||
|
gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, wxWindow *win )
|
||||||
|
{
|
||||||
|
if (event->type == GDK_EXPOSE)
|
||||||
|
{
|
||||||
|
gint ret = gtk_window_expose_callback( widget, event, win );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "draw" of m_wxwindow
|
// "draw" of m_wxwindow
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
/* This callback is a complete replacement of the gtk_pizza_draw() function,
|
||||||
GdkRectangle *rect, wxWindow *win )
|
which disabled. */
|
||||||
|
|
||||||
|
static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win )
|
||||||
{
|
{
|
||||||
DEBUG_MAIN_THREAD
|
DEBUG_MAIN_THREAD
|
||||||
|
|
||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
if ((rect->x == 0) && (rect->y == 0) && (rect->width <= 1) && (rect->height <= 1))
|
if (win->m_queuedFullRedraw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA (widget);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (win->GetName() == wxT("grid window"))
|
if (win->GetName() == wxT("htmlWindow"))
|
||||||
{
|
{
|
||||||
wxPrintf( wxT("OnDraw from ") );
|
wxPrintf( wxT("OnDraw from ") );
|
||||||
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
|
||||||
@@ -677,13 +743,10 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
(int)rect->height );
|
(int)rect->height );
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
win->GetUpdateRegion().Union( rect->x, rect->y,
|
win->GetUpdateRegion().Union( rect->x, rect->y,
|
||||||
rect->width, rect->height );
|
rect->width, rect->height );
|
||||||
|
|
||||||
if (!win->m_hasVMT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
wxEraseEvent eevent( win->GetId() );
|
wxEraseEvent eevent( win->GetId() );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
@@ -693,6 +756,17 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
win->GetEventHandler()->ProcessEvent( event );
|
win->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
win->GetUpdateRegion().Clear();
|
win->GetUpdateRegion().Clear();
|
||||||
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
|
children = children->next;
|
||||||
|
|
||||||
|
GdkRectangle child_area;
|
||||||
|
if (gtk_widget_intersect (child->widget, rect, &child_area))
|
||||||
|
gtk_widget_draw (child->widget, (GdkRectangle*) NULL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1974,6 +2048,9 @@ void wxWindow::Init()
|
|||||||
m_isFrame = FALSE;
|
m_isFrame = FALSE;
|
||||||
m_acceptsFocus = FALSE;
|
m_acceptsFocus = FALSE;
|
||||||
|
|
||||||
|
m_clipPaintRegion = FALSE;
|
||||||
|
m_queuedFullRedraw = FALSE;
|
||||||
|
|
||||||
m_cursor = *wxSTANDARD_CURSOR;
|
m_cursor = *wxSTANDARD_CURSOR;
|
||||||
|
|
||||||
#ifdef HAVE_XIM
|
#ifdef HAVE_XIM
|
||||||
@@ -2008,21 +2085,12 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_insertCallback = wxInsertChildInWindow;
|
m_insertCallback = wxInsertChildInWindow;
|
||||||
|
|
||||||
m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
|
m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
|
||||||
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
|
GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( m_widget, wxT("wxWindow::m_widget"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
|
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( scrolledWindow->hscrollbar, wxT("wxWindow::hsrcollbar"), name );
|
|
||||||
debug_focus_in( scrolledWindow->vscrollbar, wxT("wxWindow::vsrcollbar"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
|
GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
|
||||||
scroll_class->scrollbar_spacing = 0;
|
scroll_class->scrollbar_spacing = 0;
|
||||||
|
|
||||||
@@ -2033,10 +2101,6 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
m_wxwindow = gtk_pizza_new();
|
m_wxwindow = gtk_pizza_new();
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
debug_focus_in( m_wxwindow, wxT("wxWindow::m_wxwindow"), name );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
|
gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
|
||||||
|
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
#if (GTK_MINOR_VERSION > 0)
|
||||||
@@ -2221,6 +2285,9 @@ void wxWindow::PostCreation()
|
|||||||
if (!m_noExpose)
|
if (!m_noExpose)
|
||||||
{
|
{
|
||||||
/* these get reported to wxWindows -> wxPaintEvent */
|
/* these get reported to wxWindows -> wxPaintEvent */
|
||||||
|
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_connect( GTK_OBJECT(m_wxwindow), "expose_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
|
||||||
|
|
||||||
@@ -2320,6 +2387,24 @@ bool wxWindow::Destroy()
|
|||||||
|
|
||||||
void wxWindow::DoMoveWindow(int x, int y, int width, int height)
|
void wxWindow::DoMoveWindow(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
if (m_wxwindow && GTK_PIZZA(m_wxwindow)->bin_window)
|
||||||
|
{
|
||||||
|
/* Normally, GTK will send expose events only for the regions
|
||||||
|
which actually got exposed. Sadly, wxMSW invalidates
|
||||||
|
the whole window so we have to do that, too. We could
|
||||||
|
simply add a complete refresh, but we would then get
|
||||||
|
the normal GTK expose events in surplus, so we shut
|
||||||
|
off the expose events and schedule a full redraw to
|
||||||
|
be done in OnInternalIdle, where we restore the handling
|
||||||
|
of expose events. */
|
||||||
|
|
||||||
|
m_queuedFullRedraw = TRUE;
|
||||||
|
|
||||||
|
GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window );
|
||||||
|
mask = (GdkEventMask)(mask & ~GDK_EXPOSURE_MASK);
|
||||||
|
gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask );
|
||||||
|
}
|
||||||
|
|
||||||
gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height );
|
gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2330,7 +2415,7 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
|
|||||||
|
|
||||||
if (m_resizing) return; /* I don't like recursions */
|
if (m_resizing) return; /* I don't like recursions */
|
||||||
m_resizing = TRUE;
|
m_resizing = TRUE;
|
||||||
|
|
||||||
if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
|
if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
|
||||||
{
|
{
|
||||||
/* don't set the size for children of wxNotebook, just take the values. */
|
/* don't set the size for children of wxNotebook, just take the values. */
|
||||||
@@ -2391,6 +2476,12 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
|
|||||||
|
|
||||||
if (m_hasScrolling)
|
if (m_hasScrolling)
|
||||||
{
|
{
|
||||||
|
/* Sometimes the client area changes size without the
|
||||||
|
whole windows's size changing, but if the whole
|
||||||
|
windows's size doesn't change, no wxSizeEvent will
|
||||||
|
normally be sent. Here we add an extra test if
|
||||||
|
the client test has been changed and this will
|
||||||
|
be used then. */
|
||||||
GetClientSize( &m_oldClientWidth, &m_oldClientHeight );
|
GetClientSize( &m_oldClientWidth, &m_oldClientHeight );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2461,6 +2552,27 @@ void wxWindow::OnInternalIdle()
|
|||||||
}
|
}
|
||||||
|
|
||||||
UpdateWindowUI();
|
UpdateWindowUI();
|
||||||
|
|
||||||
|
if (m_queuedFullRedraw)
|
||||||
|
{
|
||||||
|
/* See also wxWindow::DoMoveWindow for explanation of this code. What
|
||||||
|
we test here is if the requested size of the window is the same as
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
m_queuedFullRedraw = FALSE;
|
||||||
|
m_updateRegion.Clear();
|
||||||
|
m_updateRegion.Union( 0,0,m_width,m_height );
|
||||||
|
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
||||||
|
|
||||||
|
GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window );
|
||||||
|
mask = (GdkEventMask)(mask | GDK_EXPOSURE_MASK);
|
||||||
|
gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindow::DoGetSize( int *width, int *height ) const
|
void wxWindow::DoGetSize( int *width, int *height ) const
|
||||||
@@ -2898,37 +3010,65 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
|
|||||||
{
|
{
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
gboolean old_clear = pizza->clear_on_draw;
|
gboolean old_clear = pizza->clear_on_draw;
|
||||||
gtk_pizza_set_clear( pizza, FALSE );
|
gtk_pizza_set_clear( pizza, FALSE );
|
||||||
|
|
||||||
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
|
||||||
|
|
||||||
gtk_pizza_set_clear( pizza, old_clear );
|
gtk_pizza_set_clear( pizza, old_clear );
|
||||||
|
*/
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
gdk_event.area.x = 0;
|
||||||
|
gdk_event.area.y = 0;
|
||||||
|
gdk_event.area.width = m_wxwindow->allocation.width;
|
||||||
|
gdk_event.area.height = m_wxwindow->allocation.height;
|
||||||
|
gtk_window_expose_callback( m_wxwindow, &gdk_event, this );
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
|
gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GdkRectangle gdk_rect;
|
|
||||||
gdk_rect.x = rect->x;
|
|
||||||
gdk_rect.y = rect->y;
|
|
||||||
gdk_rect.width = rect->width;
|
|
||||||
gdk_rect.height = rect->height;
|
|
||||||
|
|
||||||
if (m_wxwindow)
|
if (m_wxwindow)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
gboolean old_clear = pizza->clear_on_draw;
|
gboolean old_clear = pizza->clear_on_draw;
|
||||||
gtk_pizza_set_clear( pizza, FALSE );
|
gtk_pizza_set_clear( pizza, FALSE );
|
||||||
|
|
||||||
|
GdkRectangle gdk_rect;
|
||||||
|
gdk_rect.x = rect->x;
|
||||||
|
gdk_rect.y = rect->y;
|
||||||
|
gdk_rect.width = rect->width;
|
||||||
|
gdk_rect.height = rect->height;
|
||||||
gtk_widget_draw( m_wxwindow, &gdk_rect );
|
gtk_widget_draw( m_wxwindow, &gdk_rect );
|
||||||
|
gtk_window_draw_callback( m_wxwindow, &gdk_rect, this );
|
||||||
|
|
||||||
gtk_pizza_set_clear( pizza, old_clear );
|
gtk_pizza_set_clear( pizza, old_clear );
|
||||||
|
*/
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
gdk_event.area.x = rect->x;
|
||||||
|
gdk_event.area.y = rect->y;
|
||||||
|
gdk_event.area.width = rect->width;
|
||||||
|
gdk_event.area.height = rect->height;
|
||||||
|
gtk_window_expose_callback( m_wxwindow, &gdk_event, this );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
GdkRectangle gdk_rect;
|
||||||
|
gdk_rect.x = rect->x;
|
||||||
|
gdk_rect.y = rect->y;
|
||||||
|
gdk_rect.width = rect->width;
|
||||||
|
gdk_rect.height = rect->height;
|
||||||
gtk_widget_draw( m_widget, &gdk_rect );
|
gtk_widget_draw( m_widget, &gdk_rect );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3452,7 +3592,9 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
|
|||||||
|
|
||||||
if ((dx == 0) && (dy == 0)) return;
|
if ((dx == 0) && (dy == 0)) return;
|
||||||
|
|
||||||
|
m_clipPaintRegion = TRUE;
|
||||||
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
||||||
|
m_clipPaintRegion = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (m_children.GetCount() > 0)
|
if (m_children.GetCount() > 0)
|
||||||
|
Reference in New Issue
Block a user