Commit graph

3522 commits

Author SHA1 Message Date
Alex Chernika
c6681876b5
tree-wide: use markup only when an accelerator is defined with _ 2026-04-15 00:15:12 +02:00
Alex Chernika
58fa089749
font: fix stylecheck errors 2026-04-14 17:35:46 +02:00
Alex Chernika
dc28d0caf3
menu: underline explicitly defined accelerators 2026-04-14 17:21:22 +02:00
Alex Chernika
1c646af144
menu: allow for Unicode accelerators 2026-04-13 23:06:08 +02:00
Alex Chernika
cea22422d5
menu: skip whitespace and unicode emojis before defining accelerators
Skip any character whose value in the ASCII table is larger than
127 (I think all non-ASCII chars follow this rule).

Also skip any whitespace.
2026-04-11 21:21:10 +02:00
Alex Chernika
667707c029
menu: prevent memory leak when cycling through menu items 2026-04-11 16:46:41 +02:00
Alex Chernika
eba57831f4
menu: fix possible buffer over-read in item_create() 2026-04-11 14:02:14 +02:00
Alex Chernika
310c15058d
menu: simplified conditionals in menu_item_select_by_accelerator() 2026-04-11 02:28:44 +02:00
Alex Chernika
60a3963ba9
menu: fix wrong accelerator for capital letters 2026-04-11 02:14:35 +02:00
Alex Chernika
ac72c105cc
keyboard: fix "label followed by a declaration" error 2026-04-10 19:29:28 +02:00
Alex Chernika
9108809578
menu: fix non-matched accelerators triggering exec 2026-04-10 19:28:38 +02:00
Alex Chernika
7575623db8
menu: fix codestyle warnings 2026-04-10 16:39:07 +02:00
Alex Chernika
72f7a446a6
keyboard: handle menu accelerators
Expand the default case in `handle_menu_keys()`: if caught a printable
character, pass it to `menu_item_select_by_accelerator()`.
2026-04-10 15:12:06 +02:00
Alex Chernika
a3971feca8
menu: implement menu accelerators
Menu accelerators are one-letter mnemonics to quickly select/exec
items from the current menu. For each menu item, the accelerator is
defined as the first character of the item label, converted to
lowercase. A different accelerator can be explicitly defined in
menu.xml with the special '_' character before the target letter.

- Add a field `accelerator` to the `menuitem` struct
- Implement `menu_item_select_by_accelerator()`

Example:
The accelerator for an item with the label "e_macs" is 'm'.
2026-04-10 15:10:05 +02:00
daniel
afaed4af63
config: remove the underline from the XF86 keys
to match the actual key names in xkbcommon-keysyms.h
2026-04-08 10:37:35 +02:00
John Lindgren
90c38e2681 xdg: set initial position a hair earlier to fix window rules
Partially reverts: 3f223fe5b0
("xdg: unify initial positioning logic")
2026-04-07 20:05:00 +02:00
Jens Peters
a893b1ab50 input: fix tablet tool tilt motion
Tilt axis are not relative.
2026-04-06 22:10:10 +01:00
Consolatis
c9b4da2ce2 osd-thumbnail: handle buffer allocation failure
Fixes: #3489
2026-04-02 22:10:30 +02:00
tranzystorekk
e45548077e CI: Void: use wlroots0.20-devel distro package 2026-04-01 17:37:26 +02:00
Consolatis
7be58fbaba CI: add no-backends build test
Some checks failed
labwc.github.io / notify (push) Has been cancelled
2026-03-31 22:58:49 +02:00
Consolatis
3df8fcda3a meson.build: make libinput and libdrm depend on wlroots feature flags 2026-03-31 22:58:49 +02:00
Consolatis
8c6faa010f make wlroots libinput backend optional 2026-03-31 22:58:49 +02:00
Consolatis
dfbea3e156 make wlroots session backend optional 2026-03-31 22:58:49 +02:00
Consolatis
046d055ac0 make wlroots DRM backend optional 2026-03-31 22:58:49 +02:00
Johan Malm
fe1955fb27 Stop generating wayland-protocols server headers
We still need to generate wlr-protocols server headers, as well as
client headers and code.

