Commit graph

1340 commits

Author SHA1 Message Date
DreamMaoMao
58b8353afd docs: update fcitx env suggest 2026-03-14 08:05:52 +08:00
atheeq-rhxn
41a3584102 docs: add AerynOS installation 2026-03-14 08:03:48 +08:00
atheeq-rhxn
828907d36d chore(sync-website): update commit message 2026-03-13 20:39:34 +08:00
DreamMaoMao
30cab74773 docs: update some describe 2026-03-13 20:07:42 +08:00
DreamMaoMao
ddb9aca662 docs: update refer repo 2026-03-13 19:56:19 +08:00
DreamMaoMao
7edbb3f600 docs: udpate build dependency 2026-03-13 19:53:26 +08:00
atheeq-rhxn
595524f0b2 feat: add docs and sync with wiki & website 2026-03-13 19:23:54 +08:00
tonybanters
73616f07c4 opt: use config.xxx instead of global presets 2026-03-13 11:41:35 +08:00
DreamMaoMao
b87756d420 bump versito to 0.12.6 2026-03-10 11:19:10 +08:00
DreamMaoMao
f39c61b633 opt: optimize popup unconstrain 2026-03-09 13:28:16 +08:00
DreamMaoMao
8c8b4b34df opt: set scroller stack to same first tag 2026-03-08 20:20:23 +08:00
DreamMaoMao
44fb6ce512 opt: reset size per when toggleview 2026-03-08 20:00:55 +08:00
Nikita Mitasov
5697694cfb fix(guix): add deprecated package variable with old naming. 2026-03-08 12:59:15 +08:00
DreamMaoMao
bc34afae58 fix: miss judge isdrag when resize stack in scroller 2026-03-08 08:46:28 +08:00
DreamMaoMao
443809a43d opt: fix a minor judgment error 2026-03-07 23:14:47 +08:00
DreamMaoMao
57f28e2880 opt: optimize center tile layout resizewin 2026-03-07 22:54:41 +08:00
DreamMaoMao
ddb1fc146f opt: optimize size per caculate when resizewin 2026-03-07 21:41:48 +08:00
DreamMaoMao
3cd65b70d3 opt: remove some config in default config file 2026-03-07 17:40:32 +08:00
DreamMaoMao
297983409e opt: change some default config 2026-03-07 17:29:52 +08:00
DreamMaoMao
c82d281a14 feat: export drag interval to able configure 2026-03-07 17:22:31 +08:00
DreamMaoMao
60fc68b498 opt: optimize resizewin setp with keyboard 2026-03-07 16:17:40 +08:00
DreamMaoMao
ebcf238bd3 fix: avoid mutual influence of monitor rules 2026-03-07 14:04:08 +08:00
DreamMaoMao
29a4f93b4e opt: add some comment 2026-03-07 14:04:08 +08:00
DreamMaoMao
b0f24c6fe1 opt: opt the old size per init 2026-03-07 12:55:01 +08:00
kanvolu
6438edc2b7 Added cycling both ways for switch_proportion_preset
Now switch_proportion_preset requires an argument "prev" or "next" to
determine cycle direction
2026-03-07 12:45:21 +08:00
DreamMaoMao
b1875f4663 feat: add custom option to monitorrule 2026-03-06 18:22:05 +08:00
DreamMaoMao
dcea22bfda feat: support the repeated exchange of the same two clients 2026-03-06 14:31:59 +08:00
DreamMaoMao
81fcf208a4 opt: fix potential issues caused by uninitialization 2026-03-06 13:25:35 +08:00
DreamMaoMao
57e02d6217 opt: clear some comment 2026-03-05 23:04:25 +08:00
DreamMaoMao
66d14a0a0e opt: support restore size per when master change 2026-03-05 20:59:47 +08:00
DreamMaoMao
4f93589884 fix: popup unconstrain cross monitor 2026-03-05 08:28:21 +08:00
DreamMaoMao
6fda036dec feat: use monitor spec to match windowrule monitor field 2026-03-04 12:18:03 +08:00
DreamMaoMao
2868f07179 feat: add windowrule option indleinhibit_when_focus 2026-03-03 14:51:53 +08:00
DreamMaoMao
9732aa23bf opt: rename hide_source var to hide_cursor_source 2026-03-03 14:01:52 +08:00
DreamMaoMao
1c35e1f42f opt: always arrangelayers if layer commit 2026-03-02 20:54:04 +08:00
DreamMaoMao
7f05771df6 fix: last_cursor surface destroy detect error 2026-03-02 09:41:31 +08:00
Han Boetes
9a43368279 Fix use-after-free crash in cursor surface handling
### Problem

