[mutter] wayland-keyboard: Handle keymap-layout-group-changed signal
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland-keyboard: Handle keymap-layout-group-changed signal
- Date: Thu, 11 Sep 2014 17:08:49 +0000 (UTC)
commit 656573c5d22e5fbd36fcf9ed3b723be3cfbb8372
Author: Rui Matos <tiagomatos gmail com>
Date: Wed Sep 10 19:23:55 2014 +0200
wayland-keyboard: Handle keymap-layout-group-changed signal
We need to send a modifiers event to wayland clients when the layout
group changes.
https://bugzilla.gnome.org/show_bug.cgi?id=736433
src/wayland/meta-wayland-keyboard.c | 58 +++++++++++++++++++++++------------
1 files changed, 38 insertions(+), 20 deletions(-)
---
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index 1980c6f..0c6b88f 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -62,9 +62,7 @@
#include "meta-wayland-private.h"
static void meta_wayland_keyboard_update_xkb_state (MetaWaylandKeyboard *keyboard);
-static void notify_modifiers (MetaWaylandKeyboard *keyboard, uint32_t serial,
- uint32_t mods_depressed, uint32_t mods_latched,
- uint32_t mods_locked, uint32_t group);
+static void notify_modifiers (MetaWaylandKeyboard *keyboard);
static void
unbind_resource (struct wl_resource *resource)
@@ -190,12 +188,8 @@ meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
inform_clients_of_new_keymap (keyboard);
- notify_modifiers (keyboard,
- wl_display_next_serial (keyboard->display),
- xkb_state_serialize_mods (xkb_info->state, XKB_STATE_MODS_DEPRESSED),
- xkb_state_serialize_mods (xkb_info->state, XKB_STATE_MODS_LATCHED),
- xkb_state_serialize_mods (xkb_info->state, XKB_STATE_MODS_LOCKED),
- xkb_state_serialize_layout (xkb_info->state, XKB_STATE_LAYOUT_EFFECTIVE));
+ notify_modifiers (keyboard);
+
return;
err_dev_zero:
@@ -216,6 +210,28 @@ on_keymap_changed (MetaBackend *backend,
}
static void
+on_keymap_layout_group_changed (MetaBackend *backend,
+ guint idx,
+ gpointer data)
+{
+ MetaWaylandKeyboard *keyboard = data;
+ xkb_mod_mask_t depressed_mods;
+ xkb_mod_mask_t latched_mods;
+ xkb_mod_mask_t locked_mods;
+ struct xkb_state *state;
+
+ state = keyboard->xkb_info.state;
+
+ 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);
+
+ notify_modifiers (keyboard);
+}
+
+static void
keyboard_handle_focus_surface_destroy (struct wl_listener *listener, void *data)
{
MetaWaylandKeyboard *keyboard = wl_container_of (listener, keyboard, focus_surface_listener);
@@ -248,18 +264,23 @@ notify_key (MetaWaylandKeyboard *keyboard,
}
static void
-notify_modifiers (MetaWaylandKeyboard *keyboard, uint32_t serial,
- uint32_t mods_depressed, uint32_t mods_latched,
- uint32_t mods_locked, uint32_t group)
+notify_modifiers (MetaWaylandKeyboard *keyboard)
{
+ struct xkb_state *state;
struct wl_resource *resource;
struct wl_list *l;
+ state = keyboard->xkb_info.state;
+
l = &keyboard->focus_resource_list;
wl_resource_for_each (resource, l)
{
- wl_keyboard_send_modifiers (resource, serial, mods_depressed,
- mods_latched, mods_locked, group);
+ wl_keyboard_send_modifiers (resource,
+ wl_display_next_serial (keyboard->display),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
+ xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE));
}
}
@@ -367,6 +388,8 @@ meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard,
g_signal_connect (backend, "keymap-changed",
G_CALLBACK (on_keymap_changed), keyboard);
+ g_signal_connect (backend, "keymap-layout-group-changed",
+ G_CALLBACK (on_keymap_layout_group_changed), keyboard);
meta_wayland_keyboard_take_keymap (keyboard, meta_backend_get_keymap (backend));
}
@@ -454,12 +477,7 @@ meta_wayland_keyboard_update (MetaWaylandKeyboard *keyboard,
if (changed_state == 0)
return;
- notify_modifiers (keyboard,
- wl_display_next_serial (keyboard->display),
- xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED),
- xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED),
- xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
- xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE));
+ notify_modifiers (keyboard);
}
gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]