/* WindowDragProvider.c generated by valac 0.56.18-dirty, the Vala compiler
 * generated from WindowDragProvider.vala, do not modify */

/*
 * Copyright 2025 elementary, Inc. (https://elementary.io)
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * Authored by: Leonhard Kargl <leo.kargl@proton.me>
 */

#include <glib-object.h>
#include <gio/gio.h>
#include <glib.h>
#include <float.h>
#include <math.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define GALA_TYPE_WINDOW_DRAG_PROVIDER (gala_window_drag_provider_get_type ())
#define GALA_WINDOW_DRAG_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GALA_TYPE_WINDOW_DRAG_PROVIDER, GalaWindowDragProvider))
#define GALA_WINDOW_DRAG_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GALA_TYPE_WINDOW_DRAG_PROVIDER, GalaWindowDragProviderClass))
#define GALA_IS_WINDOW_DRAG_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GALA_TYPE_WINDOW_DRAG_PROVIDER))
#define GALA_IS_WINDOW_DRAG_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GALA_TYPE_WINDOW_DRAG_PROVIDER))
#define GALA_WINDOW_DRAG_PROVIDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GALA_TYPE_WINDOW_DRAG_PROVIDER, GalaWindowDragProviderClass))

typedef struct _GalaWindowDragProvider GalaWindowDragProvider;
typedef struct _GalaWindowDragProviderClass GalaWindowDragProviderClass;
typedef struct _GalaWindowDragProviderPrivate GalaWindowDragProviderPrivate;
enum  {
	GALA_WINDOW_DRAG_PROVIDER_0_PROPERTY,
	GALA_WINDOW_DRAG_PROVIDER_NUM_PROPERTIES
};
static GParamSpec* gala_window_drag_provider_properties[GALA_WINDOW_DRAG_PROVIDER_NUM_PROPERTIES];
enum  {
	GALA_WINDOW_DRAG_PROVIDER_ENTER_SIGNAL,
	GALA_WINDOW_DRAG_PROVIDER_MOTION_SIGNAL,
	GALA_WINDOW_DRAG_PROVIDER_LEAVE_SIGNAL,
	GALA_WINDOW_DRAG_PROVIDER_DROPPED_SIGNAL,
	GALA_WINDOW_DRAG_PROVIDER_NUM_SIGNALS
};
static guint gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_NUM_SIGNALS] = {0};

struct _GalaWindowDragProvider {
	GObject parent_instance;
	GalaWindowDragProviderPrivate * priv;
};

struct _GalaWindowDragProviderClass {
	GObjectClass parent_class;
};

static gpointer gala_window_drag_provider_parent_class = NULL;
static GOnce gala_window_drag_provider_instance;
static GOnce gala_window_drag_provider_instance = G_ONCE_INIT;

VALA_EXTERN GType gala_window_drag_provider_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GalaWindowDragProvider, g_object_unref)
VALA_EXTERN guint gala_window_drag_provider_register_object (void* object,
                                                 GDBusConnection* connection,
                                                 const gchar* path,
                                                 GError** error);
VALA_EXTERN GalaWindowDragProvider* gala_window_drag_provider_get_instance (void);
static GalaWindowDragProvider* __lambda41_ (void);
VALA_EXTERN GalaWindowDragProvider* gala_window_drag_provider_new (void);
VALA_EXTERN GalaWindowDragProvider* gala_window_drag_provider_construct (GType object_type);
static gpointer ___lambda41__gthread_func (gpointer self);
 G_GNUC_INTERNAL void gala_window_drag_provider_notify_enter (GalaWindowDragProvider* self,
                                             guint64 window_id);
 G_GNUC_INTERNAL void gala_window_drag_provider_notify_motion (GalaWindowDragProvider* self,
                                              gfloat x,
                                              gfloat y);
 G_GNUC_INTERNAL void gala_window_drag_provider_notify_leave (GalaWindowDragProvider* self);
 G_GNUC_INTERNAL void gala_window_drag_provider_notify_dropped (GalaWindowDragProvider* self);
static void g_cclosure_user_marshal_VOID__UINT64 (GClosure * closure,
                                           GValue * return_value,
                                           guint n_param_values,
                                           const GValue * param_values,
                                           gpointer invocation_hint,
                                           gpointer marshal_data);
static void g_cclosure_user_marshal_VOID__INT_INT (GClosure * closure,
                                            GValue * return_value,
                                            guint n_param_values,
                                            const GValue * param_values,
                                            gpointer invocation_hint,
                                            gpointer marshal_data);
