summaryrefslogtreecommitdiff
path: root/gdk/directfb
diff options
context:
space:
mode:
authorMichael David Emmel <memmel@src.gnome.org>2007-01-02 09:05:54 +0000
committerMichael David Emmel <memmel@src.gnome.org>2007-01-02 09:05:54 +0000
commit52297a75b86f6223abc7d7fb1739b7c86fe039dd (patch)
treedf041ee5cbb133d5fbd0a7c7b48ba772bdbc1535 /gdk/directfb
parent5b352c0a63914fc9a4596e0127103f4027b8125e (diff)
downloadgtk+-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.c41
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);