diff options
author | André Draszik <gtk@andred.net> | 2009-09-13 14:08:21 +0100 |
---|---|---|
committer | Javier Jardón <jjardon@gnome.org> | 2010-02-07 20:08:52 +0100 |
commit | e1a83243e41f5bfc3d7b0b0536a3ec5d2e841a2a (patch) | |
tree | 2952da6dc27dde0b4ff6abb975fa16c02c09a058 /gdk/directfb | |
parent | bc36a1544602241107a17b6330e4c6ff69294d83 (diff) | |
download | gtk+-e1a83243e41f5bfc3d7b0b0536a3ec5d2e841a2a.tar.gz |
gdk/directfb: gdkdnd-directfb's private data is used uninitialized
Use G_TYPE_INSTANCE_GET_PRIVATE() instead
In the process, convert to using G_DEFINE_TYPE, too.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=609195
Signed-off-by: Javier Jardón <jjardon@gnome.org>
Diffstat (limited to 'gdk/directfb')
-rw-r--r-- | gdk/directfb/gdkdnd-directfb.c | 84 |
1 files changed, 26 insertions, 58 deletions
diff --git a/gdk/directfb/gdkdnd-directfb.c b/gdk/directfb/gdkdnd-directfb.c index a106de818c..35624c7af5 100644 --- a/gdk/directfb/gdkdnd-directfb.c +++ b/gdk/directfb/gdkdnd-directfb.c @@ -66,25 +66,41 @@ struct _GdkDragContextPrivate static GList *contexts = NULL; static GdkDragContext *current_dest_drag = NULL; -#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data) +#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data) -static gpointer parent_class = NULL; +static void gdk_drag_context_finalize (GObject *object); +G_DEFINE_TYPE (GdkDragContext, gdk_drag_context, G_TYPE_OBJECT) static void gdk_drag_context_init (GdkDragContext *dragcontext) { - dragcontext->windowing_data = g_new (GdkDragContextPrivate, 1); + GdkDragContextPrivate *private; + + private = G_TYPE_INSTANCE_GET_PRIVATE (dragcontext, + GDK_TYPE_DRAG_CONTEXT, + GdkDragContextPrivate); + + dragcontext->windowing_data = private; contexts = g_list_prepend (contexts, dragcontext); } static void +gdk_drag_context_class_init (GdkDragContextClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = gdk_drag_context_finalize; + + g_type_class_add_private (object_class, sizeof (GdkDragContextPrivate)); +} + +static void gdk_drag_context_finalize (GObject *object) { - GdkDragContext *context = GDK_DRAG_CONTEXT (object); - GdkDragContextPrivate *private = GDK_DRAG_CONTEXT_PRIVATE_DATA (object); + GdkDragContext *context = GDK_DRAG_CONTEXT (object); g_list_free (context->targets); @@ -94,60 +110,15 @@ gdk_drag_context_finalize (GObject *object) if (context->dest_window) g_object_unref (context->dest_window); - - if (private) - { - g_free (private); - context->windowing_data = NULL; - } - contexts = g_list_remove (contexts, context); - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static void -gdk_drag_context_class_init (GdkDragContextClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = gdk_drag_context_finalize; -} - -GType -gdk_drag_context_get_type (void) -{ - static GType object_type = 0; - - if (!object_type) - { - const GTypeInfo object_info = - { - sizeof (GdkDragContextClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gdk_drag_context_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GdkDragContext), - 0, /* n_preallocs */ - (GInstanceInitFunc) gdk_drag_context_init, - }; - - object_type = g_type_register_static (G_TYPE_OBJECT, - "GdkDragContext", - &object_info, 0); - } - - return object_type; + G_OBJECT_CLASS (gdk_drag_context_parent_class)->finalize (object); } GdkDragContext * gdk_drag_context_new (void) { - return (GdkDragContext *) g_object_new (gdk_drag_context_get_type (), NULL); + return g_object_new (gdk_drag_context_get_type (), NULL); } void @@ -243,11 +214,9 @@ local_send_enter (GdkDragContext *context, new_context->protocol = GDK_DRAG_PROTO_LOCAL; new_context->is_source = FALSE; - new_context->source_window = context->source_window; - g_object_ref (new_context->source_window); + new_context->source_window = g_object_ref (context->source_window); - new_context->dest_window = context->dest_window; - g_object_ref (new_context->dest_window); + new_context->dest_window = g_object_ref (context->dest_window); new_context->targets = g_list_copy (context->targets); @@ -459,8 +428,7 @@ gdk_drag_motion (GdkDragContext *context, /* Check if new destination accepts drags, and which protocol */ if (dest_window) { - context->dest_window = dest_window; - g_object_ref (context->dest_window); + context->dest_window = g_object_ref (dest_window); context->protocol = protocol; switch (protocol) |