static void gala_window_drag_provider_finalize (GObject * obj);
static GType gala_window_drag_provider_get_type_once (void);
static void gala_window_drag_provider_dbus_interface_method_call (GDBusConnection* connection,
                                                           const gchar* sender,
                                                           const gchar* object_path,
                                                           const gchar* interface_name,
                                                           const gchar* method_name,
                                                           GVariant* parameters,
                                                           GDBusMethodInvocation* invocation,
                                                           gpointer user_data);
static GVariant* gala_window_drag_provider_dbus_interface_get_property (GDBusConnection* connection,
                                                                 const gchar* sender,
                                                                 const gchar* object_path,
                                                                 const gchar* interface_name,
                                                                 const gchar* property_name,
                                                                 GError** error,
                                                                 gpointer user_data);
static gboolean gala_window_drag_provider_dbus_interface_set_property (GDBusConnection* connection,
                                                                const gchar* sender,
                                                                const gchar* object_path,
                                                                const gchar* interface_name,
                                                                const gchar* property_name,
                                                                GVariant* value,
                                                                GError** error,
                                                                gpointer user_data);
static void _dbus_gala_window_drag_provider_enter (GObject* _sender,
                                            guint64 window_id,
                                            gpointer* _data);
static void _dbus_gala_window_drag_provider_motion (GObject* _sender,
                                             gint x,
                                             gint y,
                                             gpointer* _data);
static void _dbus_gala_window_drag_provider_leave (GObject* _sender,
                                            gpointer* _data);
static void _dbus_gala_window_drag_provider_dropped (GObject* _sender,
                                              gpointer* _data);
static void _gala_window_drag_provider_unregister_object (gpointer user_data);

static const GDBusMethodInfo * const _gala_window_drag_provider_dbus_method_info[] = {NULL};
static const GDBusArgInfo _gala_window_drag_provider_dbus_arg_info_enter_window_id = {-1, "window_id", "t", NULL};
static const GDBusArgInfo * const _gala_window_drag_provider_dbus_arg_info_enter[] = {&_gala_window_drag_provider_dbus_arg_info_enter_window_id, NULL};
static const GDBusSignalInfo _gala_window_drag_provider_dbus_signal_info_enter = {-1, "Enter", (GDBusArgInfo **) (&_gala_window_drag_provider_dbus_arg_info_enter), NULL};
static const GDBusArgInfo _gala_window_drag_provider_dbus_arg_info_motion_x = {-1, "x", "i", NULL};
static const GDBusArgInfo _gala_window_drag_provider_dbus_arg_info_motion_y = {-1, "y", "i", NULL};
static const GDBusArgInfo * const _gala_window_drag_provider_dbus_arg_info_motion[] = {&_gala_window_drag_provider_dbus_arg_info_motion_x, &_gala_window_drag_provider_dbus_arg_info_motion_y, NULL};
static const GDBusSignalInfo _gala_window_drag_provider_dbus_signal_info_motion = {-1, "Motion", (GDBusArgInfo **) (&_gala_window_drag_provider_dbus_arg_info_motion), NULL};
static const GDBusArgInfo * const _gala_window_drag_provider_dbus_arg_info_leave[] = {NULL};
static const GDBusSignalInfo _gala_window_drag_provider_dbus_signal_info_leave = {-1, "Leave", (GDBusArgInfo **) (&_gala_window_drag_provider_dbus_arg_info_leave), NULL};
static const GDBusArgInfo * const _gala_window_drag_provider_dbus_arg_info_dropped[] = {NULL};
static const GDBusSignalInfo _gala_window_drag_provider_dbus_signal_info_dropped = {-1, "Dropped", (GDBusArgInfo **) (&_gala_window_drag_provider_dbus_arg_info_dropped), NULL};
static const GDBusSignalInfo * const _gala_window_drag_provider_dbus_signal_info[] = {&_gala_window_drag_provider_dbus_signal_info_enter, &_gala_window_drag_provider_dbus_signal_info_motion, &_gala_window_drag_provider_dbus_signal_info_leave, &_gala_window_drag_provider_dbus_signal_info_dropped, NULL};
static const GDBusPropertyInfo * const _gala_window_drag_provider_dbus_property_info[] = {NULL};
static const GDBusInterfaceInfo _gala_window_drag_provider_dbus_interface_info = {-1, "io.elementary.desktop.wm.WindowDragProvider", (GDBusMethodInfo **) (&_gala_window_drag_provider_dbus_method_info), (GDBusSignalInfo **) (&_gala_window_drag_provider_dbus_signal_info), (GDBusPropertyInfo **) (&_gala_window_drag_provider_dbus_property_info), NULL};
static const GDBusInterfaceVTable _gala_window_drag_provider_dbus_interface_vtable = {gala_window_drag_provider_dbus_interface_method_call, gala_window_drag_provider_dbus_interface_get_property, gala_window_drag_provider_dbus_interface_set_property};

