mirror of
https://github.com/brl/mutter.git
synced 2025-04-16 23:29:38 +00:00
device/x11: Store min/max keycode in the XI device class
The generic device class shouldn't have the minimum and maximum keycode, since no other input backend provides those.
This commit is contained in:
parent
a277b4091a
commit
6da51f6ed3
@ -100,8 +100,6 @@ struct _ClutterInputDevice
|
|||||||
|
|
||||||
guint n_keys;
|
guint n_keys;
|
||||||
GArray *keys;
|
GArray *keys;
|
||||||
gint min_keycode;
|
|
||||||
gint max_keycode;
|
|
||||||
|
|
||||||
guint has_cursor : 1;
|
guint has_cursor : 1;
|
||||||
guint is_enabled : 1;
|
guint is_enabled : 1;
|
||||||
@ -140,10 +138,8 @@ void _clutter_input_device_set_stage (ClutterInputDev
|
|||||||
void _clutter_input_device_set_actor (ClutterInputDevice *device,
|
void _clutter_input_device_set_actor (ClutterInputDevice *device,
|
||||||
ClutterActor *actor);
|
ClutterActor *actor);
|
||||||
ClutterActor * _clutter_input_device_update (ClutterInputDevice *device);
|
ClutterActor * _clutter_input_device_update (ClutterInputDevice *device);
|
||||||
void _clutter_input_device_set_keys (ClutterInputDevice *device,
|
void _clutter_input_device_set_n_keys (ClutterInputDevice *device,
|
||||||
guint n_keys,
|
guint n_keys);
|
||||||
gint min_keycode,
|
|
||||||
gint max_keycode);
|
|
||||||
guint _clutter_input_device_add_axis (ClutterInputDevice *device,
|
guint _clutter_input_device_add_axis (ClutterInputDevice *device,
|
||||||
ClutterInputAxis axis,
|
ClutterInputAxis axis,
|
||||||
gdouble min_value,
|
gdouble min_value,
|
||||||
|
@ -364,9 +364,6 @@ clutter_input_device_init (ClutterInputDevice *self)
|
|||||||
self->current_y = self->previous_y = -1;
|
self->current_y = self->previous_y = -1;
|
||||||
self->current_button_number = self->previous_button_number = -1;
|
self->current_button_number = self->previous_button_number = -1;
|
||||||
self->current_state = self->previous_state = 0;
|
self->current_state = self->previous_state = 0;
|
||||||
|
|
||||||
self->min_keycode = 0;
|
|
||||||
self->max_keycode = G_MAXUINT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*< private >
|
/*< private >
|
||||||
@ -1192,11 +1189,9 @@ clutter_input_device_get_n_axes (ClutterInputDevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*< private >
|
/*< private >
|
||||||
* clutter_input_device_set_keys:
|
* clutter_input_device_set_n_keys:
|
||||||
* @device: a #ClutterInputDevice
|
* @device: a #ClutterInputDevice
|
||||||
* @n_keys: the number of keys of the device
|
* @n_keys: the number of keys of the device
|
||||||
* @min_keycode: the minimum key code
|
|
||||||
* @max_keycode: the maximum key code
|
|
||||||
*
|
*
|
||||||
* Initializes the keys of @device.
|
* Initializes the keys of @device.
|
||||||
*
|
*
|
||||||
@ -1204,10 +1199,8 @@ clutter_input_device_get_n_axes (ClutterInputDevice *device)
|
|||||||
* and modifiers.
|
* and modifiers.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
_clutter_input_device_set_keys (ClutterInputDevice *device,
|
_clutter_input_device_set_n_keys (ClutterInputDevice *device,
|
||||||
guint n_keys,
|
guint n_keys)
|
||||||
gint min_keycode,
|
|
||||||
gint max_keycode)
|
|
||||||
{
|
{
|
||||||
if (device->keys != NULL)
|
if (device->keys != NULL)
|
||||||
g_array_free (device->keys, TRUE);
|
g_array_free (device->keys, TRUE);
|
||||||
@ -1216,9 +1209,6 @@ _clutter_input_device_set_keys (ClutterInputDevice *device,
|
|||||||
device->keys = g_array_sized_new (FALSE, TRUE,
|
device->keys = g_array_sized_new (FALSE, TRUE,
|
||||||
sizeof (ClutterKeyInfo),
|
sizeof (ClutterKeyInfo),
|
||||||
n_keys);
|
n_keys);
|
||||||
|
|
||||||
device->min_keycode = min_keycode;
|
|
||||||
device->max_keycode = max_keycode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1263,8 +1253,6 @@ clutter_input_device_set_key (ClutterInputDevice *device,
|
|||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
g_return_if_fail (index_ < device->n_keys);
|
g_return_if_fail (index_ < device->n_keys);
|
||||||
g_return_if_fail (keyval >= device->min_keycode &&
|
|
||||||
keyval <= device->max_keycode);
|
|
||||||
|
|
||||||
key_info = &g_array_index (device->keys, ClutterKeyInfo, index_);
|
key_info = &g_array_index (device->keys, ClutterKeyInfo, index_);
|
||||||
key_info->keyval = keyval;
|
key_info->keyval = keyval;
|
||||||
|
@ -86,12 +86,16 @@ translate_class_info (ClutterInputDevice *device,
|
|||||||
case KeyClass:
|
case KeyClass:
|
||||||
{
|
{
|
||||||
XKeyInfo *xk_info = (XKeyInfo *) any_class;
|
XKeyInfo *xk_info = (XKeyInfo *) any_class;
|
||||||
|
ClutterInputDeviceX11 *device_x11;
|
||||||
guint n_keys;
|
guint n_keys;
|
||||||
|
|
||||||
|
device_x11 = CLUTTER_INPUT_DEVICE_X11 (device);
|
||||||
|
|
||||||
n_keys = xk_info->max_keycode - xk_info->min_keycode + 1;
|
n_keys = xk_info->max_keycode - xk_info->min_keycode + 1;
|
||||||
_clutter_input_device_set_keys (device, n_keys,
|
|
||||||
xk_info->min_keycode,
|
_clutter_input_device_set_n_keys (device, n_keys);
|
||||||
xk_info->max_keycode);
|
device_x11->min_keycode = xk_info->min_keycode;
|
||||||
|
device_x11->max_keycode = xk_info->max_keycode;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -126,10 +126,8 @@ translate_device_classes (Display *xdisplay,
|
|||||||
XIKeyClassInfo *key_info = (XIKeyClassInfo *) class_info;
|
XIKeyClassInfo *key_info = (XIKeyClassInfo *) class_info;
|
||||||
gint j;
|
gint j;
|
||||||
|
|
||||||
_clutter_input_device_set_keys (device,
|
_clutter_input_device_set_n_keys (device,
|
||||||
key_info->num_keycodes,
|
key_info->num_keycodes);
|
||||||
0,
|
|
||||||
G_MAXUINT);
|
|
||||||
|
|
||||||
for (j = 0; j < key_info->num_keycodes; j++)
|
for (j = 0; j < key_info->num_keycodes; j++)
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,9 @@ struct _ClutterInputDeviceX11
|
|||||||
#endif /* HAVE_XINPUT */
|
#endif /* HAVE_XINPUT */
|
||||||
|
|
||||||
gint *axis_data;
|
gint *axis_data;
|
||||||
|
|
||||||
|
gint min_keycode;
|
||||||
|
gint max_keycode;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define clutter_input_device_x11_get_type _clutter_input_device_x11_get_type
|
#define clutter_input_device_x11_get_type _clutter_input_device_x11_get_type
|
||||||
@ -349,15 +352,15 @@ _clutter_input_device_x11_translate_xi_event (ClutterInputDeviceX11 *device_x11,
|
|||||||
{
|
{
|
||||||
XDeviceKeyEvent *xdke = (XDeviceKeyEvent *) xevent;
|
XDeviceKeyEvent *xdke = (XDeviceKeyEvent *) xevent;
|
||||||
|
|
||||||
if (xdke->keycode < device->min_keycode ||
|
if (xdke->keycode < device_x11->min_keycode ||
|
||||||
xdke->keycode >= device->max_keycode)
|
xdke->keycode >= device_x11->max_keycode)
|
||||||
{
|
{
|
||||||
g_warning ("Invalid device key code received: %d", xdke->keycode);
|
g_warning ("Invalid device key code received: %d", xdke->keycode);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
clutter_input_device_get_key (device,
|
clutter_input_device_get_key (device,
|
||||||
xdke->keycode - device->min_keycode,
|
xdke->keycode - device_x11->min_keycode,
|
||||||
&event->key.keyval,
|
&event->key.keyval,
|
||||||
&event->key.modifier_state);
|
&event->key.modifier_state);
|
||||||
if (event->key.keyval == 0)
|
if (event->key.keyval == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user