Merge branch 'rel-1.42.2' into 'squeekboard-1.42.x'

treewide: Document changes and release 1.42.2

See merge request World/Phosh/squeekboard!694
This commit is contained in:
Marge Bot
2024-11-08 09:48:02 +00:00
5 changed files with 173 additions and 7 deletions

9
NEWS
View File

@ -1,3 +1,12 @@
squeekboard 1.42.2
------------------
Released November 2024
* Fixes:
* Compatibility: Squeekboard should now work better with apps that do not use the text-input-protocol of Wayland and rely on specific keycodes being assigned to specific characters/functions.
* Documentation: The recommended settings for creating layouts while using Phoc in a nested session, have been updated to work correctly with the changes to the scaling-algorithm.
* Contributors:
* MoonlightWave-12
squeekboard 1.42.1 squeekboard 1.42.1
------------------ ------------------
Released October 2024 Released October 2024

8
debian/changelog vendored
View File

@ -1,3 +1,11 @@
squeekboard (1.42.2) experimental; urgency=medium
* keyboard.rs: Add more keycodes and sort those
* keyboard.rs: Add keycode to the keymap with BackSpace if there is no other
* doc/layouts.md: Update recommended settings for creating layouts
-- MoonlightWave-12 <135532-MoonlightWave-12@users.noreply.gitlab.gnome.org> Wed, 06 Nov 2024 11:24:22 +0100
squeekboard (1.42.1) experimental; urgency=medium squeekboard (1.42.1) experimental; urgency=medium
[ Sebastian Krzyszkowiak ] [ Sebastian Krzyszkowiak ]

View File

@ -50,6 +50,9 @@ For testing the basic/compact shape:
```sh ```sh
[output:WL-1] [output:WL-1]
mode = 360x720 mode = 360x720
phys_width = 60
phys_height = 120
scale = 1.00
``` ```
For testing the wide shape: For testing the wide shape:
@ -57,8 +60,10 @@ For testing the wide shape:
```sh ```sh
[output:WL-1] [output:WL-1]
mode = 1280x800 mode = 1280x800
phys_width = 104
phys_height = 65
scale = 1.00
``` ```
Make sure there is no `phys_height` or `phys_width` set.
### Layout-stretching ### Layout-stretching

View File