static GalaWindowDragProvider*
__lambda41_ (void)
{
	GalaWindowDragProvider* _tmp0_;
	GalaWindowDragProvider* result;
	_tmp0_ = gala_window_drag_provider_new ();
	result = _tmp0_;
	return result;
}

static gpointer
___lambda41__gthread_func (gpointer self)
{
	gpointer result;
	result = __lambda41_ ();
	return result;
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

GalaWindowDragProvider*
gala_window_drag_provider_get_instance (void)
{
	gconstpointer _tmp0_;
	GalaWindowDragProvider* _tmp1_;
	GalaWindowDragProvider* result;
	_tmp0_ = g_once (&gala_window_drag_provider_instance, ___lambda41__gthread_func, NULL);
	_tmp1_ = _g_object_ref0 ((GalaWindowDragProvider*) _tmp0_);
	result = _tmp1_;
	return result;
}

 G_GNUC_INTERNAL void
gala_window_drag_provider_notify_enter (GalaWindowDragProvider* self,
                                        guint64 window_id)
{
	g_return_if_fail (self != NULL);
	g_signal_emit (self, gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_ENTER_SIGNAL], 0, window_id);
}

 G_GNUC_INTERNAL void
gala_window_drag_provider_notify_motion (GalaWindowDragProvider* self,
                                         gfloat x,
                                         gfloat y)
{
	g_return_if_fail (self != NULL);
	g_signal_emit (self, gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_MOTION_SIGNAL], 0, (gint) x, (gint) y);
}

 G_GNUC_INTERNAL void
gala_window_drag_provider_notify_leave (GalaWindowDragProvider* self)
{
	g_return_if_fail (self != NULL);
	g_signal_emit (self, gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_LEAVE_SIGNAL], 0);
}

 G_GNUC_INTERNAL void
gala_window_drag_provider_notify_dropped (GalaWindowDragProvider* self)
{
	g_return_if_fail (self != NULL);
	g_signal_emit (self, gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_DROPPED_SIGNAL], 0);
}

GalaWindowDragProvider*
gala_window_drag_provider_construct (GType object_type)
{
	GalaWindowDragProvider * self = NULL;
	self = (GalaWindowDragProvider*) g_object_new (object_type, NULL);
	return self;
}

GalaWindowDragProvider*
gala_window_drag_provider_new (void)
{
	return gala_window_drag_provider_construct (GALA_TYPE_WINDOW_DRAG_PROVIDER);
}

static void
g_cclosure_user_marshal_VOID__UINT64 (GClosure * closure,
                                      GValue * return_value,
                                      guint n_param_values,
                                      const GValue * param_values,
                                      gpointer invocation_hint,
                                      gpointer marshal_data)
{
	typedef void (*GMarshalFunc_VOID__UINT64) (gpointer data1, guint64 arg_1, gpointer data2);
	register GMarshalFunc_VOID__UINT64 callback;
	register GCClosure * cc;
	register gpointer data1;
	register gpointer data2;
	cc = (GCClosure *) closure;
	g_return_if_fail (n_param_values == 2);
	if (G_CCLOSURE_SWAP_DATA (closure)) {
		data1 = closure->data;
		data2 = param_values->data[0].v_pointer;
	} else {
		data1 = param_values->data[0].v_pointer;
		data2 = closure->data;
	}
	callback = (GMarshalFunc_VOID__UINT64) (marshal_data ? marshal_data : cc->callback);
	callback (data1, g_value_get_uint64 (param_values + 1), data2);
}

