Blame clutter/clutter-event.c

Packit Service bf98b9
/*
Packit Service bf98b9
 * Clutter.
Packit Service bf98b9
 *
Packit Service bf98b9
 * An OpenGL based 'interactive canvas' library.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Authored By Matthew Allum  <mallum@openedhand.com>
Packit Service bf98b9
 *
Packit Service bf98b9
 * Copyright (C) 2006 OpenedHand
Packit Service bf98b9
 *
Packit Service bf98b9
 * This library is free software; you can redistribute it and/or
Packit Service bf98b9
 * modify it under the terms of the GNU Lesser General Public
Packit Service bf98b9
 * License as published by the Free Software Foundation; either
Packit Service bf98b9
 * version 2 of the License, or (at your option) any later version.
Packit Service bf98b9
 *
Packit Service bf98b9
 * This library is distributed in the hope that it will be useful,
Packit Service bf98b9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service bf98b9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service bf98b9
 * Lesser General Public License for more details.
Packit Service bf98b9
 *
Packit Service bf98b9
 * You should have received a copy of the GNU Lesser General Public
Packit Service bf98b9
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit Service bf98b9
 *
Packit Service bf98b9
 *
Packit Service bf98b9
 */
Packit Service bf98b9
Packit Service bf98b9
#ifdef HAVE_CONFIG_H
Packit Service bf98b9
#include "config.h"
Packit Service bf98b9
#endif
Packit Service bf98b9
Packit Service bf98b9
#include "clutter-backend-private.h"
Packit Service bf98b9
#include "clutter-debug.h"
Packit Service bf98b9
#include "clutter-event-private.h"
Packit Service bf98b9
#include "clutter-keysyms.h"
Packit Service bf98b9
#include "clutter-private.h"
Packit Service bf98b9
Packit Service bf98b9
#include <math.h>
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * SECTION:clutter-event
Packit Service bf98b9
 * @short_description: User and window system events
Packit Service bf98b9
 *
Packit Service bf98b9
 * Windowing events handled by Clutter.
Packit Service bf98b9
 *
Packit Service bf98b9
 * The events usually come from the windowing backend, but can also
Packit Service bf98b9
 * be synthesized by Clutter itself or by the application code.
Packit Service bf98b9
 */
Packit Service bf98b9
Packit Service bf98b9
typedef struct _ClutterEventPrivate {
Packit Service bf98b9
  ClutterEvent base;
Packit Service bf98b9
Packit Service bf98b9
  ClutterInputDevice *device;
Packit Service bf98b9
  ClutterInputDevice *source_device;
Packit Service bf98b9
Packit Service bf98b9
  gdouble delta_x;
Packit Service bf98b9
  gdouble delta_y;
Packit Service bf98b9
Packit Service bf98b9
  gpointer platform_data;
Packit Service bf98b9
Packit Service bf98b9
  ClutterModifierType button_state;
Packit Service bf98b9
  ClutterModifierType base_state;
Packit Service bf98b9
  ClutterModifierType latched_state;
Packit Service bf98b9
  ClutterModifierType locked_state;
Packit Service bf98b9
Packit Service bf98b9
  guint is_pointer_emulated : 1;
Packit Service bf98b9
} ClutterEventPrivate;
Packit Service bf98b9
Packit Service bf98b9
typedef struct _ClutterEventFilter {
Packit Service bf98b9
  int id;
Packit Service bf98b9
Packit Service bf98b9
  ClutterStage *stage;
Packit Service bf98b9
  ClutterEventFilterFunc func;
Packit Service bf98b9
  GDestroyNotify notify;
Packit Service bf98b9
  gpointer user_data;
Packit Service bf98b9
} ClutterEventFilter;
Packit Service bf98b9
Packit Service bf98b9
static GHashTable *all_events = NULL;
Packit Service bf98b9
Packit Service bf98b9
G_DEFINE_BOXED_TYPE (ClutterEvent, clutter_event,
Packit Service bf98b9
                     clutter_event_copy,
Packit Service bf98b9
                     clutter_event_free);
