-
Notifications
You must be signed in to change notification settings - Fork 339
Add Wayland driver for devdraw #696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
devdraw/wayland.c: prevent divide-by-zero in scroll repeat
I tried running the wayland devdraw implementation on Sway 1.10, wlroots 0.18 and encountered the error: xdg_surface#13: error 3: xdg_surface has never been configured According to https://wayland.app/protocols/xdg-shell#xdg_surface , a client must commit a surface without a buffer, *wait* for the first configure request from the compositor, ack it, and *only then* can it proceed to attach a buffer to the surface and tell wayland to display it. This was caused by the following sequence of events: 1. devdraw starts, enters gfx_main 2. `gfx_main` calls `gfx_started`, which spawns the `serveproc` thread 3. `gfx_main` enters `wl_display_dispatch`, flushing any buffered requests to the compositor, and enters `wl_display_poll()` to wait for incoming messages 4. `serveproc` calls `rpc_attach`, sets up the surface, and buffers a commit. The race is between #3 and #4. If #3 happens first, the buffered commit just sits there until `rpc_flush` is called, which calls `wl_display_flush()`, but at that point a buffer is attached too quickly for the configure to happen. This commit fixes the race by adding a `configured` field to the WaylandClient and using it to guard `rpc_flush`. In addition, I found that mouse warping, at least in sway, would move the cursor but future mouse presses would register at the old location until I moved the mouse. So I added a call to gfx_mousetrack to the end of `rpc_setmouse`.
Fix race condition on attach and mouse tracking after warp
I found sway 1.10 and wlroots 0.18.2 will occasionally generate wl_keyboard::keymap events with an empty keymap. I do not have a reliable reproduction for this, but it seems to occur when switching back and forth between workspaces with the keyboard. This also fixes the issue where devdraw can go into a busy loop if the compositor goes away and wl_display_dispatch() returns -1.
Fix unexpected devdraw crashes on sway
This change splits scroll repeat and key repeat into separate callbacks, and only registers them when a key is pressed or scrolling is active, respectively. The key repeat logic is changed to support key repetitions higher than the frame rate. The new logic will also accomodate key repeat parameters set by the compositor, although the comment about us not receiving that configuration event is still valid.
Upgrade to version 4 of the wl_seat interface which adds the wl_keyboard::repeat_info event allowing the compositor to configure key repeat delay and rate.
I have been using this fork for awhile now, and it works quite well. Recommend merging. 👍 |
Works for me. But it checks for
Fixes it, but perhaps you can make it look for |
I noticed something as well, and it's a super minor nitpick. When I tried to build on Nix, my first thought was to set WSYSTYPE directly in LOCAL.config. When I did this, fontsrv tried to build wayland.o but did not have a rule for it. The workaround was to set XDG_SESSION_TYPE=wayland instead (devdraw rules updated, but fontsrv left alone) but I think that WSYSTYPE should be directly modifiable to adjust the build target. Will probably prepare a patch. |
I've also been testing this fork, great work! I've encountered a bug I can't put my finger on: alt-tabbing to a different window and then alt-tabbing back adds spurious characters. I've attached a quick screencast showing the issue. Screencast.From.2025-04-14.10-58-32.mp4This is on wayland on gnome 47. |
No description provided.