CharOfString
deepin
2026-08-04 03:37 细节DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫

Reply Like 0 View the author
细节DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫

集treeland和wlcom之大成
portal的同意框可以用 DDialog 做
Popular Ranking
ChangePopular Events
More
Gitee上的GXWM | GitHub上的GXWM
大家好呀,距离上次分享GXDE Wayland合成器已经过去了一段时间了,除了获得了
GXWM这一简称以外,近这两周GXDE Wayland合成器又更了很多feat,虽然我要说的很多更改还没进GXDE的测试源,但这并不妨碍我挑一点好玩的讲一讲——壹 · Treeland兼容性更新
虽然目标不是完全兼容Treeland,但我们一直在推动
GXWM对Treeland的兼容性以减轻在GXDE OS上的DTK5/6程序适配难度,现在除了上次说的treeland_dde_shell_manager_v1,我们又追加了三个Treeland私有协议支持:截图协议Treeland Capture Manager
从名字就知道我想要干什么了——最近GXDE更新了源内「深度截图录屏」的版本,我在浏览源码的时候就发现了Treeland支持。我想着,如果我们实现对
treeland_personalization_manager_v1的支持(而不是实现原来deepin-kwin_wayland路径所需的多个KWAYLAND协议),会不会轻松点?于是我们做了这么一个粗糙的实现...我知道干巴巴讲这些协议支持很无聊,这里给大伙看看我还没向GXDE仓库提交的修改版截图录屏,它会在检测到
GXWM时走Treeland协议,由GXWM的Treeland兼容代码负责框选窗口,也支持像之前KWin上一样点击窗口截图和批注... 除了录屏不工作以外我感觉我们all set了...Treeland Personalization Manager
这个就比较无聊了(对我来说),有趣的是GXDE OS使用的Treeland协议包版本是
)一起崩溃了。考虑到GXDE不知道什么时候或许会切换协议版本,贪婪的我想到了做一个小开关,自动检测Treeland协议包的版本提供对应支持:
0.5.8,而现在Treeland协议包出到0.5.9了。在更新中,Treeland Personalization Manager移除了协议XML中的一些字段但没有更新协议版本,导致签名对不上。结果就是测试机器上所有DTK6程序(或许还有DTK5程序,DTK2程序因为太老旧了没受影响,而DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫然后我们还提供了一个小环境变量开关:将
GXWM_DONOT_BROADCAST_TLPM变量设置为TRUE/ON/1/YES即可让合成器停止广播此协议(默认是广播Personalization Manager)。在GXDE的gxde-wlcom会话上出于兼容性需求默认不广播此协议。贰 · Portal与录屏
大伙应该看过论坛置顶帖子「在 Treeland 下使用 Portal 录屏」吧?没错,我们也要支持用Portal录屏了。为此,我们又新增了一批协议支持:
有了这一切,还得加上一个修改版的「xdg-desktop-portal-gxde」,虽然PR已经合并了但目前还没有发release,也没进源,但我可以给大伙看看效果:
OBS会唤起下方的授权窗口,我知道这丑的简直没法看,但是我的评价是至少我们向着「能用」迈出了第一步:

叁 · 更好的全局菜单
为了让GXDE顶栏的全局菜单可用,我们新增了对KDE AppMenu的支持,也加上了对XWayland全局菜单的支持。我们从rocka/appmenu-gtk-module-waylandfork了自己的库gxde-wayland-gtk-menu(其实就是加上了debian打包和CI),
肆 · 更好的双屏支持
除了之前的允许修改分辨率和缩放以外,我们还补上了屏幕排列支持:在「扩展」模式下,允许随意排列显示器局部。我没记错的话这是Kylin Wlcom的原生能力,我们把GXDE设置中心的显示器排列前端接到上面了——
伍 · 多任务与虚拟桌面
前端是我参考某个远古版本的
deepin-kwin有样学样做出来的:当然支持虚拟桌面的切换或者把某个窗口扔到某一虚拟桌面,最多支持六个虚拟桌面...
陆 · 其它一些「没这么有趣」的更新
libseat在有seatd的情况就默认使用seatd导致在LightDM/正在开发的GXDE Display Manager下无法启动的问题(现在gxde-wlcom会话强制使用logind,如果你的display manager真的使用seatd你可能得注释掉会话脚本的一个if块,脚本内有说明这里不叭叭了