Packit Service bf98b9
Packit Service bf98b9
static ClutterEventSequence *
Packit Service bf98b9
clutter_event_sequence_copy (ClutterEventSequence *sequence)
Packit Service bf98b9
{
Packit Service bf98b9
  /* Nothing to copy here */
Packit Service bf98b9
  return sequence;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
static void
Packit Service bf98b9
clutter_event_sequence_free (ClutterEventSequence *sequence)
Packit Service bf98b9
{
Packit Service bf98b9
  /* Nothing to free here */
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
G_DEFINE_BOXED_TYPE (ClutterEventSequence, clutter_event_sequence,
Packit Service bf98b9
                     clutter_event_sequence_copy,
Packit Service bf98b9
                     clutter_event_sequence_free);
Packit Service bf98b9
Packit Service bf98b9
static gboolean
Packit Service bf98b9
is_event_allocated (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  if (all_events == NULL)
Packit Service bf98b9
    return FALSE;
Packit Service bf98b9
Packit Service bf98b9
  return g_hash_table_lookup (all_events, event) != NULL;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/*
Packit Service bf98b9
 * _clutter_event_get_platform_data:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the pointer to platform-specific data inside an event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: a pointer to platform-specific data
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.4
Packit Service bf98b9
 */
Packit Service bf98b9
gpointer
Packit Service bf98b9
_clutter_event_get_platform_data (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  return ((ClutterEventPrivate *) event)->platform_data;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/*< private >
Packit Service bf98b9
 * _clutter_event_set_platform_data:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @data: a pointer to platform-specific data
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the pointer to platform-specific data inside an event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.4
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
_clutter_event_set_platform_data (ClutterEvent *event,
Packit Service bf98b9
                                  gpointer      data)
Packit Service bf98b9
{
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  ((ClutterEventPrivate *) event)->platform_data = data;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
void
Packit Service bf98b9
_clutter_event_set_pointer_emulated (ClutterEvent *event,
Packit Service bf98b9
                                     gboolean      is_emulated)
Packit Service bf98b9
{
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  ((ClutterEventPrivate *) event)->is_pointer_emulated = !!is_emulated;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_type:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the type of the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: a #ClutterEventType
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEventType
Packit Service bf98b9
clutter_event_type (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_NOTHING);
Packit Service bf98b9
Packit Service bf98b9
  return event->type;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_time:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the time of the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the time of the event, or %CLUTTER_CURRENT_TIME
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
guint32
Packit Service bf98b9
clutter_event_get_time (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_CURRENT_TIME);
Packit Service bf98b9
Packit Service bf98b9
  return event->any.time;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_time:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @time_: the time of the event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the time of the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_time (ClutterEvent *event,
Packit Service bf98b9
                        guint32       time_)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  event->any.time = time_;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_state:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the modifier state of the event. In case the window system
Packit Service bf98b9
 * supports reporting latched and locked modifiers, this function returns
Packit Service bf98b9
 * the effective state.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the modifier state parameter, or 0
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterModifierType
Packit Service bf98b9
clutter_event_get_state (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
      return event->key.modifier_state;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      return event->button.modifier_state;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      return event->touch.modifier_state;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      return event->motion.modifier_state;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      return event->scroll.modifier_state;
Packit Service bf98b9
Packit Service bf98b9
    default:
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  return 0;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_state:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @state: the modifier state to set
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the modifier state of the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_state (ClutterEvent        *event,
Packit Service bf98b9
                         ClutterModifierType  state)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
      event->key.modifier_state = state;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      event->button.modifier_state = state;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      event->motion.modifier_state = state;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      event->touch.modifier_state = state;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      event->scroll.modifier_state = state;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    default:
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
void
Packit Service bf98b9
_clutter_event_set_state_full (ClutterEvent        *event,
Packit Service bf98b9
			       ClutterModifierType  button_state,
Packit Service bf98b9
			       ClutterModifierType  base_state,
Packit Service bf98b9
			       ClutterModifierType  latched_state,
Packit Service bf98b9
			       ClutterModifierType  locked_state,
Packit Service bf98b9
			       ClutterModifierType  effective_state)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterEventPrivate *private = (ClutterEventPrivate*) event;
Packit Service bf98b9
Packit Service bf98b9
  private->button_state = button_state;
Packit Service bf98b9
  private->base_state = base_state;
Packit Service bf98b9
  private->latched_state = latched_state;
Packit Service bf98b9
  private->locked_state = locked_state;
Packit Service bf98b9
Packit Service bf98b9
  clutter_event_set_state (event, effective_state);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_state_full:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @button_state: (out) (allow-none): the pressed buttons as a mask
Packit Service bf98b9
 * @base_state: (out) (allow-none): the regular pressed modifier keys
Packit Service bf98b9
 * @latched_state: (out) (allow-none): the latched modifier keys (currently released but still valid for one key press/release)
Packit Service bf98b9
 * @locked_state: (out) (allow-none): the locked modifier keys (valid until the lock key is pressed and released again)
Packit Service bf98b9
 * @effective_state: (out) (allow-none): the logical OR of all the state bits above
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the decomposition of the keyboard state into button, base,
Packit Service bf98b9
 * latched, locked and effective. This can be used to transmit to other
Packit Service bf98b9
 * applications, for example when implementing a wayland compositor.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.16
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_get_state_full (const ClutterEvent  *event,
Packit Service bf98b9
			      ClutterModifierType *button_state,
Packit Service bf98b9
			      ClutterModifierType *base_state,
Packit Service bf98b9
			      ClutterModifierType *latched_state,
Packit Service bf98b9
			      ClutterModifierType *locked_state,
Packit Service bf98b9
			      ClutterModifierType *effective_state)
Packit Service bf98b9
{
Packit Service bf98b9
  const ClutterEventPrivate *private = (const ClutterEventPrivate*) event;
Packit Service bf98b9
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  if (button_state)
Packit Service bf98b9
    *button_state = private->button_state;
Packit Service bf98b9
  if (base_state)
Packit Service bf98b9
    *base_state = private->base_state;
Packit Service bf98b9
  if (latched_state)
Packit Service bf98b9
    *latched_state = private->latched_state;
Packit Service bf98b9
  if (locked_state)
Packit Service bf98b9
    *locked_state = private->locked_state;
Packit Service bf98b9
  if (effective_state)
Packit Service bf98b9
    *effective_state = clutter_event_get_state (event);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_coords:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @x: (out): return location for the X coordinate, or %NULL
Packit Service bf98b9
 * @y: (out): return location for the Y coordinate, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the coordinates of @event and puts them into @x and @y.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_get_coords (const ClutterEvent *event,
Packit Service bf98b9
                          gfloat             *x,
Packit Service bf98b9
                          gfloat             *y)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterPoint coords;
Packit Service bf98b9
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  clutter_event_get_position (event, &coords);
Packit Service bf98b9
Packit Service bf98b9
  if (x != NULL)
Packit Service bf98b9
    *x = coords.x;
Packit Service bf98b9
Packit Service bf98b9
  if (y != NULL)
Packit Service bf98b9
    *y = coords.y;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_position:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @position: a #ClutterPoint
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the event coordinates as a #ClutterPoint.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_get_position (const ClutterEvent *event,
Packit Service bf98b9
                            ClutterPoint       *position)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (position != NULL);
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_NOTHING:
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
    case CLUTTER_STAGE_STATE:
Packit Service bf98b9
    case CLUTTER_DESTROY_NOTIFY:
Packit Service bf98b9
    case CLUTTER_CLIENT_MESSAGE:
Packit Service bf98b9
    case CLUTTER_DELETE:
Packit Service bf98b9
    case CLUTTER_EVENT_LAST:
Packit Service bf98b9
      clutter_point_init (position, 0.f, 0.f);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_ENTER:
Packit Service bf98b9
    case CLUTTER_LEAVE:
Packit Service bf98b9
      clutter_point_init (position, event->crossing.x, event->crossing.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      clutter_point_init (position, event->button.x, event->button.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      clutter_point_init (position, event->motion.x, event->motion.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      clutter_point_init (position, event->touch.x, event->touch.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      clutter_point_init (position, event->scroll.x, event->scroll.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_PINCH:
Packit Service bf98b9
      clutter_point_init (position, event->touchpad_pinch.x,
Packit Service bf98b9
                          event->touchpad_pinch.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_SWIPE:
Packit Service bf98b9
      clutter_point_init (position, event->touchpad_swipe.x,
Packit Service bf98b9
                          event->touchpad_swipe.y);
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_coords:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @x: the X coordinate of the event
Packit Service bf98b9
 * @y: the Y coordinate of the event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the coordinates of the @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_coords (ClutterEvent *event,
Packit Service bf98b9
                          gfloat        x,
Packit Service bf98b9
                          gfloat        y)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_NOTHING:
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
    case CLUTTER_STAGE_STATE:
Packit Service bf98b9
    case CLUTTER_DESTROY_NOTIFY:
Packit Service bf98b9
    case CLUTTER_CLIENT_MESSAGE:
Packit Service bf98b9
    case CLUTTER_DELETE:
Packit Service bf98b9
    case CLUTTER_EVENT_LAST:
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_ENTER:
Packit Service bf98b9
    case CLUTTER_LEAVE:
Packit Service bf98b9
      event->crossing.x = x;
Packit Service bf98b9
      event->crossing.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      event->button.x = x;
Packit Service bf98b9
      event->button.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      event->motion.x = x;
Packit Service bf98b9
      event->motion.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      event->touch.x = x;
Packit Service bf98b9
      event->touch.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      event->scroll.x = x;
Packit Service bf98b9
      event->scroll.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_PINCH:
Packit Service bf98b9
      event->touchpad_pinch.x = x;
Packit Service bf98b9
      event->touchpad_pinch.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_SWIPE:
Packit Service bf98b9
      event->touchpad_swipe.x = x;
Packit Service bf98b9
      event->touchpad_swipe.y = y;
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_source:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the source #ClutterActor the event originated from, or
Packit Service bf98b9
 * NULL if the event has no source.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): a #ClutterActor
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.6
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterActor *
Packit Service bf98b9
clutter_event_get_source (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  return event->any.source;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_source:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @actor: (allow-none): a #ClutterActor, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the source #ClutterActor of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_source (ClutterEvent *event,
Packit Service bf98b9
                          ClutterActor *actor)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
Packit Service bf98b9
Packit Service bf98b9
  event->any.source = actor;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_stage:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the source #ClutterStage the event originated for, or
Packit Service bf98b9
 * %NULL if the event has no stage.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): a #ClutterStage
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.8
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterStage *
Packit Service bf98b9
clutter_event_get_stage (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  return event->any.stage;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_stage:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @stage: (allow-none): a #ClutterStage, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the source #ClutterStage of the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_stage (ClutterEvent *event,
Packit Service bf98b9
                         ClutterStage *stage)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (stage == NULL || CLUTTER_IS_STAGE (stage));
Packit Service bf98b9
Packit Service bf98b9
  if (event->any.stage == stage)
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  event->any.stage = stage;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_flags:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the #ClutterEventFlags of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the event flags
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEventFlags
Packit Service bf98b9
clutter_event_get_flags (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_EVENT_NONE);
Packit Service bf98b9
Packit Service bf98b9
  return event->any.flags;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_flags:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @flags: a binary OR of #ClutterEventFlags values
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the #ClutterEventFlags of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_flags (ClutterEvent      *event,
Packit Service bf98b9
                         ClutterEventFlags  flags)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
Packit Service bf98b9
  if (event->any.flags == flags)
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  event->any.flags = flags;
Packit Service bf98b9
  event->any.flags |= CLUTTER_EVENT_FLAG_SYNTHETIC;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_related:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_ENTER or of
Packit Service bf98b9
 *   type %CLUTTER_LEAVE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the related actor of a crossing event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): the related #ClutterActor, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterActor *
Packit Service bf98b9
clutter_event_get_related (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_ENTER ||
Packit Service bf98b9
                        event->type == CLUTTER_LEAVE, NULL);
Packit Service bf98b9
Packit Service bf98b9
  return event->crossing.related;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_related:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_ENTER or %CLUTTER_LEAVE
Packit Service bf98b9
 * @actor: (allow-none): a #ClutterActor or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the related actor of a crossing event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_related (ClutterEvent *event,
Packit Service bf98b9
                           ClutterActor *actor)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_ENTER ||
Packit Service bf98b9
                    event->type == CLUTTER_LEAVE);
Packit Service bf98b9
  g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
Packit Service bf98b9
Packit Service bf98b9
  if (event->crossing.related == actor)
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  event->crossing.related = actor;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_scroll_delta:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_SCROLL
Packit Service bf98b9
 * @dx: delta on the horizontal axis
Packit Service bf98b9
 * @dy: delta on the vertical axis
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the precise scrolling information of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.10
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_scroll_delta (ClutterEvent *event,
Packit Service bf98b9
                                gdouble       dx,
Packit Service bf98b9
                                gdouble       dy)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_SCROLL);
Packit Service bf98b9
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
Packit Service bf98b9
Packit Service bf98b9
  ((ClutterEventPrivate *) event)->delta_x = dx;
Packit Service bf98b9
  ((ClutterEventPrivate *) event)->delta_y = dy;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_scroll_delta:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_SCROLL
Packit Service bf98b9
 * @dx: (out): return location for the delta on the horizontal axis
Packit Service bf98b9
 * @dy: (out): return location for the delta on the vertical axis
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the precise scrolling information of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * The @event has to have a #ClutterScrollEvent.direction value
Packit Service bf98b9
 * of %CLUTTER_SCROLL_SMOOTH.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.10
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_get_scroll_delta (const ClutterEvent *event,
Packit Service bf98b9
                                gdouble            *dx,
Packit Service bf98b9
                                gdouble            *dy)
Packit Service bf98b9
{
Packit Service bf98b9
  gdouble delta_x, delta_y;
Packit Service bf98b9
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_SCROLL);
Packit Service bf98b9
  g_return_if_fail (event->scroll.direction == CLUTTER_SCROLL_SMOOTH);
Packit Service bf98b9
Packit Service bf98b9
  delta_x = delta_y = 0;
Packit Service bf98b9
Packit Service bf98b9
  if (is_event_allocated (event))
Packit Service bf98b9
    {
Packit Service bf98b9
      delta_x = ((ClutterEventPrivate *) event)->delta_x;
Packit Service bf98b9
      delta_y = ((ClutterEventPrivate *) event)->delta_y;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  if (dx != NULL)
Packit Service bf98b9
    *dx = delta_x;
Packit Service bf98b9
Packit Service bf98b9
  if (dy != NULL)
Packit Service bf98b9
    *dy = delta_y;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_scroll_direction:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_SCROLL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the direction of the scrolling of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the scrolling direction
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterScrollDirection
Packit Service bf98b9
clutter_event_get_scroll_direction (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_SCROLL_UP);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_SCROLL, CLUTTER_SCROLL_UP);
Packit Service bf98b9
Packit Service bf98b9
  return event->scroll.direction;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_scroll_direction:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @direction: the scrolling direction
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the direction of the scrolling of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_scroll_direction (ClutterEvent           *event,
Packit Service bf98b9
                                    ClutterScrollDirection  direction)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_SCROLL);
Packit Service bf98b9
Packit Service bf98b9
  event->scroll.direction = direction;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_button:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_BUTTON_PRESS or
Packit Service bf98b9
 *   of type %CLUTTER_BUTTON_RELEASE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the button number of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the button number
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
guint32
Packit Service bf98b9
clutter_event_get_button (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
Packit Service bf98b9
                        event->type == CLUTTER_BUTTON_RELEASE, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->button.button;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_button:
Packit Service bf98b9
 * @event: a #ClutterEvent or type %CLUTTER_BUTTON_PRESS or
Packit Service bf98b9
 *   of type %CLUTTER_BUTTON_RELEASE
Packit Service bf98b9
 * @button: the button number
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the button number of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_button (ClutterEvent *event,
Packit Service bf98b9
                          guint32       button)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
Packit Service bf98b9
                    event->type == CLUTTER_BUTTON_RELEASE);
Packit Service bf98b9
Packit Service bf98b9
  event->button.button = button;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_click_count:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_BUTTON_PRESS or
Packit Service bf98b9
 *   of type %CLUTTER_BUTTON_RELEASE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the number of clicks of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the click count
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
guint32
Packit Service bf98b9
clutter_event_get_click_count (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
Packit Service bf98b9
                        event->type == CLUTTER_BUTTON_RELEASE, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->button.click_count;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/* keys */
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_key_symbol:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS or
Packit Service bf98b9
 *   of type %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the key symbol of @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the key symbol representing the key
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
guint
Packit Service bf98b9
clutter_event_get_key_symbol (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                        event->type == CLUTTER_KEY_RELEASE, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->key.keyval;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_key_symbol:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS
Packit Service bf98b9
 *   or %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 * @key_sym: the key symbol representing the key
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the key symbol of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_key_symbol (ClutterEvent *event,
Packit Service bf98b9
                              guint         key_sym)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                    event->type == CLUTTER_KEY_RELEASE);
Packit Service bf98b9
Packit Service bf98b9
  event->key.keyval = key_sym;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_key_code:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS or
Packit Service bf98b9
 *    of type %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the keycode of the key that caused @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: The keycode representing the key
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
guint16
Packit Service bf98b9
clutter_event_get_key_code (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                        event->type == CLUTTER_KEY_RELEASE, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->key.hardware_keycode;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_key_code:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS
Packit Service bf98b9
 *   or %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 * @key_code: the keycode representing the key
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the keycode of the @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_key_code (ClutterEvent *event,
Packit Service bf98b9
                            guint16       key_code)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                    event->type == CLUTTER_KEY_RELEASE);
Packit Service bf98b9
Packit Service bf98b9
  event->key.hardware_keycode = key_code;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_key_unicode:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS
Packit Service bf98b9
 *   or %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the unicode value for the key that caused @keyev.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: The unicode value representing the key
Packit Service bf98b9
 */
Packit Service bf98b9
gunichar
Packit Service bf98b9
clutter_event_get_key_unicode (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                        event->type == CLUTTER_KEY_RELEASE, 0);
Packit Service bf98b9
Packit Service bf98b9
  if (event->key.unicode_value)
Packit Service bf98b9
    return event->key.unicode_value;
Packit Service bf98b9
  else
Packit Service bf98b9
    return clutter_keysym_to_unicode (event->key.keyval);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_key_unicode:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS
Packit Service bf98b9
 *   or %CLUTTER_KEY_RELEASE
Packit Service bf98b9
 * @key_unicode: the Unicode value representing the key
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the Unicode value of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_key_unicode (ClutterEvent *event,
Packit Service bf98b9
                               gunichar      key_unicode)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_KEY_PRESS ||
Packit Service bf98b9
                    event->type == CLUTTER_KEY_RELEASE);
Packit Service bf98b9
Packit Service bf98b9
  event->key.unicode_value = key_unicode;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_event_sequence:
Packit Service bf98b9
 * @event: a #ClutterEvent of type %CLUTTER_TOUCH_BEGIN,
Packit Service bf98b9
 *   %CLUTTER_TOUCH_UPDATE, %CLUTTER_TOUCH_END, or
Packit Service bf98b9
 *   %CLUTTER_TOUCH_CANCEL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the #ClutterEventSequence of @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): the event sequence, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.10
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEventSequence *
Packit Service bf98b9
clutter_event_get_event_sequence (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  if (event->type == CLUTTER_TOUCH_BEGIN ||
Packit Service bf98b9
      event->type == CLUTTER_TOUCH_UPDATE ||
Packit Service bf98b9
      event->type == CLUTTER_TOUCH_END ||
Packit Service bf98b9
      event->type == CLUTTER_TOUCH_CANCEL)
Packit Service bf98b9
    return event->touch.sequence;
Packit Service bf98b9
Packit Service bf98b9
  return NULL;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_device_id:
Packit Service bf98b9
 * @event: a clutter event 
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the events device id if set.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: A unique identifier for the device or -1 if the event has
Packit Service bf98b9
 *   no specific device set.
Packit Service bf98b9
 */
Packit Service bf98b9
gint
Packit Service bf98b9
clutter_event_get_device_id (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterInputDevice *device = NULL;
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_POINTER_DEVICE);
Packit Service bf98b9
Packit Service bf98b9
  device = clutter_event_get_device (event);
Packit Service bf98b9
  if (device != NULL)
Packit Service bf98b9
    return clutter_input_device_get_device_id (device);
Packit Service bf98b9
Packit Service bf98b9
  return -1;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_device_type:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the type of the device for @event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the #ClutterInputDeviceType for the device, if
Packit Service bf98b9
 *   any is set
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterInputDeviceType
Packit Service bf98b9
clutter_event_get_device_type (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterInputDevice *device = NULL;
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_POINTER_DEVICE);
Packit Service bf98b9
Packit Service bf98b9
  device = clutter_event_get_device (event);
Packit Service bf98b9
  if (device != NULL)
Packit Service bf98b9
    return clutter_input_device_get_device_type (device);
Packit Service bf98b9
Packit Service bf98b9
  return CLUTTER_POINTER_DEVICE;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_device:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @device: (allow-none): a #ClutterInputDevice, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the device for @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.6
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_device (ClutterEvent       *event,
Packit Service bf98b9
                          ClutterInputDevice *device)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
Packit Service bf98b9
Packit Service bf98b9
  if (is_event_allocated (event))
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
Packit Service bf98b9
Packit Service bf98b9
      real_event->device = device;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_NOTHING:
Packit Service bf98b9
    case CLUTTER_STAGE_STATE:
Packit Service bf98b9
    case CLUTTER_DESTROY_NOTIFY:
Packit Service bf98b9
    case CLUTTER_CLIENT_MESSAGE:
Packit Service bf98b9
    case CLUTTER_DELETE:
Packit Service bf98b9
    case CLUTTER_EVENT_LAST:
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_ENTER:
Packit Service bf98b9
    case CLUTTER_LEAVE:
Packit Service bf98b9
      event->crossing.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      event->button.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      event->motion.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      event->scroll.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      event->touch.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
      event->key.device = device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_PINCH:
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_SWIPE:
Packit Service bf98b9
      /* Rely on priv data for these */
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_device:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the #ClutterInputDevice for the event.
Packit Service bf98b9
 * If you want the physical device the event originated from, use
Packit Service bf98b9
 * clutter_event_get_source_device().
Packit Service bf98b9
 *
Packit Service bf98b9
 * The #ClutterInputDevice structure is completely opaque and should
Packit Service bf98b9
 * be cast to the platform-specific implementation.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): the #ClutterInputDevice or %NULL. The
Packit Service bf98b9
 *   returned device is owned by the #ClutterEvent and it should not
Packit Service bf98b9
 *   be unreferenced
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterInputDevice *
Packit Service bf98b9
clutter_event_get_device (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterInputDevice *device = NULL;
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  if (is_event_allocated (event))
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
Packit Service bf98b9
Packit Service bf98b9
      if (real_event->device != NULL)
Packit Service bf98b9
        return real_event->device;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_NOTHING:
Packit Service bf98b9
    case CLUTTER_STAGE_STATE:
Packit Service bf98b9
    case CLUTTER_DESTROY_NOTIFY:
Packit Service bf98b9
    case CLUTTER_CLIENT_MESSAGE:
Packit Service bf98b9
    case CLUTTER_DELETE:
Packit Service bf98b9
    case CLUTTER_EVENT_LAST:
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_ENTER:
Packit Service bf98b9
    case CLUTTER_LEAVE:
Packit Service bf98b9
      device = event->crossing.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      device = event->button.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      device = event->motion.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      device = event->scroll.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      device = event->touch.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
      device = event->key.device;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_PINCH:
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_SWIPE:
Packit Service bf98b9
      /* Rely on priv data for these */
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  return device;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_new:
Packit Service bf98b9
 * @type: The type of event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Creates a new #ClutterEvent of the specified type.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer full): A newly allocated #ClutterEvent.
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEvent *
Packit Service bf98b9
clutter_event_new (ClutterEventType type)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterEvent *new_event;
Packit Service bf98b9
  ClutterEventPrivate *priv;
Packit Service bf98b9
Packit Service bf98b9
  priv = g_slice_new0 (ClutterEventPrivate);
Packit Service bf98b9
Packit Service bf98b9
  new_event = (ClutterEvent *) priv;
Packit Service bf98b9
  new_event->type = new_event->any.type = type;
Packit Service bf98b9
Packit Service bf98b9
  if (G_UNLIKELY (all_events == NULL))
Packit Service bf98b9
    all_events = g_hash_table_new (NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  g_hash_table_replace (all_events, priv, GUINT_TO_POINTER (1));
Packit Service bf98b9
Packit Service bf98b9
  return new_event;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_copy:
Packit Service bf98b9
 * @event: A #ClutterEvent.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Copies @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer full): A newly allocated #ClutterEvent
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEvent *
Packit Service bf98b9
clutter_event_copy (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterEvent *new_event;
Packit Service bf98b9
  ClutterEventPrivate *new_real_event;
Packit Service bf98b9
  ClutterInputDevice *device;
Packit Service bf98b9
  gint n_axes = 0;
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  new_event = clutter_event_new (CLUTTER_NOTHING);
Packit Service bf98b9
  new_real_event = (ClutterEventPrivate *) new_event;
Packit Service bf98b9
Packit Service bf98b9
  *new_event = *event;
Packit Service bf98b9
Packit Service bf98b9
  if (is_event_allocated (event))
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
Packit Service bf98b9
Packit Service bf98b9
      new_real_event->device = real_event->device;
Packit Service bf98b9
      new_real_event->source_device = real_event->source_device;
Packit Service bf98b9
      new_real_event->delta_x = real_event->delta_x;
Packit Service bf98b9
      new_real_event->delta_y = real_event->delta_y;
Packit Service bf98b9
      new_real_event->is_pointer_emulated = real_event->is_pointer_emulated;
Packit Service bf98b9
      new_real_event->base_state = real_event->base_state;
Packit Service bf98b9
      new_real_event->button_state = real_event->button_state;
Packit Service bf98b9
      new_real_event->latched_state = real_event->latched_state;
Packit Service bf98b9
      new_real_event->locked_state = real_event->locked_state;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  device = clutter_event_get_device (event);
Packit Service bf98b9
  if (device != NULL)
Packit Service bf98b9
    n_axes = clutter_input_device_get_n_axes (device);
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      if (event->button.axes != NULL)
Packit Service bf98b9
        new_event->button.axes = g_memdup (event->button.axes,
Packit Service bf98b9
                                           sizeof (gdouble) * n_axes);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      if (event->scroll.axes != NULL)
Packit Service bf98b9
        new_event->scroll.axes = g_memdup (event->scroll.axes,
Packit Service bf98b9
                                           sizeof (gdouble) * n_axes);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      if (event->motion.axes != NULL)
Packit Service bf98b9
        new_event->motion.axes = g_memdup (event->motion.axes,
Packit Service bf98b9
                                           sizeof (gdouble) * n_axes);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      if (event->touch.axes != NULL)
Packit Service bf98b9
        new_event->touch.axes = g_memdup (event->touch.axes,
Packit Service bf98b9
                                          sizeof (gdouble) * n_axes);
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    default:
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  if (is_event_allocated (event))
Packit Service bf98b9
    _clutter_backend_copy_event_data (clutter_get_default_backend (),
Packit Service bf98b9
                                      event,
Packit Service bf98b9
                                      new_event);
Packit Service bf98b9
Packit Service bf98b9
  return new_event;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_free:
Packit Service bf98b9
 * @event: A #ClutterEvent.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Frees all resources used by @event.
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_free (ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  if (G_LIKELY (event != NULL))
Packit Service bf98b9
    {
Packit Service bf98b9
      _clutter_backend_free_event_data (clutter_get_default_backend (), event);
Packit Service bf98b9
Packit Service bf98b9
      switch (event->type)
Packit Service bf98b9
        {
Packit Service bf98b9
        case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
        case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
          g_free (event->button.axes);
Packit Service bf98b9
          break;
Packit Service bf98b9
Packit Service bf98b9
        case CLUTTER_MOTION:
Packit Service bf98b9
          g_free (event->motion.axes);
Packit Service bf98b9
          break;
Packit Service bf98b9
Packit Service bf98b9
        case CLUTTER_SCROLL:
Packit Service bf98b9
          g_free (event->scroll.axes);
Packit Service bf98b9
          break;
Packit Service bf98b9
Packit Service bf98b9
        case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
        case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
        case CLUTTER_TOUCH_END:
Packit Service bf98b9
        case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
          g_free (event->touch.axes);
Packit Service bf98b9
          break;
Packit Service bf98b9
Packit Service bf98b9
        default:
Packit Service bf98b9
          break;
Packit Service bf98b9
        }
Packit Service bf98b9
Packit Service bf98b9
      g_hash_table_remove (all_events, event);
Packit Service bf98b9
      g_slice_free (ClutterEventPrivate, (ClutterEventPrivate *) event);
Packit Service bf98b9
    }
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get:
Packit Service bf98b9
 *
Packit Service bf98b9
 * Pops an event off the event queue. Applications should not need to call 
Packit Service bf98b9
 * this.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: A #ClutterEvent or NULL if queue empty
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEvent *
Packit Service bf98b9
clutter_event_get (void)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
Packit Service bf98b9
  if (context->events_queue == NULL)
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  if (g_queue_is_empty (context->events_queue))
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  return g_queue_pop_tail (context->events_queue);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_peek:
Packit Service bf98b9
 * 
Packit Service bf98b9
 * Returns a pointer to the first event from the event queue but 
Packit Service bf98b9
 * does not remove it. 
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): A #ClutterEvent or NULL if queue empty.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterEvent *
Packit Service bf98b9
clutter_event_peek (void)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (context != NULL, NULL);
Packit Service bf98b9
  
Packit Service bf98b9
  if (context->events_queue == NULL)
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  if (g_queue_is_empty (context->events_queue))
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  return g_queue_peek_tail (context->events_queue);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
void
Packit Service bf98b9
_clutter_event_push (const ClutterEvent *event,
Packit Service bf98b9
                     gboolean            do_copy)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
  ClutterInputDevice *device;
Packit Service bf98b9
Packit Service bf98b9
  g_assert (context != NULL);
Packit Service bf98b9
Packit Service bf98b9
  if (context->events_queue == NULL)
Packit Service bf98b9
    context->events_queue = g_queue_new ();
Packit Service bf98b9
Packit Service bf98b9
  /* disabled devices don't propagate events */
Packit Service bf98b9
  device = clutter_event_get_device (event);
Packit Service bf98b9
  if (device != NULL)
Packit Service bf98b9
    {
Packit Service bf98b9
      if (!clutter_input_device_get_enabled (device))
Packit Service bf98b9
        return;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  if (do_copy)
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEvent *copy;
Packit Service bf98b9
Packit Service bf98b9
      copy = clutter_event_copy (event);
Packit Service bf98b9
      event = copy;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  g_queue_push_head (context->events_queue, (gpointer) event);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_put:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Puts a copy of the event on the back of the event queue. The event will
Packit Service bf98b9
 * have the %CLUTTER_EVENT_FLAG_SYNTHETIC flag set. If the source is set
Packit Service bf98b9
 * event signals will be emitted for this source and capture/bubbling for
Packit Service bf98b9
 * its ancestors. If the source is not set it will be generated by picking
Packit Service bf98b9
 * or use the actor that currently has keyboard focus
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.6
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_put (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  _clutter_event_push (event, TRUE);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_events_pending:
Packit Service bf98b9
 *
Packit Service bf98b9
 * Checks if events are pending in the event queue.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: TRUE if there are pending events, FALSE otherwise.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 0.4
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean
Packit Service bf98b9
clutter_events_pending (void)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (context != NULL, FALSE);
Packit Service bf98b9
Packit Service bf98b9
  if (context->events_queue == NULL)
Packit Service bf98b9
    return FALSE;
Packit Service bf98b9
Packit Service bf98b9
  return g_queue_is_empty (context->events_queue) == FALSE;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_get_current_event_time:
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the timestamp of the last event, if there is an
Packit Service bf98b9
 * event or if the event has a timestamp.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the event timestamp, or %CLUTTER_CURRENT_TIME
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.0
Packit Service bf98b9
 */
Packit Service bf98b9
guint32
Packit Service bf98b9
clutter_get_current_event_time (void)
Packit Service bf98b9
{
Packit Service bf98b9
  const ClutterEvent* event;
Packit Service bf98b9
Packit Service bf98b9
  event = clutter_get_current_event ();
Packit Service bf98b9
Packit Service bf98b9
  if (event != NULL)
Packit Service bf98b9
    return clutter_event_get_time (event);
Packit Service bf98b9
Packit Service bf98b9
  return CLUTTER_CURRENT_TIME;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_get_current_event:
Packit Service bf98b9
 *
Packit Service bf98b9
 * If an event is currently being processed, return that event.
Packit Service bf98b9
 * This function is intended to be used to access event state
Packit Service bf98b9
 * that might not be exposed by higher-level widgets.  For
Packit Service bf98b9
 * example, to get the key modifier state from a Button 'clicked'
Packit Service bf98b9
 * event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): The current ClutterEvent, or %NULL if none
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.2
Packit Service bf98b9
 */
Packit Service bf98b9
const ClutterEvent *
Packit Service bf98b9
clutter_get_current_event (void)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
Packit Service bf98b9
  g_return_val_if_fail (context != NULL, NULL);
Packit Service bf98b9
Packit Service bf98b9
  return context->current_event != NULL ? context->current_event->data : NULL;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_source_device:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the hardware device that originated the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * If you need the virtual device, use clutter_event_get_device().
Packit Service bf98b9
 *
Packit Service bf98b9
 * If no hardware device originated this event, this function will
Packit Service bf98b9
 * return the same device as clutter_event_get_device().
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): a pointer to a #ClutterInputDevice
Packit Service bf98b9
 *   or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.6
Packit Service bf98b9
 */
Packit Service bf98b9
ClutterInputDevice *
Packit Service bf98b9
clutter_event_get_source_device (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterEventPrivate *real_event;
Packit Service bf98b9
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return NULL;
Packit Service bf98b9
Packit Service bf98b9
  real_event = (ClutterEventPrivate *) event;
Packit Service bf98b9
Packit Service bf98b9
  if (real_event->source_device != NULL)
Packit Service bf98b9
    return real_event->source_device;
Packit Service bf98b9
Packit Service bf98b9
  return clutter_event_get_device (event);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_set_source_device:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @device: (allow-none): a #ClutterInputDevice
Packit Service bf98b9
 *
Packit Service bf98b9
 * Sets the source #ClutterInputDevice for @event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * The #ClutterEvent must have been created using clutter_event_new().
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.8
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_set_source_device (ClutterEvent       *event,
Packit Service bf98b9
                                 ClutterInputDevice *device)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterEventPrivate *real_event;
Packit Service bf98b9
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device));
Packit Service bf98b9
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return;
Packit Service bf98b9
Packit Service bf98b9
  real_event = (ClutterEventPrivate *) event;
Packit Service bf98b9
  real_event->source_device = device;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_axes:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 * @n_axes: (out): return location for the number of axes returned
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the array of axes values attached to the event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: (transfer none): an array of axis values
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.6
Packit Service bf98b9
 */
Packit Service bf98b9
gdouble *
Packit Service bf98b9
clutter_event_get_axes (const ClutterEvent *event,
Packit Service bf98b9
                        guint              *n_axes)
Packit Service bf98b9
{
Packit Service bf98b9
  gdouble *retval = NULL;
Packit Service bf98b9
  guint len = 0;
Packit Service bf98b9
Packit Service bf98b9
  switch (event->type)
Packit Service bf98b9
    {
Packit Service bf98b9
    case CLUTTER_NOTHING:
Packit Service bf98b9
    case CLUTTER_STAGE_STATE:
Packit Service bf98b9
    case CLUTTER_DESTROY_NOTIFY:
Packit Service bf98b9
    case CLUTTER_CLIENT_MESSAGE:
Packit Service bf98b9
    case CLUTTER_DELETE:
Packit Service bf98b9
    case CLUTTER_ENTER:
Packit Service bf98b9
    case CLUTTER_LEAVE:
Packit Service bf98b9
    case CLUTTER_KEY_PRESS:
Packit Service bf98b9
    case CLUTTER_KEY_RELEASE:
Packit Service bf98b9
    case CLUTTER_EVENT_LAST:
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_SCROLL:
Packit Service bf98b9
      retval = event->scroll.axes;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_BUTTON_PRESS:
Packit Service bf98b9
    case CLUTTER_BUTTON_RELEASE:
Packit Service bf98b9
      retval = event->button.axes;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCH_BEGIN:
Packit Service bf98b9
    case CLUTTER_TOUCH_UPDATE:
Packit Service bf98b9
    case CLUTTER_TOUCH_END:
Packit Service bf98b9
    case CLUTTER_TOUCH_CANCEL:
Packit Service bf98b9
      retval = event->touch.axes;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_MOTION:
Packit Service bf98b9
      retval = event->motion.axes;
Packit Service bf98b9
      break;
Packit Service bf98b9
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_PINCH:
Packit Service bf98b9
    case CLUTTER_TOUCHPAD_SWIPE:
Packit Service bf98b9
      break;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  if (retval != NULL)
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterInputDevice *device;
Packit Service bf98b9
Packit Service bf98b9
      device = clutter_event_get_device (event);
Packit Service bf98b9
      if (device != NULL)
Packit Service bf98b9
        len = clutter_input_device_get_n_axes (device);
Packit Service bf98b9
      else
Packit Service bf98b9
        retval = NULL;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  if (n_axes)
Packit Service bf98b9
    *n_axes = len;
Packit Service bf98b9
Packit Service bf98b9
  return retval;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_distance:
Packit Service bf98b9
 * @source: a #ClutterEvent
Packit Service bf98b9
 * @target: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the distance between two events, a @source and a @target.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the distance between two #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
float
Packit Service bf98b9
clutter_event_get_distance (const ClutterEvent *source,
Packit Service bf98b9
                            const ClutterEvent *target)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterPoint p0, p1;
Packit Service bf98b9
Packit Service bf98b9
  clutter_event_get_position (source, &p0;;
Packit Service bf98b9
  clutter_event_get_position (source, &p1;;
Packit Service bf98b9
Packit Service bf98b9
  return clutter_point_distance (&p0, &p1, NULL, NULL);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_angle:
Packit Service bf98b9
 * @source: a #ClutterEvent
Packit Service bf98b9
 * @target: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Retrieves the angle relative from @source to @target.
Packit Service bf98b9
 *
Packit Service bf98b9
 * The direction of the angle is from the position X axis towards
Packit Service bf98b9
 * the positive Y axis.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: the angle between two #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
double
Packit Service bf98b9
clutter_event_get_angle (const ClutterEvent *source,
Packit Service bf98b9
                         const ClutterEvent *target)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterPoint p0, p1;
Packit Service bf98b9
  float x_distance, y_distance;
Packit Service bf98b9
  double angle;
Packit Service bf98b9
Packit Service bf98b9
  clutter_event_get_position (source, &p0;;
Packit Service bf98b9
  clutter_event_get_position (target, &p1;;
Packit Service bf98b9
Packit Service bf98b9
  if (clutter_point_equals (&p0, &p1))
Packit Service bf98b9
    return 0;
Packit Service bf98b9
Packit Service bf98b9
  clutter_point_distance (&p0, &p1, &x_distance, &y_distance);
Packit Service bf98b9
Packit Service bf98b9
  angle = atan2 (x_distance, y_distance);
Packit Service bf98b9
Packit Service bf98b9
  /* invert the angle, and shift it by 90 degrees */
Packit Service bf98b9
  angle = (2.0 * G_PI) - angle;
Packit Service bf98b9
  angle += G_PI / 2.0;
Packit Service bf98b9
Packit Service bf98b9
  /* keep the angle within the [ 0, 360 ] interval */
Packit Service bf98b9
  angle = fmod (angle, 2.0 * G_PI);
Packit Service bf98b9
Packit Service bf98b9
  return angle;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_has_shift_modifier:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Checks whether @event has the Shift modifier mask set.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: %TRUE if the event has the Shift modifier mask set
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean
Packit Service bf98b9
clutter_event_has_shift_modifier (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  return (clutter_event_get_state (event) & CLUTTER_SHIFT_MASK) != FALSE;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_has_control_modifier:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Checks whether @event has the Control modifier mask set.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: %TRUE if the event has the Control modifier mask set
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean
Packit Service bf98b9
clutter_event_has_control_modifier (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  return (clutter_event_get_state (event) & CLUTTER_CONTROL_MASK) != FALSE;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_is_pointer_emulated:
Packit Service bf98b9
 * @event: a #ClutterEvent
Packit Service bf98b9
 *
Packit Service bf98b9
 * Checks whether a pointer @event has been generated by the windowing
Packit Service bf98b9
 * system. The returned value can be used to distinguish between events
Packit Service bf98b9
 * synthesized by the windowing system itself (as opposed by Clutter).
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: %TRUE if the event is pointer emulated
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.12
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean
Packit Service bf98b9
clutter_event_is_pointer_emulated (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, FALSE);
Packit Service bf98b9
Packit Service bf98b9
  if (!is_event_allocated (event))
Packit Service bf98b9
    return FALSE;
Packit Service bf98b9
Packit Service bf98b9
  return ((ClutterEventPrivate *) event)->is_pointer_emulated;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
gboolean
Packit Service bf98b9
_clutter_event_process_filters (ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
  GList *l, *next;
Packit Service bf98b9
Packit Service bf98b9
  /* Event filters are handled in order from least recently added to
Packit Service bf98b9
   * most recently added */
Packit Service bf98b9
Packit Service bf98b9
  for (l = context->event_filters; l; l = next)
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEventFilter *event_filter = l->data;
Packit Service bf98b9
Packit Service bf98b9
      next = l->next;
Packit Service bf98b9
Packit Service bf98b9
      if (event_filter->stage && event_filter->stage != event->any.stage)
Packit Service bf98b9
        continue;
Packit Service bf98b9
Packit Service bf98b9
      if (event_filter->func (event, event_filter->user_data) == CLUTTER_EVENT_STOP)
Packit Service bf98b9
        return CLUTTER_EVENT_STOP;
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  return CLUTTER_EVENT_PROPAGATE;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_add_filter:
Packit Service bf98b9
 * @stage: (allow-none): The #ClutterStage to capture events for
Packit Service bf98b9
 * @func: The callback function which will be passed all events.
Packit Service bf98b9
 * @notify: A #GDestroyNotify
Packit Service bf98b9
 * @user_data: A data pointer to pass to the function.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Adds a function which will be called for all events that Clutter
Packit Service bf98b9
 * processes. The function will be called before any signals are
Packit Service bf98b9
 * emitted for the event and it will take precedence over any grabs.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Return value: an identifier for the event filter, to be used
Packit Service bf98b9
 *   with clutter_event_remove_filter().
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.18
Packit Service bf98b9
 */
Packit Service bf98b9
guint
Packit Service bf98b9
clutter_event_add_filter (ClutterStage          *stage,
Packit Service bf98b9
                          ClutterEventFilterFunc func,
Packit Service bf98b9
                          GDestroyNotify         notify,
Packit Service bf98b9
                          gpointer               user_data)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
  ClutterEventFilter *event_filter = g_slice_new (ClutterEventFilter);
Packit Service bf98b9
  static guint event_filter_id = 0;
Packit Service bf98b9
Packit Service bf98b9
  event_filter->stage = stage;
Packit Service bf98b9
  event_filter->id = ++event_filter_id;
Packit Service bf98b9
  event_filter->func = func;
Packit Service bf98b9
  event_filter->notify = notify;
Packit Service bf98b9
  event_filter->user_data = user_data;
Packit Service bf98b9
Packit Service bf98b9
  /* The event filters are kept in order from least recently added to
Packit Service bf98b9
   * most recently added so we must add it to the end */
Packit Service bf98b9
  context->event_filters = g_list_append (context->event_filters, event_filter);
Packit Service bf98b9
Packit Service bf98b9
  return event_filter->id;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_remove_filter:
Packit Service bf98b9
 * @id: The ID of the event filter, as returned from clutter_event_add_filter()
Packit Service bf98b9
 *
Packit Service bf98b9
 * Removes an event filter that was previously added with
Packit Service bf98b9
 * clutter_event_add_filter().
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.18
Packit Service bf98b9
 */
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_remove_filter (guint id)
Packit Service bf98b9
{
Packit Service bf98b9
  ClutterMainContext *context = _clutter_context_get_default ();
Packit Service bf98b9
  GList *l;
Packit Service bf98b9
Packit Service bf98b9
  for (l = context->event_filters; l; l = l->next)
Packit Service bf98b9
    {
Packit Service bf98b9
      ClutterEventFilter *event_filter = l->data;
Packit Service bf98b9
Packit Service bf98b9
      if (event_filter->id == id)
Packit Service bf98b9
        {
Packit Service bf98b9
          if (event_filter->notify)
Packit Service bf98b9
            event_filter->notify (event_filter->user_data);
Packit Service bf98b9
Packit Service bf98b9
          context->event_filters = g_list_delete_link (context->event_filters, l);
Packit Service bf98b9
          g_slice_free (ClutterEventFilter, event_filter);
Packit Service bf98b9
          return;
Packit Service bf98b9
        }
Packit Service bf98b9
    }
Packit Service bf98b9
Packit Service bf98b9
  g_warning ("No event filter found for id: %d\n", id);
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_gesture_swipe_finger_count:
Packit Service bf98b9
 * @event: a touchpad swipe event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the number of fingers that is triggering the touchpad gesture.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: the number of fingers swiping.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.24
Packit Service bf98b9
 **/
Packit Service bf98b9
guint
Packit Service bf98b9
clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->touchpad_swipe.n_fingers;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_gesture_pinch_angle_delta:
Packit Service bf98b9
 * @event: a touchpad pinch event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the angle delta reported by this specific event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: The angle delta relative to the previous event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.24
Packit Service bf98b9
 **/
Packit Service bf98b9
gdouble
Packit Service bf98b9
clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->touchpad_pinch.angle_delta;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_gesture_pinch_scale:
Packit Service bf98b9
 * @event: a touchpad pinch event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the current scale as reported by @event, 1.0 being the original
Packit Service bf98b9
 * distance at the time the corresponding event with phase
Packit Service bf98b9
 * %CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN is received.
Packit Service bf98b9
 * is received.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: the current pinch gesture scale
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.24
Packit Service bf98b9
 **/
Packit Service bf98b9
gdouble
Packit Service bf98b9
clutter_event_get_gesture_pinch_scale (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH, 0);
Packit Service bf98b9
Packit Service bf98b9
  return event->touchpad_pinch.scale;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_gesture_phase:
Packit Service bf98b9
 * @event: a touchpad gesture event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the phase of the event, See #ClutterTouchpadGesturePhase.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: the phase of the gesture event.
Packit Service bf98b9
 **/
Packit Service bf98b9
ClutterTouchpadGesturePhase
Packit Service bf98b9
clutter_event_get_gesture_phase (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, 0);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH ||
Packit Service bf98b9
                        event->type == CLUTTER_TOUCHPAD_SWIPE, 0);
Packit Service bf98b9
Packit Service bf98b9
  if (event->type == CLUTTER_TOUCHPAD_PINCH)
Packit Service bf98b9
    return event->touchpad_pinch.phase;
Packit Service bf98b9
  else if (event->type == CLUTTER_TOUCHPAD_SWIPE)
Packit Service bf98b9
    return event->touchpad_swipe.phase;
Packit Service bf98b9
Packit Service bf98b9
  /* Shouldn't ever happen */
Packit Service bf98b9
  return CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN;
Packit Service bf98b9
};
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_gesture_motion_delta:
Packit Service bf98b9
 * @event: A clutter touchpad gesture event
Packit Service bf98b9
 * @dx: (out) (allow-none): the displacement relative to the pointer
Packit Service bf98b9
 *      position in the X axis, or %NULL
Packit Service bf98b9
 * @dy: (out) (allow-none): the displacement relative to the pointer
Packit Service bf98b9
 *      position in the Y axis, or %NULL
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the gesture motion deltas relative to the current pointer
Packit Service bf98b9
 * position.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.24
Packit Service bf98b9
 **/
Packit Service bf98b9
void
Packit Service bf98b9
clutter_event_get_gesture_motion_delta (const ClutterEvent *event,
Packit Service bf98b9
                                        gdouble            *dx,
Packit Service bf98b9
                                        gdouble            *dy)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_if_fail (event != NULL);
Packit Service bf98b9
  g_return_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH ||
Packit Service bf98b9
                    event->type == CLUTTER_TOUCHPAD_SWIPE);
Packit Service bf98b9
Packit Service bf98b9
  if (event->type == CLUTTER_TOUCHPAD_PINCH)
Packit Service bf98b9
    {
Packit Service bf98b9
      if (dx)
Packit Service bf98b9
        *dx = event->touchpad_pinch.dx;
Packit Service bf98b9
      if (dy)
Packit Service bf98b9
        *dy = event->touchpad_pinch.dy;
Packit Service bf98b9
    }
Packit Service bf98b9
  else if (event->type == CLUTTER_TOUCHPAD_SWIPE)
Packit Service bf98b9
    {
Packit Service bf98b9
      if (dx)
Packit Service bf98b9
        *dx = event->touchpad_swipe.dx;
Packit Service bf98b9
      if (dy)
Packit Service bf98b9
        *dy = event->touchpad_swipe.dy;
Packit Service bf98b9
    }
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_scroll_source:
Packit Service bf98b9
 * @event: an scroll event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the #ClutterScrollSource that applies to an scroll event.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: The source of scroll events
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.26
Packit Service bf98b9
 **/
Packit Service bf98b9
ClutterScrollSource
Packit Service bf98b9
clutter_event_get_scroll_source (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_SCROLL_SOURCE_UNKNOWN);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_SCROLL,
Packit Service bf98b9
                        CLUTTER_SCROLL_SOURCE_UNKNOWN);
Packit Service bf98b9
Packit Service bf98b9
  return event->scroll.scroll_source;
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
/**
Packit Service bf98b9
 * clutter_event_get_scroll_finish_flags:
Packit Service bf98b9
 * @event: an scroll event
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns the #ClutterScrollFinishFlags of an scroll event. Those
Packit Service bf98b9
 * can be used to determine whether post-scroll effects like kinetic
Packit Service bf98b9
 * scrolling should be applied.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Returns: The scroll finish flags
Packit Service bf98b9
 *
Packit Service bf98b9
 * Since: 1.26
Packit Service bf98b9
 **/
Packit Service bf98b9
ClutterScrollFinishFlags
Packit Service bf98b9
clutter_event_get_scroll_finish_flags (const ClutterEvent *event)
Packit Service bf98b9
{
Packit Service bf98b9
  g_return_val_if_fail (event != NULL, CLUTTER_SCROLL_SOURCE_UNKNOWN);
Packit Service bf98b9
  g_return_val_if_fail (event->type == CLUTTER_SCROLL,
Packit Service bf98b9
                        CLUTTER_SCROLL_SOURCE_UNKNOWN);
Packit Service bf98b9
Packit Service bf98b9
  return event->scroll.finish_flags;
Packit Service bf98b9
}