mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 08:00:42 -05:00
backends: Move native keymap manipulation functions to MetaSeatNative
Since the ClutterKeymap is obtained through the ClutterSeat, it makes sense to have these manipulation functions in the ClutterSeat impl. https://gitlab.gnome.org/GNOME/mutter/merge_requests/852
This commit is contained in:
parent
7644ddeddc
commit
4761c4ee1c
@ -441,10 +441,10 @@ meta_backend_native_set_keymap (MetaBackend *backend,
|
|||||||
const char *variants,
|
const char *variants,
|
||||||
const char *options)
|
const char *options)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
|
||||||
struct xkb_rule_names names;
|
struct xkb_rule_names names;
|
||||||
struct xkb_keymap *keymap;
|
struct xkb_keymap *keymap;
|
||||||
struct xkb_context *context;
|
struct xkb_context *context;
|
||||||
|
ClutterSeat *seat;
|
||||||
|
|
||||||
names.rules = DEFAULT_XKB_RULES_FILE;
|
names.rules = DEFAULT_XKB_RULES_FILE;
|
||||||
names.model = DEFAULT_XKB_MODEL;
|
names.model = DEFAULT_XKB_MODEL;
|
||||||
@ -456,7 +456,8 @@ meta_backend_native_set_keymap (MetaBackend *backend,
|
|||||||
keymap = xkb_keymap_new_from_names (context, &names, XKB_KEYMAP_COMPILE_NO_FLAGS);
|
keymap = xkb_keymap_new_from_names (context, &names, XKB_KEYMAP_COMPILE_NO_FLAGS);
|
||||||
xkb_context_unref (context);
|
xkb_context_unref (context);
|
||||||
|
|
||||||
meta_device_manager_native_set_keyboard_map (manager, keymap);
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
meta_seat_native_set_keyboard_map (META_SEAT_NATIVE (seat), keymap);
|
||||||
|
|
||||||
meta_backend_notify_keymap_changed (backend);
|
meta_backend_notify_keymap_changed (backend);
|
||||||
|
|
||||||
@ -466,30 +467,34 @@ meta_backend_native_set_keymap (MetaBackend *backend,
|
|||||||
static struct xkb_keymap *
|
static struct xkb_keymap *
|
||||||
meta_backend_native_get_keymap (MetaBackend *backend)
|
meta_backend_native_get_keymap (MetaBackend *backend)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
ClutterSeat *seat;
|
||||||
return meta_device_manager_native_get_keyboard_map (manager);
|
|
||||||
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
return meta_seat_native_get_keyboard_map (META_SEAT_NATIVE (seat));
|
||||||
}
|
}
|
||||||
|
|
||||||
static xkb_layout_index_t
|
static xkb_layout_index_t
|
||||||
meta_backend_native_get_keymap_layout_group (MetaBackend *backend)
|
meta_backend_native_get_keymap_layout_group (MetaBackend *backend)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
ClutterSeat *seat;
|
||||||
|
|
||||||
return meta_device_manager_native_get_keyboard_layout_index (manager);
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
return meta_seat_native_get_keyboard_layout_index (META_SEAT_NATIVE (seat));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_backend_native_lock_layout_group (MetaBackend *backend,
|
meta_backend_native_lock_layout_group (MetaBackend *backend,
|
||||||
guint idx)
|
guint idx)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
|
||||||
xkb_layout_index_t old_idx;
|
xkb_layout_index_t old_idx;
|
||||||
|
ClutterSeat *seat;
|
||||||
|
|
||||||
old_idx = meta_backend_native_get_keymap_layout_group (backend);
|
old_idx = meta_backend_native_get_keymap_layout_group (backend);
|
||||||
if (old_idx == idx)
|
if (old_idx == idx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
meta_device_manager_native_set_keyboard_layout_index (manager, idx);
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
meta_seat_native_set_keyboard_layout_index (META_SEAT_NATIVE (seat), idx);
|
||||||
meta_backend_notify_keymap_layout_group_changed (backend, idx);
|
meta_backend_notify_keymap_layout_group_changed (backend, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,8 +502,11 @@ static void
|
|||||||
meta_backend_native_set_numlock (MetaBackend *backend,
|
meta_backend_native_set_numlock (MetaBackend *backend,
|
||||||
gboolean numlock_state)
|
gboolean numlock_state)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
ClutterSeat *seat;
|
||||||
meta_device_manager_native_set_keyboard_numlock (manager, numlock_state);
|
|
||||||
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
meta_seat_native_set_keyboard_numlock (META_SEAT_NATIVE (seat),
|
||||||
|
numlock_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -208,200 +208,3 @@ meta_device_manager_native_new (ClutterBackend *backend,
|
|||||||
|
|
||||||
return manager_native;
|
return manager_native;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_device_manager_native_set_keyboard_map: (skip)
|
|
||||||
* @evdev: the #ClutterDeviceManager created by the evdev backend
|
|
||||||
* @keymap: the new keymap
|
|
||||||
*
|
|
||||||
* Instructs @evdev to use the speficied keyboard map. This will cause
|
|
||||||
* the backend to drop the state and create a new one with the new
|
|
||||||
* map. To avoid state being lost, callers should ensure that no key
|
|
||||||
* is pressed when calling this function.
|
|
||||||
*
|
|
||||||
* Since: 1.16
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
meta_device_manager_native_set_keyboard_map (ClutterDeviceManager *evdev,
|
|
||||||
struct xkb_keymap *xkb_keymap)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
ClutterKeymap *keymap;
|
|
||||||
|
|
||||||
g_return_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev));
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
keymap = clutter_seat_get_keymap (CLUTTER_SEAT (manager_evdev->priv->main_seat));
|
|
||||||
meta_keymap_native_set_keyboard_map (META_KEYMAP_NATIVE (keymap),
|
|
||||||
xkb_keymap);
|
|
||||||
|
|
||||||
meta_seat_native_update_xkb_state (manager_evdev->priv->main_seat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_device_manager_native_get_keyboard_map: (skip)
|
|
||||||
* @evdev: the #ClutterDeviceManager created by the evdev backend
|
|
||||||
*
|
|
||||||
* Retrieves the #xkb_keymap in use by the evdev backend.
|
|
||||||
*
|
|
||||||
* Return value: the #xkb_keymap.
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
struct xkb_keymap *
|
|
||||||
meta_device_manager_native_get_keyboard_map (ClutterDeviceManager *evdev)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
|
|
||||||
g_return_val_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev), NULL);
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
|
|
||||||
return xkb_state_get_keymap (manager_evdev->priv->main_seat->xkb);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_device_manager_set_keyboard_layout_index: (skip)
|
|
||||||
* @evdev: the #ClutterDeviceManager created by the evdev backend
|
|
||||||
* @idx: the xkb layout index to set
|
|
||||||
*
|
|
||||||
* Sets the xkb layout index on the backend's #xkb_state .
|
|
||||||
*
|
|
||||||
* Since: 1.20
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
meta_device_manager_native_set_keyboard_layout_index (ClutterDeviceManager *evdev,
|
|
||||||
xkb_layout_index_t idx)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
MetaSeatNative *seat;
|
|
||||||
xkb_mod_mask_t depressed_mods;
|
|
||||||
xkb_mod_mask_t latched_mods;
|
|
||||||
xkb_mod_mask_t locked_mods;
|
|
||||||
struct xkb_state *state;
|
|
||||||
|
|
||||||
g_return_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev));
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
state = manager_evdev->priv->main_seat->xkb;
|
|
||||||
|
|
||||||
depressed_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED);
|
|
||||||
latched_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED);
|
|
||||||
locked_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED);
|
|
||||||
|
|
||||||
xkb_state_update_mask (state, depressed_mods, latched_mods, locked_mods, 0, 0, idx);
|
|
||||||
|
|
||||||
seat = manager_evdev->priv->main_seat;
|
|
||||||
seat->layout_idx = idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_evdev_get_keyboard_layout_index: (skip)
|
|
||||||
*/
|
|
||||||
xkb_layout_index_t
|
|
||||||
meta_device_manager_native_get_keyboard_layout_index (ClutterDeviceManager *evdev)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
return manager_evdev->priv->main_seat->layout_idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_device_manager_native_set_keyboard_numlock: (skip)
|
|
||||||
* @evdev: the #ClutterDeviceManager created by the evdev backend
|
|
||||||
* @numlock_set: TRUE to set NumLock ON, FALSE otherwise.
|
|
||||||
*
|
|
||||||
* Sets the NumLock state on the backend's #xkb_state .
|
|
||||||
*
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
meta_device_manager_native_set_keyboard_numlock (ClutterDeviceManager *evdev,
|
|
||||||
gboolean numlock_state)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
MetaDeviceManagerNativePrivate *priv;
|
|
||||||
MetaSeatNative *seat;
|
|
||||||
xkb_mod_mask_t depressed_mods;
|
|
||||||
xkb_mod_mask_t latched_mods;
|
|
||||||
xkb_mod_mask_t locked_mods;
|
|
||||||
xkb_mod_mask_t group_mods;
|
|
||||||
xkb_mod_mask_t numlock;
|
|
||||||
struct xkb_keymap *xkb_keymap;
|
|
||||||
ClutterKeymap *keymap;
|
|
||||||
|
|
||||||
g_return_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev));
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
priv = manager_evdev->priv;
|
|
||||||
|
|
||||||
keymap = clutter_seat_get_keymap (CLUTTER_SEAT (priv->main_seat));
|
|
||||||
xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
|
|
||||||
|
|
||||||
numlock = (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod2"));
|
|
||||||
|
|
||||||
seat = priv->main_seat;
|
|
||||||
|
|
||||||
depressed_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_DEPRESSED);
|
|
||||||
latched_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_LATCHED);
|
|
||||||
locked_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_LOCKED);
|
|
||||||
group_mods = xkb_state_serialize_layout (seat->xkb, XKB_STATE_LAYOUT_EFFECTIVE);
|
|
||||||
|
|
||||||
if (numlock_state)
|
|
||||||
locked_mods |= numlock;
|
|
||||||
else
|
|
||||||
locked_mods &= ~numlock;
|
|
||||||
|
|
||||||
xkb_state_update_mask (seat->xkb,
|
|
||||||
depressed_mods,
|
|
||||||
latched_mods,
|
|
||||||
locked_mods,
|
|
||||||
0, 0,
|
|
||||||
group_mods);
|
|
||||||
|
|
||||||
meta_seat_native_sync_leds (seat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* meta_device_manager_native_set_keyboard_repeat:
|
|
||||||
* @evdev: the #ClutterDeviceManager created by the evdev backend
|
|
||||||
* @repeat: whether to enable or disable keyboard repeat events
|
|
||||||
* @delay: the delay in ms between the hardware key press event and
|
|
||||||
* the first synthetic event
|
|
||||||
* @interval: the period in ms between consecutive synthetic key
|
|
||||||
* press events
|
|
||||||
*
|
|
||||||
* Enables or disables sythetic key press events, allowing for initial
|
|
||||||
* delay and interval period to be specified.
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
meta_device_manager_native_set_keyboard_repeat (ClutterDeviceManager *evdev,
|
|
||||||
gboolean repeat,
|
|
||||||
uint32_t delay,
|
|
||||||
uint32_t interval)
|
|
||||||
{
|
|
||||||
MetaDeviceManagerNative *manager_evdev;
|
|
||||||
MetaSeatNative *seat;
|
|
||||||
|
|
||||||
g_return_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev));
|
|
||||||
|
|
||||||
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
|
|
||||||
seat = manager_evdev->priv->main_seat;
|
|
||||||
|
|
||||||
seat->repeat = repeat;
|
|
||||||
seat->repeat_delay = delay;
|
|
||||||
seat->repeat_interval = interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct xkb_state *
|
|
||||||
meta_device_manager_native_get_xkb_state (MetaDeviceManagerNative *manager_evdev)
|
|
||||||
{
|
|
||||||
return manager_evdev->priv->main_seat->xkb;
|
|
||||||
}
|
|
||||||
|
@ -54,24 +54,4 @@ GType meta_device_manager_native_get_type (void) G_GNUC_CONST;
|
|||||||
MetaDeviceManagerNative * meta_device_manager_native_new (ClutterBackend *backend,
|
MetaDeviceManagerNative * meta_device_manager_native_new (ClutterBackend *backend,
|
||||||
MetaSeatNative *seat);
|
MetaSeatNative *seat);
|
||||||
|
|
||||||
struct xkb_state * meta_device_manager_native_get_xkb_state (MetaDeviceManagerNative *manager_evdev);
|
|
||||||
|
|
||||||
void meta_device_manager_native_set_keyboard_map (ClutterDeviceManager *evdev,
|
|
||||||
struct xkb_keymap *keymap);
|
|
||||||
|
|
||||||
struct xkb_keymap * meta_device_manager_native_get_keyboard_map (ClutterDeviceManager *evdev);
|
|
||||||
|
|
||||||
void meta_device_manager_native_set_keyboard_layout_index (ClutterDeviceManager *evdev,
|
|
||||||
xkb_layout_index_t idx);
|
|
||||||
|
|
||||||
xkb_layout_index_t meta_device_manager_native_get_keyboard_layout_index (ClutterDeviceManager *evdev);
|
|
||||||
|
|
||||||
void meta_device_manager_native_set_keyboard_numlock (ClutterDeviceManager *evdev,
|
|
||||||
gboolean numlock_state);
|
|
||||||
|
|
||||||
void meta_device_manager_native_set_keyboard_repeat (ClutterDeviceManager *evdev,
|
|
||||||
gboolean repeat,
|
|
||||||
uint32_t delay,
|
|
||||||
uint32_t interval);
|
|
||||||
|
|
||||||
#endif /* META_DEVICE_MANAGER_NATIVE_H */
|
#endif /* META_DEVICE_MANAGER_NATIVE_H */
|
||||||
|
@ -316,9 +316,11 @@ meta_input_settings_native_set_keyboard_repeat (MetaInputSettings *settings,
|
|||||||
guint delay,
|
guint delay,
|
||||||
guint interval)
|
guint interval)
|
||||||
{
|
{
|
||||||
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
|
ClutterSeat *seat;
|
||||||
|
|
||||||
meta_device_manager_native_set_keyboard_repeat (manager, enabled, delay, interval);
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
|
meta_seat_native_set_keyboard_repeat (META_SEAT_NATIVE (seat),
|
||||||
|
enabled, delay, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -53,12 +53,11 @@ meta_keymap_native_finalize (GObject *object)
|
|||||||
static gboolean
|
static gboolean
|
||||||
meta_keymap_native_get_num_lock_state (ClutterKeymap *keymap)
|
meta_keymap_native_get_num_lock_state (ClutterKeymap *keymap)
|
||||||
{
|
{
|
||||||
MetaDeviceManagerNative *device_manager;
|
|
||||||
struct xkb_state *xkb_state;
|
struct xkb_state *xkb_state;
|
||||||
|
ClutterSeat *seat;
|
||||||
|
|
||||||
device_manager =
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
META_DEVICE_MANAGER_NATIVE (clutter_device_manager_get_default ());
|
xkb_state = meta_seat_native_get_xkb_state (META_SEAT_NATIVE (seat));
|
||||||
xkb_state = meta_device_manager_native_get_xkb_state (device_manager);
|
|
||||||
|
|
||||||
return xkb_state_mod_name_is_active (xkb_state,
|
return xkb_state_mod_name_is_active (xkb_state,
|
||||||
XKB_MOD_NAME_NUM,
|
XKB_MOD_NAME_NUM,
|
||||||
@ -69,12 +68,11 @@ meta_keymap_native_get_num_lock_state (ClutterKeymap *keymap)
|
|||||||
static gboolean
|
static gboolean
|
||||||
meta_keymap_native_get_caps_lock_state (ClutterKeymap *keymap)
|
meta_keymap_native_get_caps_lock_state (ClutterKeymap *keymap)
|
||||||
{
|
{
|
||||||
MetaDeviceManagerNative *device_manager;
|
|
||||||
struct xkb_state *xkb_state;
|
struct xkb_state *xkb_state;
|
||||||
|
ClutterSeat *seat;
|
||||||
|
|
||||||
device_manager =
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
META_DEVICE_MANAGER_NATIVE (clutter_device_manager_get_default ());
|
xkb_state = meta_seat_native_get_xkb_state (META_SEAT_NATIVE (seat));
|
||||||
xkb_state = meta_device_manager_native_get_xkb_state (device_manager);
|
|
||||||
|
|
||||||
return xkb_state_mod_name_is_active (xkb_state,
|
return xkb_state_mod_name_is_active (xkb_state,
|
||||||
XKB_MOD_NAME_CAPS,
|
XKB_MOD_NAME_CAPS,
|
||||||
|
@ -3029,3 +3029,159 @@ meta_seat_native_reclaim_devices (MetaSeatNative *seat)
|
|||||||
|
|
||||||
seat->released = FALSE;
|
seat->released = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_set_keyboard_map: (skip)
|
||||||
|
* @seat: the #ClutterSeat created by the evdev backend
|
||||||
|
* @keymap: the new keymap
|
||||||
|
*
|
||||||
|
* Instructs @evdev to use the speficied keyboard map. This will cause
|
||||||
|
* the backend to drop the state and create a new one with the new
|
||||||
|
* map. To avoid state being lost, callers should ensure that no key
|
||||||
|
* is pressed when calling this function.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
meta_seat_native_set_keyboard_map (MetaSeatNative *seat,
|
||||||
|
struct xkb_keymap *xkb_keymap)
|
||||||
|
{
|
||||||
|
ClutterKeymap *keymap;
|
||||||
|
|
||||||
|
g_return_if_fail (META_IS_SEAT_NATIVE (seat));
|
||||||
|
|
||||||
|
keymap = clutter_seat_get_keymap (CLUTTER_SEAT (seat));
|
||||||
|
meta_keymap_native_set_keyboard_map (META_KEYMAP_NATIVE (keymap),
|
||||||
|
xkb_keymap);
|
||||||
|
|
||||||
|
meta_seat_native_update_xkb_state (seat);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_get_keyboard_map: (skip)
|
||||||
|
* @seat: the #ClutterSeat created by the evdev backend
|
||||||
|
*
|
||||||
|
* Retrieves the #xkb_keymap in use by the evdev backend.
|
||||||
|
*
|
||||||
|
* Return value: the #xkb_keymap.
|
||||||
|
*/
|
||||||
|
struct xkb_keymap *
|
||||||
|
meta_seat_native_get_keyboard_map (MetaSeatNative *seat)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (META_IS_SEAT_NATIVE (seat), NULL);
|
||||||
|
|
||||||
|
return xkb_state_get_keymap (seat->xkb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_set_keyboard_layout_index: (skip)
|
||||||
|
* @seat: the #ClutterSeat created by the evdev backend
|
||||||
|
* @idx: the xkb layout index to set
|
||||||
|
*
|
||||||
|
* Sets the xkb layout index on the backend's #xkb_state .
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
meta_seat_native_set_keyboard_layout_index (MetaSeatNative *seat,
|
||||||
|
xkb_layout_index_t idx)
|
||||||
|
{
|
||||||
|
xkb_mod_mask_t depressed_mods;
|
||||||
|
xkb_mod_mask_t latched_mods;
|
||||||
|
xkb_mod_mask_t locked_mods;
|
||||||
|
struct xkb_state *state;
|
||||||
|
|
||||||
|
g_return_if_fail (META_IS_SEAT_NATIVE (seat));
|
||||||
|
|
||||||
|
state = seat->xkb;
|
||||||
|
|
||||||
|
depressed_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED);
|
||||||
|
latched_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED);
|
||||||
|
locked_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED);
|
||||||
|
|
||||||
|
xkb_state_update_mask (state, depressed_mods, latched_mods, locked_mods, 0, 0, idx);
|
||||||
|
|
||||||
|
seat->layout_idx = idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_get_keyboard_layout_index: (skip)
|
||||||
|
*/
|
||||||
|
xkb_layout_index_t
|
||||||
|
meta_seat_native_get_keyboard_layout_index (MetaSeatNative *seat)
|
||||||
|
{
|
||||||
|
return seat->layout_idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_set_keyboard_numlock: (skip)
|
||||||
|
* @seat: the #ClutterSeat created by the evdev backend
|
||||||
|
* @numlock_set: TRUE to set NumLock ON, FALSE otherwise.
|
||||||
|
*
|
||||||
|
* Sets the NumLock state on the backend's #xkb_state .
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
meta_seat_native_set_keyboard_numlock (MetaSeatNative *seat,
|
||||||
|
gboolean numlock_state)
|
||||||
|
{
|
||||||
|
xkb_mod_mask_t depressed_mods;
|
||||||
|
xkb_mod_mask_t latched_mods;
|
||||||
|
xkb_mod_mask_t locked_mods;
|
||||||
|
xkb_mod_mask_t group_mods;
|
||||||
|
xkb_mod_mask_t numlock;
|
||||||
|
struct xkb_keymap *xkb_keymap;
|
||||||
|
ClutterKeymap *keymap;
|
||||||
|
|
||||||
|
g_return_if_fail (META_IS_SEAT_NATIVE (seat));
|
||||||
|
|
||||||
|
keymap = clutter_seat_get_keymap (CLUTTER_SEAT (seat));
|
||||||
|
xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
|
||||||
|
|
||||||
|
numlock = (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod2"));
|
||||||
|
|
||||||
|
depressed_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_DEPRESSED);
|
||||||
|
latched_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_LATCHED);
|
||||||
|
locked_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_LOCKED);
|
||||||
|
group_mods = xkb_state_serialize_layout (seat->xkb, XKB_STATE_LAYOUT_EFFECTIVE);
|
||||||
|
|
||||||
|
if (numlock_state)
|
||||||
|
locked_mods |= numlock;
|
||||||
|
else
|
||||||
|
locked_mods &= ~numlock;
|
||||||
|
|
||||||
|
xkb_state_update_mask (seat->xkb,
|
||||||
|
depressed_mods,
|
||||||
|
latched_mods,
|
||||||
|
locked_mods,
|
||||||
|
0, 0,
|
||||||
|
group_mods);
|
||||||
|
|
||||||
|
meta_seat_native_sync_leds (seat);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_seat_native_set_keyboard_repeat:
|
||||||
|
* @seat: the #ClutterSeat created by the evdev backend
|
||||||
|
* @repeat: whether to enable or disable keyboard repeat events
|
||||||
|
* @delay: the delay in ms between the hardware key press event and
|
||||||
|
* the first synthetic event
|
||||||
|
* @interval: the period in ms between consecutive synthetic key
|
||||||
|
* press events
|
||||||
|
*
|
||||||
|
* Enables or disables sythetic key press events, allowing for initial
|
||||||
|
* delay and interval period to be specified.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
meta_seat_native_set_keyboard_repeat (MetaSeatNative *seat,
|
||||||
|
gboolean repeat,
|
||||||
|
uint32_t delay,
|
||||||
|
uint32_t interval)
|
||||||
|
{
|
||||||
|
g_return_if_fail (META_IS_SEAT_NATIVE (seat));
|
||||||
|
|
||||||
|
seat->repeat = repeat;
|
||||||
|
seat->repeat_delay = delay;
|
||||||
|
seat->repeat_interval = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct xkb_state *
|
||||||
|
meta_seat_native_get_xkb_state (MetaSeatNative *seat)
|
||||||
|
{
|
||||||
|
return seat->xkb;
|
||||||
|
}
|
||||||
|
@ -300,4 +300,24 @@ void meta_seat_native_warp_pointer (ClutterInputDevice *pointer_device,
|
|||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
|
||||||
|
struct xkb_state * meta_seat_native_get_xkb_state (MetaSeatNative *seat);
|
||||||
|
|
||||||
|
void meta_seat_native_set_keyboard_map (MetaSeatNative *seat,
|
||||||
|
struct xkb_keymap *keymap);
|
||||||
|
|
||||||
|
struct xkb_keymap * meta_seat_native_get_keyboard_map (MetaSeatNative *seat);
|
||||||
|
|
||||||
|
void meta_seat_native_set_keyboard_layout_index (MetaSeatNative *seat,
|
||||||
|
xkb_layout_index_t idx);
|
||||||
|
|
||||||
|
xkb_layout_index_t meta_seat_native_get_keyboard_layout_index (MetaSeatNative *seat);
|
||||||
|
|
||||||
|
void meta_seat_native_set_keyboard_numlock (MetaSeatNative *seat,
|
||||||
|
gboolean numlock_state);
|
||||||
|
|
||||||
|
void meta_seat_native_set_keyboard_repeat (MetaSeatNative *seat,
|
||||||
|
gboolean repeat,
|
||||||
|
uint32_t delay,
|
||||||
|
uint32_t interval);
|
||||||
|
|
||||||
#endif /* META_SEAT_NATIVE_H */
|
#endif /* META_SEAT_NATIVE_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user