diff options
Diffstat (limited to 'clutter/clutter-event.c')
-rw-r--r-- | clutter/clutter-event.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c index 2547572ca..6b669128f 100644 --- a/clutter/clutter-event.c +++ b/clutter/clutter-event.c @@ -56,6 +56,11 @@ typedef struct _ClutterEventPrivate { gpointer platform_data; + ClutterModifierType button_state; + ClutterModifierType base_state; + ClutterModifierType latched_state; + ClutterModifierType locked_state; + guint is_pointer_emulated : 1; } ClutterEventPrivate; @@ -265,6 +270,61 @@ clutter_event_set_state (ClutterEvent *event, } } +void +_clutter_event_set_state_full (ClutterEvent *event, + ClutterModifierType button_state, + ClutterModifierType base_state, + ClutterModifierType latched_state, + ClutterModifierType locked_state, + ClutterModifierType effective_state) +{ + ClutterEventPrivate *private = (ClutterEventPrivate*) event; + + private->button_state = button_state; + private->base_state = base_state; + private->latched_state = latched_state; + private->locked_state = locked_state; + + clutter_event_set_state (event, effective_state); +} + +/** + * clutter_event_get_state_full: + * @event: a #ClutterEvent + * @button_state: (out) (allow-none): the pressed buttons as a mask + * @base_state: (out) (allow-none): the regular pressed modifier keys + * @latched_state: (out) (allow-none): the latched modifier keys (currently released but still valid for one key press/release) + * @locked_state: (out) (allow-none): the locked modifier keys (valid until the lock key is pressed and released again) + * @effective_state: (out) (allow-none): the or of all the state bits above + * + * Retrieves the decomposition of the keyboard state into button, base, + * latched, locked and effective. This can be used to transmit to other + * applications, for example when implementing a wayland compositor. + */ +void +clutter_event_get_state_full (const ClutterEvent *event, + ClutterModifierType *button_state, + ClutterModifierType *base_state, + ClutterModifierType *latched_state, + ClutterModifierType *locked_state, + ClutterModifierType *effective_state) +{ + const ClutterEventPrivate *private = (const ClutterEventPrivate*) event; + + g_return_if_fail (event != NULL); + + if (button_state) + *button_state = private->button_state; + if (base_state) + *base_state = private->base_state; + if (latched_state) + *latched_state = private->latched_state; + if (locked_state) + *locked_state = private->locked_state; + if (effective_state) + *effective_state = clutter_event_get_state (event); +} + /** * clutter_event_get_coords: * @event: a #ClutterEvent |