Commit graph

61 commits

Author SHA1 Message Date
Shawn Wallace
b362a38737 server: raise windows to top on touch 2025-11-28 16:53:06 -05:00
Shawn Wallace
c7d96d52f5 server: allow moving and closing windows through decorations with touch 2025-11-28 16:53:06 -05:00
En-En
4ea4960f5e fix: problem unwrap in wl_pointer::Event (again)
I triggered the unwrap in the `Motion` case while using the color picker
in Krita. If you hold down the mouse such that the color comparison
pop-up opens and flick to it, you can sometimes enter and motion on a
stale surface. Somewhat inconsistent to trigger.

I also removed the unwrap in the `Button` event since it is logically
equivalent to the other unwrap. A few logging statements also got
changed to give wl_surface details.
2025-11-28 13:56:33 -05:00
Shawn Wallace
83e4aab4d5 server: adjust minimum and maximum window sizes to account for decorations
Fixes #271
2025-11-27 11:14:37 -05:00
Shawn Wallace
f379ff5722 server: redraw decorations on window reconfigure
Fixes #270
2025-11-21 00:55:21 -05:00
Shawn Wallace
3cd3edffe1 server/decoration: remove decorations when fullscreen 2025-11-06 23:01:40 -05:00
Shawn Wallace
b39388d91a Add client side decorations to toplevels
These simple decorations will be rendered only when the host compositor doesn't
support server side decorations and the X11 window does not render its own
decorations.

Closes #31
2025-11-06 22:32:10 -05:00
En-En
56256a1340 refactor: make handle_pending_enter fn function 2025-11-05 21:47:10 -05:00
En-En
7f27257b51 fix: handle pending enter events before clicks
An unwrap was hit when a pointer event with no CurrentSurface was
processed. To resolve this, the same logic from the Event::Motion case
has been abstracted to a `handle_pending enter` lambda to provide a
valid CurrentSurface or return early if none could be entered.

Though the effect of `handle_pending_enter` remains, its flow has been
refactored, both to move the `None` case code outside the lambda and
to remove the unnecessary recursion. I would have used a `while let`
loop instead of the `loop let else` construct, but the borrow checker
did some mental gymnastics and rejected it.
2025-11-05 21:47:10 -05:00
Shawn Wallace
2dd40ecfe8 server: add SlideX/Y constraint adjustment to popups
Allows popups that would normally go offscreen to stay visible. X11 doesn't seem
to like windows whose bounds go less than 0x0, so we adjust the position
reported to X11 to make it happy.

I am worried this will have some other implications with popups, but we'll see
what happens.
2025-10-25 15:57:30 -04:00
ToxicMushroom
da6693c88a fix: don't print unapplicable warnings when a popup surface has its viewport set. 2025-10-02 19:52:48 -04:00
Shawn Wallace
03368548ba server: raise windows to top on tablet proximity_in
Fixes #238
2025-09-22 17:43:43 -04:00
Shawn Wallace
0b94ae1eb8 Support client initiated window move (_NET_WM_MOVERESIZE)
Part of #185
2025-09-06 13:29:14 -04:00
Shawn Wallace
5a184d4359 Support primary selection
This was more tedious than expected.
Fixes #103
2025-08-14 20:59:01 -04:00
En-En
e0d1dad25a server: clean unneeded deref_mut calls 2025-08-06 22:32:00 -04:00
En-En
cbabd591a3 server: impl Deref(Mut) for ServerState to Inner coercion 2025-08-06 22:32:00 -04:00
En-En
be9d573fd6 server: make state's client and connection mandatory
The goal of the previous commits being to remove these unwraps. The `unwrap_or_skip_bad_window` changes needed to make a singular debug conditional
2025-08-06 22:32:00 -04:00
En-En
56d5cce2d0 server: split XConnection from rest of State refactor 2025-08-06 22:32:00 -04:00
Shawn Wallace
2e7c318ac2 server: check if connected to x server when output offset updates
Caused by the compositor reporting negative output coordinates to start.

