Wayland 窗口激活机制

Wayland 下,客户端无法像 X11 那样直接操作窗口焦点。所有窗口激活请求都必须经过 xdg-activation-v1 协议:申请者(通常是发起激活的一方)先从 compositor 获得 token,再将 token 交给目标应用,目标应用凭 token 向 compositor 请求焦点。 整个流程分为三个阶段: sequenceDiagram participant App as 申请者 participant Comp as Compositor participant Target as 目标进程 rect rgb(60, 60, 90) Note over App,Comp: ① Token 申请 App->>Comp: get_activation_token() App->>Comp: set_serial() App->>Comp: set_surface() App->>Comp: set_app_id() App->>Comp: commit() Comp-->>App: done(token) end rect rgb(90, 60, 60) Note over App,Target: ② Token 传递 App->>Target: 环境变量 / D-Bus / socket end rect rgb(60, 90, 60) Note over Target,Comp: ③ Token 使用 Target->>Comp: activate(token, surface) Note over Comp: 验证并授权焦点 end Token 申请:谁想激活别人,谁负责向 compositor 申请 token(协议层面) Token 传递:通过环境变量、D-Bus、单例 socket 等方式将 token 从申请者交给目标进程(跨进程传递) Token 使用:目标进程将 token 提交给 compositor,获得焦点(协议层面) 本文重点分析第 2 部分(传递),基于 Qt6(qtbase)、GLib 和 KDE kio 源码。 ...

2026年8月28日 · 4000 words · rewine

简单介绍下如何给 Peony 写插件

peony 是优麒麟的文件管理器,我之前在 开源软件供应链点亮计划 活动中中选了实现预览插件的项目,今天稍微总结下。 可以先看看参考资料 如何编写 Peony 插件 Peony-Qt的开发者手册(中文版) Peony 的 wiki ...

2021年10月4日 · 1185 words · rewine

QtPDF 的编译与试用

QtPDF 是 Qt 封装的 pdfium 模块,以 GPLv3/LGPLv3 协议分发,也可以在 QT marketplace 购买可商业版本 下载源代码 1 2 3 4 git clone <https://code.qt.io/qt/qtwebengine.git> cd qtwebengine git checkout 5.12.8 git submodule update --init --recursive 注意:git checkout 选择自己 qt 的版本 ...

2021年8月23日 · 559 words · rewine