@ -1,7 +1,7 @@
project( project(
'squeekboard', 'squeekboard',
'c', 'rust', 'c', 'rust',
version: '1.42.1', version: '1.42.2',
license: 'GPLv3', license: 'GPLv3',
meson_version: '>=1.0.0', meson_version: '>=1.0.0',
default_options: [ default_options: [

View File

@ -116,15 +116,159 @@ pub fn generate_keycodes<'a, C: IntoIterator<Item=String>>(
KEY_BACKSLASH, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_BACKSLASH, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N,
KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH]; KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH];
HashMap::from_iter( let keycode_offset = 8;
let mut keycode_map = HashMap::from_iter(
// Sort to remove a source of indeterminism in keycode assignment. // Sort to remove a source of indeterminism in keycode assignment.
sorted(key_names.into_iter()) sorted(key_names.into_iter())
.zip(util::cycle_count((9..255).filter(|x| allowed.contains(&(x - 8))))) .zip(util::cycle_count((9..255).filter(|x| allowed.contains(&(x - keycode_offset)))))
.map(|(name, (code, keymap_idx))| ( .map(|(name, (mut code, mut keymap_idx))| {
// Some apps expect specific keycodes for certain characters/functions.
// Reserve the first 2 keymaps (0 and 1) for sorting those manually,
// and use keymap_idx 2 and higher for other keycodes,
// to not assign identical keycodes twice.
// TODO: Add the "Shift"-modifier for keycodes on keymap 1.
keymap_idx = keymap_idx + 2;
if name == "1" { code = KEY_1 + keycode_offset; keymap_idx = 0 }
if name == "2" { code = KEY_2 + keycode_offset; keymap_idx = 0 }
if name == "3" { code = KEY_3 + keycode_offset; keymap_idx = 0 }
if name == "4" { code = KEY_4 + keycode_offset; keymap_idx = 0 }
if name == "5" { code = KEY_5 + keycode_offset; keymap_idx = 0 }
if name == "6" { code = KEY_6 + keycode_offset; keymap_idx = 0 }
if name == "7" { code = KEY_7 + keycode_offset; keymap_idx = 0 }
if name == "8" { code = KEY_8 + keycode_offset; keymap_idx = 0 }
if name == "9" { code = KEY_9 + keycode_offset; keymap_idx = 0 }
if name == "0" { code = KEY_0 + keycode_offset; keymap_idx = 0 }
if name == "a" { code = KEY_A + keycode_offset; keymap_idx = 0 }
if name == "b" { code = KEY_B + keycode_offset; keymap_idx = 0 }
if name == "c" { code = KEY_C + keycode_offset; keymap_idx = 0 }
if name == "d" { code = KEY_D + keycode_offset; keymap_idx = 0 }
if name == "e" { code = KEY_E + keycode_offset; keymap_idx = 0 }
if name == "f" { code = KEY_F + keycode_offset; keymap_idx = 0 }
if name == "g" { code = KEY_G + keycode_offset; keymap_idx = 0 }
if name == "h" { code = KEY_H + keycode_offset; keymap_idx = 0 }
if name == "i" { code = KEY_I + keycode_offset; keymap_idx = 0 }
if name == "j" { code = KEY_J + keycode_offset; keymap_idx = 0 }
if name == "k" { code = KEY_K + keycode_offset; keymap_idx = 0 }
if name == "l" { code = KEY_L + keycode_offset; keymap_idx = 0 }
if name == "m" { code = KEY_M + keycode_offset; keymap_idx = 0 }
if name == "n" { code = KEY_N + keycode_offset; keymap_idx = 0 }
if name == "o" { code = KEY_O + keycode_offset; keymap_idx = 0 }
if name == "p" { code = KEY_P + keycode_offset; keymap_idx = 0 }
if name == "q" { code = KEY_Q + keycode_offset; keymap_idx = 0 }
if name == "r" { code = KEY_R + keycode_offset; keymap_idx = 0 }
if name == "s" { code = KEY_S + keycode_offset; keymap_idx = 0 }
if name == "t" { code = KEY_T + keycode_offset; keymap_idx = 0 }
if name == "u" { code = KEY_U + keycode_offset; keymap_idx = 0 }
if name == "v" { code = KEY_V + keycode_offset; keymap_idx = 0 }
if name == "w" { code = KEY_W + keycode_offset; keymap_idx = 0 }
if name == "x" { code = KEY_X + keycode_offset; keymap_idx = 0 }
if name == "y" { code = KEY_Y + keycode_offset; keymap_idx = 0 }
if name == "z" { code = KEY_Z + keycode_offset; keymap_idx = 0 }
if name == "A" { code = KEY_A + keycode_offset; keymap_idx = 1 }
if name == "B" { code = KEY_B + keycode_offset; keymap_idx = 1 }
if name == "C" { code = KEY_C + keycode_offset; keymap_idx = 1 }
if name == "D" { code = KEY_D + keycode_offset; keymap_idx = 1 }
if name == "E" { code = KEY_E + keycode_offset; keymap_idx = 1 }
if name == "F" { code = KEY_F + keycode_offset; keymap_idx = 1 }
if name == "G" { code = KEY_G + keycode_offset; keymap_idx = 1 }
if name == "H" { code = KEY_H + keycode_offset; keymap_idx = 1 }
if name == "I" { code = KEY_I + keycode_offset; keymap_idx = 1 }
if name == "J" { code = KEY_J + keycode_offset; keymap_idx = 1 }
if name == "K" { code = KEY_K + keycode_offset; keymap_idx = 1 }
if name == "L" { code = KEY_L + keycode_offset; keymap_idx = 1 }
if name == "M" { code = KEY_M + keycode_offset; keymap_idx = 1 }
if name == "N" { code = KEY_N + keycode_offset; keymap_idx = 1 }
if name == "O" { code = KEY_O + keycode_offset; keymap_idx = 1 }
if name == "P" { code = KEY_P + keycode_offset; keymap_idx = 1 }
if name == "Q" { code = KEY_Q + keycode_offset; keymap_idx = 1 }
if name == "R" { code = KEY_R + keycode_offset; keymap_idx = 1 }
if name == "S" { code = KEY_S + keycode_offset; keymap_idx = 1 }
if name == "T" { code = KEY_T + keycode_offset; keymap_idx = 1 }
if name == "U" { code = KEY_U + keycode_offset; keymap_idx = 1 }
if name == "V" { code = KEY_V + keycode_offset; keymap_idx = 1 }
if name == "W" { code = KEY_W + keycode_offset; keymap_idx = 1 }
if name == "X" { code = KEY_X + keycode_offset; keymap_idx = 1 }
if name == "Y" { code = KEY_Y + keycode_offset; keymap_idx = 1 }
if name == "Z" { code = KEY_Z + keycode_offset; keymap_idx = 1 }
if name == "U0021" { code = KEY_1 + keycode_offset; keymap_idx = 1 }
if name == "U0040" { code = KEY_2 + keycode_offset; keymap_idx = 1 }
if name == "U0023" { code = KEY_3 + keycode_offset; keymap_idx = 1 }
if name == "U0024" { code = KEY_4 + keycode_offset; keymap_idx = 1 }
if name == "U0025" { code = KEY_5 + keycode_offset; keymap_idx = 1 }
if name == "U005E" { code = KEY_6 + keycode_offset; keymap_idx = 1 }
if name == "U0026" { code = KEY_7 + keycode_offset; keymap_idx = 1 }
if name == "U002A" { code = KEY_8 + keycode_offset; keymap_idx = 1 }
if name == "U0028" { code = KEY_9 + keycode_offset; keymap_idx = 1 }
if name == "U0029" { code = KEY_0 + keycode_offset; keymap_idx = 1 }
if name == "U002D" { code = KEY_MINUS + keycode_offset; keymap_idx = 0 }
if name == "U005F" { code = KEY_MINUS + keycode_offset; keymap_idx = 1 }
if name == "U003D" { code = KEY_EQUAL + keycode_offset; keymap_idx = 0 }
if name == "U002B" { code = KEY_EQUAL + keycode_offset; keymap_idx = 1 }
if name == "U005B" { code = KEY_LEFTBRACE + keycode_offset; keymap_idx = 0 }
if name == "U007B" { code = KEY_LEFTBRACE + keycode_offset; keymap_idx = 1 }
if name == "U005D" { code = KEY_RIGHTBRACE + keycode_offset; keymap_idx = 0 }
if name == "U007D" { code = KEY_RIGHTBRACE + keycode_offset; keymap_idx = 1 }
if name == "U003B" { code = KEY_SEMICOLON + keycode_offset; keymap_idx = 0 }
if name == "U003A" { code = KEY_SEMICOLON + keycode_offset; keymap_idx = 1 }
if name == "U0027" { code = KEY_APOSTROPHE + keycode_offset; keymap_idx = 0 }
if name == "U0022" { code = KEY_APOSTROPHE + keycode_offset; keymap_idx = 1 }
if name == "U00B4" { code = KEY_GRAVE + keycode_offset; keymap_idx = 0 }
if name == "U007E" { code = KEY_GRAVE + keycode_offset; keymap_idx = 1 }
if name == "U005C" { code = KEY_BACKSLASH + keycode_offset; keymap_idx = 0 }
if name == "U007C" { code = KEY_BACKSLASH + keycode_offset; keymap_idx = 1 }
if name == "U002C" { code = KEY_COMMA + keycode_offset; keymap_idx = 0 }
if name == "U003C" { code = KEY_COMMA + keycode_offset; keymap_idx = 1 }
if name == "U002E" { code = KEY_DOT + keycode_offset; keymap_idx = 0 }
if name == "U003E" { code = KEY_DOT + keycode_offset; keymap_idx = 1 }
if name == "U002F" { code = KEY_SLASH + keycode_offset; keymap_idx = 0 }
if name == "U003F" { code = KEY_SLASH + keycode_offset; keymap_idx = 1 }
if name == "U0020" { code = KEY_SPACE + keycode_offset; keymap_idx = 0 }
if name == "BackSpace" { code = KEY_BACKSPACE + keycode_offset; keymap_idx = 0 }
if name == "Delete" { code = KEY_DELETE + keycode_offset; keymap_idx = 0 }
if name == "Down" { code = KEY_DOWN + keycode_offset; keymap_idx = 0 }
if name == "Left" { code = KEY_LEFT + keycode_offset; keymap_idx = 0 }
if name == "Right" { code = KEY_RIGHT + keycode_offset; keymap_idx = 0 }
if name == "Up" { code = KEY_UP + keycode_offset; keymap_idx = 0 }
if name == "End" { code = KEY_END + keycode_offset; keymap_idx = 0 }
if name == "Escape" { code = KEY_ESC + keycode_offset; keymap_idx = 0 }
if name == "F1" { code = KEY_F1 + keycode_offset; keymap_idx = 0 }
if name == "F2" { code = KEY_F2 + keycode_offset; keymap_idx = 0 }
if name == "F3" { code = KEY_F3 + keycode_offset; keymap_idx = 0 }
if name == "F4" { code = KEY_F4 + keycode_offset; keymap_idx = 0 }
if name == "F5" { code = KEY_F5 + keycode_offset; keymap_idx = 0 }
if name == "F6" { code = KEY_F6 + keycode_offset; keymap_idx = 0 }
if name == "F7" { code = KEY_F7 + keycode_offset; keymap_idx = 0 }
if name == "F8" { code = KEY_F8 + keycode_offset; keymap_idx = 0 }
if name == "F9" { code = KEY_F9 + keycode_offset; keymap_idx = 0 }
if name == "F10" { code = KEY_F10 + keycode_offset; keymap_idx = 0 }
if name == "F11" { code = KEY_F11 + keycode_offset; keymap_idx = 0 }
if name == "F12" { code = KEY_F12 + keycode_offset; keymap_idx = 0 }
if name == "Home" { code = KEY_HOME + keycode_offset; keymap_idx = 0 }
if name == "Insert" { code = KEY_INSERT + keycode_offset; keymap_idx = 0 }
if name == "Menu" { code = KEY_MENU + keycode_offset; keymap_idx = 0 }
if name == "Page_Down" { code = KEY_PAGEDOWN + keycode_offset; keymap_idx = 0 }
if name == "Page_Up" { code = KEY_PAGEUP + keycode_offset; keymap_idx = 0 }
if name == "Pause" { code = KEY_PAUSE + keycode_offset; keymap_idx = 0 }
if name == "Return" { code = KEY_ENTER + keycode_offset; keymap_idx = 0 }
if name == "Tab" { code = KEY_TAB + keycode_offset; keymap_idx = 0 }
(
String::from(name), String::from(name),
KeyCode { code, keymap_idx }, KeyCode { code, keymap_idx },
)) )})
) );
// Workaround: BackSpace does not work with `tools/entry.py` (made with GTK3),
// if the keymap with BackSpace does not contain any other keycodes.
// This should only happen for the emoji-layout or incomplete custom-layouts,
// because the layout-tests for normal layouts check for the presence of a button for Return.
// This does add an "Unknown"-keycode, if necessary, to let BackSpace work anyway.
if !HashMap::contains_key(&keycode_map, &"Return".to_string()) {
HashMap::insert(&mut keycode_map,
"Unknown".to_string(),
KeyCode { code: KEY_UNKNOWN + keycode_offset, keymap_idx: 0 }
);
}
keycode_map
} }
#[derive(Debug)] #[derive(Debug)]