clutter: Do not special case allocated events
All events should be allocated, stack allocation is avoided and should be avoided in the future, probably by making ClutterEvent structs opaque. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1475
This commit is contained in:
parent
a3c95f6023
commit
0cab71ea52
@ -73,8 +73,6 @@ typedef struct _ClutterEventFilter {
|
|||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
} ClutterEventFilter;
|
} ClutterEventFilter;
|
||||||
|
|
||||||
static GHashTable *all_events = NULL;
|
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE (ClutterEvent, clutter_event,
|
G_DEFINE_BOXED_TYPE (ClutterEvent, clutter_event,
|
||||||
clutter_event_copy,
|
clutter_event_copy,
|
||||||
clutter_event_free);
|
clutter_event_free);
|
||||||
@ -96,15 +94,6 @@ G_DEFINE_BOXED_TYPE (ClutterEventSequence, clutter_event_sequence,
|
|||||||
clutter_event_sequence_copy,
|
clutter_event_sequence_copy,
|
||||||
clutter_event_sequence_free);
|
clutter_event_sequence_free);
|
||||||
|
|
||||||
static gboolean
|
|
||||||
is_event_allocated (const ClutterEvent *event)
|
|
||||||
{
|
|
||||||
if (all_events == NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return g_hash_table_lookup (all_events, event) != NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _clutter_event_get_platform_data:
|
* _clutter_event_get_platform_data:
|
||||||
* @event: a #ClutterEvent
|
* @event: a #ClutterEvent
|
||||||
@ -118,9 +107,6 @@ is_event_allocated (const ClutterEvent *event)
|
|||||||
gpointer
|
gpointer
|
||||||
_clutter_event_get_platform_data (const ClutterEvent *event)
|
_clutter_event_get_platform_data (const ClutterEvent *event)
|
||||||
{
|
{
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return ((ClutterEventPrivate *) event)->platform_data;
|
return ((ClutterEventPrivate *) event)->platform_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,9 +123,6 @@ void
|
|||||||
_clutter_event_set_platform_data (ClutterEvent *event,
|
_clutter_event_set_platform_data (ClutterEvent *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
((ClutterEventPrivate *) event)->platform_data = data;
|
((ClutterEventPrivate *) event)->platform_data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,9 +130,6 @@ void
|
|||||||
_clutter_event_set_pointer_emulated (ClutterEvent *event,
|
_clutter_event_set_pointer_emulated (ClutterEvent *event,
|
||||||
gboolean is_emulated)
|
gboolean is_emulated)
|
||||||
{
|
{
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
((ClutterEventPrivate *) event)->is_pointer_emulated = !!is_emulated;
|
((ClutterEventPrivate *) event)->is_pointer_emulated = !!is_emulated;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,9 +703,6 @@ clutter_event_set_scroll_delta (ClutterEvent *event,
|
|||||||
g_return_if_fail (event != NULL);
|
g_return_if_fail (event != NULL);
|
||||||
g_return_if_fail (event->type == CLUTTER_SCROLL);
|
g_return_if_fail (event->type == CLUTTER_SCROLL);
|
||||||
|
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
|
event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
|
||||||
|
|
||||||
((ClutterEventPrivate *) event)->delta_x = dx;
|
((ClutterEventPrivate *) event)->delta_x = dx;
|
||||||
@ -756,13 +733,8 @@ clutter_event_get_scroll_delta (const ClutterEvent *event,
|
|||||||
g_return_if_fail (event->type == CLUTTER_SCROLL);
|
g_return_if_fail (event->type == CLUTTER_SCROLL);
|
||||||
g_return_if_fail (event->scroll.direction == CLUTTER_SCROLL_SMOOTH);
|
g_return_if_fail (event->scroll.direction == CLUTTER_SCROLL_SMOOTH);
|
||||||
|
|
||||||
delta_x = delta_y = 0;
|
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
|
||||||
delta_x = ((ClutterEventPrivate *) event)->delta_x;
|
delta_x = ((ClutterEventPrivate *) event)->delta_x;
|
||||||
delta_y = ((ClutterEventPrivate *) event)->delta_y;
|
delta_y = ((ClutterEventPrivate *) event)->delta_y;
|
||||||
}
|
|
||||||
|
|
||||||
if (dx != NULL)
|
if (dx != NULL)
|
||||||
*dx = delta_x;
|
*dx = delta_x;
|
||||||
@ -1097,15 +1069,12 @@ void
|
|||||||
clutter_event_set_device (ClutterEvent *event,
|
clutter_event_set_device (ClutterEvent *event,
|
||||||
ClutterInputDevice *device)
|
ClutterInputDevice *device)
|
||||||
{
|
{
|
||||||
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
g_return_if_fail (event != NULL);
|
g_return_if_fail (event != NULL);
|
||||||
g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
|
g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
|
||||||
|
|
||||||
g_set_object (&real_event->device, device);
|
g_set_object (&real_event->device, device);
|
||||||
}
|
|
||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
@ -1200,16 +1169,12 @@ ClutterInputDevice *
|
|||||||
clutter_event_get_device (const ClutterEvent *event)
|
clutter_event_get_device (const ClutterEvent *event)
|
||||||
{
|
{
|
||||||
ClutterInputDevice *device = NULL;
|
ClutterInputDevice *device = NULL;
|
||||||
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
g_return_val_if_fail (event != NULL, NULL);
|
g_return_val_if_fail (event != NULL, NULL);
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
|
||||||
|
|
||||||
if (real_event->device != NULL)
|
if (real_event->device != NULL)
|
||||||
return real_event->device;
|
return real_event->device;
|
||||||
}
|
|
||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
@ -1297,16 +1262,13 @@ clutter_event_get_device (const ClutterEvent *event)
|
|||||||
void
|
void
|
||||||
clutter_event_set_device_tool (ClutterEvent *event,
|
clutter_event_set_device_tool (ClutterEvent *event,
|
||||||
ClutterInputDeviceTool *tool)
|
ClutterInputDeviceTool *tool)
|
||||||
{
|
|
||||||
g_return_if_fail (event != NULL);
|
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
{
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
|
g_return_if_fail (event != NULL);
|
||||||
|
|
||||||
real_event->tool = tool;
|
real_event->tool = tool;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_event_get_device_tool:
|
* clutter_event_get_device_tool:
|
||||||
@ -1320,17 +1282,12 @@ clutter_event_set_device_tool (ClutterEvent *event,
|
|||||||
**/
|
**/
|
||||||
ClutterInputDeviceTool *
|
ClutterInputDeviceTool *
|
||||||
clutter_event_get_device_tool (const ClutterEvent *event)
|
clutter_event_get_device_tool (const ClutterEvent *event)
|
||||||
{
|
|
||||||
g_return_val_if_fail (event != NULL, NULL);
|
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
{
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
return real_event->tool;
|
g_return_val_if_fail (event != NULL, NULL);
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
return real_event->tool;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1352,11 +1309,6 @@ clutter_event_new (ClutterEventType type)
|
|||||||
new_event = (ClutterEvent *) priv;
|
new_event = (ClutterEvent *) priv;
|
||||||
new_event->type = new_event->any.type = type;
|
new_event->type = new_event->any.type = type;
|
||||||
|
|
||||||
if (G_UNLIKELY (all_events == NULL))
|
|
||||||
all_events = g_hash_table_new (NULL, NULL);
|
|
||||||
|
|
||||||
g_hash_table_replace (all_events, priv, GUINT_TO_POINTER (1));
|
|
||||||
|
|
||||||
return new_event;
|
return new_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1374,6 +1326,7 @@ clutter_event_copy (const ClutterEvent *event)
|
|||||||
ClutterEvent *new_event;
|
ClutterEvent *new_event;
|
||||||
ClutterEventPrivate *new_real_event;
|
ClutterEventPrivate *new_real_event;
|
||||||
ClutterInputDevice *device;
|
ClutterInputDevice *device;
|
||||||
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
gint n_axes = 0;
|
gint n_axes = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (event != NULL, NULL);
|
g_return_val_if_fail (event != NULL, NULL);
|
||||||
@ -1383,10 +1336,6 @@ clutter_event_copy (const ClutterEvent *event)
|
|||||||
|
|
||||||
*new_event = *event;
|
*new_event = *event;
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
|
||||||
|
|
||||||
g_set_object (&new_real_event->device, real_event->device);
|
g_set_object (&new_real_event->device, real_event->device);
|
||||||
g_set_object (&new_real_event->source_device, real_event->source_device);
|
g_set_object (&new_real_event->source_device, real_event->source_device);
|
||||||
new_real_event->delta_x = real_event->delta_x;
|
new_real_event->delta_x = real_event->delta_x;
|
||||||
@ -1397,7 +1346,6 @@ clutter_event_copy (const ClutterEvent *event)
|
|||||||
new_real_event->latched_state = real_event->latched_state;
|
new_real_event->latched_state = real_event->latched_state;
|
||||||
new_real_event->locked_state = real_event->locked_state;
|
new_real_event->locked_state = real_event->locked_state;
|
||||||
new_real_event->tool = real_event->tool;
|
new_real_event->tool = real_event->tool;
|
||||||
}
|
|
||||||
|
|
||||||
device = clutter_event_get_device (event);
|
device = clutter_event_get_device (event);
|
||||||
if (device != NULL)
|
if (device != NULL)
|
||||||
@ -1446,7 +1394,6 @@ clutter_event_copy (const ClutterEvent *event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
_clutter_backend_copy_event_data (clutter_get_default_backend (),
|
_clutter_backend_copy_event_data (clutter_get_default_backend (),
|
||||||
event,
|
event,
|
||||||
new_event);
|
new_event);
|
||||||
@ -1464,16 +1411,13 @@ void
|
|||||||
clutter_event_free (ClutterEvent *event)
|
clutter_event_free (ClutterEvent *event)
|
||||||
{
|
{
|
||||||
if (G_LIKELY (event != NULL))
|
if (G_LIKELY (event != NULL))
|
||||||
{
|
|
||||||
_clutter_backend_free_event_data (clutter_get_default_backend (), event);
|
|
||||||
|
|
||||||
if (is_event_allocated (event))
|
|
||||||
{
|
{
|
||||||
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
|
_clutter_backend_free_event_data (clutter_get_default_backend (), event);
|
||||||
|
|
||||||
g_clear_object (&real_event->device);
|
g_clear_object (&real_event->device);
|
||||||
g_clear_object (&real_event->source_device);
|
g_clear_object (&real_event->source_device);
|
||||||
}
|
|
||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
@ -1506,7 +1450,6 @@ clutter_event_free (ClutterEvent *event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hash_table_remove (all_events, event);
|
|
||||||
g_slice_free (ClutterEventPrivate, (ClutterEventPrivate *) event);
|
g_slice_free (ClutterEventPrivate, (ClutterEventPrivate *) event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1673,9 +1616,6 @@ clutter_event_get_source_device (const ClutterEvent *event)
|
|||||||
{
|
{
|
||||||
ClutterEventPrivate *real_event;
|
ClutterEventPrivate *real_event;
|
||||||
|
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
real_event = (ClutterEventPrivate *) event;
|
real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
if (real_event->source_device != NULL)
|
if (real_event->source_device != NULL)
|
||||||
@ -1704,9 +1644,6 @@ clutter_event_set_source_device (ClutterEvent *event,
|
|||||||
g_return_if_fail (event != NULL);
|
g_return_if_fail (event != NULL);
|
||||||
g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
|
g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
real_event = (ClutterEventPrivate *) event;
|
real_event = (ClutterEventPrivate *) event;
|
||||||
g_set_object (&real_event->source_device, device);
|
g_set_object (&real_event->source_device, device);
|
||||||
}
|
}
|
||||||
@ -1909,9 +1846,6 @@ clutter_event_is_pointer_emulated (const ClutterEvent *event)
|
|||||||
{
|
{
|
||||||
g_return_val_if_fail (event != NULL, FALSE);
|
g_return_val_if_fail (event != NULL, FALSE);
|
||||||
|
|
||||||
if (!is_event_allocated (event))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return ((ClutterEventPrivate *) event)->is_pointer_emulated;
|
return ((ClutterEventPrivate *) event)->is_pointer_emulated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user