summaryrefslogtreecommitdiff
path: root/gdk/directfb
diff options
context:
space:
mode:
authorAndré Draszik <gtk@andred.net>2009-09-13 14:08:21 +0100
committerJavier Jardón <jjardon@gnome.org>2010-02-07 20:08:52 +0100
commite1a83243e41f5bfc3d7b0b0536a3ec5d2e841a2a (patch)
tree2952da6dc27dde0b4ff6abb975fa16c02c09a058 /gdk/directfb
parentbc36a1544602241107a17b6330e4c6ff69294d83 (diff)
downloadgtk+-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.c84
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)