static void
g_cclosure_user_marshal_VOID__INT_INT (GClosure * closure,
                                       GValue * return_value,
                                       guint n_param_values,
                                       const GValue * param_values,
                                       gpointer invocation_hint,
                                       gpointer marshal_data)
{
	typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer data1, gint arg_1, gint arg_2, gpointer data2);
	register GMarshalFunc_VOID__INT_INT callback;
	register GCClosure * cc;
	register gpointer data1;
	register gpointer data2;
	cc = (GCClosure *) closure;
	g_return_if_fail (n_param_values == 3);
	if (G_CCLOSURE_SWAP_DATA (closure)) {
		data1 = closure->data;
		data2 = param_values->data[0].v_pointer;
	} else {
		data1 = param_values->data[0].v_pointer;
		data2 = closure->data;
	}
	callback = (GMarshalFunc_VOID__INT_INT) (marshal_data ? marshal_data : cc->callback);
	callback (data1, g_value_get_int (param_values + 1), g_value_get_int (param_values + 2), data2);
}

static void
gala_window_drag_provider_class_init (GalaWindowDragProviderClass * klass,
                                      gpointer klass_data)
{
	gala_window_drag_provider_parent_class = g_type_class_peek_parent (klass);
	G_OBJECT_CLASS (klass)->finalize = gala_window_drag_provider_finalize;
	gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_ENTER_SIGNAL] = g_signal_new ("enter", GALA_TYPE_WINDOW_DRAG_PROVIDER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__UINT64, G_TYPE_NONE, 1, G_TYPE_UINT64);
	gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_MOTION_SIGNAL] = g_signal_new ("motion", GALA_TYPE_WINDOW_DRAG_PROVIDER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
	gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_LEAVE_SIGNAL] = g_signal_new ("leave", GALA_TYPE_WINDOW_DRAG_PROVIDER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
	gala_window_drag_provider_signals[GALA_WINDOW_DRAG_PROVIDER_DROPPED_SIGNAL] = g_signal_new ("dropped", GALA_TYPE_WINDOW_DRAG_PROVIDER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
}

static void
gala_window_drag_provider_instance_init (GalaWindowDragProvider * self,
                                         gpointer klass)
{
}

static void
gala_window_drag_provider_finalize (GObject * obj)
{
	GalaWindowDragProvider * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GALA_TYPE_WINDOW_DRAG_PROVIDER, GalaWindowDragProvider);
	G_OBJECT_CLASS (gala_window_drag_provider_parent_class)->finalize (obj);
}

 G_GNUC_NO_INLINE static GType
gala_window_drag_provider_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (GalaWindowDragProviderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gala_window_drag_provider_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GalaWindowDragProvider), 0, (GInstanceInitFunc) gala_window_drag_provider_instance_init, NULL };
	GType gala_window_drag_provider_type_id;
	gala_window_drag_provider_type_id = g_type_register_static (G_TYPE_OBJECT, "GalaWindowDragProvider", &g_define_type_info, 0);
	g_type_set_qdata (gala_window_drag_provider_type_id, g_quark_from_static_string ("vala-dbus-register-object"), (void*) gala_window_drag_provider_register_object);
	return gala_window_drag_provider_type_id;
}

GType
gala_window_drag_provider_get_type (void)
{
	static gsize gala_window_drag_provider_type_id__once = 0;
	if (g_once_init_enter (&gala_window_drag_provider_type_id__once)) {
		GType gala_window_drag_provider_type_id;
		gala_window_drag_provider_type_id = gala_window_drag_provider_get_type_once ();
		g_once_init_leave (&gala_window_drag_provider_type_id__once, gala_window_drag_provider_type_id);
	}
	return gala_window_drag_provider_type_id__once;
}

static void
gala_window_drag_provider_dbus_interface_method_call (GDBusConnection* connection,
                                                      const gchar* sender,
                                                      const gchar* object_path,
                                                      const gchar* interface_name,
                                                      const gchar* method_name,
                                                      GVariant* parameters,
                                                      GDBusMethodInvocation* invocation,
                                                      gpointer user_data)
{
	gpointer* data;
	gpointer object;
	data = user_data;
	object = data[0];
	g_object_unref (invocation);
}

static GVariant*
gala_window_drag_provider_dbus_interface_get_property (GDBusConnection* connection,
                                                       const gchar* sender,
                                                       const gchar* object_path,
                                                       const gchar* interface_name,
                                                       const gchar* property_name,
                                                       GError** error,
                                                       gpointer user_data)
{
	gpointer* data;
	gpointer object;
	data = user_data;
	object = data[0];
	return NULL;
}

static gboolean
gala_window_drag_provider_dbus_interface_set_property (GDBusConnection* connection,
                                                       const gchar* sender,
                                                       const gchar* object_path,
                                                       const gchar* interface_name,
                                                       const gchar* property_name,
                                                       GVariant* value,
                                                       GError** error,
                                                       gpointer user_data)
{
	gpointer* data;
	gpointer object;
	data = user_data;
	object = data[0];
	return FALSE;
}