`setcursor()` stores the client-provided `wlr_surface` pointer in
`last_cursor.surface`, but never registers a destroy listener on it.
When the client exits (e.g. closing a launcher like fuzzel), the surface
is destroyed, but `last_cursor.surface` still holds the stale pointer.

If the cursor hide timeout fires while the cursor surface is alive, and
the client then exits, the next mouse movement calls
`handlecursoractivity()`, which passes the dangling pointer to
`wlr_cursor_set_surface()`. This causes a SIGSEGV in `wl_list_insert()`
inside libwayland-server, as the `wl_list` embedded in the destroyed
surface struct has been freed.

A secondary issue exists in `setcursorshape()`: when a client switches
from a custom cursor surface to a shape cursor, `last_cursor.surface` is
set to NULL but the destroy listener (if registered) is not removed,
leaving a dangling listener on the destroyed surface.

The crash only manifests when `cursor_hidden` is true at the moment of
the mouse movement, which is why it is intermittent and difficult to
reproduce.

### Root cause

Confirmed via `coredumpctl debug` and `bt full`:

```
#0  wl_list_insert (libwayland-server.so)
#1  wlr_cursor_set_surface (libwlroots)
#2  handlecursoractivity (mango.c)
#3  motionnotify (mango.c)
#4  motionrelative (mango.c)
#5  wl_signal_emit_mutable
#6  handle_libinput_readable
```

### Fix

- Add a `wl_listener` (`last_cursor_surface_destroy_listener`) that
clears `last_cursor.surface` and removes itself when the surface is
destroyed.
- Initialize the listener's link in `setup()` so `wl_list_empty()`
checks are reliable from the start.
- In `setcursor()`, remove any existing listener before registering a
new one on the incoming surface.
- In `setcursorshape()`, remove the destroy listener when switching to a
shape cursor.
- Add a NULL guard in `handlecursoractivity()` as a safety net.
2026-03-02 09:41:24 +08:00
DreamMaoMao
4b35b3b4a9 opt: avoid unnecessary action when layer surface commit 2026-03-02 08:36:07 +08:00
DreamMaoMao
b99620d41b opt: optimize layer focus change logic 2026-03-02 08:17:57 +08:00
DreamMaoMao
96cc712e48 opt: only set on_demand layer focus when it request in init_commit 2026-03-02 00:58:28 +08:00
DreamMaoMao
576e669ee4 update readme 2026-03-01 18:13:52 +08:00
DreamMaoMao
dfa5949977 Revert "Add nix option to enable/disable adding to session manager" 2026-03-01 18:05:09 +08:00
DreamMaoMao
54ea75f078 bump version to 0.12.5 2026-03-01 12:03:36 +08:00
DreamMaoMao
54b56f3425 update website in readme 2026-03-01 11:43:06 +08:00
DreamMaoMao
3be6fccefc rename mangowc to mangowm 2026-03-01 11:38:29 +08:00
DreamMaoMao
7df43679e7 project: rename guix file 2026-03-01 11:36:00 +08:00
DreamMaoMao
e9b8e1aa58 update readme 2026-03-01 11:21:40 +08:00
werapi
794e96d194 fix: pointer events being one event behind 2026-02-28 23:38:37 +08:00
DreamMaoMao
3c5ab60e6a opt: make spawn and spawn_shell log to debug log 2026-02-26 23:23:00 +08:00
Noor Latif
3642fafe49 fix(nix): update deprecated xorg package names to top-level
xcbutilwm → libxcb-wm

This eliminates the deprecation warnings:
- "The xorg package set has been deprecated, 'xorg.xcbutilwm' has been renamed to 'libxcb-wm'"

Changes:
- nix/default.nix:14: xcbutilwm, → libxcb-wm,
- nix/default.nix:60: xcbutilwm → libxcb-wm
2026-02-26 17:53:33 +08:00