diff options
author | Michael David Emmel <memmel@src.gnome.org> | 2007-01-02 09:05:54 +0000 |
---|---|---|
committer | Michael David Emmel <memmel@src.gnome.org> | 2007-01-02 09:05:54 +0000 |
commit | 52297a75b86f6223abc7d7fb1739b7c86fe039dd (patch) | |
tree | df041ee5cbb133d5fbd0a7c7b48ba772bdbc1535 /gdk/directfb | |
parent | 5b352c0a63914fc9a4596e0127103f4027b8125e (diff) | |
download | gtk+-52297a75b86f6223abc7d7fb1739b7c86fe039dd.tar.gz |
Fix for leak when window destroyed
svn path=/trunk/; revision=17014
Diffstat (limited to 'gdk/directfb')
-rw-r--r-- | gdk/directfb/gdkwindow-directfb.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/gdk/directfb/gdkwindow-directfb.c b/gdk/directfb/gdkwindow-directfb.c index 0a683de033..9c40031642 100644 --- a/gdk/directfb/gdkwindow-directfb.c +++ b/gdk/directfb/gdkwindow-directfb.c @@ -113,7 +113,7 @@ gdk_window_schedule_update (GdkWindow *window) if (!update_idle) { - update_idle = gdk_threads_add_idle (GDK_PRIORITY_REDRAW, + update_idle = gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW, gdk_window_update_idle, NULL, NULL); } } @@ -606,20 +606,23 @@ _gdk_windowing_window_destroy (GdkWindow *window, if (window == gdk_directfb_focused_window) gdk_directfb_change_focus (NULL); + + if (impl->drawable.surface) { + GdkDrawableImplDirectFB *dimpl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl); + if(dimpl->cairo_surface) { + cairo_surface_destroy(dimpl->cairo_surface); + dimpl->cairo_surface= NULL; + } + impl->drawable.surface->Release (impl->drawable.surface); + impl->drawable.surface = NULL; + } + if (!recursing && !foreign_destroy && impl->window ) { impl->window->SetOpacity (impl->window,0); impl->window->Close(impl->window); impl->window->Release(impl->window); + impl->window = NULL; } - -#if 0 /* let the finalizer kill it */ - if (!recursing && !foreign_destroy) - { - if (impl->window) - impl->window->Destroy (impl->window); - impl->window = NULL; - } -#endif } /* This function is called when the window is really gone. @@ -1263,15 +1266,15 @@ _gdk_directfb_move_resize_child (GdkWindow *window, if (!private->input_only) { - if (impl->drawable.surface) - { - GdkDrawableImplDirectFB *dimpl; - dimpl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl); - impl->drawable.surface->Release (impl->drawable.surface); - impl->drawable.surface = NULL; - cairo_surface_destroy(dimpl->cairo_surface); - dimpl->cairo_surface= NULL; - } + if (impl->drawable.surface) { + GdkDrawableImplDirectFB *dimpl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl); + if(dimpl->cairo_surface) { + cairo_surface_destroy(dimpl->cairo_surface); + dimpl->cairo_surface= NULL; + } + impl->drawable.surface->Release (impl->drawable.surface); + impl->drawable.surface = NULL; + } parent_impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (private->parent)->impl); |