Fixes #187
2025-06-24 23:21:20 -04:00
En-En
117af56a83 Refactor double let else blocks to use as_mut 2025-06-23 09:54:29 -04:00
En-En
8dc4538662 Removed additional dubious unwraps
The wl_keyboard Enter event, wl_keyboard Leave event, the wl_touch
Self::Down event and the ServerState::reconfigure_window function had
similar uses of `unwrap` which appear to not consider the distinct
query preparation and query execution stages.
2025-06-23 09:54:29 -04:00
En-En
da3b2838d2 Fixed stale surface check unwrapping
Regression from 799027d1. Unwraps on a None value when doing the stale surface generation technique in Chatterino7 as described in #74, very consistent
2025-06-23 09:54:29 -04:00
Shawn Wallace
03cbb2ee3a server: scale tablet_tool motion events
Also add missing Distance event handler.
Closes #179, closes #123
2025-06-19 23:05:15 -04:00
Shawn Wallace
70f15d5085 server: scale wl_touch events
Fixes #172
2025-06-19 21:06:51 -04:00
Shawn Wallace
b98fa84524 Use fractional scaling when setting scale through xsettings
Fixes #168
2025-06-19 17:02:42 -04:00
Shawn Wallace
799027d1ae server: refactor to use ECS
This should simplify how some of the code reads, as well as allowing for future
feature additions to be accomplished in a less restrictive manner. The slotmap +
Object enum pattern was kind of like a really bad ecs in a way anyway. Also I
was looking for an excuse to use an ecs.
2025-06-19 00:55:08 -04:00
Shawn Wallace
9261c278af server: only update outputs for current mode events
Fixes #164
2025-05-27 19:43:37 -04:00
Shawn Wallace
5c0351ff33 Properly handle rotated outputs
Fixes #160
2025-05-27 19:35:10 -04:00
Shawn Wallace
572fa4a2bf Add Xsettings support, for setting scaling related settings
This allows for most GTK and Qt apps to be scaled properly.
In the case of mixed DPI, it will default to using the smallest monitor scale.
2025-05-23 23:25:33 -04:00
Shawn Wallace
51300780f8 Allow toplevels to reconfigure themselves 2025-05-11 11:46:29 -04:00
Shawn Wallace
c31679aa41 Avoid parenting popups to other popups
Fixes #36
2025-04-22 21:39:20 -04:00
Shawn Wallace
0cd5059c42 Don't set viewport for 1x1 windows with scaling 2025-04-13 23:50:13 -04:00
Shawn Wallace
555f9492ad Properly scale surfaces with fractional scale 2025-04-11 14:09:13 -04:00
Shawn Wallace
8188df0e70 Force buffers to be unscaled
Satellite will now force Xwayland to always render with the native
display resolution, and just scale surface sizes accordingly. As a result,
applications won't really respect DPI, but this can be adjusted through
the same means as with normal X11.

Part of #28.
2025-04-09 00:32:20 -04:00
bbb651
180efb0ba9 Support XDG Activation
Test XDG Activation
2025-03-20 09:05:24 -04:00
Shawn Wallace
beb7c3ebe0 Offset output positions to always have positive coordinates
Honestly, this is something that should probably be fixed in Xwayland itself,
but they don't seem interested in fixing it:
https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/395#note_555613

Fixes #15
2025-03-16 16:00:10 -04:00
En-En
5bbc4c507a Use and_then over unwrap for rest of surface.data() use
Continues on the #113 fix by eliminating the remaining places the unwrap could occur on
2025-03-15 20:09:40 -04:00
Shawn Wallace
7df3daba70 Remove ExtraData type from XConnection trait
This was being used to pass the X11 atoms all over the place, but I
realize this is no longer necessary - we can just pass them directly to
our RealConnection when creating it.
2025-03-12 00:55:39 -04:00
Shawn Wallace
54a7ad9e13 server: Unmap popup on popup_done event
Seems some applications don't expect their popups to be unmapped without
their consent, so they make act strangely, but at least it doesn't
crash.
Fixes #117
2025-03-12 00:47:26 -04:00
Shawn Wallace
10cb041a80 server: Don't panic on stale wl_pointer ObjectKey
Fixes #113
2025-03-04 21:04:59 -05:00
Shawn Wallace
653391c7c9 server: auto-fullscreen windows that match an output's dimensions
Fixes #93
2025-02-10 23:08:39 -05:00
Shawn Wallace
ba9c1a6a3e cargo fmt + cargo clippy 2025-01-09 00:08:07 -05:00
Shawn Wallace
b699ce62a1 Avoid crashing if entered surface's window is not a known window
Not sure how this even happens, but should fix #88
2025-01-07 21:27:27 -05:00
Shawn Wallace
03a53b6ad7 Set primary output when window focused
Closes #80
2024-12-18 01:49:55 -05:00
En-En
c45c2ed990 fix: add Event::Move check preventing infinite recursion caused by stale surfaces 2024-12-13 13:00:00 -05:00
Shawn Wallace
b0ee6db9fa Unfocus window on X11 side when keyboard focus is lost
Closes #69 (nice)
2024-10-29 23:24:44 -04:00
Shawn Wallace
c77b66cc93 Add tablet support
Closes #47
2024-10-25 01:21:58 -04:00
Shawn Wallace
73ca9c91f1 Replace simple_event_shunt macro with proc macro
This macro is pretty complicated and I needed to add the ability to
clean keywords, so it makes more sense to have this be a proc macro.
2024-10-25 01:21:58 -04:00
Shawn Wallace
b988762955 cargo fmt 2024-10-23 02:29:45 -04:00
Shawn Wallace
dc1f8a753d Use wl_keyboard instead of toplevel state for focus
Rare TODO comment actually done.
Fixes #64
2024-10-23 02:27:46 -04:00