References:
- https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5075
- https://github.com/swaywm/sway/pull/8838
2026-03-31 20:51:49 +02:00
Johan Malm
b3f3fc9084 NEWS.md: interim update following port to wlroots 0.20 2026-03-31 19:34:03 +01:00
Jens Peters
674238caa9 docs: document tablet tool pressure range 2026-03-31 19:56:07 +02:00
Jens Peters
0d049552bc input: support tablet tool pressure range configuration
Needs wlroots 0.20.0.
2026-03-31 19:56:07 +02:00
Jens Peters
9209f611d5 build: require libinput 1.26
Bump the requirement for having support for
tablet tool pressure range configuration.
2026-03-31 19:56:07 +02:00
Johan Malm
46d687ab54 clients/labnag.c: return zero on get_text_size() error
Ref: https://github.com/swaywm/sway/pull/9070
2026-03-31 02:58:39 +02:00
GlassOnTin
9a8154836c keyboard: use XKB_CONTEXT_NO_SECURE_GETENV on Android
Android's bionic libc implements secure_getenv() as a function that
always returns NULL because app processes don't have AT_SECURE set.
This prevents xkbcommon from reading XKB_DEFAULT_LAYOUT and other
environment variables when resolving keyboard layouts.

Use XKB_CONTEXT_NO_SECURE_GETENV on Android so xkbcommon falls back
to regular getenv(), which works correctly in the Android app
environment.
2026-03-30 22:25:35 +01:00
GlassOnTin
862d230ff9 Make labnag a meson feature flag
Add a 'labnag' meson option (default: auto) to allow disabling the
labnag notification daemon at build time. This is useful for
embedded/headless deployments (e.g. Android) where labnag is not
needed, and avoids building its wayland-client dependencies.

Disable with: meson setup build -Dlabnag=disabled
2026-03-30 22:22:21 +01:00
tokyo4j
3128f50a25 xwayland: remove atom synchronization
It was used to get window icon via _NET_WM_ICON, which is now
implemented by wlroots 0.20. Anyone who needs another atom can revert
this commit and add atoms in the `atoms` array.
2026-03-30 11:55:37 +02:00
tokyo4j
cdee4ba5f1 xwayland: use wlr_xwayland_surface_fetch_icon() 2026-03-30 11:55:37 +02:00
Christopher Snowhill
cee5712877 chase wlroots: wlr_scene_set_gamma_control_manager_v1
Ref: 515275ee7214bf91f8a758b660093eb4b932195a
(wlr_scene: Introduce wlr_scene_set_gamma_control_manager_v1)

This wlroots change eliminates the need for separate event tracking for gamma
control application.

v2: Fix code style
v3: Rebase now that 0.20 is merged
2026-03-30 11:18:53 +02:00
tokyo4j
647e9b7658 Drop cosmic-workspace and use wlroots implementation of ext-workspace-v1 2026-03-30 10:29:04 +02:00
Consolatis
c3fc78286a chase wlroots: track 0.20 branch
And move CI to use system wide wlroots deps where availble.
2026-03-29 15:58:13 +01:00
Manuel Barrio Linares
76f166ae42 chase wlroots: wlr_xwayland_set_cursor now takes a wlr_buffer (MR 5230)
Ref: 84d603acc06a45dd3c3a4b2cf1fd08b2933ca2b5
(xwayland: take wlr_buffer in wlr_xwayland_set_cursor())

Ref: 6ae54dca23064e897b393283887986e5719a747f
(xwayland: lock new buffer instead of the old one)

Co-Authored-By: Consolatis

This wlroots change fixes a potential UAF which we dealt with in labwc.
We can thus remove the workaround completely.
2026-03-29 15:58:13 +01:00
tokyo4j
863863fc7c chase wlroots: ime: don't use data in kb grab destroy handler (MR 5170)
Ref: 06275103f249cd2954630e59383342e102a6c1a3
(input-method-v2: Destroy keyboard grab before input method)

Background:

My MR in wlroots (!5107) stopped emitting `wlr_input_method_v2`
on its `commit`/`destroy` events, but didn't stop emitting
`wlr_input_method_keyboard_grab_v2` on its `destroy` event. That was
because `handle_keyboard_grab_destroy()` was called *after*
`handle_input_method_destroy()` for some reason, which caused segfault
when dereferencing `relay->input_method.keyboard_grab` in
`handle_keyboard_grab_destroy()`.

