[gtk+/xi2: 1180/1239] Plug memory leaks.



commit 487ad9df2e006606974831e8ceb3d4ab00aed213
Author: Carlos Garnacho <carlos gnome org>
Date:   Fri Sep 18 00:03:11 2009 +0200

    Plug memory leaks.

 gdk/gdkdevice.c                 |   18 +++++++++++++++++-
 gdk/gdkwindow.c                 |    6 ++++++
 gdk/x11/gdkdevicemanager-core.c |   15 +++++++++++++++
 gdk/x11/gdkdevicemanager-xi2.c  |    5 +++++
 4 files changed, 43 insertions(+), 1 deletions(-)
---
diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c
index ec4be9b..4ae8b75 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -160,8 +160,10 @@ static void
 gdk_device_dispose (GObject *object)
 {
   GdkDevicePrivate *priv;
+  GdkDevice *device;
 
-  priv = GDK_DEVICE_GET_PRIVATE (object);
+  device = GDK_DEVICE (object);
+  priv = GDK_DEVICE_GET_PRIVATE (device);
 
   if (priv->relative)
     {
@@ -170,6 +172,20 @@ gdk_device_dispose (GObject *object)
       priv->relative = NULL;
     }
 
+  if (priv->axes)
+    {
+      g_array_free (priv->axes, TRUE);
+      priv->axes = NULL;
+    }
+
+  g_free (device->name);
+  g_free (device->keys);
+  g_free (device->axes);
+
+  device->name = NULL;
+  device->keys = NULL;
+  device->axes = NULL;
+
   G_OBJECT_CLASS (gdk_device_parent_class)->dispose (object);
 }
 
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index ac4f422..860e8c3 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -596,6 +596,12 @@ gdk_window_finalize (GObject *object)
   if (obj->device_cursor)
     g_hash_table_destroy (obj->device_cursor);
 
+  if (obj->device_events)
+    g_hash_table_destroy (obj->device_events);
+
+  if (obj->devices_inside)
+    g_list_free (obj->devices_inside);
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
diff --git a/gdk/x11/gdkdevicemanager-core.c b/gdk/x11/gdkdevicemanager-core.c
index 42207f3..765bf23 100644
--- a/gdk/x11/gdkdevicemanager-core.c
+++ b/gdk/x11/gdkdevicemanager-core.c
@@ -33,6 +33,7 @@
 #define HAS_FOCUS(toplevel)                           \
   ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
 
+static void    gdk_device_manager_core_finalize    (GObject *object);
 static void    gdk_device_manager_core_constructed (GObject *object);
 
 static GList * gdk_device_manager_core_get_devices (GdkDeviceManager *device_manager,
@@ -56,6 +57,7 @@ gdk_device_manager_core_class_init (GdkDeviceManagerCoreClass *klass)
   GdkDeviceManagerClass *device_manager_class = GDK_DEVICE_MANAGER_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  object_class->finalize = gdk_device_manager_core_finalize;
   object_class->constructed = gdk_device_manager_core_constructed;
   device_manager_class->get_devices = gdk_device_manager_core_get_devices;
 }
@@ -97,6 +99,19 @@ gdk_device_manager_core_init (GdkDeviceManagerCore *device_manager)
 }
 
 static void
+gdk_device_manager_core_finalize (GObject *object)
+{
+  GdkDeviceManagerCore *device_manager_core;
+
+  device_manager_core = GDK_DEVICE_MANAGER_CORE (object);
+
+  g_object_unref (device_manager_core->core_pointer);
+  g_object_unref (device_manager_core->core_keyboard);
+
+  G_OBJECT_CLASS (gdk_device_manager_core_parent_class)->finalize (object);
+}
+
+static void
 gdk_device_manager_core_constructed (GObject *object)
 {
   GdkDeviceManagerCore *device_manager;
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 082623d..01b811f 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -357,8 +357,13 @@ gdk_device_manager_xi2_finalize (GObject *object)
 
   device_manager_xi2 = GDK_DEVICE_MANAGER_XI2 (object);
 
+  g_list_foreach (device_manager_xi2->master_devices, (GFunc) g_object_unref, NULL);
   g_list_free (device_manager_xi2->master_devices);
+
+  g_list_foreach (device_manager_xi2->slave_devices, (GFunc) g_object_unref, NULL);
   g_list_free (device_manager_xi2->slave_devices);
+
+  g_list_foreach (device_manager_xi2->floating_devices, (GFunc) g_object_unref, NULL);
   g_list_free (device_manager_xi2->floating_devices);
 
   g_hash_table_destroy (device_manager_xi2->id_table);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]