GdkEvent: Add a proper user_data member to GdkEventAny

Setting it as qdata on the object doesn't save any memory since we use
the user_data as the event target, which every event has set these days.
This way is also faster since just reffing the object doesn't do any
locking.
This commit is contained in:
Timm Bäder
2019-01-17 16:26:24 +01:00
parent dbc8d253c3
commit b2eff300b1
2 changed files with 6 additions and 17 deletions

View File

@@ -79,8 +79,6 @@ static GdkEventFunc _gdk_event_func = NULL; /* Callback for events */
static gpointer _gdk_event_data = NULL;
static GDestroyNotify _gdk_event_notify = NULL;
static GQuark quark_event_user_data = 0;
static void gdk_event_constructed (GObject *object);
static void gdk_event_finalize (GObject *object);
@@ -158,8 +156,6 @@ gdk_event_class_init (GdkEventClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (object_class, N_PROPS, event_props);
quark_event_user_data = g_quark_from_static_string ("gdk-event-user-data");
}
void
@@ -626,8 +622,8 @@ gdk_event_copy (const GdkEvent *event)
g_object_ref (new_event->any.device);
if (new_event->any.source_device)
g_object_ref (new_event->any.source_device);
gdk_event_set_user_data (new_event, gdk_event_get_user_data (event));
if (new_event->any.user_data)
g_object_ref (new_event->any.user_data);
switch ((guint) event->any.type)
{
@@ -737,6 +733,7 @@ gdk_event_finalize (GObject *object)
g_clear_object (&event->any.device);
g_clear_object (&event->any.source_device);
g_clear_object (&event->any.user_data);
G_OBJECT_CLASS (gdk_event_parent_class)->finalize (object);
}
@@ -1968,22 +1965,13 @@ void
gdk_event_set_user_data (GdkEvent *event,
GObject *user_data)
{
if (user_data)
{
g_object_set_qdata_full (G_OBJECT (event), quark_event_user_data,
g_object_ref (user_data),
g_object_unref);
}
else
{
g_object_steal_qdata (G_OBJECT (event), quark_event_user_data);
}
g_set_object (&event->any.user_data, user_data);
}
GObject *
gdk_event_get_user_data (const GdkEvent *event)
{
return g_object_get_qdata (G_OBJECT (event), quark_event_user_data);
return event->any.user_data;
}
/**

View File

@@ -61,6 +61,7 @@ struct _GdkEventAny
GdkDevice *device;
GdkDevice *source_device;
GdkDisplay *display;
GObject *user_data;
};
/*