summaryrefslogtreecommitdiff
path: root/clutter
diff options
context:
space:
mode:
Diffstat (limited to 'clutter')
-rw-r--r--clutter/clutter/clutter-input-device-private.h23
-rw-r--r--clutter/clutter/clutter-input-device.c174
-rw-r--r--clutter/clutter/clutter-input-pointer-a11y.c64
3 files changed, 170 insertions, 91 deletions
diff --git a/clutter/clutter/clutter-input-device-private.h b/clutter/clutter/clutter-input-device-private.h
index 841bdfd66..672f3cf79 100644
--- a/clutter/clutter/clutter-input-device-private.h
+++ b/clutter/clutter/clutter-input-device-private.h
@@ -53,15 +53,6 @@ struct _ClutterInputDevice
{
GObject parent_instance;
- ClutterInputDeviceType device_type;
- ClutterInputMode device_mode;
-
- char *device_name;
-
- ClutterSeat *seat;
-
- ClutterBackend *backend;
-
/* the actor underneath the pointer */
ClutterActor *cursor_actor;
GHashTable *inv_touch_sequence_actors;
@@ -74,10 +65,7 @@ struct _ClutterInputDevice
/* the current click count */
int click_count;
-
- /* the current state */
int current_button_number;
- ClutterModifierType current_state;
/* the current touch points targets */
GHashTable *touch_sequence_actors;
@@ -88,17 +76,6 @@ struct _ClutterInputDevice
uint32_t previous_time;
int previous_button_number;
- char *vendor_id;
- char *product_id;
- char *node_path;
-
- int n_rings;
- int n_strips;
- int n_mode_groups;
-
- guint has_cursor : 1;
- guint is_enabled : 1;
-
/* Accessiblity */
ClutterVirtualInputDevice *accessibility_virtual_device;
ClutterPtrA11yData *ptr_a11y_data;
diff --git a/clutter/clutter/clutter-input-device.c b/clutter/clutter/clutter-input-device.c
index bdab32a5c..87c8a6820 100644
--- a/clutter/clutter/clutter-input-device.c
+++ b/clutter/clutter/clutter-input-device.c
@@ -80,17 +80,43 @@ static void on_cursor_actor_reactive_changed (ClutterActor *actor,
static GParamSpec *obj_props[PROP_LAST] = { NULL, };
-G_DEFINE_TYPE (ClutterInputDevice, clutter_input_device, G_TYPE_OBJECT);
+typedef struct _ClutterInputDevicePrivate ClutterInputDevicePrivate;
+
+struct _ClutterInputDevicePrivate
+{
+ ClutterInputDeviceType device_type;
+ ClutterInputMode device_mode;
+
+ char *device_name;
+
+ ClutterSeat *seat;
+
+ ClutterBackend *backend;
+
+ char *vendor_id;
+ char *product_id;
+ char *node_path;
+
+ int n_rings;
+ int n_strips;
+ int n_mode_groups;
+
+ gboolean has_cursor;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterInputDevice, clutter_input_device, G_TYPE_OBJECT);
static void
clutter_input_device_dispose (GObject *gobject)
{
ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (gobject);
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
- g_clear_pointer (&device->device_name, g_free);
- g_clear_pointer (&device->vendor_id, g_free);
- g_clear_pointer (&device->product_id, g_free);
- g_clear_pointer (&device->node_path, g_free);
+ g_clear_pointer (&priv->device_name, g_free);
+ g_clear_pointer (&priv->vendor_id, g_free);
+ g_clear_pointer (&priv->product_id, g_free);
+ g_clear_pointer (&priv->node_path, g_free);
if (device->accessibility_virtual_device)
g_clear_object (&device->accessibility_virtual_device);
@@ -141,55 +167,57 @@ clutter_input_device_set_property (GObject *gobject,
GParamSpec *pspec)
{
ClutterInputDevice *self = CLUTTER_INPUT_DEVICE (gobject);
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (self);
switch (prop_id)
{
case PROP_DEVICE_TYPE:
- self->device_type = g_value_get_enum (value);
+ priv->device_type = g_value_get_enum (value);
break;
case PROP_SEAT:
- self->seat = g_value_get_object (value);
+ priv->seat = g_value_get_object (value);
break;
case PROP_DEVICE_MODE:
- self->device_mode = g_value_get_enum (value);
+ priv->device_mode = g_value_get_enum (value);
break;
case PROP_BACKEND:
- self->backend = g_value_get_object (value);
+ priv->backend = g_value_get_object (value);
break;
case PROP_NAME:
- self->device_name = g_value_dup_string (value);
+ priv->device_name = g_value_dup_string (value);
break;
case PROP_HAS_CURSOR:
- self->has_cursor = g_value_get_boolean (value);
+ priv->has_cursor = g_value_get_boolean (value);
break;
case PROP_VENDOR_ID:
- self->vendor_id = g_value_dup_string (value);
+ priv->vendor_id = g_value_dup_string (value);
break;
case PROP_PRODUCT_ID:
- self->product_id = g_value_dup_string (value);
+ priv->product_id = g_value_dup_string (value);
break;
case PROP_N_RINGS:
- self->n_rings = g_value_get_int (value);
+ priv->n_rings = g_value_get_int (value);
break;
case PROP_N_STRIPS:
- self->n_strips = g_value_get_int (value);
+ priv->n_strips = g_value_get_int (value);
break;
case PROP_N_MODE_GROUPS:
- self->n_mode_groups = g_value_get_int (value);
+ priv->n_mode_groups = g_value_get_int (value);
break;
case PROP_DEVICE_NODE:
- self->node_path = g_value_dup_string (value);
+ priv->node_path = g_value_dup_string (value);
break;
default:
@@ -205,55 +233,57 @@ clutter_input_device_get_property (GObject *gobject,
GParamSpec *pspec)
{
ClutterInputDevice *self = CLUTTER_INPUT_DEVICE (gobject);
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (self);
switch (prop_id)
{
case PROP_DEVICE_TYPE:
- g_value_set_enum (value, self->device_type);
+ g_value_set_enum (value, priv->device_type);
break;
case PROP_SEAT:
- g_value_set_object (value, self->seat);
+ g_value_set_object (value, priv->seat);
break;
case PROP_DEVICE_MODE:
- g_value_set_enum (value, self->device_mode);
+ g_value_set_enum (value, priv->device_mode);
break;
case PROP_BACKEND:
- g_value_set_object (value, self->backend);
+ g_value_set_object (value, priv->backend);
break;
case PROP_NAME:
- g_value_set_string (value, self->device_name);
+ g_value_set_string (value, priv->device_name);
break;
case PROP_HAS_CURSOR:
- g_value_set_boolean (value, self->has_cursor);
+ g_value_set_boolean (value, priv->has_cursor);
break;
case PROP_VENDOR_ID:
- g_value_set_string (value, self->vendor_id);
+ g_value_set_string (value, priv->vendor_id);
break;
case PROP_PRODUCT_ID:
- g_value_set_string (value, self->product_id);
+ g_value_set_string (value, priv->product_id);
break;
case PROP_N_RINGS:
- g_value_set_int (value, self->n_rings);
+ g_value_set_int (value, priv->n_rings);
break;
case PROP_N_STRIPS:
- g_value_set_int (value, self->n_strips);
+ g_value_set_int (value, priv->n_strips);
break;
case PROP_N_MODE_GROUPS:
- g_value_set_int (value, self->n_mode_groups);
+ g_value_set_int (value, priv->n_mode_groups);
break;
case PROP_DEVICE_NODE:
- g_value_set_string (value, self->node_path);
+ g_value_set_string (value, priv->node_path);
break;
default:
@@ -418,7 +448,10 @@ clutter_input_device_class_init (ClutterInputDeviceClass *klass)
static void
clutter_input_device_init (ClutterInputDevice *self)
{
- self->device_type = CLUTTER_POINTER_DEVICE;
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (self);
+
+ priv->device_type = CLUTTER_POINTER_DEVICE;
self->click_count = 0;
@@ -615,10 +648,13 @@ _clutter_input_device_set_actor (ClutterInputDevice *device,
ClutterInputDeviceType
clutter_input_device_get_device_type (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device),
CLUTTER_POINTER_DEVICE);
- return device->device_type;
+ return priv->device_type;
}
/*
@@ -645,7 +681,9 @@ clutter_input_device_update (ClutterInputDevice *device,
ClutterActor *new_cursor_actor;
ClutterActor *old_cursor_actor;
graphene_point_t point = GRAPHENE_POINT_INIT (-1.0f, -1.0f);
- ClutterInputDeviceType device_type = device->device_type;
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+ ClutterInputDeviceType device_type = priv->device_type;
uint32_t time_ms;
g_assert (device_type != CLUTTER_KEYBOARD_DEVICE &&
@@ -734,9 +772,12 @@ clutter_input_device_get_actor (ClutterInputDevice *device,
const gchar *
clutter_input_device_get_device_name (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
- return device->device_name;
+ return priv->device_name;
}
/**
@@ -753,9 +794,12 @@ clutter_input_device_get_device_name (ClutterInputDevice *device)
gboolean
clutter_input_device_get_has_cursor (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
- return device->has_cursor;
+ return priv->has_cursor;
}
/**
@@ -771,10 +815,13 @@ clutter_input_device_get_has_cursor (ClutterInputDevice *device)
ClutterInputMode
clutter_input_device_get_device_mode (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device),
CLUTTER_INPUT_MODE_FLOATING);
- return device->device_mode;
+ return priv->device_mode;
}
/*< private >
@@ -817,7 +864,10 @@ static void
on_grab_actor_destroy (ClutterActor *actor,
ClutterInputDevice *device)
{
- switch (device->device_type)
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
+ switch (priv->device_type)
{
case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
@@ -857,11 +907,13 @@ clutter_input_device_grab (ClutterInputDevice *device,
ClutterActor *actor)
{
ClutterActor **grab_actor;
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
g_return_if_fail (CLUTTER_IS_ACTOR (actor));
- switch (device->device_type)
+ switch (priv->device_type)
{
case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
@@ -904,10 +956,12 @@ void
clutter_input_device_ungrab (ClutterInputDevice *device)
{
ClutterActor **grab_actor;
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
- switch (device->device_type)
+ switch (priv->device_type)
{
case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
@@ -946,9 +1000,12 @@ clutter_input_device_ungrab (ClutterInputDevice *device)
ClutterActor *
clutter_input_device_get_grabbed_actor (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
- switch (device->device_type)
+ switch (priv->device_type)
{
case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
@@ -1113,10 +1170,13 @@ clutter_input_device_sequence_get_grabbed_actor (ClutterInputDevice *device,
const gchar *
clutter_input_device_get_vendor_id (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
g_return_val_if_fail (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_LOGICAL, NULL);
- return device->vendor_id;
+ return priv->vendor_id;
}
/**
@@ -1132,36 +1192,48 @@ clutter_input_device_get_vendor_id (ClutterInputDevice *device)
const gchar *
clutter_input_device_get_product_id (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
g_return_val_if_fail (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_LOGICAL, NULL);
- return device->product_id;
+ return priv->product_id;
}
gint
clutter_input_device_get_n_rings (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
- return device->n_rings;
+ return priv->n_rings;
}
gint
clutter_input_device_get_n_strips (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
- return device->n_strips;
+ return priv->n_strips;
}
gint
clutter_input_device_get_n_mode_groups (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, 0);
- return device->n_mode_groups;
+ return priv->n_mode_groups;
}
gint
@@ -1206,13 +1278,15 @@ gint
clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
guint button)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
gint group;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), -1);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, -1);
- for (group = 0; group < device->n_mode_groups; group++)
+ for (group = 0; group < priv->n_mode_groups; group++)
{
if (clutter_input_device_is_mode_switch_button (device, group, button))
return group;
@@ -1224,9 +1298,12 @@ clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
const gchar *
clutter_input_device_get_device_node (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
- return device->node_path;
+ return priv->node_path;
}
gboolean
@@ -1250,7 +1327,10 @@ clutter_input_device_is_grouped (ClutterInputDevice *device,
ClutterSeat *
clutter_input_device_get_seat (ClutterInputDevice *device)
{
+ ClutterInputDevicePrivate *priv =
+ clutter_input_device_get_instance_private (device);
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
- return device->seat;
+ return priv->seat;
}
diff --git a/clutter/clutter/clutter-input-pointer-a11y.c b/clutter/clutter/clutter-input-pointer-a11y.c
index b57ee81c0..365b85fd6 100644
--- a/clutter/clutter/clutter-input-pointer-a11y.c
+++ b/clutter/clutter/clutter-input-pointer-a11y.c
@@ -36,8 +36,9 @@ static gboolean
is_secondary_click_enabled (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return (settings.controls & CLUTTER_A11Y_SECONDARY_CLICK_ENABLED);
}
@@ -46,8 +47,9 @@ static gboolean
is_dwell_click_enabled (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return (settings.controls & CLUTTER_A11Y_DWELL_ENABLED);
}
@@ -56,8 +58,9 @@ static unsigned int
get_secondary_click_delay (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return settings.secondary_click_delay;
}
@@ -66,8 +69,9 @@ static unsigned int
get_dwell_delay (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return settings.dwell_delay;
}
@@ -76,8 +80,9 @@ static unsigned int
get_dwell_threshold (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return settings.dwell_threshold;
}
@@ -86,8 +91,9 @@ static ClutterPointerA11yDwellMode
get_dwell_mode (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return settings.dwell_mode;
}
@@ -96,8 +102,9 @@ static ClutterPointerA11yDwellClickType
get_dwell_click_type (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
return settings.dwell_click_type;
}
@@ -107,8 +114,9 @@ get_dwell_click_type_for_direction (ClutterInputDevice *device,
ClutterPointerA11yDwellDirection direction)
{
ClutterPointerA11ySettings settings;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
if (direction == settings.dwell_gesture_single)
return CLUTTER_A11Y_DWELL_CLICK_TYPE_PRIMARY;
@@ -163,11 +171,12 @@ static gboolean
trigger_secondary_click (gpointer data)
{
ClutterInputDevice *device = data;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
device->ptr_a11y_data->secondary_click_triggered = TRUE;
device->ptr_a11y_data->secondary_click_timer = 0;
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-stopped",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK,
@@ -180,11 +189,12 @@ static void
start_secondary_click_timeout (ClutterInputDevice *device)
{
unsigned int delay = get_secondary_click_delay (device);
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
device->ptr_a11y_data->secondary_click_timer =
clutter_threads_add_timeout (delay, trigger_secondary_click, device);
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-started",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK,
@@ -194,12 +204,14 @@ start_secondary_click_timeout (ClutterInputDevice *device)
static void
stop_secondary_click_timeout (ClutterInputDevice *device)
{
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
+
if (device->ptr_a11y_data->secondary_click_timer)
{
g_clear_handle_id (&device->ptr_a11y_data->secondary_click_timer,
g_source_remove);
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-stopped",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK,
@@ -302,8 +314,9 @@ update_dwell_click_type (ClutterInputDevice *device)
{
ClutterPointerA11ySettings settings;
ClutterPointerA11yDwellClickType dwell_click_type;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- clutter_seat_get_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_get_pointer_a11y_settings (seat, &settings);
dwell_click_type = settings.dwell_click_type;
switch (dwell_click_type)
@@ -328,9 +341,9 @@ update_dwell_click_type (ClutterInputDevice *device)
if (dwell_click_type != settings.dwell_click_type)
{
settings.dwell_click_type = dwell_click_type;
- clutter_seat_set_pointer_a11y_settings (device->seat, &settings);
+ clutter_seat_set_pointer_a11y_settings (seat, &settings);
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-dwell-click-type-changed",
dwell_click_type);
}
@@ -424,6 +437,7 @@ trigger_dwell_gesture (gpointer data)
ClutterInputDevice *device = data;
ClutterPointerA11yDwellDirection direction;
unsigned int delay = get_dwell_delay (device);
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
restore_dwell_position (device);
direction = get_dwell_direction (device);
@@ -435,7 +449,7 @@ trigger_dwell_gesture (gpointer data)
device->ptr_a11y_data->dwell_timer =
clutter_threads_add_timeout (delay, trigger_clear_dwell_gesture, device);
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-stopped",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE,
@@ -448,12 +462,13 @@ static void
start_dwell_gesture_timeout (ClutterInputDevice *device)
{
unsigned int delay = get_dwell_delay (device);
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
device->ptr_a11y_data->dwell_timer =
clutter_threads_add_timeout (delay, trigger_dwell_gesture, device);
device->ptr_a11y_data->dwell_gesture_started = TRUE;
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-started",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE,
@@ -464,10 +479,11 @@ static gboolean
trigger_dwell_click (gpointer data)
{
ClutterInputDevice *device = data;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
device->ptr_a11y_data->dwell_timer = 0;
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-stopped",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_DWELL,
@@ -493,11 +509,12 @@ static void
start_dwell_timeout (ClutterInputDevice *device)
{
unsigned int delay = get_dwell_delay (device);
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
device->ptr_a11y_data->dwell_timer =
clutter_threads_add_timeout (delay, trigger_dwell_click, device);
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-started",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_DWELL,
@@ -507,12 +524,14 @@ start_dwell_timeout (ClutterInputDevice *device)
static void
stop_dwell_timeout (ClutterInputDevice *device)
{
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
+
if (device->ptr_a11y_data->dwell_timer)
{
g_clear_handle_id (&device->ptr_a11y_data->dwell_timer, g_source_remove);
device->ptr_a11y_data->dwell_gesture_started = FALSE;
- g_signal_emit_by_name (device->seat,
+ g_signal_emit_by_name (seat,
"ptr-a11y-timeout-stopped",
device,
CLUTTER_A11Y_TIMEOUT_TYPE_DWELL,
@@ -570,8 +589,9 @@ static gboolean
is_device_core_pointer (ClutterInputDevice *device)
{
ClutterInputDevice *core_pointer;
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
- core_pointer = clutter_seat_get_pointer (device->seat);
+ core_pointer = clutter_seat_get_pointer (seat);
if (core_pointer == NULL)
return FALSE;
@@ -581,11 +601,13 @@ is_device_core_pointer (ClutterInputDevice *device)
void
_clutter_input_pointer_a11y_add_device (ClutterInputDevice *device)
{
+ ClutterSeat *seat = clutter_input_device_get_seat (device);
+
if (!is_device_core_pointer (device))
return;
device->accessibility_virtual_device =
- clutter_seat_create_virtual_device (device->seat,
+ clutter_seat_create_virtual_device (seat,
CLUTTER_POINTER_DEVICE);
device->ptr_a11y_data = g_new0 (ClutterPtrA11yData, 1);