| 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
|
|
|