summaryrefslogtreecommitdiff
path: root/clutter/clutter-event.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2011-01-18 22:31:14 +0000
committerEmmanuele Bassi <ebassi@linux.intel.com>2011-01-21 10:25:45 +0000
commitd078fe09301db384b7a465b86ad83dab860576b4 (patch)
treedffaa462ce0f5a777ebffa1b246955276aa4cc5e /clutter/clutter-event.c
parent405e611279321ebe293e02b4507899355f49cc64 (diff)
downloadclutter-d078fe09301db384b7a465b86ad83dab860576b4.tar.gz
event: Fix up clutter_event_copy()
We need to copy the scroll axis data, and we need to copy the private Event data from the source event to the target event structure.
Diffstat (limited to 'clutter/clutter-event.c')
-rw-r--r--clutter/clutter-event.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c
index 9f4588dd7..a5908a473 100644
--- a/clutter/clutter-event.c
+++ b/clutter/clutter-event.c
@@ -676,12 +676,22 @@ ClutterEvent *
clutter_event_copy (const ClutterEvent *event)
{
ClutterEvent *new_event;
+ ClutterEventPrivate *new_real_event;
g_return_val_if_fail (event != NULL, NULL);
new_event = clutter_event_new (CLUTTER_NOTHING);
+ new_real_event = (ClutterEventPrivate *) new_event;
+
*new_event = *event;
+ if (is_event_allocated (event))
+ {
+ ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
+
+ new_real_event->source_device = real_event->source_device;
+ }
+
switch (event->type)
{
case CLUTTER_BUTTON_PRESS:
@@ -696,6 +706,17 @@ clutter_event_copy (const ClutterEvent *event)
}
break;
+ case CLUTTER_SCROLL:
+ if (event->scroll.device != NULL && event->scroll.axes != NULL)
+ {
+ gint n_axes;
+
+ n_axes = clutter_input_device_get_n_axes (event->scroll.device);
+ new_event->scroll.axes = g_memdup (event->scroll.axes,
+ sizeof (gdouble) * n_axes);
+ }
+ break;
+
case CLUTTER_MOTION:
if (event->motion.device != NULL && event->motion.axes != NULL)
{
@@ -743,6 +764,10 @@ clutter_event_free (ClutterEvent *event)
g_free (event->motion.axes);
break;
+ case CLUTTER_SCROLL:
+ g_free (event->scroll.axes);
+ break;
+
default:
break;
}