Undid the bin-incompatible change to wxSize.

Corrected the Mask() creation on 16-bit visuals.
 Applied the cool patch for gtk_pizza() to reduce
   unnecessarry paint events.
 Added bzip-dist to create better compressed archives.
 Added files.lst to source distribution.
 Bumped version to 2.2.1.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7737 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2000-07-13 16:27:59 +00:00
parent c3a6e88593
commit 5016f35584
10 changed files with 168 additions and 235 deletions

View File

@@ -130,12 +130,19 @@ INTLDIR = $(WXDIR)/locale
########################## Archive name ############################### ########################## Archive name ###############################
WXARCHIVE = @DISTDIR@-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tgz WXARCHIVE = @DISTDIR@-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.gz
WXGLARCHIVE = @DISTDIR@-gl-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tgz WXGLARCHIVE = @DISTDIR@-gl-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.gz
WXSAMPLES = wx$(TOOLKIT)-samples-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tgz WXSAMPLES = wx$(TOOLKIT)-samples-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.gz
WXDEMOS = wx$(TOOLKIT)-demos-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tgz WXDEMOS = wx$(TOOLKIT)-demos-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.gz
WXARCHIVE_BZIP = @DISTDIR@-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.bz2
WXGLARCHIVE_BZIP = @DISTDIR@-gl-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.bz2
WXSAMPLES_BZIP = wx$(TOOLKIT)-samples-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.bz2
WXDEMOS_BZIP = wx$(TOOLKIT)-demos-$(WX_MAJOR_VERSION_NUMBER).$(WX_MINOR_VERSION_NUMBER).$(WX_RELEASE_NUMBER).tar.bz2
DISTDIR = ./_dist_dir/@DISTDIR@ DISTDIR = ./_dist_dir/@DISTDIR@
############################## Files ################################## ############################## Files ##################################
WX_LINGUAS = `cd $(top_srcdir)/locale && ls *.mo 2> /dev/null | sed -n 's/\.mo//p'` WX_LINGUAS = `cd $(top_srcdir)/locale && ls *.mo 2> /dev/null | sed -n 's/\.mo//p'`
@@ -677,6 +684,7 @@ DEMOS_DIST: ALL_GUI_DIST
cp $(DEMODIR)/life/*.h $(DISTDIR)/demos/life cp $(DEMODIR)/life/*.h $(DISTDIR)/demos/life
cp $(DEMODIR)/life/*.xpm $(DISTDIR)/demos/life cp $(DEMODIR)/life/*.xpm $(DISTDIR)/demos/life
cp $(DEMODIR)/life/*.inc $(DISTDIR)/demos/life cp $(DEMODIR)/life/*.inc $(DISTDIR)/demos/life
cp $(DEMODIR)/life/*.lif $(DISTDIR)/demos/life
cp $(DEMODIR)/life/bitmaps/*.xpm $(DISTDIR)/demos/life/bitmaps cp $(DEMODIR)/life/bitmaps/*.xpm $(DISTDIR)/demos/life/bitmaps
mkdir $(DISTDIR)/demos/poem mkdir $(DISTDIR)/demos/poem
@@ -1222,6 +1230,7 @@ distclean:
$(RM) -r _dist_dir $(RM) -r _dist_dir
dist: @GUIDIST@ dist: @GUIDIST@
cp $(WXDIR)/src/files.lst $(DISTDIR)/src/
@echo "*** Creating wxWindows distribution in $(DISTDIR)..." @echo "*** Creating wxWindows distribution in $(DISTDIR)..."
cd _dist_dir; tar ch @DISTDIR@ | gzip -f9 > $(WXARCHIVE); mv $(WXARCHIVE) .. cd _dist_dir; tar ch @DISTDIR@ | gzip -f9 > $(WXARCHIVE); mv $(WXARCHIVE) ..
@if test "$(USE_GUI)" = 1; then \ @if test "$(USE_GUI)" = 1; then \
@@ -1234,6 +1243,20 @@ dist: @GUIDIST@
mv wxDemos demos; \ mv wxDemos demos; \
fi fi
bzip-dist: @GUIDIST@
cp $(WXDIR)/src/files.lst $(DISTDIR)/src/
@echo "*** Creating wxWindows distribution in $(DISTDIR)..."
cd _dist_dir; tar ch @DISTDIR@ | bzip2 -f9 > $(WXARCHIVE_BZIP); mv $(WXARCHIVE_BZIP) ..
@if test "$(USE_GUI)" = 1; then \
cd $(DISTDIR); \
mv samples wxSamples; \
tar ch wxSamples | bzip2 -f9 > ../../$(WXSAMPLES_BZIP); \
mv wxSamples samples; \
mv demos wxDemos; \
tar ch wxDemos | bzip2 -f9 > ../../$(WXDEMOS_BZIP); \
mv wxDemos demos; \
fi
debian-dist: @GUIDIST@ MANUAL_DIST PYTHON_DIST debian-dist: @GUIDIST@ MANUAL_DIST PYTHON_DIST
mkdir $(DISTDIR)/debian mkdir $(DISTDIR)/debian
-cp $(WXDIR)/debian/* $(DISTDIR)/debian -cp $(WXDIR)/debian/* $(DISTDIR)/debian

2
configure vendored
View File

@@ -907,7 +907,7 @@ test "$host_alias" != "$target_alias" &&
WX_MAJOR_VERSION_NUMBER=2 WX_MAJOR_VERSION_NUMBER=2
WX_MINOR_VERSION_NUMBER=2 WX_MINOR_VERSION_NUMBER=2
WX_RELEASE_NUMBER=0 WX_RELEASE_NUMBER=1
WX_INTERFACE_AGE=0 WX_INTERFACE_AGE=0
WX_BINARY_AGE=0 WX_BINARY_AGE=0

View File

@@ -457,7 +457,7 @@ dnl WX_INTERFACE_AGE = 0
WX_MAJOR_VERSION_NUMBER=2 WX_MAJOR_VERSION_NUMBER=2
WX_MINOR_VERSION_NUMBER=2 WX_MINOR_VERSION_NUMBER=2
WX_RELEASE_NUMBER=0 WX_RELEASE_NUMBER=1
WX_INTERFACE_AGE=0 WX_INTERFACE_AGE=0
WX_BINARY_AGE=0 WX_BINARY_AGE=0

View File

@@ -197,8 +197,8 @@ public:
bool operator==(const wxSize& sz) const { return x == sz.x && y == sz.y; } bool operator==(const wxSize& sz) const { return x == sz.x && y == sz.y; }
// FIXME are these really useful? If they're, we should have += &c as well // FIXME are these really useful? If they're, we should have += &c as well
wxSize operator+(const wxSize& sz) const { return wxSize(x + sz.x, y + sz.y); } wxSize operator+(const wxSize& sz) { return wxSize(x + sz.x, y + sz.y); }
wxSize operator-(const wxSize& sz) const { return wxSize(x - sz.x, y - sz.y); } wxSize operator-(const wxSize& sz) { return wxSize(x - sz.x, y - sz.y); }
// accessors // accessors
void Set(int xx, int yy) { x = xx; y = yy; } void Set(int xx, int yy) { x = xx; y = yy; }

View File

@@ -15,8 +15,8 @@
// Bump-up with each new version // Bump-up with each new version
#define wxMAJOR_VERSION 2 #define wxMAJOR_VERSION 2
#define wxMINOR_VERSION 2 #define wxMINOR_VERSION 2
#define wxRELEASE_NUMBER 0 #define wxRELEASE_NUMBER 1
#define wxVERSION_STRING _T("wxWindows 2.2.0") #define wxVERSION_STRING _T("wxWindows 2.2.1")
#define wxVERSION_NUMBER (wxMAJOR_VERSION * 1000) + (wxMINOR_VERSION * 100) + wxRELEASE_NUMBER #define wxVERSION_NUMBER (wxMAJOR_VERSION * 1000) + (wxMINOR_VERSION * 100) + wxRELEASE_NUMBER
#define wxBETA_NUMBER 0 #define wxBETA_NUMBER 0
#define wxVERSION_FLOAT wxMAJOR_VERSION + (wxMINOR_VERSION/10.0) + (wxRELEASE_NUMBER/100.0) + (wxBETA_NUMBER/10000.0) #define wxVERSION_FLOAT wxMAJOR_VERSION + (wxMINOR_VERSION/10.0) + (wxRELEASE_NUMBER/100.0) + (wxBETA_NUMBER/10000.0)

View File

@@ -110,14 +110,14 @@ bool wxMask::Create( const wxBitmap& bitmap,
if (bpp == 15) if (bpp == 15)
{ {
red = red & 0xf8; red = red & 0xf8;
blue = blue & 0xf8;
green = green & 0xf8; green = green & 0xf8;
blue = blue & 0xf8;
} }
if (bpp == 16) if (bpp == 16)
{ {
red = red & 0xf8; red = red & 0xf8;
blue = blue & 0xfc; green = green & 0xfc;
green = green & 0xf8; blue = blue & 0xf8;
} }
color.red = 0; color.red = 0;

View File

@@ -997,12 +997,12 @@ gtk_pizza_expose_predicate (Display *display,
XEvent *xevent, XEvent *xevent,
XPointer arg) XPointer arg)
{ {
if ((xevent->type == Expose) || if ((xevent->type == Expose) ||
((xevent->xany.window == *(Window *)arg) && ((xevent->xany.window == *(Window *)arg) &&
(xevent->type == ConfigureNotify))) (xevent->type == ConfigureNotify)))
return True; return True;
else else
return False; return False;
} }
/* This is the main routine to do the scrolling. Scrolling is /* This is the main routine to do the scrolling. Scrolling is
@@ -1020,40 +1020,40 @@ gtk_pizza_expose_predicate (Display *display,
void void
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy) gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
{ {
GtkWidget *widget; GtkWidget *widget;
XEvent xevent; XEvent xevent;
gint x,y,w,h,border; gint x,y,w,h,border;
widget = GTK_WIDGET (pizza); widget = GTK_WIDGET (pizza);
pizza->xoffset += dx; pizza->xoffset += dx;
pizza->yoffset += dy; pizza->yoffset += dy;
if (!GTK_WIDGET_MAPPED (pizza)) if (!GTK_WIDGET_MAPPED (pizza))
{ {
gtk_pizza_position_children (pizza); gtk_pizza_position_children (pizza);
return; return;
} }
gtk_pizza_adjust_allocations (pizza, -dx, -dy); gtk_pizza_adjust_allocations (pizza, -dx, -dy);
if (pizza->shadow_type == GTK_MYSHADOW_NONE) if (pizza->shadow_type == GTK_MYSHADOW_NONE)
border = 0; border = 0;
else else
if (pizza->shadow_type == GTK_MYSHADOW_THIN) if (pizza->shadow_type == GTK_MYSHADOW_THIN)
border = 1; border = 1;
else else
border = 2; border = 2;
x = 0; x = 0;
y = 0; y = 0;
w = widget->allocation.width - 2*border; w = widget->allocation.width - 2*border;
h = widget->allocation.height - 2*border; h = widget->allocation.height - 2*border;
if (dx > 0) if (dx > 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_resize (pizza->bin_window, gdk_window_resize (pizza->bin_window,
w + dx, w + dx,
@@ -1061,20 +1061,14 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
gdk_window_move (pizza->bin_window, x-dx, y); gdk_window_move (pizza->bin_window, x-dx, y);
gdk_window_move_resize (pizza->bin_window, x, y, w, h ); gdk_window_move_resize (pizza->bin_window, x, y, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
MAX ((gint)w - dx, 0),
0,
MIN (dx, w),
h);
} }
else if (dx < 0) else if (dx < 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x + dx, x + dx,
@@ -1084,102 +1078,73 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
gdk_window_move (pizza->bin_window, x, y); gdk_window_move (pizza->bin_window, x, y);
gdk_window_resize (pizza->bin_window, w, h ); gdk_window_resize (pizza->bin_window, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
0,
MIN (-dx, w),
h);
} }
if (dy > 0) if (dy > 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_resize (pizza->bin_window, w, h + dy); gdk_window_resize (pizza->bin_window, w, h + dy);
gdk_window_move (pizza->bin_window, x, y-dy); gdk_window_move (pizza->bin_window, x, y-dy);
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x, y, w, h ); x, y, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
MAX ((gint)h - dy, 0),
w,
MIN (dy, h));
} }
else if (dy < 0) else if (dy < 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x, y+dy, w, h - dy ); x, y+dy, w, h - dy );
gdk_window_move (pizza->bin_window, x, y); gdk_window_move (pizza->bin_window, x, y);
gdk_window_resize (pizza->bin_window, w, h ); gdk_window_resize (pizza->bin_window, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
0,
w,
MIN (-dy, (gint)h));
} }
gtk_pizza_position_children (pizza); gtk_pizza_position_children (pizza);
/* We have to make sure that all exposes from this scroll get gdk_flush();
* processed before we scroll again, or the expose events will while (XCheckIfEvent(GDK_WINDOW_XDISPLAY (pizza->bin_window),
* have invalid coordinates. &xevent,
* gtk_pizza_expose_predicate,
* We also do expose events for other windows, since otherwise (XPointer)&GDK_WINDOW_XWINDOW (pizza->bin_window)))
* their updating will fall behind the scrolling
*
* This also avoids a problem in pre-1.0 GTK where filters don't
* have access to configure events that were compressed.
*/
gdk_flush();
while (XCheckIfEvent(GDK_WINDOW_XDISPLAY (pizza->bin_window),
&xevent,
gtk_pizza_expose_predicate,
(XPointer)&GDK_WINDOW_XWINDOW (pizza->bin_window)))
{ {
GdkEvent event; GdkEvent event;
GtkWidget *event_widget; GtkWidget *event_widget;
if ((xevent.xany.window == GDK_WINDOW_XWINDOW (pizza->bin_window)) && if ((xevent.xany.window == GDK_WINDOW_XWINDOW (pizza->bin_window)) )
(gtk_pizza_filter (&xevent, &event, pizza) == GDK_FILTER_REMOVE)) gtk_pizza_filter (&xevent, &event, pizza);
continue;
if (xevent.type == Expose) if (xevent.type == Expose)
{ {
event.expose.window = gdk_window_lookup (xevent.xany.window); event.expose.window = gdk_window_lookup (xevent.xany.window);
gdk_window_get_user_data (event.expose.window, gdk_window_get_user_data (event.expose.window,
(gpointer *)&event_widget); (gpointer *)&event_widget);
if (event_widget) if (event_widget)
{ {
event.expose.type = GDK_EXPOSE; event.expose.type = GDK_EXPOSE;
event.expose.area.x = xevent.xexpose.x; event.expose.area.x = xevent.xexpose.x;
event.expose.area.y = xevent.xexpose.y; event.expose.area.y = xevent.xexpose.y;
event.expose.area.width = xevent.xexpose.width; event.expose.area.width = xevent.xexpose.width;
event.expose.area.height = xevent.xexpose.height; event.expose.area.height = xevent.xexpose.height;
event.expose.count = xevent.xexpose.count; event.expose.count = xevent.xexpose.count;
gdk_window_ref (event.expose.window); gdk_window_ref (event.expose.window);
gtk_widget_event (event_widget, &event); gtk_widget_event (event_widget, &event);
gdk_window_unref (event.expose.window); gdk_window_unref (event.expose.window);
} }
} }
} }
@@ -1210,25 +1175,17 @@ gtk_pizza_filter (GdkXEvent *gdk_xevent,
if (!pizza->use_filter) if (!pizza->use_filter)
return GDK_FILTER_CONTINUE; return GDK_FILTER_CONTINUE;
switch (xevent->type) switch (xevent->type)
{ {
case Expose: case Expose:
if (xevent->xexpose.serial == pizza->configure_serial) if (xevent->xexpose.serial == pizza->configure_serial)
{ {
if (pizza->visibility == GDK_VISIBILITY_UNOBSCURED) xevent->xexpose.x += pizza->scroll_x;
return GDK_FILTER_REMOVE; xevent->xexpose.y += pizza->scroll_y;
else
{
xevent->xexpose.x += pizza->scroll_x;
xevent->xexpose.y += pizza->scroll_y;
break;
}
} }
break; break;
case ConfigureNotify: case ConfigureNotify:
if ((xevent->xconfigure.x != 0) || (xevent->xconfigure.y != 0))
{ {
pizza->configure_serial = xevent->xconfigure.serial; pizza->configure_serial = xevent->xconfigure.serial;
pizza->scroll_x = xevent->xconfigure.x; pizza->scroll_x = xevent->xconfigure.x;
@@ -1282,8 +1239,6 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
} }
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@@ -110,14 +110,14 @@ bool wxMask::Create( const wxBitmap& bitmap,
if (bpp == 15) if (bpp == 15)
{ {
red = red & 0xf8; red = red & 0xf8;
blue = blue & 0xf8;
green = green & 0xf8; green = green & 0xf8;
blue = blue & 0xf8;
} }
if (bpp == 16) if (bpp == 16)
{ {
red = red & 0xf8; red = red & 0xf8;
blue = blue & 0xfc; green = green & 0xfc;
green = green & 0xf8; blue = blue & 0xf8;
} }
color.red = 0; color.red = 0;

View File

@@ -997,12 +997,12 @@ gtk_pizza_expose_predicate (Display *display,
XEvent *xevent, XEvent *xevent,
XPointer arg) XPointer arg)
{ {
if ((xevent->type == Expose) || if ((xevent->type == Expose) ||
((xevent->xany.window == *(Window *)arg) && ((xevent->xany.window == *(Window *)arg) &&
(xevent->type == ConfigureNotify))) (xevent->type == ConfigureNotify)))
return True; return True;
else else
return False; return False;
} }
/* This is the main routine to do the scrolling. Scrolling is /* This is the main routine to do the scrolling. Scrolling is
@@ -1020,40 +1020,40 @@ gtk_pizza_expose_predicate (Display *display,
void void
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy) gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
{ {
GtkWidget *widget; GtkWidget *widget;
XEvent xevent; XEvent xevent;
gint x,y,w,h,border; gint x,y,w,h,border;
widget = GTK_WIDGET (pizza); widget = GTK_WIDGET (pizza);
pizza->xoffset += dx; pizza->xoffset += dx;
pizza->yoffset += dy; pizza->yoffset += dy;
if (!GTK_WIDGET_MAPPED (pizza)) if (!GTK_WIDGET_MAPPED (pizza))
{ {
gtk_pizza_position_children (pizza); gtk_pizza_position_children (pizza);
return; return;
} }
gtk_pizza_adjust_allocations (pizza, -dx, -dy); gtk_pizza_adjust_allocations (pizza, -dx, -dy);
if (pizza->shadow_type == GTK_MYSHADOW_NONE) if (pizza->shadow_type == GTK_MYSHADOW_NONE)
border = 0; border = 0;
else else
if (pizza->shadow_type == GTK_MYSHADOW_THIN) if (pizza->shadow_type == GTK_MYSHADOW_THIN)
border = 1; border = 1;
else else
border = 2; border = 2;
x = 0; x = 0;
y = 0; y = 0;
w = widget->allocation.width - 2*border; w = widget->allocation.width - 2*border;
h = widget->allocation.height - 2*border; h = widget->allocation.height - 2*border;
if (dx > 0) if (dx > 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_resize (pizza->bin_window, gdk_window_resize (pizza->bin_window,
w + dx, w + dx,
@@ -1061,20 +1061,14 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
gdk_window_move (pizza->bin_window, x-dx, y); gdk_window_move (pizza->bin_window, x-dx, y);
gdk_window_move_resize (pizza->bin_window, x, y, w, h ); gdk_window_move_resize (pizza->bin_window, x, y, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
MAX ((gint)w - dx, 0),
0,
MIN (dx, w),
h);
} }
else if (dx < 0) else if (dx < 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x + dx, x + dx,
@@ -1084,102 +1078,73 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
gdk_window_move (pizza->bin_window, x, y); gdk_window_move (pizza->bin_window, x, y);
gdk_window_resize (pizza->bin_window, w, h ); gdk_window_resize (pizza->bin_window, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
0,
MIN (-dx, w),
h);
} }
if (dy > 0) if (dy > 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_resize (pizza->bin_window, w, h + dy); gdk_window_resize (pizza->bin_window, w, h + dy);
gdk_window_move (pizza->bin_window, x, y-dy); gdk_window_move (pizza->bin_window, x, y-dy);
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x, y, w, h ); x, y, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
MAX ((gint)h - dy, 0),
w,
MIN (dy, h));
} }
else if (dy < 0) else if (dy < 0)
{ {
if (gravity_works) if (gravity_works)
{ {
gdk_window_move_resize (pizza->bin_window, gdk_window_move_resize (pizza->bin_window,
x, y+dy, w, h - dy ); x, y+dy, w, h - dy );
gdk_window_move (pizza->bin_window, x, y); gdk_window_move (pizza->bin_window, x, y);
gdk_window_resize (pizza->bin_window, w, h ); gdk_window_resize (pizza->bin_window, w, h );
} }
else else
{ {
/* FIXME */ /* FIXME */
} }
gtk_pizza_expose_area (pizza,
0,
0,
w,
MIN (-dy, (gint)h));
} }
gtk_pizza_position_children (pizza); gtk_pizza_position_children (pizza);
/* We have to make sure that all exposes from this scroll get gdk_flush();
* processed before we scroll again, or the expose events will while (XCheckIfEvent(GDK_WINDOW_XDISPLAY (pizza->bin_window),
* have invalid coordinates. &xevent,
* gtk_pizza_expose_predicate,
* We also do expose events for other windows, since otherwise (XPointer)&GDK_WINDOW_XWINDOW (pizza->bin_window)))
* their updating will fall behind the scrolling
*
* This also avoids a problem in pre-1.0 GTK where filters don't
* have access to configure events that were compressed.
*/
gdk_flush();
while (XCheckIfEvent(GDK_WINDOW_XDISPLAY (pizza->bin_window),
&xevent,
gtk_pizza_expose_predicate,
(XPointer)&GDK_WINDOW_XWINDOW (pizza->bin_window)))
{ {
GdkEvent event; GdkEvent event;
GtkWidget *event_widget; GtkWidget *event_widget;
if ((xevent.xany.window == GDK_WINDOW_XWINDOW (pizza->bin_window)) && if ((xevent.xany.window == GDK_WINDOW_XWINDOW (pizza->bin_window)) )
(gtk_pizza_filter (&xevent, &event, pizza) == GDK_FILTER_REMOVE)) gtk_pizza_filter (&xevent, &event, pizza);
continue;
if (xevent.type == Expose) if (xevent.type == Expose)
{ {
event.expose.window = gdk_window_lookup (xevent.xany.window); event.expose.window = gdk_window_lookup (xevent.xany.window);
gdk_window_get_user_data (event.expose.window, gdk_window_get_user_data (event.expose.window,
(gpointer *)&event_widget); (gpointer *)&event_widget);
if (event_widget) if (event_widget)
{ {
event.expose.type = GDK_EXPOSE; event.expose.type = GDK_EXPOSE;
event.expose.area.x = xevent.xexpose.x; event.expose.area.x = xevent.xexpose.x;
event.expose.area.y = xevent.xexpose.y; event.expose.area.y = xevent.xexpose.y;
event.expose.area.width = xevent.xexpose.width; event.expose.area.width = xevent.xexpose.width;
event.expose.area.height = xevent.xexpose.height; event.expose.area.height = xevent.xexpose.height;
event.expose.count = xevent.xexpose.count; event.expose.count = xevent.xexpose.count;
gdk_window_ref (event.expose.window); gdk_window_ref (event.expose.window);
gtk_widget_event (event_widget, &event); gtk_widget_event (event_widget, &event);
gdk_window_unref (event.expose.window); gdk_window_unref (event.expose.window);
} }
} }
} }
@@ -1210,25 +1175,17 @@ gtk_pizza_filter (GdkXEvent *gdk_xevent,
if (!pizza->use_filter) if (!pizza->use_filter)
return GDK_FILTER_CONTINUE; return GDK_FILTER_CONTINUE;
switch (xevent->type) switch (xevent->type)
{ {
case Expose: case Expose:
if (xevent->xexpose.serial == pizza->configure_serial) if (xevent->xexpose.serial == pizza->configure_serial)
{ {
if (pizza->visibility == GDK_VISIBILITY_UNOBSCURED) xevent->xexpose.x += pizza->scroll_x;
return GDK_FILTER_REMOVE; xevent->xexpose.y += pizza->scroll_y;
else
{
xevent->xexpose.x += pizza->scroll_x;
xevent->xexpose.y += pizza->scroll_y;
break;
}
} }
break; break;
case ConfigureNotify: case ConfigureNotify:
if ((xevent->xconfigure.x != 0) || (xevent->xconfigure.y != 0))
{ {
pizza->configure_serial = xevent->xconfigure.serial; pizza->configure_serial = xevent->xconfigure.serial;
pizza->scroll_x = xevent->xconfigure.x; pizza->scroll_x = xevent->xconfigure.x;
@@ -1282,8 +1239,6 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
} }
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@@ -1,6 +1,6 @@
# Note that this is NOT a relocatable package # Note that this is NOT a relocatable package
%define pref /usr %define pref /usr
%define ver 2.2.0 %define ver 2.2.1
%define rel 0 %define rel 0
Summary: The GTK+ 1.2 port of the wxWindows library Summary: The GTK+ 1.2 port of the wxWindows library