From 34dfd591dafa2047cb7d894777d3a8656e373229 Mon Sep 17 00:00:00 2001 From: Attilio Fiandrotti Date: Thu, 12 Jul 2007 17:09:02 +0000 Subject: [PATCH] Fixed memory leak at window closing in DirectFB backend, patch provided by Simon Lanzmich svn path=/trunk/; revision=18459 --- ChangeLog | 7 +++++++ gdk/directfb/gdkevents-directfb.c | 19 +++++++++++++++++++ gdk/directfb/gdkprivate-directfb.h | 3 +++ gdk/directfb/gdkwindow-directfb.c | 4 +++- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index fbebaa039e..5e94050325 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-07-12 Attilio Fiandrotti + + * gdk/directfb/gdkevents-directfb.c: + * gdk/directfb/gdkwindow-directfb.c: + * gdk/directfb/gdkprivate-directfb.h: Fixed memory leak at window closing, + patch provided by Simon Lanzmich + Thu Jul 12 18:03:02 2007 Tim Janik * gdk/gdk.c (gdk_threads_add_idle_full): clarified documentation example. diff --git a/gdk/directfb/gdkevents-directfb.c b/gdk/directfb/gdkevents-directfb.c index e3babd4150..2f55b26ca1 100644 --- a/gdk/directfb/gdkevents-directfb.c +++ b/gdk/directfb/gdkevents-directfb.c @@ -315,6 +315,25 @@ gdk_directfb_event_windows_add (GdkWindow *window) impl->window->CreateEventBuffer (impl->window, &EventBuffer); } +#if (DIRECTFB_MAJOR_VERSION >= 1) +void +gdk_directfb_event_windows_remove (GdkWindow *window) +{ + GdkWindowImplDirectFB *impl; + + g_return_if_fail (GDK_IS_WINDOW (window)); + + impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (window)->impl); + + if (!impl->window) + return; + + if (EventBuffer) + impl->window->DetachEventBuffer (impl->window, EventBuffer); +/* FIXME: should we warn if (! EventBuffer) ? */ +} +#endif + GdkWindow * gdk_directfb_child_at (GdkWindow *window, gint *winx, diff --git a/gdk/directfb/gdkprivate-directfb.h b/gdk/directfb/gdkprivate-directfb.h index b4090bb828..b645057f32 100644 --- a/gdk/directfb/gdkprivate-directfb.h +++ b/gdk/directfb/gdkprivate-directfb.h @@ -231,6 +231,9 @@ GdkImage* _gdk_directfb_copy_to_image (GdkDrawable *drawable, gint height); void gdk_directfb_event_windows_add (GdkWindow *window); +#if (DIRECTFB_MAJOR_VERSION >= 1) +void gdk_directfb_event_windows_remove (GdkWindow *window); +#endif GdkGrabStatus gdk_directfb_pointer_grab (GdkWindow *window, gint owner_events, diff --git a/gdk/directfb/gdkwindow-directfb.c b/gdk/directfb/gdkwindow-directfb.c index 7fe3911852..4337cf98ef 100644 --- a/gdk/directfb/gdkwindow-directfb.c +++ b/gdk/directfb/gdkwindow-directfb.c @@ -600,7 +600,9 @@ _gdk_windowing_window_destroy (GdkWindow *window, impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl); _gdk_selection_window_destroyed (window); - +#if (DIRECTFB_MAJOR_VERSION >= 1) + gdk_directfb_event_windows_remove (window); +#endif if (window == _gdk_directfb_pointer_grab_window) gdk_pointer_ungrab (GDK_CURRENT_TIME); if (window == _gdk_directfb_keyboard_grab_window)