diff options
| author | srdusr <[email protected]> | 2025-08-25 11:47:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-08-25 11:47:00 +0200 |
| commit | bd7141718901c6f41511137e4b34a3bd9e2705b1 (patch) | |
| tree | 672811318065eb97a822c1f7cec97b001a336900 /crates/x11/src/platform/mod.rs | |
| parent | 72e787a706d372c9a92e424e9b13ece929cb2bce (diff) | |
| download | srdwm-bd7141718901c6f41511137e4b34a3bd9e2705b1.tar.gz srdwm-bd7141718901c6f41511137e4b34a3bd9e2705b1.zip | |
X11 backend: right-click titlebar window menu, matching Wayland's own
Closes the one real gap an X11/Wayland feature-parity audit found this
session (desktop icons, window-position memory, and static exclusive-zone
reservation were already shared or Wayland-only by nature - see
docs/TODO.md's own audit entry for the full breakdown).
MenuAction/ContextMenu (row set, labels, row_at hit-testing) move from
crates/wayland/src/context_menu.rs into crates/core/src/context_menu.rs --
pure state and geometry with nothing Wayland-specific in it, so X11
needing the same rows is shared data, not duplicated logic. The Wayland
crate's own context_menu.rs is now a one-line re-export so every existing
crate::context_menu::... call site keeps working unchanged.
X11 has no compositor-level input dispatch to intercept every click the
way Wayland's input/pointer.rs does, so the X11 side
(crates/x11/src/platform/context_menu.rs, new) draws the menu into its own
small override-redirect popup window and grabs the pointer for the
duration so a click anywhere dismisses it, matching the Wayland backend's
own convention. events.rs's ButtonPress handler now reads the real button
number instead of hardcoding every press as a left click - a real latent
bug (right-clicking a titlebar button would have silently performed its
left-click action).
Live-verified end to end in an isolated Xvfb + srdwm --x11 instance: full
row set including the workspace picker, Minimize runs and closes the
menu, a second window's menu dismisses cleanly on outside click, normal
focus/click behaviour continues working afterward.
See docs/TODO.md for the full investigation and verification narrative.
Diffstat (limited to 'crates/x11/src/platform/mod.rs')
| -rw-r--r-- | crates/x11/src/platform/mod.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/crates/x11/src/platform/mod.rs b/crates/x11/src/platform/mod.rs index 8ca2299..e22b3f7 100644 --- a/crates/x11/src/platform/mod.rs +++ b/crates/x11/src/platform/mod.rs @@ -198,6 +198,12 @@ pub struct X11Platform { /// window) - so this can't be folded into the existing managed- /// window bookkeeping. struts: HashMap<XWindow, Strut>, + /// The currently-open right-click titlebar window menu, if any -- + /// the built row set/geometry alongside the override-redirect popup + /// window it's drawn into. See `context_menu.rs`'s module doc comment + /// for why X11 needs its own popup window and pointer grab where the + /// Wayland backend just reads a compositor-space struct. + context_menu: Option<(srdwm_core::context_menu::ContextMenu, XWindow)>, } @@ -215,6 +221,7 @@ impl ClonedForRender for Option<&CoreWindow> { mod actions; mod connect; +mod context_menu; mod events; mod global_menu; mod struts; |