diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2004-07-12 22:52:40 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2004-07-12 22:52:40 +0000 |
commit | dddab53b54494e8e5713a619e774e4088d845100 (patch) | |
tree | 368176c337c437a45e8c05e214bcdcbed0be035c | |
parent | 7cbe432b43ed274d2e4dbf5b73e45338acf1f66b (diff) | |
download | gdk-pixbuf-dddab53b54494e8e5713a619e774e4088d845100.tar.gz |
Do an empty begin_paint_region()/end_paint() for windows without
Tue Jul 13 00:40:29 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
empty begin_paint_region()/end_paint() for windows without
EXPOSURE_MASK.
* gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
_gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 9 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 52 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 10 |
6 files changed, 71 insertions, 27 deletions
@@ -1,3 +1,12 @@ +Tue Jul 13 00:40:29 2004 Soeren Sandmann <sandmann@daimi.au.dk> + + * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an + empty begin_paint_region()/end_paint() for windows without + EXPOSURE_MASK. + + * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg, + _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK. + 2004-07-12 Matthias Clasen <mclasen@redhat.com> * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f0b965eac..20bed7a7e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +Tue Jul 13 00:40:29 2004 Soeren Sandmann <sandmann@daimi.au.dk> + + * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an + empty begin_paint_region()/end_paint() for windows without + EXPOSURE_MASK. + + * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg, + _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK. + 2004-07-12 Matthias Clasen <mclasen@redhat.com> * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index f0b965eac..20bed7a7e 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +Tue Jul 13 00:40:29 2004 Soeren Sandmann <sandmann@daimi.au.dk> + + * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an + empty begin_paint_region()/end_paint() for windows without + EXPOSURE_MASK. + + * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg, + _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK. + 2004-07-12 Matthias Clasen <mclasen@redhat.com> * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f0b965eac..20bed7a7e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +Tue Jul 13 00:40:29 2004 Soeren Sandmann <sandmann@daimi.au.dk> + + * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an + empty begin_paint_region()/end_paint() for windows without + EXPOSURE_MASK. + + * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg, + _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK. + 2004-07-12 Matthias Clasen <mclasen@redhat.com> * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog. diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 7987e650a..c110a1fef 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -2006,10 +2006,8 @@ gdk_window_process_updates_internal (GdkWindow *window) GdkRegion *update_area = private->update_area; private->update_area = NULL; - if (_gdk_event_func && gdk_window_is_viewable (window) && - (private->event_mask & GDK_EXPOSURE_MASK)) + if (_gdk_event_func && gdk_window_is_viewable (window)) { - GdkEvent event; GdkRectangle window_rect; GdkRegion *expose_region; GdkRegion *window_region; @@ -2022,39 +2020,55 @@ gdk_window_process_updates_internal (GdkWindow *window) g_usleep (70000); } - gdk_drawable_get_size (GDK_DRAWABLE (private), &width, &height); - - window_rect.x = 0; - window_rect.y = 0; - window_rect.width = width; - window_rect.height = height; - save_region = _gdk_windowing_window_queue_antiexpose (window, update_area); - - event.expose.type = GDK_EXPOSE; - event.expose.window = g_object_ref (window); - event.expose.count = 0; if (save_region) expose_region = gdk_region_copy (update_area); else expose_region = update_area; + + gdk_drawable_get_size (GDK_DRAWABLE (private), &width, &height); + + window_rect.x = 0; + window_rect.y = 0; + window_rect.width = width; + window_rect.height = height; + window_region = gdk_region_rectangle (&window_rect); gdk_region_intersect (expose_region, window_region); gdk_region_destroy (window_region); - event.expose.region = expose_region; - gdk_region_get_clipbox (expose_region, &event.expose.area); - if (!gdk_region_empty (expose_region)) { - (*_gdk_event_func) (&event, _gdk_event_data); + if (private->event_mask & GDK_EXPOSURE_MASK) + { + GdkEvent event; + + event.expose.type = GDK_EXPOSE; + event.expose.window = g_object_ref (window); + event.expose.count = 0; + event.expose.region = expose_region; + gdk_region_get_clipbox (expose_region, &event.expose.area); + + (*_gdk_event_func) (&event, _gdk_event_data); + + g_object_unref (window); + } + else + { + /* Windows without GDK_EXPOSURE_MASK still need to + * get their backgrounds painted, because it + * may have been temporarily set to None when + * the expose was generated + */ + gdk_window_begin_paint_region (window, expose_region); + gdk_window_end_paint (window); + } } if (expose_region != update_area) gdk_region_destroy (expose_region); - g_object_unref (window); } if (!save_region) gdk_region_destroy (update_area); diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index f8ef65ac4..7a899102e 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -284,13 +284,8 @@ _gdk_x11_window_tmp_unset_bg (GdkWindow *window, return; } - /* Don't unset the background of windows that don't select for expose - * events. Such windows don't get drawn, so we need the X server - * drawing them to prevent them from containing garbage - */ if (private->window_type != GDK_WINDOW_ROOT && - private->window_type != GDK_WINDOW_FOREIGN && - (private->event_mask & GDK_EXPOSURE_MASK)) + private->window_type != GDK_WINDOW_FOREIGN) { tmp_unset_bg (window); } @@ -322,8 +317,7 @@ _gdk_x11_window_tmp_reset_bg (GdkWindow *window, } if (private->window_type != GDK_WINDOW_ROOT && - private->window_type != GDK_WINDOW_FOREIGN && - (private->event_mask & GDK_EXPOSURE_MASK)) + private->window_type != GDK_WINDOW_FOREIGN) { tmp_reset_bg (window); } |