Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc

Issue 2639053002: [ozone/wayland] Implement basic keyboard handling support (Closed)
Patch Set: Implement basic keyboard handling support Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
index b72f6f208e3fd8deb9939b8cae47183269bc1802..aacfc8a483a6a5b58dffe71a66e81a261ac5b230 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
@@ -827,6 +827,13 @@ void XkbKeyboardLayoutEngine::SetKeymap(xkb_keymap* keymap) {
if (index == XKB_MOD_INVALID) {
DVLOG(3) << "XKB keyboard layout does not contain " << flags[i].xkb_name;
} else {
+ if (flags[i].ui_flag == ui::EF_SHIFT_DOWN)
+ xkb_mod_indexes_.shift = index;
+ else if (flags[i].ui_flag == ui::EF_CONTROL_DOWN)
+ xkb_mod_indexes_.control = index;
+ else if (flags[i].ui_flag == ui::EF_ALT_DOWN)
+ xkb_mod_indexes_.alt = index;
+
xkb_mod_mask_t flag = static_cast<xkb_mod_mask_t>(1) << index;
XkbFlagMapEntry e = {flags[i].ui_flag, flag};
xkb_flag_map_.push_back(e);
@@ -975,4 +982,27 @@ void XkbKeyboardLayoutEngine::ParseLayoutName(const std::string& layout_name,
}
}
+int XkbKeyboardLayoutEngine::UpdateModifiers(uint32_t depressed_mods,
+ uint32_t latched_mods,
+ uint32_t locked_mods,
+ uint32_t group) {
+ xkb_state_update_mask(xkb_state_.get(), depressed_mods, latched_mods,
+ locked_mods, 0, 0, group);
+
+ int modifiers = 0;
+ auto component = static_cast<xkb_state_component>(XKB_STATE_MODS_DEPRESSED |
+ XKB_STATE_MODS_LATCHED);
+ if (xkb_state_mod_index_is_active(xkb_state_.get(), xkb_mod_indexes_.control,
+ component))
+ modifiers |= EF_CONTROL_DOWN;
+ if (xkb_state_mod_index_is_active(xkb_state_.get(), xkb_mod_indexes_.alt,
+ component))
+ modifiers |= EF_ALT_DOWN;
+ if (xkb_state_mod_index_is_active(xkb_state_.get(), xkb_mod_indexes_.shift,
+ component))
+ modifiers |= EF_SHIFT_DOWN;
+
+ return modifiers;
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698