Skip to content

Merge master#3

Merged
rano-oss merged 85 commits into
feat/support_multiple_input_methodsfrom
master
Jan 5, 2026
Merged

Merge master#3
rano-oss merged 85 commits into
feat/support_multiple_input_methodsfrom
master

Conversation

@rano-oss
Copy link
Copy Markdown
Owner

@rano-oss rano-oss commented Jan 5, 2026

No description provided.

ids1024 and others added 30 commits October 30, 2025 18:12
This simplifies the match for anchors, and should correct the behavior
for things like anchoring all edges.

I believe previously the `x == Anchor::all()` case would never be
reached, since the `x.contains(Anchor::TOP) && x.contains(Anchor::BOTTOM)`
condition would also be true. Also the behavior is wrong; the spec says
to treat this like `ExclusiveZone::Neutral`.

This should now behave as defined by the spec.
Use the exclusive edge provided by the request if present. Otherwise,
fallback to the implied edge based on anchors.
Iterate over surfaces that have an exclusive zone first, then other
surfaces. This allows a surface that doesn't have an exclusive zone to
be moved or resized for a later surface that does have an exclusive
zone. As is probably desired.
Send a pressure(0) event before sending the pen up event in both
tip_up() and proximity_out() handlers. This improves compatibility
with applications like Wine and MyPaint that expect the pressure
to be explicitly set to zero before a pen up event.

While the tablet-v2 protocol does not strictly require this, major
compositors like GNOME and Sway send this event for compatibility.
Without it, some applications continue drawing strokes even after
the pen is lifted.

Fixes compatibility issues reported in:
- https://bugs.winehq.org/show_bug.cgi?id=58463
- niri-wm/niri#2722
- niri-wm/niri#2576
Fixes crashes with clients like `lxqt-panel`.

The validation here should now match the version in
https://invent.kde.org/plasma/kwin/-/blob/master/src/wayland/layershell_v1.cpp.
Smithay#1482 renamed `set_minimized()`
to `set_suspended()`, but didn't rename `is_minimized()`.

But the name may not be ideal either.

https://specifications.freedesktop.org/wm-spec/latest/ar01s05.html
says

> _NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate
> that a window would not be visible on the screen if its
> desktop/viewport were active and its coordinates were within the
> screen bounds. The canonical example is that minimized windows should
> be in the _NET_WM_STATE_HIDDEN state. Pagers and similar applications
> should use _NET_WM_STATE_HIDDEN instead of WM_STATE to decide whether
> to display a window in miniature representations of the windows on a
> desktop.

While
https://wayland.app/protocols/xdg-shell#xdg_toplevel:enum:state:entry:suspended
says:

> The surface is currently not ordinarily being repainted; for example
> because its content is occluded by another window, or its outputs are
> switched off due to screen locking.

So `_NET_WM_STATE_HIDDEN` shouldn't be set merely because a window is
occluded, or on a different workspace? Both definitions could perhaps be
a bit more precise.

It seems to me `_NET_WM_STATE_HIDDEN` is broader than "minimized", but
more specific than the xdg-shell "suspended" state. So just call it
"hidden" instead of using some other name.
Drakulix and others added 27 commits November 25, 2025 13:18
I guess X11 clients use this essentially the same way
`xdg-activation-v1` is used by native Wayland clients. A new method of
`XwmHandler` is invoked so the compositor can handle the message.

In addition to the `window`, the client takes three 32-bit values in
`data`. This ignores the "source indication" for now, since we also seem
to ignore that for the `_NET_WM_MOVERESIZE` and `NET_WM_STATE` client
messages. If we want to take that into account, we can define an enum
and add it to all applicable trait methods.
Some clients (like Chromium) filter potential dnd-targets by more than
the `XdndAware` property. E.g. chromium tries to filter out utility
windows by checking for WM_NAME. So lets set that.
Given that we push/remove things, the order doesn't really matter at
this point, so use function that is O(1) instead of O(n).
The enter/leave events were not sent for all the text_input objects
created by the client, while it should have been.

Fixes Smithay#1884.
This allows X11 windows to be removed when `Xwayland` crashes.

`cosmic-comp` was previously updated to do this in
pop-os/cosmic-comp#823.
`SyncSender` isn't properly sending `Closed`:
Smithay/calloop#236

In any case, using `Sender` seems appropriate if we don't need it to be
`Sync`.
Previously the standalone method checked `strong_count()`, but the
`IsAlive` implementation didn't.

Presumably they should match. (And if not, we should avoid duplicated
method names and signatures with a different behavior.)
This fix the problem that all virtual keyboard share the same keymap.
The Dispatch<XdgPopup, ...> impl for XdgShellState required a
SeatHandler trait bound. This bound is not required and unnecessarily
ties together the seat and xdg shell modules.
@rano-oss rano-oss closed this Jan 5, 2026
@rano-oss rano-oss reopened this Jan 5, 2026
@rano-oss rano-oss merged commit 5583820 into feat/support_multiple_input_methods Jan 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants