Commit 8528f14
authored
feat(cursor): 第六个成员 libwayland-cursor——客户端自己的鼠标指针 (#2)
Wayland 没有服务端光标:客户端要指针,就得自己加载光标主题、把图像变成
wl_buffer、附到一个交给 wl_pointer.set_cursor 的 surface 上。这个库是前两步。
没有它,每个应用都得自己解析 XCursor 文件格式——而那正是这里的 xcursor.c。
不要和索引里的 compat.xcursor 搞混:那是 X11 的 libXcursor.so.1,要和 X 服务器
说话。这个不依赖 X,产出的是经 wl_shm 的 wl_buffer。
漏掉的原因和 libwayland-egl 一样:fork 建了合成器需要的四个成员就停了,而合成器
自己画光标。
## 与 egl 成员的关键差别:这个真的链 client
wayland-cursor.c 调 wl_shm_create_pool / wl_shm_pool_create_buffer /
wl_shm_pool_resize / wl_buffer_destroy,所以上游的
dependencies: [ wayland_client_dep ] 是链接边,不只是头。egl 成员对同一个包的
依赖只是头。两者在 manifest 里长得一样而实质不同,所以都写明了。
## 又一处编译期宿主路径
xcursor.c:493 写死
"~/.icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:"
"/usr/share/cursors/xorg-x11:" ICONDIR
重定位之后这些指的是**宿主的**主题,和 Vulkan 静默落到 llvmpipe 同一形状。
xcursor_library_path() 先读 getenv("XCURSOR_PATH") 且设置了就原样返回
(xcursor.c:515),所以这是兜底而非唯一入口——生态给光标主题时声明
XCURSOR_PATH,和给键盘布局声明 XKB_CONFIG_ROOT 完全对称。
所以 -DICONDIR="" -DXCURSORPATH="",空了之后没有 XCURSOR_PATH 的客户端找不到
主题、wl_cursor_theme_load 返回一个没有光标的主题——看得见,而不是「在开发者
机器上有指针、在别处没有」。
SONAME 是 .so.0 不是 .so.1:上游故意把这个库版本成 0.<minor>.<micro>,好让
wayland 1.x 永远不会逼出一次 cursor SONAME 升版,meson.build 里有注释和一个
wayland 到 2.x 就触发的 error()。
## CI
SONAME 循环加一行;新增一步逐个点名六个函数、断言 DT_NEEDED 有
libwayland-client.so.0、并 grep 二进制确认宿主光标路径确实没被编进去——最后
这条只能这么查,因为值错了的失败方式是**在恰好有 /usr/share/icons 的机器上
静默正常工作**。
本地实测:6/6 符号、链了 client、无宿主路径、三个 SONAME 全对。1 parent 3d1757a commit 8528f14
4 files changed
Lines changed: 178 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
110 | | - | |
| 110 | + | |
| 111 | + | |
111 | 112 | | |
112 | 113 | | |
113 | 114 | | |
| |||
169 | 170 | | |
170 | 171 | | |
171 | 172 | | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
172 | 205 | | |
173 | 206 | | |
174 | 207 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
43 | 48 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
0 commit comments