diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-05-05 15:57:48 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-05-05 15:57:48 +0000 |
commit | ea71f02acabad0319104a9da5b8532b3cebe1829 (patch) | |
tree | f83ee55e76e52921723ed3a0d9864cad6caad1ac /gdk/gdkwindow.c | |
parent | e6abb4709f069b534e8bb51956bdfbe03a0689af (diff) | |
download | gtk+-ea71f02acabad0319104a9da5b8532b3cebe1829.tar.gz |
Move gdk_window_clear() into common code, implement in terms of
Fri May 5 11:18:47 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move
gdk_window_clear() into common code, implement in terms of
gdk_window_clear_area(). (Fixes bug where gdk_window_clear() was
not redirected to the backing rectangle.
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Tue Apr 25 22:20:41 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_process_updates_internal): Fix error
with recursion where process_updates() is called from
an expose handler. (GtkTextView is highly broken in
doing this, but it should work, so it is a nice test
case.)
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_process_updates_internal): Gracefully
handle the case where updates are queued during processing of
updates.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): We already assume
window is on gdk_display - use that instead of segfaulting.
Diffstat (limited to 'gdk/gdkwindow.c')
-rw-r--r-- | gdk/gdkwindow.c | 63 |
1 files changed, 42 insertions, 21 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 3164b8ecfc..a050636659 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -946,6 +946,18 @@ gdk_window_clear_backing_rect (GdkWindow *window, } void +gdk_window_clear (GdkWindow *window) +{ + GdkWindowPrivate *private = (GdkWindowPrivate *)window; + + g_return_if_fail (window != NULL); + g_return_if_fail (GDK_IS_WINDOW (window)); + + gdk_window_clear_area (window, 0, 0, + private->drawable.width, private->drawable.height); +} + +void gdk_window_clear_area (GdkWindow *window, gint x, gint y, @@ -1026,33 +1038,42 @@ gdk_window_process_updates_internal (GdkWindow *window) { GdkWindowPrivate *private = (GdkWindowPrivate *)window; gboolean save_region = FALSE; - - if (gdk_event_func) - { - GdkEvent event; - GdkRectangle window_rect; - window_rect.x = 0; - window_rect.y = 0; - window_rect.width = private->drawable.width; - window_rect.height = private->drawable.height; + /* If an update got queued during update processing, we can get a + * window in the update queue that has an empty update_area. + * just ignore it. + */ + if (private->update_area) + { + GdkRegion *update_area = private->update_area; + private->update_area = NULL; + + if (gdk_event_func) + { + GdkEvent event; + GdkRectangle window_rect; + + window_rect.x = 0; + window_rect.y = 0; + window_rect.width = private->drawable.width; + window_rect.height = private->drawable.height; - save_region = _gdk_windowing_window_queue_antiexpose (window, private->update_area); + save_region = _gdk_windowing_window_queue_antiexpose (window, update_area); - event.expose.type = GDK_EXPOSE; - event.expose.window = gdk_window_ref ((GdkWindow *)private); - event.expose.count = 0; + event.expose.type = GDK_EXPOSE; + event.expose.window = gdk_window_ref ((GdkWindow *)private); + event.expose.count = 0; - gdk_region_get_clipbox (private->update_area, &event.expose.area); - if (gdk_rectangle_intersect (&event.expose.area, &window_rect, &event.expose.area)) - { - (*gdk_event_func) (&event, gdk_event_data); + gdk_region_get_clipbox (update_area, &event.expose.area); + if (gdk_rectangle_intersect (&event.expose.area, &window_rect, &event.expose.area)) + { + (*gdk_event_func) (&event, gdk_event_data); + } } + + if (!save_region) + gdk_region_destroy (update_area); } - - if (!save_region) - gdk_region_destroy (private->update_area); - private->update_area = NULL; } void |