Commit graph

32 commits

Author SHA1 Message Date
Richard Acayan
63ee5a86a6 core: button: only draw the modifier key when pressed
When one modifier key is released, only the same key is drawn, even if
there are other identical modifier keys. Be consistent with this
optimization, and only draw the exact key that was pressed when a
modifier key is pressed.
2024-08-12 19:16:33 -04:00
Richard Acayan
1992b22ca1 core: button: only emit modifier keys that do not change the layout
Most future modifier keys will be accents that wouldn't be represented
with an actual key press. Only emit modifier keys as key presses if they
are of the other type (Ctrl, Alt, Shift).
2024-08-12 19:16:33 -04:00
Richard Acayan
ba9137d1f1 wayland: keyboard: skip adding unavailable keys to the keymap
Keys are unsupported if they have no name, or if xkeysym uses a
different format for their name (e.g. XF86Fn). Skip key symbols that
have no name and can't be added to the text keymap.

To support this, set the availability of each keysym before updating the
keymap.
2024-08-12 19:16:33 -04:00
Richard Acayan
71bee9f7ed core: actually add configuration code
This was meant to be included with the YAML configuration support, but
was not. Add it now.
2024-08-09 22:29:40 -04:00
Richard Acayan
d884e71d86 add yaml configuration
Example:

	%YAML 1.2
	---
	longpress_ms: 600
	repeat_ms: 25

	layout: latn_qwerty_us.xml

	wayland:
	  height: 185
2024-08-08 17:51:56 -04:00
Richard Acayan
c5c5fa4a49 core: layout: update key capability according to new key value 2024-08-07 19:25:34 -04:00
Richard Acayan
50bb5dd106 core: layout: treat insert key value as non-text 2024-08-05 18:33:16 -04:00
Richard Acayan
c262b744aa core: layout: modify tab with fn to a literal tab character 2024-08-05 18:26:35 -04:00
Richard Acayan
3bb02196db core: button: allow dragging to a text-only key part 2024-08-05 18:26:35 -04:00
Richard Acayan
fc829a96c4 core: button: emit key presses as text when available 2024-08-05 18:26:35 -04:00
Richard Acayan
399ab9deba core: layout: set the spacebar text as whitespace
If the key value can emit text, it should put the text to be emitted in
the text field. It should not put any special symbol for the key label,
and it should instead be a special case in the display_label() method.
2024-08-05 18:26:35 -04:00
Richard Acayan
db2a8cdeab core: button: add keyboard method to insert text 2024-08-05 18:26:35 -04:00
Richard Acayan
8f7e9dfe7a core: button: update supported keys on startup 2024-08-05 18:26:35 -04:00
Richard Acayan
c459405318 core: layout: store availability of text insertion 2024-08-05 18:26:35 -04:00
Richard Acayan
c152dc8468 core: layout: store keysym availability 2024-08-05 18:26:35 -04:00
Richard Acayan
adf71ed2c8 core: button: add supported keys querying to keyboard trait 2024-08-05 18:26:35 -04:00
Richard Acayan
d3a17813c0 wayland: keyboard: track input method done events 2024-08-05 18:26:35 -04:00
Richard Acayan
551381f0b6 core: button: inline accessor for modifier state 2024-08-05 18:26:35 -04:00
Richard Acayan
00e55c9566 core: layout: drop display_symbol function
The display_label function supersedes the old display_symbol function.
Drop the old one.
2024-08-05 18:26:17 -04:00
Richard Acayan
22a93d2efe core: button: latch modifier keys when another normal key is pressed 2024-07-31 17:46:28 -04:00
Richard Acayan
498caa149f core: layout: use uppercase label when pressing shift 2024-07-31 17:01:29 -04:00
Richard Acayan
bc9056aa8d core: graphics: use key part text
Some keys may have no XKB key symbols. Instead of a hash table mapping
XKB key symbols to their labels, repurpose the text from the key part.
2024-07-26 22:41:24 -04:00
Richard Acayan
5aaaedb887 core: layout: add text property to key parts
Some keys may have no XKB key symbol, but still have the ability to emit
text. Examples include the "‹" (U+2039) and "›" (U+203A) characters. Add
the text property to key parts so they can emit text even with no key
symbol.

Also, for keys that were not modified by the Function key because they
had no XKB key symbol name, modify them.
2024-07-26 21:49:15 -04:00
Richard Acayan
ab033c1f21 core: graphics: use AtomicPtr
This type is required to implement both the Send and Sync trait.
2024-07-24 22:32:00 -04:00
Richard Acayan
78f389beaa treewide: use Rust 2018 import paths
Rust 2018 is required for D-Bus support with tokio/zbus.
2024-07-24 22:32:00 -04:00
Richard Acayan
dd67676840 core: layout: remove nopush comment
Public fields for the Key is fine. There are no methods for it.
2024-07-24 22:32:00 -04:00
Richard Acayan
eb37361be6 core: button: do not warn on double press
If running on startup, this happens on every keypress with phoc.
2024-07-24 22:32:00 -04:00
Richard Acayan
53f4daedc0 core: button: add HeldPressed and HeldLockedPressed modifier state
The Held state is for modifier that should be off when the corresponding
key is released. If the user presses the modifier key and a normal key,
it would be in this state. The modifier would continue to be active when
the user moves to a different key part (a cancel, e.g. from Fn to Alt)
afterwards. To fix this, add the HeldPressed and HeldLockedPressed
states that reset to the Released state when cancelled.
2024-07-24 20:52:23 -04:00
Richard Acayan
90a32cc50c core: layout: fix indentation in is_label_modifier 2024-07-22 21:30:14 -04:00
Richard Acayan
9ec712bb69 core: graphics: use saturating_add for copying images
High-level language skill issue :P
2024-07-19 17:10:28 -04:00
Richard Acayan
c1c92c4d5e wayland: keyboard: release keys while the keymap is changing
Keeping the keys pressed can confuse some compositors, and the key codes
may change. Release any keys that are pressed while the keymap is
changing, and press them again afterwards.
2024-07-19 17:07:04 -04:00
Richard Acayan
4a6b261be0 rewrite in rust 2024-07-18 20:32:55 -04:00