diff --git a/CHANGELOG.md b/CHANGELOG.md index bc6282084a..16f47610f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ And please only add new entries to the top of this list, right below the `# Unre - **Breaking:** Remove the unstable `xlib_xconnection()` function from the private interface. - Added Orbital support for Redox OS - On X11, added `drag_resize_window` method. +- **Breaking:** On X11, keys and their Shift+key equivalents are mapped to the same VirtualKeyCode, as done in the macOS implementation. # 0.27.5 diff --git a/src/platform_impl/linux/x11/events.rs b/src/platform_impl/linux/x11/events.rs index 9063916025..4e6c4a4f33 100644 --- a/src/platform_impl/linux/x11/events.rs +++ b/src/platform_impl/linux/x11/events.rs @@ -2,6 +2,8 @@ use super::ffi; use crate::event::VirtualKeyCode; use libc; +// Map keysyms to VirtualKeyCodes, as defined in the X11 header files. +// Keys and their Shift+key equivalents are mapped to the same VirtualKeyCode pub fn keysym_to_element(keysym: libc::c_uint) -> Option { Some(match keysym { ffi::XK_BackSpace => VirtualKeyCode::Back, @@ -32,16 +34,17 @@ pub fn keysym_to_element(keysym: libc::c_uint) -> Option { //ffi::XK_Kana_Shift => VirtualKeyCode::Kana_shift, //ffi::XK_Eisu_Shift => VirtualKeyCode::Eisu_shift, //ffi::XK_Eisu_toggle => VirtualKeyCode::Eisu_toggle, - ffi::XK_Home => VirtualKeyCode::Home, - ffi::XK_Left => VirtualKeyCode::Left, - ffi::XK_Up => VirtualKeyCode::Up, - ffi::XK_Right => VirtualKeyCode::Right, - ffi::XK_Down => VirtualKeyCode::Down, + ffi::XK_Home | ffi::XK_KP_Home => VirtualKeyCode::Home, + ffi::XK_Left | ffi::XK_KP_Left => VirtualKeyCode::Left, + ffi::XK_Up | ffi::XK_KP_Up => VirtualKeyCode::Up, + ffi::XK_Right | ffi::XK_KP_Right => VirtualKeyCode::Right, + ffi::XK_Down | ffi::XK_KP_Down => VirtualKeyCode::Down, + ffi::XK_Page_Up | ffi::XK_KP_Page_Up => VirtualKeyCode::PageUp, + ffi::XK_Page_Down | ffi::XK_KP_Page_Down => VirtualKeyCode::PageDown, + ffi::XK_End | ffi::XK_KP_End => VirtualKeyCode::End, + ffi::XK_Insert | ffi::XK_KP_Insert => VirtualKeyCode::Insert, //ffi::XK_Prior => VirtualKeyCode::Prior, - ffi::XK_Page_Up => VirtualKeyCode::PageUp, //ffi::XK_Next => VirtualKeyCode::Next, - ffi::XK_Page_Down => VirtualKeyCode::PageDown, - ffi::XK_End => VirtualKeyCode::End, //ffi::XK_Begin => VirtualKeyCode::Begin, //ffi::XK_Win_L => VirtualKeyCode::Win_l, //ffi::XK_Win_R => VirtualKeyCode::Win_r, @@ -49,7 +52,6 @@ pub fn keysym_to_element(keysym: libc::c_uint) -> Option { //ffi::XK_Select => VirtualKeyCode::Select, //ffi::XK_Print => VirtualKeyCode::Print, //ffi::XK_Execute => VirtualKeyCode::Execute, - ffi::XK_Insert => VirtualKeyCode::Insert, //ffi::XK_Undo => VirtualKeyCode::Undo, //ffi::XK_Redo => VirtualKeyCode::Redo, //ffi::XK_Menu => VirtualKeyCode::Menu, @@ -67,19 +69,9 @@ pub fn keysym_to_element(keysym: libc::c_uint) -> Option { //ffi::XK_KP_F2 => VirtualKeyCode::Kp_f2, //ffi::XK_KP_F3 => VirtualKeyCode::Kp_f3, //ffi::XK_KP_F4 => VirtualKeyCode::Kp_f4, - ffi::XK_KP_Home => VirtualKeyCode::Home, - ffi::XK_KP_Left => VirtualKeyCode::Left, - ffi::XK_KP_Up => VirtualKeyCode::Up, - ffi::XK_KP_Right => VirtualKeyCode::Right, - ffi::XK_KP_Down => VirtualKeyCode::Down, //ffi::XK_KP_Prior => VirtualKeyCode::Kp_prior, - ffi::XK_KP_Page_Up => VirtualKeyCode::PageUp, //ffi::XK_KP_Next => VirtualKeyCode::Kp_next, - ffi::XK_KP_Page_Down => VirtualKeyCode::PageDown, - ffi::XK_KP_End => VirtualKeyCode::End, //ffi::XK_KP_Begin => VirtualKeyCode::Kp_begin, - ffi::XK_KP_Insert => VirtualKeyCode::Insert, - ffi::XK_KP_Delete => VirtualKeyCode::Delete, ffi::XK_KP_Equal => VirtualKeyCode::NumpadEquals, ffi::XK_KP_Multiply => VirtualKeyCode::NumpadMultiply, ffi::XK_KP_Add => VirtualKeyCode::NumpadAdd, @@ -173,102 +165,58 @@ pub fn keysym_to_element(keysym: libc::c_uint) -> Option { //ffi::XK_Hyper_R => VirtualKeyCode::Hyper_r, ffi::XK_ISO_Left_Tab => VirtualKeyCode::Tab, ffi::XK_space => VirtualKeyCode::Space, - //ffi::XK_exclam => VirtualKeyCode::Exclam, //ffi::XK_quotedbl => VirtualKeyCode::Quotedbl, - //ffi::XK_numbersign => VirtualKeyCode::Numbersign, - //ffi::XK_dollar => VirtualKeyCode::Dollar, - //ffi::XK_percent => VirtualKeyCode::Percent, - //ffi::XK_ampersand => VirtualKeyCode::Ampersand, - ffi::XK_apostrophe => VirtualKeyCode::Apostrophe, //ffi::XK_quoteright => VirtualKeyCode::Quoteright, - //ffi::XK_parenleft => VirtualKeyCode::Parenleft, - //ffi::XK_parenright => VirtualKeyCode::Parenright, - ffi::XK_asterisk => VirtualKeyCode::Asterisk, - ffi::XK_plus => VirtualKeyCode::Plus, - ffi::XK_comma => VirtualKeyCode::Comma, - ffi::XK_minus => VirtualKeyCode::Minus, - ffi::XK_period => VirtualKeyCode::Period, - ffi::XK_slash => VirtualKeyCode::Slash, - ffi::XK_0 => VirtualKeyCode::Key0, - ffi::XK_1 => VirtualKeyCode::Key1, - ffi::XK_2 => VirtualKeyCode::Key2, - ffi::XK_3 => VirtualKeyCode::Key3, - ffi::XK_4 => VirtualKeyCode::Key4, - ffi::XK_5 => VirtualKeyCode::Key5, - ffi::XK_6 => VirtualKeyCode::Key6, - ffi::XK_7 => VirtualKeyCode::Key7, - ffi::XK_8 => VirtualKeyCode::Key8, - ffi::XK_9 => VirtualKeyCode::Key9, - ffi::XK_colon => VirtualKeyCode::Colon, - ffi::XK_semicolon => VirtualKeyCode::Semicolon, - //ffi::XK_less => VirtualKeyCode::Less, - ffi::XK_equal => VirtualKeyCode::Equals, - //ffi::XK_greater => VirtualKeyCode::Greater, - //ffi::XK_question => VirtualKeyCode::Question, - ffi::XK_at => VirtualKeyCode::At, - ffi::XK_A => VirtualKeyCode::A, - ffi::XK_B => VirtualKeyCode::B, - ffi::XK_C => VirtualKeyCode::C, - ffi::XK_D => VirtualKeyCode::D, - ffi::XK_E => VirtualKeyCode::E, - ffi::XK_F => VirtualKeyCode::F, - ffi::XK_G => VirtualKeyCode::G, - ffi::XK_H => VirtualKeyCode::H, - ffi::XK_I => VirtualKeyCode::I, - ffi::XK_J => VirtualKeyCode::J, - ffi::XK_K => VirtualKeyCode::K, - ffi::XK_L => VirtualKeyCode::L, - ffi::XK_M => VirtualKeyCode::M, - ffi::XK_N => VirtualKeyCode::N, - ffi::XK_O => VirtualKeyCode::O, - ffi::XK_P => VirtualKeyCode::P, - ffi::XK_Q => VirtualKeyCode::Q, - ffi::XK_R => VirtualKeyCode::R, - ffi::XK_S => VirtualKeyCode::S, - ffi::XK_T => VirtualKeyCode::T, - ffi::XK_U => VirtualKeyCode::U, - ffi::XK_V => VirtualKeyCode::V, - ffi::XK_W => VirtualKeyCode::W, - ffi::XK_X => VirtualKeyCode::X, - ffi::XK_Y => VirtualKeyCode::Y, - ffi::XK_Z => VirtualKeyCode::Z, - ffi::XK_bracketleft => VirtualKeyCode::LBracket, - ffi::XK_backslash => VirtualKeyCode::Backslash, - ffi::XK_bracketright => VirtualKeyCode::RBracket, - //ffi::XK_asciicircum => VirtualKeyCode::Asciicircum, - //ffi::XK_underscore => VirtualKeyCode::Underscore, - ffi::XK_grave => VirtualKeyCode::Grave, + ffi::XK_grave | ffi::XK_asciitilde => VirtualKeyCode::Grave, + ffi::XK_0 | ffi::XK_parenright => VirtualKeyCode::Key0, + ffi::XK_1 | ffi::XK_exclam => VirtualKeyCode::Key1, + ffi::XK_2 | ffi::XK_at => VirtualKeyCode::Key2, + ffi::XK_3 | ffi::XK_numbersign => VirtualKeyCode::Key3, + ffi::XK_4 | ffi::XK_dollar => VirtualKeyCode::Key4, + ffi::XK_5 | ffi::XK_percent => VirtualKeyCode::Key5, + ffi::XK_6 | ffi::XK_asciicircum => VirtualKeyCode::Key6, + ffi::XK_7 | ffi::XK_ampersand => VirtualKeyCode::Key7, + ffi::XK_8 | ffi::XK_asterisk => VirtualKeyCode::Key8, + ffi::XK_9 | ffi::XK_parenleft => VirtualKeyCode::Key9, + ffi::XK_minus | ffi::XK_underscore => VirtualKeyCode::Minus, + ffi::XK_equal | ffi::XK_plus => VirtualKeyCode::Equals, + ffi::XK_backslash | ffi::XK_bar => VirtualKeyCode::Backslash, + ffi::XK_bracketleft | ffi::XK_braceleft => VirtualKeyCode::LBracket, + ffi::XK_bracketright | ffi::XK_braceright => VirtualKeyCode::RBracket, + ffi::XK_semicolon | ffi::XK_colon => VirtualKeyCode::Semicolon, + ffi::XK_apostrophe | ffi::XK_quotedbl => VirtualKeyCode::Apostrophe, + ffi::XK_comma | ffi::XK_less => VirtualKeyCode::Comma, + ffi::XK_period | ffi::XK_greater => VirtualKeyCode::Period, + ffi::XK_slash | ffi::XK_question => VirtualKeyCode::Slash, + ffi::XK_A | ffi::XK_a => VirtualKeyCode::A, + ffi::XK_B | ffi::XK_b => VirtualKeyCode::B, + ffi::XK_C | ffi::XK_c => VirtualKeyCode::C, + ffi::XK_D | ffi::XK_d => VirtualKeyCode::D, + ffi::XK_E | ffi::XK_e => VirtualKeyCode::E, + ffi::XK_F | ffi::XK_f => VirtualKeyCode::F, + ffi::XK_G | ffi::XK_g => VirtualKeyCode::G, + ffi::XK_H | ffi::XK_h => VirtualKeyCode::H, + ffi::XK_I | ffi::XK_i => VirtualKeyCode::I, + ffi::XK_J | ffi::XK_j => VirtualKeyCode::J, + ffi::XK_K | ffi::XK_k => VirtualKeyCode::K, + ffi::XK_L | ffi::XK_l => VirtualKeyCode::L, + ffi::XK_M | ffi::XK_m => VirtualKeyCode::M, + ffi::XK_N | ffi::XK_n => VirtualKeyCode::N, + ffi::XK_O | ffi::XK_o => VirtualKeyCode::O, + ffi::XK_P | ffi::XK_p => VirtualKeyCode::P, + ffi::XK_Q | ffi::XK_q => VirtualKeyCode::Q, + ffi::XK_R | ffi::XK_r => VirtualKeyCode::R, + ffi::XK_S | ffi::XK_s => VirtualKeyCode::S, + ffi::XK_T | ffi::XK_t => VirtualKeyCode::T, + ffi::XK_U | ffi::XK_u => VirtualKeyCode::U, + ffi::XK_V | ffi::XK_v => VirtualKeyCode::V, + ffi::XK_W | ffi::XK_w => VirtualKeyCode::W, + ffi::XK_X | ffi::XK_x => VirtualKeyCode::X, + ffi::XK_Y | ffi::XK_y => VirtualKeyCode::Y, + ffi::XK_Z | ffi::XK_z => VirtualKeyCode::Z, //ffi::XK_quoteleft => VirtualKeyCode::Quoteleft, - ffi::XK_a => VirtualKeyCode::A, - ffi::XK_b => VirtualKeyCode::B, - ffi::XK_c => VirtualKeyCode::C, - ffi::XK_d => VirtualKeyCode::D, - ffi::XK_e => VirtualKeyCode::E, - ffi::XK_f => VirtualKeyCode::F, - ffi::XK_g => VirtualKeyCode::G, - ffi::XK_h => VirtualKeyCode::H, - ffi::XK_i => VirtualKeyCode::I, - ffi::XK_j => VirtualKeyCode::J, - ffi::XK_k => VirtualKeyCode::K, - ffi::XK_l => VirtualKeyCode::L, - ffi::XK_m => VirtualKeyCode::M, - ffi::XK_n => VirtualKeyCode::N, - ffi::XK_o => VirtualKeyCode::O, - ffi::XK_p => VirtualKeyCode::P, - ffi::XK_q => VirtualKeyCode::Q, - ffi::XK_r => VirtualKeyCode::R, - ffi::XK_s => VirtualKeyCode::S, - ffi::XK_t => VirtualKeyCode::T, - ffi::XK_u => VirtualKeyCode::U, - ffi::XK_v => VirtualKeyCode::V, - ffi::XK_w => VirtualKeyCode::W, - ffi::XK_x => VirtualKeyCode::X, - ffi::XK_y => VirtualKeyCode::Y, - ffi::XK_z => VirtualKeyCode::Z, //ffi::XK_braceleft => VirtualKeyCode::Braceleft, - //ffi::XK_bar => VirtualKeyCode::Bar, //ffi::XK_braceright => VirtualKeyCode::Braceright, - //ffi::XK_asciitilde => VirtualKeyCode::Asciitilde, //ffi::XK_nobreakspace => VirtualKeyCode::Nobreakspace, //ffi::XK_exclamdown => VirtualKeyCode::Exclamdown, //ffi::XK_cent => VirtualKeyCode::Cent, @@ -935,7 +883,6 @@ pub fn keysym_to_element(keysym: libc::c_uint) -> Option { //ffi::XK_telephone => VirtualKeyCode::Telephone, //ffi::XK_telephonerecorder => VirtualKeyCode::Telephonerecorder, //ffi::XK_phonographcopyright => VirtualKeyCode::Phonographcopyright, - //ffi::XK_caret => VirtualKeyCode::Caret, //ffi::XK_singlelowquotemark => VirtualKeyCode::Singlelowquotemark, //ffi::XK_doublelowquotemark => VirtualKeyCode::Doublelowquotemark, //ffi::XK_cursor => VirtualKeyCode::Cursor,