Don't support the old handling of zero height/width in gdk_window_clear_area

We used to handle zero height/width specially in the non-double buffered
case due to the weird behaviour of XClearArea in this case. However
this is undocumented, incompatible with what happens on double-buffered
drawing, and just not a good API. So, we drop this behaviour, having
fixed gtkclist.c which used this.
This commit is contained in:
Alexander Larsson 2009-09-11 15:21:43 +02:00
parent 0df4283574
commit e1554d8466
2 changed files with 14 additions and 7 deletions

View File

@ -54,4 +54,14 @@
simply create a new cairo context for each expose event.
</para>
<para>
Due to a weird API in XClearArea the gdk_window_clear_area() call handled
a specified width or height of zero to mean "to end of window" for
non-doublebuffered drawing. This has been changed to be consistent with
the docs and what happens in the doublebuffered case. All code in gtk+
that relied on this has been fixed, but it is possible (although unlikely)
that third party applications rely on this. If you need to do this, just
implement it yourself using gdk_drawable_get_size().
</para>
</chapter>

View File

@ -4349,7 +4349,6 @@ gdk_window_clear_area_internal (GdkWindow *window,
gint height,
gboolean send_expose)
{
GdkWindowObject *private = (GdkWindowObject *)window;
GdkRectangle rect;
GdkRegion *region;
@ -4358,12 +4357,10 @@ gdk_window_clear_area_internal (GdkWindow *window,
if (GDK_WINDOW_DESTROYED (window))
return;
/* This is what XClearArea does, and e.g. GtkCList uses it,
so we need to duplicate that */
if (width == 0)
width = private->width - x;
if (height == 0)
height = private->height - y;
/* Terminate early to avoid weird interpretation of
zero width/height by XClearArea */
if (width == 0 || height == 0)
return;
rect.x = x;
rect.y = y;