static void
_dbus_gala_window_drag_provider_enter (GObject* _sender,
                                       guint64 window_id,
                                       gpointer* _data)
{
	GDBusConnection * _connection;
	const gchar * _path;
	GVariant *_arguments;
	GVariantBuilder _arguments_builder;
	_connection = _data[1];
	_path = _data[2];
	g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
	g_variant_builder_add_value (&_arguments_builder, g_variant_new_uint64 (window_id));
	_arguments = g_variant_builder_end (&_arguments_builder);
	g_dbus_connection_emit_signal (_connection, NULL, _path, "io.elementary.desktop.wm.WindowDragProvider", "Enter", _arguments, NULL);
}

static void
_dbus_gala_window_drag_provider_motion (GObject* _sender,
                                        gint x,
                                        gint y,
                                        gpointer* _data)
{
	GDBusConnection * _connection;
	const gchar * _path;
	GVariant *_arguments;
	GVariantBuilder _arguments_builder;
	_connection = _data[1];
	_path = _data[2];
	g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
	g_variant_builder_add_value (&_arguments_builder, g_variant_new_int32 (x));
	g_variant_builder_add_value (&_arguments_builder, g_variant_new_int32 (y));
	_arguments = g_variant_builder_end (&_arguments_builder);
	g_dbus_connection_emit_signal (_connection, NULL, _path, "io.elementary.desktop.wm.WindowDragProvider", "Motion", _arguments, NULL);
}

static void
_dbus_gala_window_drag_provider_leave (GObject* _sender,
                                       gpointer* _data)
{
	GDBusConnection * _connection;
	const gchar * _path;
	GVariant *_arguments;
	GVariantBuilder _arguments_builder;
	_connection = _data[1];
	_path = _data[2];
	g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
	_arguments = g_variant_builder_end (&_arguments_builder);
	g_dbus_connection_emit_signal (_connection, NULL, _path, "io.elementary.desktop.wm.WindowDragProvider", "Leave", _arguments, NULL);
}

static void
_dbus_gala_window_drag_provider_dropped (GObject* _sender,
                                         gpointer* _data)
{
	GDBusConnection * _connection;
	const gchar * _path;
	GVariant *_arguments;
	GVariantBuilder _arguments_builder;
	_connection = _data[1];
	_path = _data[2];
	g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
	_arguments = g_variant_builder_end (&_arguments_builder);
	g_dbus_connection_emit_signal (_connection, NULL, _path, "io.elementary.desktop.wm.WindowDragProvider", "Dropped", _arguments, NULL);
}

guint
gala_window_drag_provider_register_object (gpointer object,
                                           GDBusConnection* connection,
                                           const gchar* path,
                                           GError** error)
{
	guint result;
	gpointer *data;
	data = g_new (gpointer, 3);
	data[0] = g_object_ref (object);
	data[1] = g_object_ref (connection);
	data[2] = g_strdup (path);
	result = g_dbus_connection_register_object (connection, path, (GDBusInterfaceInfo *) (&_gala_window_drag_provider_dbus_interface_info), &_gala_window_drag_provider_dbus_interface_vtable, data, _gala_window_drag_provider_unregister_object, error);
	if (!result) {
		return 0;
	}
	g_signal_connect (object, "enter", (GCallback) _dbus_gala_window_drag_provider_enter, data);
	g_signal_connect (object, "motion", (GCallback) _dbus_gala_window_drag_provider_motion, data);
	g_signal_connect (object, "leave", (GCallback) _dbus_gala_window_drag_provider_leave, data);
	g_signal_connect (object, "dropped", (GCallback) _dbus_gala_window_drag_provider_dropped, data);
	return result;
}

static void
_gala_window_drag_provider_unregister_object (gpointer user_data)
{
	gpointer* data;
	data = user_data;
	g_signal_handlers_disconnect_by_func (data[0], _dbus_gala_window_drag_provider_enter, data);
	g_signal_handlers_disconnect_by_func (data[0], _dbus_gala_window_drag_provider_motion, data);
	g_signal_handlers_disconnect_by_func (data[0], _dbus_gala_window_drag_provider_leave, data);
	g_signal_handlers_disconnect_by_func (data[0], _dbus_gala_window_drag_provider_dropped, data);
	g_object_unref (data[0]);
	g_object_unref (data[1]);
	g_free (data[2]);
	g_free (data);
}

