diff --git a/CMakeLists.txt b/CMakeLists.txt index ed62b63..3d4291b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,6 @@ include(CMakePackageConfigHelpers) # Public protocol XML files (for general application developers) set(TREELAND_PROTOCOL_XML_FILES - public/treeland-dde-shell-v1.xml public/treeland-window-transition-unstable-v1.xml public/treeland-appearance-unstable-v1.xml public/treeland-decoration-unstable-v1.xml @@ -21,17 +20,20 @@ set(TREELAND_PROTOCOL_XML_FILES # DDE component protocol XML files set(TREELAND_PROTOCOL_DDE_XML_FILES + dde/treeland-dde-shell-unstable-v2.xml dde/treeland-foreign-toplevel-manager-unstable-v2.xml dde/treeland-input-manager-unstable-v1.xml dde/treeland-keyboard-state-notify-unstable-v1.xml dde/treeland-output-manager-unstable-v2.xml dde/treeland-shortcut-manager-unstable-v3.xml + dde/treeland-compositor-action-unstable-v1.xml dde/treeland-appearance-manager-unstable-v1.xml dde/treeland-virtual-output-manager-v1.xml dde/treeland-wallpaper-manager-unstable-v1.xml - dde/treeland-show-desktop-unstable-v1.xml dde/treeland-layer-shell-extension-unstable-v1.xml dde/treeland-xwindow-control-unstable-v1.xml + dde/treeland-active-notify-unstable-v1.xml + dde/treeland-region-watch-unstable-v1.xml ) # Internal protocol XML files (Treeland-specific, not for general app developers) @@ -58,6 +60,8 @@ set(TREELAND_PROTOCOL_DEPRECATED_XML_FILES deprecated/treeland-personalization-manager-v1.xml deprecated/treeland-prelaunch-splash-v1.xml deprecated/treeland-screensaver-v1.xml + deprecated/treeland-dde-shell-v1.xml + deprecated/treeland-show-desktop-unstable-v1.xml deprecated/treeland-shortcut-manager-v1.xml deprecated/treeland-shortcut-manager-v2.xml deprecated/treeland-wallpaper-color-v1.xml diff --git a/dde/README.md b/dde/README.md index 0baaa6a..59dccf9 100644 --- a/dde/README.md +++ b/dde/README.md @@ -9,12 +9,15 @@ For DDE desktop components. Installed via `TREELAND_PROTOCOL_DDE_XML_FILES`. | `treeland-keyboard-state-notify-unstable-v1.xml` | `treeland_keyboard_state_notify_unstable_v1` | `treeland_keyboard_state_notify_manager_v1`, `treeland_keyboard_state_watcher_v1` | Watch keyboard modifier (caps/num lock) state changes | | `treeland-output-manager-unstable-v2.xml` | `treeland_output_manager_unstable_v2` | `treeland_output_manager_v2`, `treeland_output_picture_control_v2` | Primary output designation, per-output color temperature and brightness control | | `treeland-shortcut-manager-unstable-v3.xml` | `treeland_shortcut_manager_unstable_v3` | `treeland_shortcut_manager_v3`, `treeland_shortcut_capture_v3` | Global keyboard shortcut binding with key/touch/multi-touch gesture support and one-shot shortcut capture | +| `treeland-compositor-action-unstable-v1.xml` | `treeland_compositor_action_unstable_v1` | `treeland_compositor_action_v1` | One-shot privileged triggering of window-independent compositor actions: workspace switching, show-desktop, multitask overview, screen zoom, FPS overlay, lockscreen, shutdown menu, user switch; window-level and task-switch actions are intentionally excluded and remain only as shortcuts in `treeland_shortcut_manager_v3` | | `treeland-appearance-manager-unstable-v1.xml` | `treeland_appearance_manager_unstable_v1` | `treeland_appearance_manager_v1` | Privileged user-level appearance configuration: cursor theme/size, global font, icon theme, accent color, window opacity, color scheme, titlebar height, global corner radius | | `treeland-virtual-output-manager-v1.xml` | `treeland_virtual_output_manager_v1` | `treeland_virtual_output_manager_v1`, `treeland_virtual_output_v1` | Virtual (mirrored) output creation and management | | `treeland-wallpaper-manager-unstable-v1.xml` | `treeland_wallpaper_manager_unstable_v1` | `treeland_wallpaper_manager_v1`, `treeland_wallpaper_v1` | Per-output wallpaper configuration with image/video sources | -| `treeland-show-desktop-unstable-v1.xml` | `treeland_show_desktop_unstable_v1` | `treeland_show_desktop_v1` | Show-desktop mode control: request mode transitions and observe compositor-driven state changes | | `treeland-layer-shell-extension-unstable-v1.xml` | `treeland_layer_shell_extension_unstable_v1` | `treeland_layer_shell_extension_manager_v1`, `treeland_layer_shell_extension_object_v1` | Compositor-driven interactive resize for layer-shell surfaces (dock / side bar / status bar): begin_resize with seat+serial, per-resize size limits, and rejection reasons | | `treeland-xwindow-control-unstable-v1.xml` | `treeland_xwindow_control_unstable_v1` | `treeland_xwindow_control_v1` | XWayland window placement: move an XWayland window (by X11 window ID) to a position relative to another surface, with wl_callback result feedback | +| `treeland-active-notify-unstable-v1.xml` | `treeland_active_notify_unstable_v1` | `treeland_active_notify_manager_v1`, `treeland_active_notify_v1` | Seat activity notification: observe pointer button/wheel enter/leave activity and drag/drop lifecycle events scoped to a seat | +| `treeland-region-watch-unstable-v1.xml` | `treeland_region_watch_unstable_v1` | `treeland_region_watch_manager_v1`, `treeland_region_watch_v1` | Edge-anchored region overlap watch: register an edge-anchored region on an output and observe enter/leave overlap events with xdg-shell toplevels | +| `treeland-dde-shell-unstable-v2.xml` | `treeland_dde_shell_unstable_v2` | `treeland_dde_shell_manager_v2`, `treeland_dde_shell_surface_v2` | DDE shell surface role: turn a wl_surface into a shell surface rendered below the wlr-layer-shell layer stack at the workspace overlay level, suggest an initial position relative to an output or the cursor, and declare switcher/dock-preview/multitask-view listing preferences via a skip bitfield | ## Breaking changes @@ -26,6 +29,25 @@ Breaking changes are grouped by version. Under each version heading, one subsect The `set_accent_color` request dropped its `a` (alpha) argument. The accent color is now an opaque RGB triple `r, g, b` (each `uint` in `[0, 255]`); the alpha channel is no longer carried on the wire. Consumers must stop sending the trailing `a` argument and must not interpret accent color opacity from this request; opacity is outside the scope of the accent color setting. +#### `treeland-show-desktop-unstable-v1.xml` + +Deprecated and moved to `deprecated/`; superseded by the `show_desktop` action of the `treeland_compositor_action_v1` global of `treeland-compositor-action-unstable-v1.xml` (in `dde/`). Wire-level differences: + +1. The replacement is a one-shot fire-and-forget trigger: the `show_desktop` action toggles show-desktop mode and the compositor sends no confirmation, whereas `set_show_desktop_state` requested an explicit transition to `show` or `normal` and the `show_desktop_state` event confirmed every state change. +2. State observation has no direct replacement: the new protocol carries no events, so clients that tracked the mode via `show_desktop_state` (including the initial state sent on bind) lose that feedback and must treat triggering as best-effort. +3. The replacement global is privileged: only the DDE clients allowed by the compositor may bind `treeland_compositor_action_v1`, whereas `treeland_show_desktop_v1` was bound by regular shell clients. + +Consumers should rebind the global as `treeland_compositor_action_v1` and trigger the `show_desktop` action; the old XML is kept installed during migration but must not be used in new code. + +#### `treeland-dde-shell-v1.xml` + +The DDE-shell protocol interfaces consumed by DDE components are split into dedicated `dde/` protocols. Each replacement is an independent privileged global; consumers should bind the new globals and stop using the deprecated dde-shell interfaces. + +- `treeland_dde_active_v1` (and its `get_treeland_dde_active` manager request) is non-functional and superseded by `treeland-active-notify-unstable-v1.xml` (`treeland_active_notify_manager_v1` / `treeland_active_notify_v1`): `get_active_notify` creates a per-seat notifier whose `activity_changed` event carries a `reason` enum and an `activity_state` enum (renamed from `active_in`/`active_out`; mouse tracks the left-button state, wheel is a per-event pulse), plus a `drag_changed` event carrying a `drag_state` enum (started/dropped/cancelled). +- `treeland_window_overlap_checker` (and its `get_window_overlap_checker` manager request) is non-functional and superseded by `treeland-region-watch-unstable-v1.xml` (`treeland_region_watch_manager_v1` / `treeland_region_watch_v1`): the watcher interface gains the `_v1` suffix, the region request is renamed from `update` to `set_region` with an explicit `anchor` enum and `invalid_anchor`/`invalid_size` errors, and `output_removed` covers output lifetime. +- `treeland_multitaskview_v1` and `treeland_lockscreen_v1` (with their creating requests) are superseded by the corresponding actions (`toggle_multitask_view`/`open_multitask_view`/`close_multitask_view` and `lockscreen`/`shutdown_menu`/`show_user_switch`) of `treeland-compositor-action-unstable-v1.xml` (`treeland_compositor_action_v1`). +- `treeland_dde_shell_surface_v1` (and its `get_shell_surface` manager request) is superseded by `treeland-dde-shell-unstable-v2.xml` (`treeland_dde_shell_manager_v2` / `treeland_dde_shell_surface_v2`), in `dde/`; the surface role is carried over with a 0-based `role` enum and a merged `set_skip_flags` bitfield. + ### 0.6.0 #### `treeland-output-manager-v1.xml` @@ -101,6 +123,6 @@ Superseded by `treeland-shortcut-manager-unstable-v3.xml`; the old v2 file moved 2. The manager interface version was reset from 3 to 1 and all `since` attributes were removed (they marked members added across v2 interface versions 2 and 3: `capture_next_shortcut`, the `invalid_surface` error, and the `tile_left`/`tile_right` actions). 3. The `action` enum was restructured and renumbered: `quit` and `taskswitch_enter` were removed (`quit` is no longer exposed as a shortcut; the task switcher is entered implicitly by the `taskswitch_next`/`taskswitch_prev` actions); the direct-switch set was expanded from `workspace_1`..`workspace_6` to `workspace_1`..`workspace_12`; and 14 new actions were added — `minimize`, `resize_window`, `move_window_to_prev_workspace`, `move_window_to_next_workspace`, `zoom_in`/`zoom_out`/`zoom_reset`, and the tiling snap family `tile_top`/`tile_bottom`/`tile_top_left`/`tile_top_right`/`tile_bottom_left`/`tile_bottom_right`. Entries were regrouped into logical families (notify, workspace switching, window state, window operations, cross-workspace move, show-desktop/multitask, task switching, tiling, screen zoom, system), so every action value changed; `notify` is now 0 and `shutdown_menu` is now 45. Some newly added actions may not yet be implemented by every compositor build; binding such an action is accepted but has no effect until implemented. 4. The commit mechanism was removed: `bind_key`, `bind_swipe_gesture`, and `bind_hold_gesture` take effect immediately, a rejected bind is reported per binding via the new `bind_failure` event, and the `commit` request, the `commit_success` and `commit_failure` events, and the `error.invalid_commit` entry no longer exist. The `error.invalid_surface` entry was renumbered from 4 to 3. Unlike the old model, one failing binding no longer rolls back the other bindings of the same batch. -5. Documentation was refined (no wire change): destroying the manager object is now documented to implicitly release the exclusive control acquired via `acquire`, and the `capture_next_shortcut` request and the capture interface semantics were rewritten to match the compositor implementation (trigger timing, seat/focus validation, the `busy`/`aborted` failure conditions, and the valid-shortcut rules). +5. Documentation was refined (no wire change): destroying the manager object is documented to implicitly release the exclusive control acquired via `acquire`, and the `capture_next_shortcut` request and the capture interface semantics were rewritten to match the compositor implementation (trigger timing, seat/focus validation, the `busy`/`aborted` failure conditions, and the valid-shortcut rules). Consumers should rebind the global as `treeland_shortcut_manager_v3`, send `acquire` before any bind or unbind request, and create capture objects via `capture_next_shortcut`; the old v2 XML is kept installed during migration but must not be used in new code. diff --git a/dde/README.zh_CN.md b/dde/README.zh_CN.md index ece28e3..442be52 100644 --- a/dde/README.zh_CN.md +++ b/dde/README.zh_CN.md @@ -9,12 +9,15 @@ | `treeland-keyboard-state-notify-unstable-v1.xml` | `treeland_keyboard_state_notify_unstable_v1` | `treeland_keyboard_state_notify_manager_v1`, `treeland_keyboard_state_watcher_v1` | 监听键盘修饰键(Caps/Num Lock)状态变化 | | `treeland-output-manager-unstable-v2.xml` | `treeland_output_manager_unstable_v2` | `treeland_output_manager_v2`, `treeland_output_picture_control_v2` | 指定主屏、逐输出色温和亮度控制 | | `treeland-shortcut-manager-unstable-v3.xml` | `treeland_shortcut_manager_unstable_v3` | `treeland_shortcut_manager_v3`, `treeland_shortcut_capture_v3` | 全局键盘快捷键绑定,支持按键/触摸/多点触摸手势及一次性快捷键捕获 | +| `treeland-compositor-action-unstable-v1.xml` | `treeland_compositor_action_unstable_v1` | `treeland_compositor_action_v1` | 特权客户端一次性触发与当前窗口无关的合成器动作:工作区切换、显示桌面、多任务视图、屏幕缩放、FPS 覆盖层、锁屏、关机菜单、用户切换;窗口级与任务切换动作被有意排除,仅作为 `treeland_shortcut_manager_v3` 中的快捷键保留 | | `treeland-appearance-manager-unstable-v1.xml` | `treeland_appearance_manager_unstable_v1` | `treeland_appearance_manager_v1` | 特权用户级外观配置:光标主题/大小、全局字体、图标主题、强调色、窗口不透明度、配色方案、标题栏高度、全局圆角 | | `treeland-virtual-output-manager-v1.xml` | `treeland_virtual_output_manager_v1` | `treeland_virtual_output_manager_v1`, `treeland_virtual_output_v1` | 虚拟(镜像)输出创建和管理 | | `treeland-wallpaper-manager-unstable-v1.xml` | `treeland_wallpaper_manager_unstable_v1` | `treeland_wallpaper_manager_v1`, `treeland_wallpaper_v1` | 逐输出壁纸配置,支持图片/视频来源 | -| `treeland-show-desktop-unstable-v1.xml` | `treeland_show_desktop_unstable_v1` | `treeland_show_desktop_v1` | 显示桌面模式控制:请求模式切换并观察合成器驱动的状态变化 | | `treeland-layer-shell-extension-unstable-v1.xml` | `treeland_layer_shell_extension_unstable_v1` | `treeland_layer_shell_extension_manager_v1`, `treeland_layer_shell_extension_object_v1` | 合成器驱动的 layer-shell 表面交互式缩放(dock / 侧边栏 / 状态栏):begin_resize 携带 seat+serial 与单次尺寸限制,及拒绝原因 | | `treeland-xwindow-control-unstable-v1.xml` | `treeland_xwindow_control_unstable_v1` | `treeland_xwindow_control_v1` | XWayland 窗口定位:将 XWayland 窗口(按 X11 窗口 ID)移动到相对另一 surface 的位置,结果经 wl_callback 回报 | +| `treeland-active-notify-unstable-v1.xml` | `treeland_active_notify_unstable_v1` | `treeland_active_notify_manager_v1`、`treeland_active_notify_v1` | Seat 活跃通知:订阅按 Seat 限定的指针按键/滚轮进入/离开活跃状态及拖拽/放下的生命周期事件 | +| `treeland-region-watch-unstable-v1.xml` | `treeland_region_watch_unstable_v1` | `treeland_region_watch_manager_v1`、`treeland_region_watch_v1` | 沿输出边缘的区域重叠监控:注册锚定输出边缘的区域并订阅与 xdg-shell 顶层窗口重叠/解除重叠的 enter/leave 事件 | +| `treeland-dde-shell-unstable-v2.xml` | `treeland_dde_shell_unstable_v2` | `treeland_dde_shell_manager_v2`、`treeland_dde_shell_surface_v2` | DDE Shell surface 角色:将 wl_surface 转为在 wlr-layer-shell 层叠之下、工作区 overlay 层渲染的 shell surface,建议相对输出或光标的初始位置,并通过 skip 位域声明任务切换器/dock 预览/多任务视图的列表偏好 | ## 破坏性变更 @@ -26,6 +29,25 @@ `set_accent_color` 请求移除了 `a`(alpha)参数。活动色现为不透明 RGB 三元组 `r, g, b`(每个为 `[0, 255]` 范围内的 `uint`);alpha 通道不再上线缆传输。消费者须停止发送末尾的 `a` 参数,且不得从该请求推断活动色不透明度;不透明度不在活动色设置范围内。 +#### `treeland-show-desktop-unstable-v1.xml` + +已废弃并移至 `deprecated/`;由 `treeland-compositor-action-unstable-v1.xml`(在 `dde/`)中 `treeland_compositor_action_v1` 全局对象的 `show_desktop` 动作取代。线缆级差异: + +1. 替代方案是一次性的 fire-and-forget 触发:`show_desktop` 动作切换显示桌面模式,合成器不发送任何确认;而 `set_show_desktop_state` 请求显式切换到 `show` 或 `normal`,并由 `show_desktop_state` 事件确认每一次状态变化。 +2. 状态观察无直接替代:新协议不携带任何事件,曾通过 `show_desktop_state`(含绑定时发送的初始状态)跟踪模式的客户端将失去该反馈,只能将触发视为尽力而为。 +3. 替代全局对象为特权接口:仅允许由合成器授权的 DDE 客户端绑定 `treeland_compositor_action_v1`,而 `treeland_show_desktop_v1` 可由常规 shell 客户端绑定。 + +消费者应将全局对象重新绑定为 `treeland_compositor_action_v1` 并触发 `show_desktop` 动作;旧 XML 在迁移期间仍会安装,但不得用于新代码。 + +#### `treeland-dde-shell-v1.xml` + +DDE-shell 协议中被 DDE 组件消费的接口拆分为 `dde/` 下的专用协议。每个替代品均为独立的特权全局对象;消费者应改绑新的全局对象,停止使用已废弃的 dde-shell 接口。 + +- `treeland_dde_active_v1`(含其创建请求 `get_treeland_dde_active`)已不可用,由 `treeland-active-notify-unstable-v1.xml`(`treeland_active_notify_manager_v1` / `treeland_active_notify_v1`)取代:`get_active_notify` 创建按 Seat 限定的通知对象,其 `activity_changed` 事件携带 `reason` 与 `activity_state` 枚举(由 `active_in`/`active_out` 更名;鼠标跟踪左键状态,滚轮为逐事件脉冲),并新增携带 `drag_state` 枚举(started/dropped/cancelled)的 `drag_changed` 事件。 +- `treeland_window_overlap_checker`(含其创建请求 `get_window_overlap_checker`)已不可用,由 `treeland-region-watch-unstable-v1.xml`(`treeland_region_watch_manager_v1` / `treeland_region_watch_v1`)取代:watcher 接口补上 `_v1` 后缀,设区域请求由 `update` 更名为 `set_region`,含显式 `anchor` 枚举与 `invalid_anchor`/`invalid_size` 错误,并新增 `output_removed` 覆盖输出生命周期。 +- `treeland_multitaskview_v1` 和 `treeland_lockscreen_v1`(含其创建请求)由 `treeland-compositor-action-unstable-v1.xml`(`treeland_compositor_action_v1`)的对应动作取代(`toggle_multitask_view`/`open_multitask_view`/`close_multitask_view` 与 `lockscreen`/`shutdown_menu`/`show_user_switch`)。 +- `treeland_dde_shell_surface_v1`(含其创建请求 `get_shell_surface`)由 `treeland-dde-shell-unstable-v2.xml`(`treeland_dde_shell_manager_v2` / `treeland_dde_shell_surface_v2`)取代,后者位于 `dde/`;surface 角色得以保留,`role` 枚举改为 0 基编号,skip 请求合并为 `set_skip_flags` 位域。 + ### 0.6.0 #### `treeland-output-manager-v1.xml` @@ -101,6 +123,6 @@ 2. 管理器接口版本从 3 重置为 1,并移除所有 `since` 属性(这些属性标记的是 v2 接口第 2、3 版新增的成员:`capture_next_shortcut`、`invalid_surface` 错误以及 `tile_left`/`tile_right` action)。 3. `action` 枚举重构并重新编号:移除 `quit` 与 `taskswitch_enter`(`quit` 不再作为快捷键暴露;任务切换器由 `taskswitch_next`/`taskswitch_prev` 动作隐式进入);直接切换集合由 `workspace_1`..`workspace_6` 扩展为 `workspace_1`..`workspace_12`;新增 14 个动作——`minimize`、`resize_window`、`move_window_to_prev_workspace`、`move_window_to_next_workspace`、`zoom_in`/`zoom_out`/`zoom_reset`,以及贴边 snap 家族 `tile_top`/`tile_bottom`/`tile_top_left`/`tile_top_right`/`tile_bottom_left`/`tile_bottom_right`。各项按逻辑族重新分组(notify、工作区切换、窗口状态、窗口操作、跨工作区移动、显示桌面/多任务、任务切换、贴边、屏幕缩放、系统),因此所有动作值均变更;`notify` 现为 0,`shutdown_menu` 现为 45。部分新增动作未必已被所有合成器构建实现;绑定此类动作会被接受,但在实现前无效果。 4. 移除 commit 机制:`bind_key`、`bind_swipe_gesture`、`bind_hold_gesture` 立即生效,被拒绝的绑定通过新增的 `bind_failure` 事件逐个报告,`commit` 请求、`commit_success` 与 `commit_failure` 事件以及 `error.invalid_commit` 枚举项不复存在。`error.invalid_surface` 枚举项从 4 重编号为 3。与旧模型不同,单个绑定失败不再回滚同批次的其他绑定。 -5. 文档完善(无线缆变更):销毁管理器对象现明确说明会隐式释放经由 `acquire` 获取的独占控制权;`capture_next_shortcut` 请求与捕获接口语义重写以对齐合成器实现(触发时机、seat/focus 校验、`busy`/`aborted` 失败条件及有效快捷键规则)。 +5. 文档完善(无线缆变更):销毁管理器对象明确说明会隐式释放经由 `acquire` 获取的独占控制权;`capture_next_shortcut` 请求与捕获接口语义重写以对齐合成器实现(触发时机、seat/focus 校验、`busy`/`aborted` 失败条件及有效快捷键规则)。 消费者应将全局对象重新绑定为 `treeland_shortcut_manager_v3`,在发送任何 bind 或 unbind 请求前先 `acquire`,并通过 `capture_next_shortcut` 创建捕获对象;旧 v2 XML 在迁移期间仍会安装,但不得用于新代码。 diff --git a/dde/treeland-active-notify-unstable-v1.xml b/dde/treeland-active-notify-unstable-v1.xml new file mode 100644 index 0000000..d704f6e --- /dev/null +++ b/dde/treeland-active-notify-unstable-v1.xml @@ -0,0 +1,168 @@ + + + + + + Warning! This protocol is EXPERIMENTAL and under active development. + It may change at any time, including in backward-incompatible ways, + without incrementing the interface major version and without prior + notice. No compatibility guarantees of any kind are provided. Clients + and compositors must track the upstream definition in treeland-protocols + and must not rely on the current interface names, requests, events, or + semantics remaining stable across releases. + + This protocol allows a privileged DDE client such as the dock or shell + to observe seat activity that the compositor detects: pointer button + and wheel activity, and drag and drop lifecycle events, scoped to a + given seat. + + The compositor must reject bind attempts from non-privileged + clients. + + The terms "must", "must not", "should", and "may" in this document + are to be interpreted as described in RFC 2119. + + + + + A global that creates treeland_active_notify_v1 objects for + privileged DDE clients. Each notifier reports activity for + one seat; clients observing several seats create several + notifiers. + + The compositor must reject bind attempts from non-privileged + clients. + + + + + Destroy the treeland_active_notify_manager_v1 object. + Notifiers created through this manager are not affected. + + + + + + Create a new treeland_active_notify_v1 object that + reports activity for the given seat. The seat must be a + valid, current wl_seat. + + + + + + + + + A notifier object reports seat activity that the compositor + detects. Activity is reported as activity_changed events + tagged with the source that triggered them and the new + activity state. Drag and drop lifecycle changes are reported + as drag_changed events tagged with the new drag state. + + The mouse and wheel sources have different semantics: + + For mouse, activity_changed reports the aggregate state of + the left pointer button only. It is sent with state active + when the left button is pressed and state inactive when it + is released. Other pointer buttons do not generate these + events. The compositor sends these events as matched pairs: + it must not send a state active event before the matching + state inactive event, nor a state inactive event when the + left button is not pressed. + + For wheel, activity_changed is a discrete per-event pulse, + not a persistent state. It is sent with state active for + each wheel event whose angle delta is positive, and state + inactive for each whose angle delta is negative; the + compositor may send several active (or several inactive) + events in a row without an intervening opposite state. + Clients must treat each wheel event independently and must + not infer a lasting state from a single event. + + The drag_changed event reports the lifecycle of a drag and + drop operation on the seat. It is sent with state started + when the operation begins. Exactly one terminal event + follows each started event: one with state dropped when the + operation completes with a successful drop, or one with + state cancelled when the operation ends without a drop + (for example because the drag was cancelled or the source + destroyed). No further drag events are sent after the + terminal event until the next started event. + + + + + The input source that triggered an activity event. Used + by the activity_changed event. See the interface + description for the per-source semantics. + + + + + + + + The state reported by the activity_changed event. See + the interface description for the per-source semantics. + + + + + + + + The state reported by the drag_changed event. + + + + + + + + + Destroy the treeland_active_notify_v1 object. The + compositor stops reporting activity for the seat bound + to this notifier. + + + + + + For mouse, sent when the left pointer button is pressed + (state active) or released (state inactive). The + compositor sends these events as matched pairs. + + For wheel, sent for each wheel event: state active when + the angle delta is positive, state inactive when it is + negative; the compositor may send several active (or + several inactive) events in a row without an + intervening opposite state. + + See the interface description for the per-source + semantics. + + + + + + + + Sent when the state of a drag and drop operation on the + seat bound to this notifier changes. + + A started event is followed by exactly one terminal + event: dropped when the operation completes with a + successful drop, or cancelled when the operation ends + without a drop (for example because the drag was + cancelled or the drag source destroyed). No further + drag events are sent after the terminal event until + the next started event. + + + + + diff --git a/dde/treeland-compositor-action-unstable-v1.xml b/dde/treeland-compositor-action-unstable-v1.xml new file mode 100644 index 0000000..87f288a --- /dev/null +++ b/dde/treeland-compositor-action-unstable-v1.xml @@ -0,0 +1,173 @@ + + + + + + Warning! This protocol is EXPERIMENTAL and under active development. + It may change at any time, including in backward-incompatible ways, + without incrementing the interface major version and without prior + notice. No compatibility guarantees of any kind are provided. Clients + and compositors must track the upstream definition in treeland-protocols + and must not rely on the current interface names, requests, events, or + semantics remaining stable across releases. + + This protocol allows a privileged DDE client such as the dock, the + shutdown applet, or the greeter to trigger compositor actions + directly, without registering a keyboard or gesture shortcut. + + This protocol is independent of treeland_shortcut_manager_v3 and of + any other Treeland protocol. The action values defined here form + their own value space: they are not aligned with, and must not be + assumed to match, the action enum of the shortcut manager. The + compositor maps them to internal actions through its own table, and + future versions of either protocol may add, renumber, or remove + entries without regard to the other. + + Following the split used by KWin, this protocol exposes only actions + that are independent of the currently active window and of an + in-progress keyboard task-switching sequence: workspace switching, + show-desktop, the multitask overview, screen zoom, the FPS overlay, + and session-level actions (lock, shutdown menu, user switch). Actions + that act on the currently active window (maximize, minimize, close, + move, resize, show the window menu, snap tiling, and moving a window + across workspaces) and the task-switch stepping actions depend on + implicit runtime state (the active window or an ongoing Alt-Tab-like + sequence) and are not exposed here; they remain available only as + keyboard or gesture shortcuts registered through + treeland_shortcut_manager_v3. Exposing those window-level actions as + a directly callable interface would let a background client manipulate + a window chosen by keyboard focus rather than by explicit reference, + which is the same reason KWin keeps them behind kglobalaccel instead + of offering them on its DBus interface. + + The compositor must reject bind attempts from non-privileged + clients. + + This interface is stateless: each request is an independent one-shot + action. The compositor does not send events in response to these + requests; clients that need to observe the resulting session state + should use the appropriate session or idle protocols instead. + + The terms "must", "must not", "should", and "may" in this document + are to be interpreted as described in RFC 2119. + + + + + A global that exposes compositor actions to a privileged + DDE client. + + The compositor must reject bind attempts from non-privileged + clients. + + Only window-independent actions are exposed here; actions + that target the currently active window or step an in-progress + task switch are not part of this interface and must be triggered + as shortcuts through treeland_shortcut_manager_v3. See the + protocol-level description for the rationale. + + All actions are triggered with the trigger request, which takes + an action argument. + + The compositor should ignore an action it cannot perform, for + example locking while a lock screen is already active; clients + must not assume an action has taken effect. + + The shutdown-menu actions show the shutdown and session menu; + they differ only in which menu button receives the default + keyboard focus. shutdown_menu expresses no preference; the + power_off, reboot, suspend, hibernate, and log_out entries + request focus on the matching button. Showing the menu does not + perform the power action itself; the compositor or greeter + carries out the chosen action after the user confirms. + + + + + Shell actions exposed through the trigger request, limited + to those independent of the currently active window. + + The values are specific to this protocol. They are not + aligned with the action enum of + treeland_shortcut_manager_v3, and clients must not build any + mapping between the two enums. + + Actions that target the currently active window (maximize, + minimize, close, move, resize, show the window menu, snap + tiling, and moving a window across workspaces) and the + task-switch stepping actions are not part of this enum; they + depend on the active window or an in-progress switching + sequence and are reachable only as shortcuts via + treeland_shortcut_manager_v3. + + Values 25-30 (show_user_switch and the focused shutdown-menu + actions) have no counterpart in the shortcut manager because + they are triggered by a shell client rather than a keyboard + shortcut. The focused shutdown-menu entries behave like + shutdown_menu but request default focus on the matching + button. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Destroy the treeland_compositor_action_v1 object. This request + does not alter any compositor, shell, or session state. + + + + + + Trigger the compositor action identified by the action argument. + The compositor should ignore the request when the action + cannot be performed, for example locking while a lock + screen is already active, or showing the shutdown menu while + a lock screen is already active. Clients must not assume + the action has taken effect. + + The shutdown-menu actions show the menu; they do not perform + the power action itself. + + + + + diff --git a/dde/treeland-dde-shell-unstable-v2.xml b/dde/treeland-dde-shell-unstable-v2.xml new file mode 100644 index 0000000..d96da1a --- /dev/null +++ b/dde/treeland-dde-shell-unstable-v2.xml @@ -0,0 +1,214 @@ + + + + + + Warning! This protocol is EXPERIMENTAL and under active development. + It may change at any time, including in backward-incompatible ways, + without incrementing the interface major version and without prior + notice. No compatibility guarantees of any kind are provided. Clients + and compositors must track the upstream definition in treeland-protocols + and must not rely on the current interface names, requests, events, or + semantics remaining stable across releases. + + This protocol lets a privileged DDE client turn a wl_surface + into a shell surface that renders below the wlr-layer-shell + layer stack, at the overlay level of the workspace, and position + it at coordinates relative to an output or auto-place it below + the cursor. + + The compositor must reject bind attempts from non-privileged + clients. + + The terms "must", "must not", "should", and "may" in this document + are to be interpreted as described in RFC 2119. + + + + + A global that creates treeland_dde_shell_surface_v2 objects for + privileged DDE clients implementing parts of the shell user + interface. + + The compositor must reject bind attempts from non-privileged + clients. + + + + + Errors raised by the treeland_dde_shell_manager_v2 + interface. + + + + + + + Destroy the treeland_dde_shell_manager_v2 object. + Shell surfaces created through this manager are not + affected. + + + + + + Create a new treeland_dde_shell_surface_v2 object for the + given surface, turning it into a shell surface. Only one + shell surface object can be associated with a given + wl_surface; the compositor raises already_shell_surface + for a second attempt. + + Recommended for use with xdg_surface. + + + + + + + + + A shell surface object assigns the DDE shell surface role to a + wl_surface. A shell surface renders below the wlr-layer-shell + layer stack, at the overlay level of the workspace: above + normal toplevel windows but below layer-shell surfaces. + + The role carries no requests that map, commit, or configure + buffer state; the client commits buffers with wl_surface + semantics as usual. + + On the server side the object is automatically destroyed when + the related wl_surface is destroyed. On the client side, + treeland_dde_shell_surface_v2.destroy() must be called before + destroying the wl_surface object. + + Positioning requests are mutually exclusive: set_position_hint + suggests fixed coordinates relative to an output, while + set_cursor_placement_hint asks the compositor to place the + surface relative to the cursor. The most recently sent + request determines the placement mode. Both requests are + hints for the initial placement of the surface: the + compositor decides the final position and may adjust it to + keep the surface accessible, for example to keep its + titlebar area within the output. Clients must not assume the + requested position is honored exactly. + + + + + The layer a shell surface renders in. Layers are ordered by + z depth. Multiple surfaces can share a single role, and + ordering within a single role is undefined. + + + + + + + Flags indicating that the surface prefers not to be listed + in specific shell views. Used by the set_skip_flags + request. Compositors should honor these preferences but + may ignore them, for example for windows the user must + always be able to reach. + + + + + + + + + The treeland_dde_shell_surface_v2 interface is removed from + the wl_surface object that was turned into a shell surface + with the treeland_dde_shell_manager_v2.get_shell_surface + request. + + The shell surface role is lost and the wl_surface is + unmapped. + + + + + + Assign the role identified by the role enum to this shell + surface, selecting the layer it renders in. The default + role before this request is overlay. + + + + + + + Suggest a position for the surface. The coordinates are + relative to the origin of the given output; for example + 50,50 suggests placing the surface 50 units right of and + 50 units below the output's top-left corner, wherever + that output currently sits in the global space spanning + all outputs. + + The output argument may be null, in which case the + compositor uses the primary output as the anchor. + Otherwise the output must be a valid, current wl_output. + The position is resolved at request time; the compositor + does not keep the output associated with this surface + afterwards, and the client may release the wl_output + proxy once the request has been sent. If the output is + later destroyed, the already-applied position is not + affected. + + This request is a hint for the initial placement of the + surface: the compositor decides the final position and + may adjust it to keep the surface accessible. Clients + must not assume the requested position is honored + exactly. + + + + + + + + + Suggest placing the surface relative to the current cursor + position: horizontally offset by x_offset from the cursor + center and vertically offset by y_offset from the bottom + of the cursor. + + This request is a hint for the initial placement of the + surface: the compositor decides the final position and + may adjust it to keep the surface accessible. Clients + must not assume the requested position is honored + exactly. + + Sending this request switches the placement mode to + cursor-relative; see the interface description for the + interaction with set_position_hint. + + + + + + + + Set the shell views that should not list this surface. The + flags argument is a bitfield of skip_flag values; setting + a flag asks the shell view not to include the surface, + clearing it restores default listing. This request + replaces any previously set flags. + + + + + + + Set whether this surface can receive keyboard focus. When + set to 0, the surface will not receive keyboard focus even + when clicked or activated. When set to 1 (the default), the + surface receives keyboard focus normally. + + + + + diff --git a/dde/treeland-region-watch-unstable-v1.xml b/dde/treeland-region-watch-unstable-v1.xml new file mode 100644 index 0000000..c4b1a41 --- /dev/null +++ b/dde/treeland-region-watch-unstable-v1.xml @@ -0,0 +1,188 @@ + + + + + + Warning! This protocol is EXPERIMENTAL and under active development. + It may change at any time, including in backward-incompatible ways, + without incrementing the interface major version and without prior + notice. No compatibility guarantees of any kind are provided. Clients + and compositors must track the upstream definition in treeland-protocols + and must not rely on the current interface names, requests, events, or + semantics remaining stable across releases. + + This protocol allows a privileged DDE client such as the dock to + monitor whether a region anchored to an edge of an output overlaps + with any xdg-shell toplevel window, for example to implement smart + panel hiding. + + The compositor must reject bind attempts from non-privileged + clients. + + The terms "must", "must not", "should", and "may" in this document + are to be interpreted as described in RFC 2119. + + + + + A global that creates treeland_region_watch_v1 + objects for privileged DDE clients. Each watcher monitors + one region; clients monitoring several regions create + several watchers. + + The compositor must reject bind attempts from non-privileged + clients. + + + + + Destroy the treeland_region_watch_manager_v1 + object. Watchers created through this manager are not + affected. + + + + + + Create a new treeland_region_watch_v1 object + that monitors one region. + + + + + + + + A watcher object monitors whether a rectangular region + anchored to an edge of an output overlaps with any xdg-shell + toplevel window. + + The client registers the monitored region with the + set_region request and the compositor reports transitions + between the overlapped and clear states with the enter and + leave events. The recorded region only changes when + set_region is called; the client must call set_region again + whenever the monitored panel moves or resizes. + + After each set_region request the compositor must evaluate + the region against the current window layout and send the + matching enter or leave event; afterwards it should send + these events only when the overlap state changes. + + The watcher is associated with the wl_output passed to the + last set_region request. When that output is destroyed the + compositor sends the output_removed event; the watcher then + becomes inert: it has no monitored region and sends no + further enter or leave events. The watcher object itself is + not destroyed by output removal; the client may call + set_region again with another wl_output to resume + monitoring, or call destroy to release it. The compositor + must not send enter, leave, or output_removed after + output_removed until the next successful set_region. + + The client may release the wl_output proxy passed to + set_region at any time after the request returns; the + compositor holds its own reference and the watcher remains + associated with that output until either the output is + destroyed (triggering output_removed) or a subsequent + set_region rebinds to a different output. + + + + + The registered region is a strip along the anchored edge + of the output: for top and bottom the strip spans the + full output width and is height units thick; for left and + right it spans the full output height and is width units + thick. + + The dimension along the anchored edge is ignored: for + top and bottom the compositor uses the full output width + regardless of the width argument, and for left and right + it uses the full output height regardless of the height + argument. Only the thickness dimension matters — height + for top/bottom, width for left/right — and it must be + positive; the compositor raises invalid_size otherwise. + + + + + + + + + + Errors raised by the treeland_region_watch_v1 + interface. + + + + + + + + Destroy the treeland_region_watch_v1 object. + The compositor stops monitoring the region registered + with this watcher. + + + + + + Set the monitored region on the given output, or + re-register it when the monitored panel moves or + resizes. The region geometry is described by the anchor + enum; the compositor raises invalid_anchor for an + unknown anchor value and invalid_size when width or + height is not positive. + + The output becomes the output associated with the + watcher, replacing any previous one; it may be a + different output from a previous call (rebinding), for + example after the previous output was removed. + + After this request the compositor must evaluate the + current overlap state and send the matching enter or + leave event. + + + + + + + + + + Sent when the registered region begins to overlap any + xdg-shell toplevel window, and after a set_region + request while the region is currently overlapped. + + + + + + Sent when the registered region stops overlapping all + xdg-shell toplevel windows, and after a set_region + request while the region is currently clear. + + + + + + Sent when the wl_output passed to the last set_region + request has been destroyed by the compositor. The + watcher then becomes inert: it has no monitored region + and sends no further enter or leave events. + + The watcher object itself is not destroyed; the client + may call set_region again with another wl_output to + resume monitoring, or call destroy to release it. The + compositor must not send this event more than once + without an intervening successful set_region. + + + + diff --git a/public/treeland-dde-shell-v1.xml b/deprecated/treeland-dde-shell-v1.xml similarity index 85% rename from public/treeland-dde-shell-v1.xml rename to deprecated/treeland-dde-shell-v1.xml index 6b2fd9e..8e9cbc4 100644 --- a/public/treeland-dde-shell-v1.xml +++ b/deprecated/treeland-dde-shell-v1.xml @@ -20,7 +20,15 @@ This interface allows DDE to configure some treeland functions. - Create a treeland_window_overlap_checker object. + + Deprecated: this request is non-functional. The created + object never emits events, and its requests have no + effect apart from destroy. + + Superseded by the treeland_region_watch_manager_v1 + global of the treeland-region-watch-unstable-v1 + protocol. + @@ -38,7 +46,13 @@ - Create a new dde active for a given seat. + Deprecated: this request is non-functional. The created + object never emits events, and its requests have no + effect apart from destroy. + + Superseded by the treeland_active_notify_manager_v1 + global of the treeland-active-notify-unstable-v1 + protocol. @@ -46,7 +60,11 @@ - Create a new multitaskview context for toggle. + Deprecated: superseded by the open_multitask_view, + close_multitask_view, and toggle_multitask_view actions of + the treeland_compositor_action_v1 global of the + treeland-compositor-action-unstable-v1 protocol. This + request must not be used in new code. @@ -60,7 +78,11 @@ - Create a new lockscreen context for toggle. + Deprecated: superseded by the lockscreen, shutdown_menu, + and show_user_switch actions of the + treeland_compositor_action_v1 global of the + treeland-compositor-action-unstable-v1 protocol. This + request must not be used in new code. @@ -88,7 +110,13 @@ - A treeland_window_overlap_checker object monitors whether the detected window region overlaps with xdg-shell toplevels. + Deprecated: this interface is non-functional. Apart from + the destroy request, all requests have no effect and no + events are ever emitted. New code must not use it. + + Superseded by the treeland_region_watch_manager_v1 + global of the treeland-region-watch-unstable-v1 + protocol. @@ -242,7 +270,12 @@ - An interface used to monitor special events. + Deprecated: this interface is non-functional. Apart from + the destroy request, all requests have no effect and no + events are ever emitted. New code must not use it. + + Superseded by the treeland_active_notify_manager_v1 global of + the treeland-active-notify-unstable-v1 protocol. @@ -279,6 +312,12 @@ An interface used to control multitaskview. + + Deprecated: superseded by the open_multitask_view, + close_multitask_view, and toggle_multitask_view actions of the + treeland_compositor_action_v1 global of the + treeland-compositor-action-unstable-v1 protocol. The interface + must not be used in new code. @@ -323,6 +362,11 @@ An interface used to operate lockscreen. + + Deprecated: superseded by the lockscreen, shutdown_menu, and + show_user_switch actions of the treeland_compositor_action_v1 + global of the treeland-compositor-action-unstable-v1 protocol. + The interface must not be used in new code. diff --git a/dde/treeland-show-desktop-unstable-v1.xml b/deprecated/treeland-show-desktop-unstable-v1.xml similarity index 100% rename from dde/treeland-show-desktop-unstable-v1.xml rename to deprecated/treeland-show-desktop-unstable-v1.xml diff --git a/public/README.md b/public/README.md index 1b5c164..aa4f850 100644 --- a/public/README.md +++ b/public/README.md @@ -5,7 +5,6 @@ For general application developers. Installed via `TREELAND_PROTOCOL_XML_FILES`. | File | Protocol | Interfaces | Purpose | |------|----------|-----------|---------| | `treeland-window-transition-unstable-v1.xml` | `treeland_window_transition_unstable_v1` | `treeland_window_transition_manager_v1`, `treeland_window_transition_rect_v1` | Window open/close transition relative to a rectangle, with optional source image | -| `treeland-dde-shell-v1.xml` | `treeland_dde_shell_v1` | `treeland_dde_shell_manager_v1`, `treeland_window_overlap_checker`, `treeland_dde_shell_surface_v1`, `treeland_dde_active_v1`, `treeland_multitaskview_v1`, `treeland_window_picker_v1`, `treeland_lockscreen_v1` | DDE shell integration: surface roles, overlap detection, active events, multitask view, window picker, lockscreen; the set_xwindow_position_relative request is deprecated and non-functional, superseded by `dde/treeland-xwindow-control-unstable-v1.xml` | | `treeland-appearance-unstable-v1.xml` | `treeland_appearance_unstable_v1` | `treeland_appearance_v1` | Query and observe user-level appearance settings: cursor theme/size, fonts, icon theme, accent color, window opacity, color scheme, titlebar height, corner radius | | `treeland-decoration-unstable-v1.xml` | `treeland_decoration_unstable_v1` | `treeland_decoration_manager_v1`, `treeland_decoration_context_v1` | Per-window server-side decoration (SSD) customization by applications: corner radius, shadow, border, titlebar visibility; requires xdg-decoration SSD | ## Breaking changes @@ -20,12 +19,28 @@ The `accent_color` event dropped its `a` (alpha) argument. The accent color is n #### `treeland-dde-shell-v1.xml` -The manager request `set_xwindow_position_relative` is now documented as deprecated and non-functional: it has no effect and no callback is ever created. The file itself stays in place for now; the whole `treeland-dde-shell` protocol is slated for removal in a future release. +The whole file is deprecated and moved to `deprecated/`. It is superseded by `treeland-dde-shell-unstable-v2.xml` (in `dde/`, the surface role functionality) together with the dedicated protocols listed above; the `treeland_window_picker_v1` interface is removed without a replacement. -It is superseded by a new independent protocol in `dde/`: +Wire-level differences between v1 and v2: + +1. Only the surface role is carried over. The manager exposes just `get_shell_surface` with a new `already_shell_surface` error; the factory requests for the superseded interfaces (`get_window_overlap_checker`, `get_treeland_dde_active`, `get_treeland_multitaskview`, `get_treeland_window_picker`, `get_treeland_lockscreen`) and the `set_xwindow_position_relative` request are not carried over. +2. The `role` enum is renumbered to 0-based: `overlay` changes from 1 to 0, and its semantics are stated precisely (above normal toplevels, below layer-shell surfaces). +3. The three skip requests (`set_skip_switcher`, `set_skip_dock_preview`, `set_skip_muti_task_view`, the latter also fixing the "muti" typo) are merged into a single `set_skip_flags` request taking a `skip_flag` bitfield (`switcher` 0x1, `dock_preview` 0x2, `multitask_view` 0x4). +4. The placement requests are reworked into two hints whose final position the compositor decides: `set_position_hint` suggests fixed coordinates relative to an output (null for the primary output), and `set_cursor_placement_hint` suggests a position relative to the cursor with an `int` y_offset (v1 used `uint`). The mutual exclusivity of the two requests (most recent wins) is now specified. +5. The v2 globals must reject binds from non-privileged clients. + +Consumers should rebind as `treeland_dde_shell_manager_v2`, recreate shell surfaces through `get_shell_surface`, switch to `set_skip_flags`, and treat `overlay` as 0; window-picker consumers have no replacement and must drop the functionality. The old XML is kept installed during migration but must not be used in new code. + +The manager request `set_xwindow_position_relative` and the `treeland_dde_active_v1` and `treeland_window_overlap_checker` interfaces (with their creating manager requests `get_treeland_dde_active` and `get_window_overlap_checker`) are deprecated and non-functional: they have no effect and no events are ever emitted (their `destroy` requests remain functional so clients can release the objects). + +They are superseded by three new independent protocols in `dde/`: - `treeland-xwindow-control-unstable-v1.xml` (`treeland_xwindow_control_v1`): XWayland window placement — the `set_xwindow_position_relative` request with `wl_callback` result feedback, unchanged wire semantics. +- `treeland-active-notify-unstable-v1.xml` (`treeland_active_notify_manager_v1`, `treeland_active_notify_v1`): seat activity notification — the `get_active_notify` request creates a per-seat notifier whose `activity_changed` event carries a `reason` enum and an `activity_state` enum (renamed from `active_in`/`active_out`, with mouse tracking the left button state and wheel as per-event pulses), plus a `drag_changed` event carrying a `drag_state` enum (started/dropped/cancelled). +- `treeland-region-watch-unstable-v1.xml` (`treeland_region_watch_manager_v1`, `treeland_region_watch_v1`): edge-anchored region overlap watch — edge-anchored region registration (`set_region`) with `enter`/`leave` state events and explicit error reporting; the watcher interface is renamed from `treeland_window_overlap_checker`, gaining the `_v1` suffix, and the region-setting request is renamed from `update` to `set_region`. + +The `treeland_multitaskview_v1` and `treeland_lockscreen_v1` interfaces (with their creating requests `get_treeland_multitaskview` and `get_treeland_lockscreen`) are deprecated, superseded by the corresponding actions (`toggle_multitask_view`/`open_multitask_view`/`close_multitask_view` and `lockscreen`/`shutdown_menu`/`show_user_switch`) of the privileged `dde/treeland-compositor-action-unstable-v1.xml` protocol. -Consumers should bind the new global instead of using the manager request; the deprecated request must not be used in new code. +Consumers should bind the new globals instead of using the deprecated manager requests and interfaces; the deprecated requests and interfaces must not be used in new code. ### 0.6.0 diff --git a/public/README.zh_CN.md b/public/README.zh_CN.md index 3268241..1640345 100644 --- a/public/README.zh_CN.md +++ b/public/README.zh_CN.md @@ -5,7 +5,6 @@ | 文件 | 协议 | 接口 | 用途 | |------|----------|-----------|---------| | `treeland-window-transition-unstable-v1.xml` | `treeland_window_transition_unstable_v1` | `treeland_window_transition_manager_v1`, `treeland_window_transition_rect_v1` | 相对某个矩形的窗口打开/关闭转场,可附带源图像 | -| `treeland-dde-shell-v1.xml` | `treeland_dde_shell_v1` | `treeland_dde_shell_manager_v1`, `treeland_window_overlap_checker`, `treeland_dde_shell_surface_v1`, `treeland_dde_active_v1`, `treeland_multitaskview_v1`, `treeland_window_picker_v1`, `treeland_lockscreen_v1` | DDE Shell 集成:surface 角色、重叠检测、活跃事件、多任务视图、窗口选取、锁屏;`set_xwindow_position_relative` 请求已废弃且不可用,由 `dde/treeland-xwindow-control-unstable-v1.xml` 取代 | | `treeland-appearance-unstable-v1.xml` | `treeland_appearance_unstable_v1` | `treeland_appearance_v1` | 查询与订阅用户级外观设置:光标主题/大小、字体、图标主题、强调色、窗口不透明度、配色方案、标题栏高度、圆角 | | `treeland-decoration-unstable-v1.xml` | `treeland_decoration_unstable_v1` | `treeland_decoration_manager_v1`, `treeland_decoration_context_v1` | 逐窗口服务端装饰(SSD)定制:圆角、阴影、边框、标题栏可见性;需先经 xdg-decoration 申请 SSD | @@ -21,12 +20,28 @@ #### `treeland-dde-shell-v1.xml` -管理器的 `set_xwindow_position_relative` 请求现标注为已废弃且不可用:请求无任何效果,也不会创建任何回调。文件暂保留原位;整个 `treeland-dde-shell` 协议计划在未来版本彻底移除。 +整个文件已废弃并移至 `deprecated/`。由 `treeland-dde-shell-unstable-v2.xml`(在 `dde/`,surface 角色功能)连同上述专用协议取代;`treeland_window_picker_v1` 接口无替代直接移除。 -它由 `dde/` 下一个新的独立协议取代: +v1 与 v2 的线缆级差异: + +1. 仅 surface 角色得以保留。管理器只暴露 `get_shell_surface` 并新增 `already_shell_surface` 错误;被取代接口的工厂请求(`get_window_overlap_checker`、`get_treeland_dde_active`、`get_treeland_multitaskview`、`get_treeland_window_picker`、`get_treeland_lockscreen`)及 `set_xwindow_position_relative` 请求不再保留。 +2. `role` 枚举改为 0 基编号:`overlay` 由 1 改为 0,且语义明确化(高于普通顶层窗口、低于 layer-shell surface)。 +3. 三个 skip 请求(`set_skip_switcher`、`set_skip_dock_preview`、`set_skip_muti_task_view`,最后一个同时修正 "muti" 拼写错误)合并为单一的 `set_skip_flags` 请求,携带 `skip_flag` 位域(`switcher` 0x1、`dock_preview` 0x2、`multitask_view` 0x4)。 +4. 放置请求重构为两个提示(最终位置由合成器决定):`set_position_hint` 建议相对输出(null 为主屏)的固定坐标,`set_cursor_placement_hint` 建议相对光标的位置(y_offset 为 `int`,v1 为 `uint`)。两请求的互斥关系(最近发送者生效)现已明确。 +5. v2 全局对象必须拒绝非特权客户端绑定。 + +消费者应改绑为 `treeland_dde_shell_manager_v2`,通过 `get_shell_surface` 重建 shell surface,改用 `set_skip_flags`,并将 `overlay` 视为 0;窗口选取消费者无替代,须移除该功能。旧 XML 在迁移期间仍会安装,但不得用于新代码。 + +管理器的 `set_xwindow_position_relative` 请求及 `treeland_dde_active_v1`、`treeland_window_overlap_checker` 接口(含其创建请求 `get_treeland_dde_active`、`get_window_overlap_checker`)已废弃且不可用:请求无任何效果,也不会发出任何事件(`destroy` 请求仍然可用,客户端可借此释放对象)。 + +二者由 `dde/` 下三个新的独立协议取代: - `treeland-xwindow-control-unstable-v1.xml`(`treeland_xwindow_control_v1`):XWayland 窗口定位——`set_xwindow_position_relative` 请求,结果经 `wl_callback` 回报,线缆语义不变。 +- `treeland-active-notify-unstable-v1.xml`(`treeland_active_notify_manager_v1`、`treeland_active_notify_v1`):Seat 活跃通知——`get_active_notify` 请求创建按 Seat 限定的通知对象,其 `activity_changed` 事件携带 `reason` 与 `activity_state` 枚举(由 `active_in`/`active_out` 更名;鼠标跟踪左键状态,滚轮为逐事件脉冲),并新增携带 `drag_state` 枚举(started/dropped/cancelled)的 `drag_changed` 事件。 +- `treeland-region-watch-unstable-v1.xml`(`treeland_region_watch_manager_v1`、`treeland_region_watch_v1`):沿输出边缘的区域重叠监控——沿输出边缘的区域注册(`set_region`)与 `enter`/`leave` 状态事件及显式错误回报;watcher 接口由 `treeland_window_overlap_checker` 更名并补上 `_v1` 后缀,设区域请求由 `update` 更名为 `set_region`。 + +`treeland_multitaskview_v1` 和 `treeland_lockscreen_v1` 接口(含其创建请求 `get_treeland_multitaskview`、`get_treeland_lockscreen`)已废弃,由新的特权协议 `dde/treeland-compositor-action-unstable-v1.xml` 的对应动作取代(`toggle_multitask_view`/`open_multitask_view`/`close_multitask_view` 与 `lockscreen`/`shutdown_menu`/`show_user_switch`)。 -消费者应改绑新的全局对象;已废弃请求不得用于新代码。 +消费者应改绑新的全局对象,不得在新代码中使用已废弃的请求与接口。 ### 0.6.0