summaryrefslogtreecommitdiff
path: root/gdk/gdkwindow.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-05-05 15:57:48 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-05-05 15:57:48 +0000
commitea71f02acabad0319104a9da5b8532b3cebe1829 (patch)
treef83ee55e76e52921723ed3a0d9864cad6caad1ac /gdk/gdkwindow.c
parente6abb4709f069b534e8bb51956bdfbe03a0689af (diff)
downloadgtk+-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.c63
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