MR 5170 reversed this weired order of destroy handler calls, and finally
stopped emitting `wlr_input_method_keyboard_grab_v2` on its `destroy`
event.
2026-03-29 15:58:13 +01:00
Consolatis
5f8a6395a1 chase wlroots: ime: rename to new_input_method (MR 5107)
Ref: 06aacb2a6fd237a5e1062d611909432bbcf5b566
(input-method: rename input_method event to new_input_method)
2026-03-29 15:58:13 +01:00
Christopher Snowhill
511ed69c53 chase wlroots: add wl_fixes interface (MR 4685)
Ref: 812675ba34ce612e9294e8a9814b1baf4b4775d4
(fixes: add implementation)
2026-03-29 15:58:13 +01:00
Consolatis
0c24252c85 chase wlroots: ime: rename to new_text_input (MR 5032)
Ref: 536100488fc4c64528786801860f96cfa1a55765
(text-input-v3: Name new text input event correctly)
2026-03-29 15:58:13 +01:00
Consolatis
48bcccddc3 chase wlroots: increase wlroots meson dep 2026-03-29 15:58:13 +01:00
Consolatis
ea4e7e9a02 CI: allow compiling wlroots as subproject 2026-03-29 15:58:13 +01:00
John Lindgren
3ce6328f6d xwayland: set initial view state + geometry in handle_associate()
Empirically, the associate event is always seen just after map_request
but before surface map. Window properties are also read by wlroots just
before emitting associate. So after some trial and error, this seems to
be the best place to set initial view states and compute initial
placement.

Fixes initial positioning of "urxvt -g -0-0".

urxvt placement regressed in:
9903331995
("xwayland: rework setting initial geometry from surface")

map_request handler was added ~2 years ago in:
c9018da4c4
("xwayland: set initial geometry in map_request handler")

I'm not sure if the map_request handler was incorrect from day one,
or if something changed in wlroots and/or Xwayland since then.
2026-03-28 14:59:29 +00:00
Daniel Lublin
fee38bceca Handle xwayland not started (when HAVE_XWAYLAND, but lacking the binary)
Closes https://github.com/labwc/labwc/issues/434
2026-03-24 19:40:49 +00:00
Tomi Ollila
4e25347791 use X macros to fill up enum action_type and const char *action_names[]
To make it harder to have these 2 data structures go out of sync.

No functional change.

To understand X macros better, visit:
- https://en.wikipedia.org/wiki/X_macro
- https://philliptrudeau.com/blog/x-macro
2026-03-24 19:35:38 +00:00
John Lindgren
9903331995 xwayland: rework setting initial geometry from surface
The basic idea is to set the initial geometry from the surface exactly
once, just before we need it, i.e. either (1) when mapping the view or
(2) right before processing an initial maximize/fullscreen request.

I've consolidated various parts of the initial geometry setup to take
place at this point (in ensure_initial_geometry_and_output()).

The main motivation is to have a valid, adjusted floating geometry for
the view *before* saving the natural geometry when processing an initial
maximize/fullscreen request. This reduces code duplication and addresses
a FIXME in set_initial_position(), as well as fixing an issue where the
natural geometry could exceed the usable output area.

Some other minor changes:

- The initial output is now set directly from the surface geometry if
  the "application/user-set position" hint is given. This is unlikely
  to matter in practice, but theoretically an initially maximized view
  could now appear on a different (application-chosen) output.

- Floating view size is now constrained to the usable area even if a
  position hint is set. It seemed inconsistent that `xterm -g 200x200`
  was constrained but `xterm -g 200x200+0+0` was not.
2026-03-22 21:55:02 +00:00
John Lindgren
d4ad27e636 tree-wide: use rc.theme instead of server.theme
Having two global pointers to the same struct is redundant.
2026-03-22 10:16:42 +01:00
John Lindgren
9550bccef2 decorations: fix accidental rename
Fixes: 4f72e6775e
("tree-wide: rename g_server to just server")
2026-03-22 10:13:17 +01:00