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 | |
parent | e6abb4709f069b534e8bb51956bdfbe03a0689af (diff) | |
download | gdk-pixbuf-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')
-rw-r--r-- | gdk/gdkwindow.c | 63 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 19 |
2 files changed, 48 insertions, 34 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 3164b8ecf..a05063665 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 diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 0dfd24cd1..9011ac6e1 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -463,7 +463,7 @@ gdk_window_foreign_new (guint32 anid) parent_private->children = g_list_prepend (parent_private->children, window); GDK_DRAWABLE_XDATA (window)->xid = anid; - GDK_DRAWABLE_XDATA (window)->xdisplay = GDK_DRAWABLE_XDISPLAY (private->parent); + GDK_DRAWABLE_XDATA (window)->xdisplay = gdk_display; private->x = attrs.x; private->y = attrs.y; @@ -806,16 +806,6 @@ gdk_window_reparent (GdkWindow *window, } void -gdk_window_clear (GdkWindow *window) -{ - g_return_if_fail (window != NULL); - g_return_if_fail (GDK_IS_WINDOW (window)); - - if (!GDK_DRAWABLE_DESTROYED (window)) - XClearWindow (GDK_DRAWABLE_XDISPLAY (window), GDK_DRAWABLE_XID (window)); -} - -void _gdk_windowing_window_clear_area (GdkWindow *window, gint x, gint y, @@ -1348,12 +1338,15 @@ gdk_window_get_pointer (GdkWindow *window, int winx = 0; int winy = 0; unsigned int xmask = 0; + gint xoffset, yoffset; g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL); if (!window) window = gdk_parent_root; + _gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); + return_val = NULL; if (!GDK_DRAWABLE_DESTROYED (window) && XQueryPointer (GDK_DRAWABLE_XDISPLAY (window), @@ -1365,9 +1358,9 @@ gdk_window_get_pointer (GdkWindow *window, } if (x) - *x = winx; + *x = winx + xoffset; if (y) - *y = winy; + *y = winy + yoffset; if (mask) *mask = xmask; |