pax_global_header00006660000000000000000000000064152725131400014512gustar00rootroot0000000000000052 comment=578263755cb80b56f2e13fde34da1c294418e608 linuxdeepin-treeland-protocols-bfdd6e0/000077500000000000000000000000001527251314000204305ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/000077500000000000000000000000001527251314000217675ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/000077500000000000000000000000001527251314000232705ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/000077500000000000000000000000001527251314000303625ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/SKILL.md000066400000000000000000000103561527251314000315670ustar00rootroot00000000000000--- name: treeland-wayland-protocol description: Write or update Treeland Wayland protocol XML specifications. Use when the task is to design, draft, review, or version protocol XML files, following standard Wayland protocol conventions while correcting non-standard patterns in existing Treeland protocols. --- Use this skill when working on Treeland Wayland protocol definitions. ## Scope This skill is for: - creating a new protocol XML - extending an existing protocol in a backward-compatible way - preparing a new major version for a backward-incompatible change - reviewing protocol XML for naming, versioning, lifecycle, and wording issues This skill is not for compositor/server implementation details. It only covers the protocol spec layer. ## Prerequisites Before drafting or reviewing, read: 1. **[AGENTS.md](../../../AGENTS.md)** — repository structure, file placement, naming conventions, protocol classification, and CMakeLists.txt integration. 2. **[references/treeland-wayland-protocol-rules.md](references/treeland-wayland-protocol-rules.md)** — XML structure, description quality, arg conventions, enum references, versioning rules, and the review checklist. ## Workflow 1. Read AGENTS.md for where to place the file and how to name it. 2. Read the rules reference for XML authoring and validation. 3. Open 2-3 nearby XML files that match the intended style or domain. 4. Use [assets/treeland-protocol-template.xml](assets/treeland-protocol-template.xml) as a starting point when useful. 5. Draft or edit the XML. 6. Re-read the final XML against the rules reference checklist. ## Authoring guidance - Keep each protocol narrow in scope. If a request starts needing unrelated policy or multiple roles, split the protocol. - Prefer clear object lifetimes over implicit state machines. - Use `new_id` only when the compositor is creating a protocol object for the client. - Within one interface, prefer the order: `description -> enum -> destroy request -> other requests -> events`. This is a style preference only; when it conflicts with since-version monotonicity (see rules reference section 3), interleave requests and events as needed, as upstream `wayland-protocols` does. - Interface descriptions should state the interface purpose and briefly describe the expected workflow when it is not obvious. - Manager-style interfaces should provide an explicit `destroy` request. - If an interface has a destroy-style request, place it as the first request in that interface. - Use `type="destructor"` on explicit destroy requests. - Keep all requests before all events inside one interface, unless a v1 event would land after a `since="2"` request and drop the since counter — in that case move the v1 event earlier rather than adding `since="1"` (see rules reference section 3). - Request descriptions should document any required call scenarios, preconditions, and ordering constraints. - Put protocol errors in `enum name="error"` when clients can violate required rules. - Avoid XML comments for protocol semantics. Put normative and behavioral information in `` blocks. If a short comment is needed for maintenance, keep it non-semantic. - Prefer precise `summary` text and concrete descriptions over placeholders. - Event descriptions should explain event meaning and the compositor-side trigger timing for emission. - When writing normative behavior, use RFC 2119 keywords in lowercase and include the RFC 2119 paragraph in the top-level protocol description if the document relies on those terms normatively. ## Validation Before finishing: - compare the XML against at least one standard Wayland reference spec for structure quality - compare against at least one Treeland XML for local naming and packaging conventions — see AGENTS.md, but do not preserve non-standard patterns just because they already exist - ensure enum references follow the short-format (same-interface) vs fully-qualified (cross-interface) convention — see rules reference section 7 - ensure nullable object args explicitly use `allow-null="true"` - ensure destroy ordering constraints are documented wherever misuse would be a protocol error - run `wayland-scanner private-code /dev/null` and fix any warnings, in particular "since version not increasing" (see rules reference section 3) linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/assets/000077500000000000000000000000001527251314000316645ustar00rootroot00000000000000treeland-protocol-template.xml000066400000000000000000000064721527251314000376060ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/assets Replace this description with the protocol's purpose, object model, and lifecycle guarantees. If this specification uses RFC 2119 keywords normatively, include the standard interpretation paragraph here. 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. Describe what this global creates, any singleton or binding rules, and a brief high-level workflow for clients. Describe whether child objects must be destroyed first. Describe ownership, required call scenarios, preconditions, and lifetime expectations. Describe the object's state, lifetime, and relation to Wayland core objects. Describe any ordering constraints with related objects. Describe whether this is immediate or latched until commit. Describe event meaning, compositor-side trigger timing, and what the client should do next. linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/references/000077500000000000000000000000001527251314000325035ustar00rootroot00000000000000treeland-wayland-protocol-rules.md000066400000000000000000000225341527251314000411760ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.agents/skills/treeland-wayland-protocol/references# Treeland Wayland Protocol Rules This reference condenses standard Wayland protocol conventions together with the packaging and naming conventions used in this repository. ## 1. Source of truth When drafting a protocol: - use standard Wayland reference protocols as the style reference for XML structure and protocol evolution - use AGENTS.md for file placement, naming, and repo integration conventions Do not copy a reference protocol mechanically. Reuse its structure only when the lifecycle matches. ## 2. Versioning Backward-compatible extension: - keep the same file - keep the same interface major version suffix - raise interface `version` - add `since="N"` on each new request, event, enum entry, or arg introduced in version `N` - never write `since="1"` - append newly added requests or events after the existing ones instead of reordering old members - if an upgraded interface is exposed by another interface via `new_id`, a request return object, or an event object, review that exposing interface and raise its `version` too when clients need the higher version to observe or use the new contract Backward-incompatible extension: - create a new file with the next major version - keep the old file in the tree for compatibility - rename the protocol and interfaces to the new major suffix - reset interface versions to `1` - remove old `since` attributes unless needed again within the new major line See AGENTS.md for file naming and placement conventions. ## 3. XML structure Recommended order: 1. XML declaration 2. `` 3. `` 4. optional top-level `` 5. one or more `` Recommended interface order: 1. interface description 2. enums, if any 3. destroy request, if the interface has one 4. constructor-style requests 5. regular requests 6. events Within one interface, keep enums before requests, and keep requests before events. Existing Treeland files vary, but new or updated protocol work should follow this ordering. ### since-version monotonicity (wayland-scanner constraint) `wayland-scanner` requires the effective `since` of interface members to be non-decreasing in **document order**, counting both requests and events together. A member without an explicit `since` defaults to `1` (it does *not* inherit the previous member's value). If a v1 member without `since` appears after a `since="2"` member, the scanner emits: ``` warning: since version not increasing ``` This is a tool-enforced hard constraint, not a style preference. Upstream `wayland-protocols` does not obey "all requests before all events"; it interleaves them (e.g. `linux-dmabuf-v1` puts the `format` event between requests) specifically to keep the since sequence monotonic. When the two rules conflict, **since-version monotonicity wins over "requests before events"**. Concretely, if a v1 event would land after a `since="2"` request, either: - move the v1 event before the `since="2"` request (preferred — upstream does this), or - as a last resort, add an explicit `since="1"` to the v1 member. This contradicts the "never write `since="1"`" rule below, so prefer the first option whenever possible. Never solve this by bumping a v1 member to `since="2"` — that is semantically wrong. ## 4. Description quality Descriptions should answer: - who owns the object - who creates it - when it becomes invalid - which sequencing constraints are illegal - whether the compositor or client defines a behavior Good protocol text is concrete: - say what triggers an event - say whether state is latched, pending, or immediately applied - say whether an object is singleton, per-output, per-surface, or per-session Description minimums by member type: - interface description should explain the interface purpose and, when useful, the high-level workflow - request description should explain required call scenarios and ordering/precondition constraints - event description should explain event meaning and compositor-side trigger timing Avoid: - vague summaries like "do something" - implementation detail that does not affect the wire contract - undocumented one-shot objects or hidden lifecycle rules - semantic requirements hidden in XML comments ## 5. Requests, events, and errors Use requests for client-to-compositor actions. Use events for compositor-to-client notifications. Manager-style interfaces should generally expose `destroy`. Create a dedicated error enum when the client can violate protocol rules such as: - using an object after required destruction ordering - passing an invalid role target - calling a one-shot request multiple times - providing out-of-range values Prefer specific error entries over a generic `failed`. ## 6. Object model heuristics Prefer manager/object splits: - manager global creates session/object instances - per-object interfaces own ongoing state and events Prefer separate objects when: - lifetime differs from the manager - events only make sense after setup - the API would otherwise need ad-hoc request ordering rules Avoid turning one interface into a grab-bag of unrelated features. ## 7. Arg conventions Use: - `new_id` for created protocol objects - `object` for existing protocol objects such as `wl_output`, `wl_surface`, `wl_buffer`, `wl_callback`, `wl_compositor`, `wl_seat`, `wl_pointer`, `wl_touch`, and `wl_keyboard` - `allow-null="true"` only when null is explicitly valid ### Enum reference format on `` elements When an `` references an enum, use the format that matches where the enum is defined: - **Same-interface enum**: short format — `enum="button_state"` - **Cross-interface enum**: fully-qualified format with the interface prefix — `enum="wl_shm.format"` or `enum="wp_color_manager_v1.primaries"` This matches how `wayland-scanner`'s `find_enumeration()` resolves references: short format searches only within the current interface, fully-qualified format searches across all interfaces in the protocol. Upstream wayland-protocols consistently follows this rule (all 91 enum refs: 75 short for same-interface, 16 fully-qualified for cross-interface — zero exceptions). - `bitfield="true"` on enum definitions used as flag sets Add `summary` for args when it materially improves readability. ## 8. XML comments Reference protocols do use XML comments in a few places, most commonly to mark versioned additions. However, comments are not a good place for protocol semantics. Rule for Treeland skills: - do not place normative behavior, sequencing rules, or lifecycle requirements in XML comments - prefer `` blocks for anything a protocol reader must understand - use comments only sparingly for short maintenance markers ## 9. RFC 2119 usage If the protocol text relies on words like `must`, `should`, or `may` normatively, add a top-level protocol description that includes the RFC 2119 interpretation paragraph used by standard Wayland protocol specifications. Do not add that paragraph if the protocol text is otherwise non-normative. ## 10. Review checklist Before considering the XML finished, check: - file name, protocol name, and interface naming follow the conventions in AGENTS.md - interface `version` matches the highest supported additive version - interfaces that create or expose upgraded interfaces were reviewed for required version bumps - new additions in an existing interface have `since` - no member is annotated with `since="1"` - newly added requests and events were appended without reordering older members - destructor requests are marked `type="destructor"` - enums, if present, appear before requests - if an interface has a destroy request, it is the first request - requests appear before events (unless since-version monotonicity requires interleaving — see section 3) - since sequence of requests and events is non-decreasing in document order; `wayland-scanner` emits no "since version not increasing" warning - object lifetime constraints are documented - event ordering constraints are documented where required - all enum references resolve correctly (short format for same-interface, fully-qualified `interface.enum` for cross-interface) - nullable args are intentional - the file is registered in the correct `CMakeLists.txt` variable — see AGENTS.md - the protocol-level `` contains the experimental disclaimer (see section 11) ## 11. Experimental status disclaimer Every Treeland protocol XML must include the following experimental disclaimer in its **protocol-level** `` (the `` that is a direct child of ``, not inside an ``): ``` 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. ``` Rules: - the disclaimer must appear exactly once, in the protocol-level `` only - do not duplicate the disclaimer inside `` descriptions - do not use the old "testing phase" wording that promises version-bump discipline — the current disclaimer explicitly states that no compatibility guarantees are provided - when creating a new protocol file from the template, the disclaimer is already present; keep it linuxdeepin-treeland-protocols-bfdd6e0/.github/000077500000000000000000000000001527251314000217705ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/000077500000000000000000000000001527251314000240255ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-auto-tag.yml000066400000000000000000000005171527251314000272050ustar00rootroot00000000000000name: auto tag on: pull_request_target: types: [opened, synchronize, closed] paths: - "debian/changelog" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: auto_tag: uses: linuxdeepin/.github/.github/workflows/auto-tag.yml@master secrets: inherit linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-chatOps.yml000066400000000000000000000002421527251314000270600ustar00rootroot00000000000000name: chatOps on: issue_comment: types: [created] jobs: chatopt: uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master secrets: inherit linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-clacheck.yml000066400000000000000000000005251527251314000272200ustar00rootroot00000000000000name: Call CLA check on: issue_comment: types: [created] pull_request_target: types: [opened, closed, synchronize] concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: clacheck: uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master secrets: inherit linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-commitlint.yml000066400000000000000000000003641527251314000276430ustar00rootroot00000000000000name: Call commitlint on: pull_request_target: concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: check_job: uses: linuxdeepin/.github/.github/workflows/commitlint.yml@master linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-license-check.yml000066400000000000000000000005521527251314000301600ustar00rootroot00000000000000name: Call License and README Check on: pull_request_target: types: [opened, synchronize, reopened] permissions: pull-requests: write contents: read concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: license-check: uses: linuxdeepin/.github/.github/workflows/license-check.yml@master linuxdeepin-treeland-protocols-bfdd6e0/.github/workflows/call-update-changelog.yml000066400000000000000000000027701527251314000306760ustar00rootroot00000000000000name: Call update changelog on: workflow_dispatch: inputs: version: description: "Target version; leave empty to auto bump" required: false type: string name: description: "Maintainer name used in debian/changelog" required: true type: string email: description: "Maintainer email used in debian/changelog" required: true type: string base_branch: description: "Base branch to read and target" required: false default: master type: string distribution: description: "Changelog distribution" required: false default: unstable type: string create_pr: description: "Create a pull request after generating changelog" required: false default: true type: boolean jobs: update_changelog: uses: linuxdeepin/.github/.github/workflows/update-changelog.yml@master with: version: ${{ inputs.version }} name: ${{ inputs.name }} email: ${{ inputs.email }} base_branch: ${{ inputs.base_branch }} distribution: ${{ inputs.distribution }} create_pr: ${{ inputs.create_pr }} secrets: inherit show_result: runs-on: ubuntu-latest needs: update_changelog steps: - name: Show update changelog result run: | echo "Version: ${{ needs.update_changelog.outputs.version }}" echo "Pull Request URL: ${{ needs.update_changelog.outputs.pr_url }}" linuxdeepin-treeland-protocols-bfdd6e0/.gitignore000066400000000000000000000002331527251314000224160ustar00rootroot00000000000000# build build*/ Makefile CMakeLists.txt.user # nix .direnv/ result result-* # clangd .cache/ compile_commands.json # qtcreator *.autosave # ai .codex linuxdeepin-treeland-protocols-bfdd6e0/.obs/000077500000000000000000000000001527251314000212715ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/.obs/workflows.yml000066400000000000000000000011521527251314000240500ustar00rootroot00000000000000test_build: steps: - link_package: source_project: vioken source_package: %{SCM_REPOSITORY_NAME} target_project: vioken:CI - configure_repositories: project: vioken:CI repositories: - name: deepin_ci paths: - target_project: vioken target_repository: deepin_develop architectures: - x86_64 - aarch64 filters: event: pull_request commit_build: steps: - trigger_services: project: vioken package: %{SCM_REPOSITORY_NAME} filters: event: push linuxdeepin-treeland-protocols-bfdd6e0/AGENTS.md000066400000000000000000000115061527251314000217360ustar00rootroot00000000000000# Treeland Protocols — Agent Reference ## Repository structure ``` ├── CMakeLists.txt # build & install definition ├── AGENTS.md # this file ├── public/ # protocols for general application developers ├── dde/ # DDE component protocols ├── internal/ # Treeland-internal, not for general app developers ├── wine/ # Wine compatibility layer protocols └── deprecated/ # replaced by newer versions, installed by default ``` ## Protocol classification | Directory | Audience | CMakeLists variable | |--------------|---------------------------------------|----------------------------------------| | `public/` | General application developers | `TREELAND_PROTOCOL_XML_FILES` | | `dde/` | DDE desktop components | `TREELAND_PROTOCOL_DDE_XML_FILES` | | `internal/` | Treeland compositor internals only | `TREELAND_PROTOCOL_INTERNAL_XML_FILES`| | `wine/` | Wine compatibility layer | `TREELAND_PROTOCOL_WINE_XML_FILES` | | `deprecated/`| Superseded, installed by default | `TREELAND_PROTOCOL_DEPRECATED_XML_FILES`| New protocol files must be added to the corresponding variable in `CMakeLists.txt`. ## Naming conventions ### File naming ``` /treeland--unstable-v1.xml ``` - `unstable-vN` is the default suffix for new protocols. - Some protocols that were never published as unstable omit the suffix (e.g. `treeland-dde-shell-v1.xml`). ### Protocol and interface naming ``` file: treeland--unstable-v1.xml protocol name: treeland__unstable_v1 (contains _unstable_ for unstable protocols) interface names: treeland__v1 (no _unstable in interface names) ``` **Key convention**: This follows the upstream `wayland-protocols` naming pattern: - **Unstable protocols**: file name and `` both contain `unstable`; interface names do **not**. - **Stable protocols** (promoted from unstable): file name and `` drop `unstable`; interface names stay the same. Examples from upstream `wayland-protocols`: - `xdg-shell-unstable-v6.xml` → `` → interfaces `xdg_surface_v6`, `xdg_toplevel_v6` - `linux-dmabuf-v1.xml` (stable) → `` → interfaces `wp_linux_dmabuf_v1` ### Version bumping - Backward-compatible: keep the same file, raise interface `version`, add `since="N"` on new members. - Backward-incompatible: create a new file with next major version suffix, keep the old file. ### SPDX copyright Use the repo's standard block. Match the year range of neighboring files in the same protocol family: ```xml ``` ## Per-directory protocol listings Each subdirectory (except `deprecated/`) contains a pair of README files: `README.md` (English) and `README.zh_CN.md` (Chinese), each with a table of protocols and their interfaces. Keep both files in sync. ## Deprecating a protocol When a protocol is superseded or no longer needed, follow these steps: 1. **Move the file** ``` git mv /.xml deprecated/.xml ``` 2. **Update `CMakeLists.txt`** - Remove the entry from its current variable (e.g. `TREELAND_PROTOCOL_XML_FILES`). - Add it to `TREELAND_PROTOCOL_DEPRECATED_XML_FILES`. 3. **Update the source directory `README.md`** - Remove the protocol row from the protocol table. - Add a **Breaking changes** entry using the paragraph format: ```markdown ### Breaking changes Breaking changes are grouped by version. Under each version heading, one subsection per affected protocol explains what changed, what replaces it, and how existing consumers should adapt. #### ##### `.xml` ``` - The breaking-change entry must be added to **both** the English `README.md` and the Chinese `README.zh_CN.md`, with identical structure and content. - Each directory (except `deprecated/`) keeps two README files: `README.md` (English) and `README.zh_CN.md` (Chinese). Keep them in sync when editing. 4. **Commit** with a message in the form: ``` deprecate: move to deprecated/ ``` The `deprecated/` directory has no README protocol table. Deprecated files are still installed by default (`TREELAND_PROTOCOLS_INSTALL_DEPRECATED` is `ON`). linuxdeepin-treeland-protocols-bfdd6e0/CMakeLists.txt000066400000000000000000000103311527251314000231660ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.25.0) project(TreelandProtocols VERSION 0.9.0 LANGUAGES NONE) # https://gitlab.kitware.com/cmake/cmake/-/work_items/23461 # Suppress GNUInstallDirs warning for LANGUAGES NONE projects if(NOT CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") endif() include(GNUInstallDirs) include(CMakePackageConfigHelpers) # Public protocol XML files (for general application developers) set(TREELAND_PROTOCOL_XML_FILES public/treeland-snap-target-unstable-v1.xml public/treeland-window-transition-unstable-v1.xml public/treeland-appearance-unstable-v1.xml public/treeland-decoration-unstable-v1.xml public/treeland-output-uuid-unstable-v1.xml public/treeland-output-uuid-head-unstable-v1.xml ) # DDE component protocol XML files set(TREELAND_PROTOCOL_DDE_XML_FILES dde/treeland-dde-shell-unstable-v2.xml dde/treeland-foreign-toplevel-manager-unstable-v3.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-output-group-manager-unstable-v1.xml dde/treeland-wallpaper-manager-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 dde/treeland-activation-token-unstable-v1.xml ) # Internal protocol XML files (Treeland-specific, not for general app developers) set(TREELAND_PROTOCOL_INTERNAL_XML_FILES internal/treeland-app-id-resolver-unstable-v2.xml internal/treeland-prelaunch-splash-unstable-v2.xml internal/treeland-screensaver-unstable-v2.xml internal/treeland-wallpaper-shell-unstable-v1.xml ) # Wine-specific protocol XML files set(TREELAND_PROTOCOL_WINE_XML_FILES wine/treeland-remote-subsurface-unstable-v1.xml wine/treeland-wine-window-management-unstable-v1.xml wine/treeland-wine-window-state-unstable-v1.xml ) # Deprecated protocol XML files (replaced by newer versions) set(TREELAND_PROTOCOL_DEPRECATED_XML_FILES deprecated/treeland-app-id-resolver-v1.xml deprecated/treeland-capture-unstable-v1.xml deprecated/treeland-ddm-v1.xml deprecated/treeland-output-manager-v1.xml 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 deprecated/treeland-window-management-v1.xml deprecated/treeland-foreign-toplevel-manager-v1.xml deprecated/treeland-foreign-toplevel-manager-unstable-v2.xml deprecated/treeland-virtual-output-manager-v1.xml ) option(TREELAND_PROTOCOLS_INSTALL_DEPRECATED "Install deprecated protocol files" ON) # Install protocol XML files install(FILES ${TREELAND_PROTOCOL_XML_FILES} ${TREELAND_PROTOCOL_DDE_XML_FILES} ${TREELAND_PROTOCOL_INTERNAL_XML_FILES} ${TREELAND_PROTOCOL_WINE_XML_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/treeland-protocols ) if(TREELAND_PROTOCOLS_INSTALL_DEPRECATED) install(FILES ${TREELAND_PROTOCOL_DEPRECATED_XML_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/treeland-protocols ) endif() # Generate and install CMake package config files configure_package_config_file( cmake/TreelandProtocolsConfig.cmake.in TreelandProtocolsConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/TreelandProtocols ) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/TreelandProtocolsConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TreelandProtocolsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/TreelandProtocolsConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/TreelandProtocols ) # Generate and install pkg-config file configure_file(cmake/treeland-protocols.pc.in treeland-protocols.pc @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/treeland-protocols.pc" DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig ) linuxdeepin-treeland-protocols-bfdd6e0/LICENSES/000077500000000000000000000000001527251314000216355ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/LICENSES/CC-BY-4.0.txt000066400000000000000000000411771527251314000235040ustar00rootroot00000000000000Creative Commons Attribution 4.0 International Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 – Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 – Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: A. reproduce and Share the Licensed Material, in whole or in part; and B. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 5. Downstream recipients. A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 – License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: A. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 – Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 – Disclaimer of Warranties and Limitation of Liability. a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 – Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 – Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 – Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. linuxdeepin-treeland-protocols-bfdd6e0/LICENSES/CC0-1.0.txt000066400000000000000000000156101527251314000232420ustar00rootroot00000000000000Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. linuxdeepin-treeland-protocols-bfdd6e0/LICENSES/GPL-2.0-only.txt000066400000000000000000000416711527251314000243050ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice linuxdeepin-treeland-protocols-bfdd6e0/LICENSES/MIT.txt000066400000000000000000000020771527251314000230350ustar00rootroot00000000000000MIT License Copyright (c) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. linuxdeepin-treeland-protocols-bfdd6e0/README.md000066400000000000000000000021601527251314000217060ustar00rootroot00000000000000# Treeland Protocols Wayland protocol extensions for treeland. ## Experimental status All Treeland Wayland protocol extensions defined in this repository are **experimental**. They may change at any time, including in backward-incompatible ways, and no compatibility guarantees of any kind are provided. Consumers must track the upstream protocol definition and must not rely on current interface names, requests, events, or semantics remaining stable. ## Dependencies Check `debian/control` for build-time dependencies, or use `cmake` to check the missing required dependencies. ## Building Regular CMake building steps applies, in short: ```shell $ mkdir build && cd build $ cmake .. $ cmake --build . ``` ## Getting Involved - [Code contribution via GitHub](https://github.com/linuxdeepin/dde-launchpad/) - [Submit bug or suggestions to GitHub Issues or GitHub Discussions](https://github.com/linuxdeepin/developer-center/issues/new/choose) - [Translate this project into your language on Hosted Weblate](https://hosted.weblate.org/projects/deepin/dde-launchpad/) ## License **treeland-protocols** is licensed under MIT. linuxdeepin-treeland-protocols-bfdd6e0/README.zh_CN.md000066400000000000000000000017631527251314000227160ustar00rootroot00000000000000# Treeland 协议 Treeland 的 Wayland 协议扩展。 ## 实验性状态 本仓库中定义的所有 Treeland Wayland 协议扩展均为**实验性**。它们可能随时更改,包括以不向后兼容的方式更改,且不提供任何形式的兼容性保证。使用者必须跟踪上游协议定义,不得依赖当前接口名称、请求、事件或语义保持稳定。 ## 依赖 查看 `debian/control` 获取构建依赖,或使用 `cmake` 检查缺失的依赖。 ## 构建 使用常规的 CMake 构建步骤,简述如下: ```shell $ mkdir build && cd build $ cmake .. $ cmake --build . ``` ## 参与贡献 - [通过 GitHub 贡献代码](https://github.com/linuxdeepin/dde-launchpad/) - [在 GitHub Issues 或 GitHub Discussions 提交 Bug 或建议](https://github.com/linuxdeepin/developer-center/issues/new/choose) - [在 Hosted Weblate 上翻译本项目](https://hosted.weblate.org/projects/deepin/dde-launchpad/) ## 许可证 **treeland-protocols** 采用 MIT 许可证。 linuxdeepin-treeland-protocols-bfdd6e0/REUSE.toml000066400000000000000000000031341527251314000222110ustar00rootroot00000000000000version = 1 SPDX-PackageName = "treeland-protocols" SPDX-PackageDownloadLocation = "https://github.com/linuxdeepin/treeland-protocols" [[annotations]] path = [".github/**", ".obs/**.yml", "garnix.yaml"] precedence = "aggregate" SPDX-FileCopyrightText = "None" SPDX-License-Identifier = "CC0-1.0" [[annotations]] path = [".clang-format", ".editorconfig", "**.frag", "**.ui", "**.vert", "**/qmldir"] precedence = "aggregate" SPDX-FileCopyrightText = "None" SPDX-License-Identifier = "CC0-1.0" [[annotations]] path = ["debian/**", "rpm/**", "archlinux/**"] precedence = "aggregate" SPDX-FileCopyrightText = "None" SPDX-License-Identifier = "CC0-1.0" [[annotations]] path = ["**.nix", ".envrc", "flake.lock", "renovate.json"] precedence = "aggregate" SPDX-FileCopyrightText = "None" SPDX-License-Identifier = "CC0-1.0" [[annotations]] path = ["REUSE.toml", "**.json", "**.service", "**.txt", "**.ini", "**.sh", "**.html", ".gitignore", ".gitmodules", "INSTALL.md", "**.desktop", "**.css", "**.ttf", "**.conf", ".release.json"] precedence = "aggregate" SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" [[annotations]] path = ["**.md", "README.md", "README.zh_CN.md", "CONTRIBUTING.md", "ChangeLog", "CONTRIBUTORS"] precedence = "aggregate" SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC-BY-4.0" [[annotations]] path = ["**.cmake", "CMakeLists.txt", "**.in", "**.qrc", "misc/**", "services/**", "releng/create_changelog.pl"] precedence = "aggregate" SPDX-FileCopyrightText = "None" SPDX-License-Identifier = "GPL-2.0-only" linuxdeepin-treeland-protocols-bfdd6e0/check-protocol-xml.sh000077500000000000000000000012071527251314000245010ustar00rootroot00000000000000#!/bin/sh -eu # Check Wayland protocol XML files using wayland-scanner. # Usage: ./check-protocol-xml.sh [file...] # ./check-protocol-xml.sh # checks xml/*.xml if ! command -v wayland-scanner >/dev/null 2>&1; then echo "Error: wayland-scanner not found" >&2 exit 1 fi if [ $# -gt 0 ]; then files="$@" else files=$(find public dde internal wine deprecated -name '*.xml' -type f | sort) fi for f in $files; do echo "Checking $f" wayland-scanner client-header "$f" /dev/null wayland-scanner server-header "$f" /dev/null wayland-scanner public-code "$f" /dev/null wayland-scanner private-code "$f" /dev/null done linuxdeepin-treeland-protocols-bfdd6e0/cmake/000077500000000000000000000000001527251314000215105ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/cmake/TreelandProtocolsConfig.cmake.in000066400000000000000000000001641527251314000277110ustar00rootroot00000000000000@PACKAGE_INIT@ set(TREELAND_PROTOCOLS_DATA_DIR "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_DATADIR@/treeland-protocols") linuxdeepin-treeland-protocols-bfdd6e0/cmake/treeland-protocols.pc.in000066400000000000000000000003431527251314000262610ustar00rootroot00000000000000prefix=@CMAKE_INSTALL_PREFIX@ datarootdir=@CMAKE_INSTALL_FULL_DATAROOTDIR@ pkgdatadir=${pc_sysrootdir}${datarootdir}/treeland-protocols/ Name: Treeland Protocols Description: Treeland protocol files Version: @PROJECT_VERSION@ linuxdeepin-treeland-protocols-bfdd6e0/dde/000077500000000000000000000000001527251314000211645ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/dde/README.md000066400000000000000000000705361527251314000224560ustar00rootroot00000000000000# DDE Desktop Component Protocols For DDE desktop components. Installed via `TREELAND_PROTOCOL_DDE_XML_FILES`. | File | Protocol | Interfaces | Purpose | |------|----------|-----------|---------| | `treeland-foreign-toplevel-manager-unstable-v3.xml` | `treeland_foreign_toplevel_manager_unstable_v3` | `treeland_foreign_toplevel_manager_v3`, `treeland_foreign_toplevel_handle_v3`, `treeland_dock_preview_context_v3` | Toplevel observation and dock preview; the text tooltip is replaced by a client-drawn tooltip surface that the compositor frames and shows once its content is committed | | `treeland-input-manager-unstable-v1.xml` | `treeland_input_manager_unstable_v1` | `treeland_input_manager_v1`, `treeland_pointer_device_configuration_v1`, `treeland_mouse_settings_v1`, `treeland_touchpad_settings_v1`, `treeland_keyboard_settings_v1` | Per-device input configuration: pointer acceleration, send-events mode, keyboard toggle state, and XKB keymap settings | | `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; outputs addressed by uuid | | `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-output-group-manager-unstable-v1.xml` | `treeland_output_group_manager_unstable_v1` | `treeland_output_group_manager_v1`, `treeland_output_group_v1` | Output mirroring (copy mode) groups: designate a source output mirrored to one or more mirror outputs, addressed by uuid, with registry-pattern enumeration | | `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-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-activation-token-unstable-v1.xml` | `treeland_activation_token_unstable_v1` | `treeland_activation_token_manager_v1`, `treeland_activation_token_v1` | Privileged xdg-activation-v1 token source for the DDE application manager: mint an activation token for an application it is about to launch; the compositor only checks the caller identity | | `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 at the workspace overlay level (above normal toplevels, below layer-shell surfaces) or at the normal window layer, 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 Breaking changes are grouped by version. Under each version heading, one subsection per affected protocol explains what changed, what replaces it, and how existing consumers should adapt. ### 0.8.0 #### `treeland-foreign-toplevel-manager-unstable-v2.xml` Superseded by `treeland-foreign-toplevel-manager-unstable-v3.xml`; the old v2 file moved to `deprecated/` unchanged. The protocol and its interfaces were renamed and the text tooltip was replaced by a client-drawn tooltip surface: 1. Protocol and interfaces renamed: `treeland_foreign_toplevel_manager_unstable_v2` → `treeland_foreign_toplevel_manager_unstable_v3`, with interfaces `treeland_foreign_toplevel_manager_v3`, `treeland_foreign_toplevel_handle_v3`, and `treeland_dock_preview_context_v3`; interface versions reset to 1. The manager and handle requests and events are unchanged. 2. `treeland_dock_preview_context_v3.show_tooltip(tooltip: string, x, y, direction)` is removed and replaced by `show_tooltip_surface(surface: wl_surface, x, y, direction)`. The compositor no longer renders tooltip text: it draws its popover frame exactly behind the given surface, uses the surface's committed logical size as the tooltip size, and the client is responsible for the content, its inner padding, and keeping the content inside the rounded corners. 3. `show_tooltip_surface` assigns a compositor-side role to the surface, which is never released: a surface that was shown as a tooltip can only be shown as a tooltip again. The surface must be owned by the caller, must already have a committed buffer, and must not have another role; misuse of the ownership or role rules raises the new `treeland_dock_preview_context_v3` error `invalid_surface` (0), while a surface without content makes the request a no-op. 4. There is no separate ready step: showing a surface that is already displayed, with the same or a new position, is allowed and needs no new commit, and commits after the tooltip is shown update its content. The compositor keeps the references it needs to displayed content, so the client may reuse or destroy buffers after `wl_buffer.release` as usual. 5. `show` and `close` now cover the whole popover: `show` replaces a visible tooltip with the preview, and `close` hides both the preview and the tooltip. Previously the tooltip was documented as unaffected by `close` and as able to coexist with the preview. 6. The tooltip surface receives no pointer or keyboard input, focus, or activation, and the compositor never destroys it: it only stops using it when the tooltip is replaced or closed. Consumers should rebind the global as `treeland_foreign_toplevel_manager_v3`, replace text tooltip calls with `wl_surface` content passed to `show_tooltip_surface` after committing it, and draw the tooltip content without their own background; the old v2 XML is kept installed during migration but must not be used in new code. #### `treeland-virtual-output-manager-v1.xml` Superseded by `treeland-output-group-manager-unstable-v1.xml`; the old v1 file moved to `deprecated/` unchanged. The protocol was redesigned around uuid-based output identity, compositor-assigned group names, persisted configuration, and a registry-pattern enumeration model. Wire-level differences: 1. Protocol and interfaces renamed: `treeland_virtual_output_manager_v1` → `treeland_output_group_manager_unstable_v1`, with interfaces `treeland_virtual_output_manager_v1` → `treeland_output_group_manager_v1` and `treeland_virtual_output_v1` → `treeland_output_group_v1`; interface versions reset to 1. 2. Groups are addressed by compositor-assigned names instead of client-supplied ones: `create_group` takes only the initial `source` uuid (empty for no source) and the compositor reports the name it picked through the new `name` event, emitted before any other event on the object; a new `get_group` request obtains a group object by that name. The `name` argument of `create_virtual_output` and the `invalid_group_name`/`name_exists` manager errors are removed. 3. Output identity switched from name strings to uuids: the `name`/`outputs` arguments of `create_virtual_output`, the `names` array of `virtual_output_list`, and the `outputs` array of the `outputs` event are gone. Outputs are referenced by uuid strings on `set_source`, `add_output`, and `remove_output`, and on the `state` event (empty source when the group has no available source). The old `outputs[0] = source, outputs[1..] = mirrors` positional convention is replaced by an explicit source plus an ordered mirror list. 4. Mirror uuids come from `treeland-output-uuid-head-unstable-v1`, not `treeland-output-uuid-unstable-v1`: while copy mode is engaged the compositor exposes a `wl_output` only for the source output, so mirror outputs cannot be identified through `wl_output`-based protocols. 5. Enumeration replaced by a registry push model: `get_virtual_output_list` and the `virtual_output_list` snapshot event are removed; `get_virtual_output` is replaced by `get_group`. On binding the manager the compositor emits one `group_added` event carrying the name of each existing group, followed by a single `groups_done` event, and `group_added` again whenever any client creates a group, while `group_removed` (carrying the group name) is emitted when a group is dissolved. `group_added` carries only the group name, not a `new_id` object; clients obtain a group object with `get_group`. This removes the list-then-lookup TOCTOU window. 6. Incremental mirror events are replaced by a single full-state event: `output_added`/`output_removed` are gone, and a single `state` event carries the effective source uuid plus a count and the concatenated fixed-length uuids of the mirrors in list order on creation and after every change. A new `done` event on each group object marks the end of the initial state batch (`name`, `state`, `done`). 7. Changes are queued and committed: `set_source`, `add_output`, and `remove_output` no longer take effect immediately; they queue changes that a new `commit` request applies in queue order. A failed change is skipped with an `operation_failed` event and the remaining changes are still applied. The `state` event is emitted once per commit that changes the effective state. Queued changes do not reserve outputs: an output queued in another group is not treated as in use until that group commits, so when two groups queue the same output the first to commit wins and the other is reported with `output_in_use`. 8. Configuration is persisted and separated from effective state: the compositor stores each group's name, configured source, and configured mirror list across restarts and restores them on startup, so groups reappear as `group_added` on bind and auto-resume when their outputs return. The single `state` event reports effective runtime state only — an unplugged or disabled output stays configured but disappears from it. When the configured source becomes unavailable the compositor auto-promotes the first available mirror (the earliest in the configured mirror list order) to the effective source; whether the promotion is temporary (the configured source reclaims the role when it returns) or permanent (the selected output becomes the new configured source) is a compositor implementation detail. To pin an auto-promoted mirror as the permanent source a client calls `set_source` with its uuid and then commits; the change succeeds idempotently when that output is the current effective source. 9. Failures are all non-fatal on the manager: the per-group `error` event and the codes `invalid_group_name` (0), `invalid_screen_number` (1), and `invalid_output` (2) are removed, and the manager has no fatal `error` enum. Business failures — `invalid_output`, `duplicate_output`, `output_in_use`, `not_in_group`, `invalid_name` — are reported through the new `operation_failed` event (code + uuid), so no failure terminates the connection. A failed `create_group` source still creates the group with an empty source; an invalid `get_group` name still creates the object, but it is an invalid group object that receives no `name` or `state` event and rejects every request except `destroy`. Only `already_dissolved` — sending any request other than `destroy` on a dissolved group — remains a fatal protocol error. 10. Object lifecycle redefined: `destroy` only releases that client's handle and neither dissolves the group nor emits `group_removed`; a separate `dissolve` request tears the group down, discarding any queued changes, emitting `removed` on every bound group object and `group_removed` on the manager. Initial state is pushed on every group object as one batch: `name`, then `state`, then `done`; a failed `create_group` source inserts an `operation_failed` before `done`, and an invalid `get_group` object receives only `operation_failed` then `done`. Consumers should rebind the global as `treeland_output_group_manager_v1`, address groups by the compositor-assigned name from the `name` event (or `get_group`), obtain mirror uuids from `treeland-output-uuid-head-unstable-v1`, queue changes with `set_source`/`add_output`/`remove_output` and apply them with `commit`, read the effective source and mirror list from the `state` event (and wait for `done` before acting on initial state), and dissolve groups with `dissolve` rather than by destroying a group object; the old v1 XML is kept installed during migration but must not be used in new code. ### 0.7.0 #### `treeland-appearance-manager-unstable-v1.xml` 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 `role` enum that adds `normal` (0) while keeping `overlay` (1), and a merged `set_skip_flags` bitfield. #### `treeland-output-manager-v1.xml` Superseded by `treeland-output-manager-unstable-v2.xml`; the old v1 file moved to `deprecated/` unchanged. The v2 protocol renames both interfaces, normalizes member ordering, and addresses outputs by opaque uuid strings from the new `treeland-output-uuid-unstable-v1` protocol instead of output names or `wl_output` objects. Wire-level differences: 1. Interfaces renamed: `treeland_output_manager_v1` → `treeland_output_manager_v2` and `treeland_output_color_control_v1` → `treeland_output_picture_control_v2`; interface versions reset to 1. 2. `destroy` moved to the first request on both interfaces, shifting the opcodes of all other requests by one. 3. `set_primary_output` takes a `string uuid` instead of an output name or `wl_output` object; an empty uuid or a uuid with no connected enabled output is rejected via the non-fatal `primary_output_failed` event (reason `invalid_output`), leaving the designation unchanged. 4. The `primary_output` event carries a `string uuid` (empty when no primary output is designated) instead of an output name or `wl_output` object, is emitted once on bind, and confirms every `set_primary_output` request. 5. `get_picture_control` takes a `string uuid`; the object is created even for an empty or currently unknown uuid (no fatal protocol error is raised), and its commits fail with `commit_result.invalid_output` until the uuid identifies a live enabled output. 6. The `result` event argument changed from a plain `uint` flag (1 = success, 0 = failure) to the `commit_result` enum (`success = 0`, `failed = 1`, `unsupported = 2`, `invalid_output = 3`), so the wire values are inverted. Consumers should rebind the global as `treeland_output_manager_v2`, obtain output uuids from `treeland_output_uuid_manager_v1.get_uuid`, pass uuid strings instead of output names or `wl_output` objects, and interpret `result` values via the `commit_result` enum. ### 0.6.0 #### `treeland-personalization-manager-v1.xml` Superseded by `treeland-decoration-unstable-v1.xml` and `treeland-appearance-unstable-v1.xml` (in `public/`), and `treeland-appearance-manager-unstable-v1.xml` (in `dde/`); per-window background blur is handled by the upstream `ext-background-effect-v1` protocol. The old v1 file moved to `deprecated/` unchanged. Key changes: 1. **Protocol split and role separation**: - Server-side decoration (SSD) customization (window corner radius, shadow, border, and server-side titlebar) is split into `treeland-decoration-unstable-v1.xml` (in `public/`). It requires xdg-decoration server-side decorations first and enables a "half-CSD, half-SSD" configuration (keep compositor border/corners/shadow while hiding its titlebar). - Per-window background blur is replaced by the upstream `ext-background-effect-v1` protocol (staging in wayland-protocols), which is decoration-mode independent and advertises its blur capability via the `capabilities` event. The `wallpaper` blend mode of the old protocol is deprecated without replacement; consumers must not rely on it. - Read-only user-level appearance querying and observation (cursor theme/size, fonts, icon theme, accent color, window opacity, color scheme, titlebar height, corner radius) is split into `treeland-appearance-unstable-v1.xml` (in `public/`) for all regular applications. - Privileged user-level appearance configuration (modifying cursor, fonts, and visual theming) is split into `treeland-appearance-manager-unstable-v1.xml` (in `dde/`) for desktop control center and system settings components. 2. **Push-model state synchronization**: - Removed redundant synchronous `get_*` query requests. The compositor pushes current values immediately upon context creation and broadcasts changes to all bound contexts. 3. **Cursor settings simplification**: - Removed `commit` request and `verfity` event. `set_theme` and `set_size` now take effect immediately, matching font and appearance context semantics. 4. **Color scheme enum renamed and refined**: - Renamed `theme_type` to `color_scheme` and removed `auto`, standardizing the enum to `light` (0) and `dark` (1); dynamic auto-switching policy is handled client-side. 5. **Standardized lifecycle and structure**: - Added explicit `type="destructor"` to `destroy` requests and moved them to the first request on each interface; - Placed all `enum` definitions before requests and all `event` definitions after requests. 6. **Numeric representation normalized (wire-incompatible)**: - `window_opacity`: the old `uint` value with no defined range is now a `fixed` value in `[0.0, 1.0]` (1.0 fully opaque, 0.0 fully transparent). Both the `set_window_opacity` request argument and the `window_opacity` event argument changed type and scale; consumers must switch from integer percentage handling to fixed-point. - `active_color`: the old single `string` argument (a color description) is now four `uint` components `r, g, b, a` in `[0, 255]`, on both the `set_accent_color` request and the `accent_color` event. #### `treeland-window-management-v1.xml` Superseded by `treeland-show-desktop-unstable-v1.xml`; the old v1 file moved to `deprecated/`. The protocol was renamed to reflect its actual scope (show-desktop mode only). Compared to the old `treeland_window_management_v1` interface: 1. The interface was renamed to `treeland_show_desktop_v1`. 2. The `destroy` request was moved to the first request position. 3. The `show_desktop` event was renamed to `show_desktop_state`. 4. The `desktop_state` enum was renamed to `state`. 5. The `preview_show` enum entry was removed because it was never implemented and is no longer needed. 6. The `set_desktop` request was renamed to `set_show_desktop_state`. 7. The description was corrected and expanded. Consumers should rebind the global as `treeland_show_desktop_v1`, send `set_show_desktop_state` to request a transition, and listen for `show_desktop_state` to observe compositor-driven changes; the old v1 XML is kept installed during migration but must not be used in new code. #### `treeland-foreign-toplevel-manager-v1.xml` Superseded by `treeland-foreign-toplevel-manager-unstable-v2.xml`; the old v1 file moved to `deprecated/`. The protocol was redesigned with corrected naming, member ordering, and improved descriptions. Compared to the old `treeland_foreign_toplevel_manager_v1` interface: 1. Naming corrected: `unstable` added to the file and protocol name; the three interfaces were bumped to `_v2`. 2. A `destroy` destructor request is now the first request on all three interfaces (newly added on the manager, moved to first on the other two). 3. Enums were moved before requests. 4. Events were moved after requests. 5. The `finished` event was changed from a destructor event to a plain event, and the `stop` request no longer forbids all further requests. The compositor no longer destroys the manager object automatically; the client must send `destroy` explicitly, ideally after `stop` and `finished`. 6. The `set_rectangle` request was renamed to `set_icon_geometry`, and the `invalid_rectangle` error entry was renamed to `invalid_geometry`. 7. The dock preview `show` request's `surfaces` argument was renamed to `identifiers` to reflect that it carries uint32 toplevel identifiers, not wl_surface objects. 8. A manager `error` enum was added with `invalid_surface`, raised when the `relative_surface` passed to `get_dock_preview_context` is not a valid wl_surface owned by the calling client. 9. The description was corrected and expanded. Consumers should rebind the global as `treeland_foreign_toplevel_manager_v2`, obtain `treeland_foreign_toplevel_handle_v2` objects from the `toplevel` event, and use `treeland_dock_preview_context_v2` for previews; the old v1 XML is kept installed during migration but must not be used in new code. #### `treeland-shortcut-manager-v2.xml` Superseded by `treeland-shortcut-manager-unstable-v3.xml`; the old v2 file moved to `deprecated/` unchanged. The protocol was renamed to follow the unstable naming convention, and the interfaces were renamed to match the new major version. Compared to the old `treeland_shortcut_manager_v2` interface: 1. The protocol was renamed to `treeland_shortcut_manager_unstable_v3`; the interfaces were renamed to `treeland_shortcut_manager_v3` and `treeland_shortcut_capture_v3`. 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 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. linuxdeepin-treeland-protocols-bfdd6e0/dde/README.zh_CN.md000066400000000000000000000634241527251314000234540ustar00rootroot00000000000000# DDE 桌面组件协议 面向 DDE 桌面组件。通过 `TREELAND_PROTOCOL_DDE_XML_FILES` 安装。 | 文件 | 协议 | 接口 | 用途 | |------|----------|-----------|---------| | `treeland-foreign-toplevel-manager-unstable-v3.xml` | `treeland_foreign_toplevel_manager_unstable_v3` | `treeland_foreign_toplevel_manager_v3`, `treeland_foreign_toplevel_handle_v3`, `treeland_dock_preview_context_v3` | 顶层窗口观察和 Dock 预览;文本 tooltip 改为由客户端绘制的 tooltip surface,外框仍由合成器绘制,内容提交后即显示 | | `treeland-input-manager-unstable-v1.xml` | `treeland_input_manager_unstable_v1` | `treeland_input_manager_v1`, `treeland_pointer_device_configuration_v1`, `treeland_mouse_settings_v1`, `treeland_touchpad_settings_v1`, `treeland_keyboard_settings_v1` | 逐设备输入配置:指针加速、发送事件模式、键盘切换状态与 XKB 键盘映射设置 | | `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` | 指定主屏、逐输出色温和亮度控制;输出按 uuid 寻址 | | `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-output-group-manager-unstable-v1.xml` | `treeland_output_group_manager_unstable_v1` | `treeland_output_group_manager_v1`, `treeland_output_group_v1` | 输出镜像(复制模式)分组管理:指定一个源输出并镜像到一个或多个镜像输出,按 uuid 寻址,采用 registry 模式枚举 | | `treeland-wallpaper-manager-unstable-v1.xml` | `treeland_wallpaper_manager_unstable_v1` | `treeland_wallpaper_manager_v1`, `treeland_wallpaper_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-activation-token-unstable-v1.xml` | `treeland_activation_token_unstable_v1` | `treeland_activation_token_manager_v1`、`treeland_activation_token_v1` | 面向 DDE 应用管理器的特权 xdg-activation-v1 token 来源:为即将拉起的应用铸造 token,合成器只校验调用方身份 | | `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 转为在工作区 overlay 层(高于普通顶层窗口、低于 layer-shell surface)或普通窗口层渲染的 shell surface,建议相对输出或光标的初始位置,并通过 skip 位域声明任务切换器/dock 预览/多任务视图的列表偏好 | ## 破坏性变更 破坏性变更按版本分组。每个版本标题下,每个受影响协议有一个子节说明变更内容、替代方案以及现有消费者如何适配。 ### 0.8.0 #### `treeland-foreign-toplevel-manager-unstable-v2.xml` 被 `treeland-foreign-toplevel-manager-unstable-v3.xml` 取代;旧 v2 文件原样移至 `deprecated/`。协议与接口重命名,文本 tooltip 改为由客户端绘制的 tooltip surface: 1. 协议与接口重命名:`treeland_foreign_toplevel_manager_unstable_v2` → `treeland_foreign_toplevel_manager_unstable_v3`,接口为 `treeland_foreign_toplevel_manager_v3`、`treeland_foreign_toplevel_handle_v3`、`treeland_dock_preview_context_v3`;接口版本重置为 1。manager 与 handle 的请求和事件不变。 2. `treeland_dock_preview_context_v3.show_tooltip(tooltip: string, x, y, direction)` 移除,由 `show_tooltip_surface(surface: wl_surface, x, y, direction)` 取代。合成器不再绘制 tooltip 文本:它把弹层外框紧贴绘制在给定 surface 之后,以该 surface 已提交的逻辑尺寸作为 tooltip 尺寸,内容、内部留白以及内容不越出圆角由客户端负责。 3. `show_tooltip_surface` 给 surface 加上合成器侧 role,该 role 不再释放:一旦作为 tooltip 显示过,该 surface 之后只能再作为 tooltip 显示。surface 必须属于调用方、必须在请求时已有已提交的 buffer、且不得带有其它 role;违反归属或 role 规则时抛出 `treeland_dock_preview_context_v3` 新增的 `invalid_surface`(0)错误,而没有内容的 surface 使请求变成空操作。 4. 不再有独立的就绪步骤:对已经在显示的 surface 再次 show(相同或新位置)是允许的,且不需要新的提交;tooltip 显示后的 commit 会更新其内容。合成器持有已显示内容所需的引用,客户端照常可以在 `wl_buffer.release` 后复用或销毁 buffer。 5. `show` 与 `close` 现在覆盖整个弹层:`show` 会用预览替换可见的 tooltip,`close` 会同时隐藏预览与 tooltip。此前文档写明 tooltip 不受 `close` 影响,且可与预览并存。 6. tooltip surface 不接收指针或键盘输入、不获焦点、不激活;合成器也从不销毁它,只在 tooltip 被替换或关闭时停止使用。 消费者应将全局对象重新绑定为 `treeland_foreign_toplevel_manager_v3`,用提交后通过 `show_tooltip_surface` 交出的 `wl_surface` 内容取代文本 tooltip 调用,并在绘制 tooltip 内容时不带自己的背景;旧 v2 XML 在迁移期间仍会安装,但不得用于新代码。 #### `treeland-virtual-output-manager-v1.xml` 被 `treeland-output-group-manager-unstable-v1.xml` 取代;旧 v1 文件原样移至 `deprecated/`。协议围绕基于 uuid 的输出身份、合成器分配的组名、持久化配置与 registry 模式枚举重新设计。线缆级差异: 1. 协议与接口重命名:`treeland_virtual_output_manager_v1` → `treeland_output_group_manager_unstable_v1`,接口 `treeland_virtual_output_manager_v1` → `treeland_output_group_manager_v1`、`treeland_virtual_output_v1` → `treeland_output_group_v1`;接口版本重置为 1。 2. 组改由合成器分配的名字寻址,而非客户端传入:`create_group` 只接收初始 `source` uuid(空表示无源),合成器通过新增的 `name` 事件告知它选定的名字,该事件在对象上的任何其他事件之前发送;新增 `get_group` 请求按该名字获取组对象。`create_virtual_output` 的 `name` 参数以及 `invalid_group_name`/`name_exists` 管理器错误被移除。 3. 输出身份由名字字符串改为 uuid:`create_virtual_output` 的 `name`/`outputs` 参数、`virtual_output_list` 的 `names` 数组、`outputs` 事件的 `outputs` 数组均被移除。`set_source`、`add_output`、`remove_output` 以及 `state` 事件(组无可用源时源为空)均以 uuid 字符串引用输出。原先 `outputs[0] = 源,outputs[1..] = 镜像` 的位置约定,改为显式的源加有序镜像列表。 4. 镜像 uuid 需经 `treeland-output-uuid-head-unstable-v1` 获取,而非 `treeland-output-uuid-unstable-v1`:复制模式生效期间合成器只为源输出暴露 `wl_output`,镜像输出无法通过基于 `wl_output` 的协议识别。 5. 枚举改为 registry 推送模型:`get_virtual_output_list` 与 `virtual_output_list` 快照事件移除,`get_virtual_output` 由 `get_group` 取代。绑定 manager 时合成器为每个已存在的组发送一个携带组名的 `group_added` 事件,随后发送单个 `groups_done` 事件;任何客户端创建组时再次发送 `group_added`;组被解散时发送 `group_removed`(携带组名)。`group_added` 只携带组名而不携带 `new_id` 对象,客户端用 `get_group` 获取组对象。这消除了「先取列表再查找」的 TOCTOU 窗口。 6. 增量镜像事件改为单个全量状态事件:`output_added`/`output_removed` 移除,单个 `state` 事件携带有效源 uuid、数量与按列表顺序拼接的定长 uuid;创建时与每次变更后各发送一次。每个组对象上新增 `done` 事件,标记初始状态批次(`name`、`state`、`done`)的结束。 7. 变更改为排队 + 提交:`set_source`、`add_output`、`remove_output` 不再立即生效,而是排队变更,由新增的 `commit` 请求按队列顺序应用。失败的变更被跳过并发 `operation_failed` 事件,其余变更仍会应用;每次改变有效状态的 commit 之后发送一次 `state` 事件。排队不会预留输出:已在其他组排队的输出在该组 commit 之前不视为被占用,因此两个组排队同一输出时先 commit 者胜出,后者报 `output_in_use`。 8. 配置持久化并与运行时有效态分离:合成器跨重启保存每个组的名字、配置的源与配置的镜像列表,并在启动时恢复,因此组在 bind 时以 `group_added` 重新出现,输出恢复后自动生效。单个 `state` 事件只报告运行时有效态——拔出或禁用的输出保留配置但从该事件中消失。当配置源不可用时,合成器将第一个可用镜像(配置列表顺序最靠前的)提升为有效源;提升是临时的(配置源恢复后重新夺回源角色)还是永久的(被选中的输出成为新的配置源),属合成器实现细节。要将被提升的镜像固化永久为源,客户端对其 uuid 调用 `set_source` 并提交;当该输出是当前有效源时该变更幂等成功。 9. manager 上的失败均为非致命:组的 `error` 事件及 `invalid_group_name`(0)、`invalid_screen_number`(1)、`invalid_output`(2)错误码移除,manager 不再有致命 `error` 枚举。业务失败——`invalid_output`、`duplicate_output`、`output_in_use`、`not_in_group`、`invalid_name`——通过新增的 `operation_failed` 事件(code + uuid)上报,任何失败都不会终止连接。`create_group` 的 source 失败仍会创建组但源为空;`get_group` 名字无效仍会创建对象,但该对象是无效组对象,不接收 `name` 或 `state` 事件,除 `destroy` 外的所有请求均被拒绝。仅 `already_dissolved`——对已解散组发送除 `destroy` 以外的任何请求——仍为致命协议错误。 10. 对象生命周期重新定义:`destroy` 仅释放该客户端的句柄,既不解散组也不发送 `group_removed`;单独的 `dissolve` 请求解散整个组(丢弃所有排队变更),向每个绑定该组的对象发送 `removed`,并在 manager 上发送 `group_removed`。每个组对象的初始状态以一个批次推送:`name`、`state`、`done`;`create_group` 的 source 失败时在 `done` 之前插入一次 `operation_failed`,而无效 `get_group` 对象只接收 `operation_failed` 与 `done`。 消费者应将全局对象重新绑定为 `treeland_output_group_manager_v1`,用 `name` 事件(或 `get_group`)给出的合成器分配名字寻址组,从 `treeland-output-uuid-head-unstable-v1` 获取镜像 uuid,用 `set_source`/`add_output`/`remove_output` 排队变更并以 `commit` 应用,从 `state` 事件读取有效源与镜像列表(并在收到 `done` 后再基于初始状态行动),以 `dissolve` 而非销毁组对象来解散组;旧 v1 XML 在迁移期间仍会安装,但不得用于新代码。 ### 0.7.0 #### `treeland-appearance-manager-unstable-v1.xml` `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` 枚举新增 `normal`(0)并保留 `overlay`(1),skip 请求合并为 `set_skip_flags` 位域。 #### `treeland-output-manager-v1.xml` 被 `treeland-output-manager-unstable-v2.xml` 取代;旧 v1 文件原样移至 `deprecated/`。v2 协议重命名两个接口、规范成员排序,并改用来自新增 `treeland-output-uuid-unstable-v1` 协议的不透明 uuid 字符串寻址输出,替代输出名称或 `wl_output` 对象。线缆级差异: 1. 接口重命名:`treeland_output_manager_v1` → `treeland_output_manager_v2`,`treeland_output_color_control_v1` → `treeland_output_picture_control_v2`;接口版本重置为 1。 2. 两个接口的 `destroy` 移至首个请求,其余请求的操作码整体后移一位。 3. `set_primary_output` 参数改为 `string uuid`(替代输出名称或 `wl_output` 对象);空 uuid 或无已连接已启用输出的 uuid 以非致命的 `primary_output_failed` 事件拒绝(原因 `invalid_output`),主屏指定保持不变。 4. `primary_output` 事件携带 `string uuid`(无主屏时为空),替代输出名称或 `wl_output` 对象,绑定时发送一次,并确认每一次 `set_primary_output` 请求。 5. `get_picture_control` 参数改为 `string uuid`;即使空 uuid 或当前未知的 uuid 也会创建对象(不抛致命协议错误),其 commit 在 uuid 标识到存活已启用输出之前均以 `commit_result.invalid_output` 失败。 6. `result` 事件参数由普通 `uint` 标志(1 = 成功,0 = 失败)改为 `commit_result` 枚举(`success = 0`,`failed = 1`,`unsupported = 2`,`invalid_output = 3`),线缆取值反转。 消费者应将全局对象重新绑定为 `treeland_output_manager_v2`,从 `treeland_output_uuid_manager_v1.get_uuid` 获取输出 uuid,改传 uuid 字符串而非输出名称或 `wl_output` 对象,并按 `commit_result` 枚举解释 `result` 值。 ### 0.6.0 #### `treeland-personalization-manager-v1.xml` 被 `treeland-decoration-unstable-v1.xml` 和 `treeland-appearance-unstable-v1.xml`(在 `public/`)以及 `treeland-appearance-manager-unstable-v1.xml`(在 `dde/`)取代;逐窗口背景模糊由上游 `ext-background-effect-v1` 协议承接。旧 v1 文件原样移至 `deprecated/`。 主要变更: 1. **协议拆分与职责分离**: - 服务端装饰(SSD)定制(窗口圆角、阴影、边框、服务端标题栏)拆分为 `treeland-decoration-unstable-v1.xml`(在 `public/`)。需先经 xdg-decoration 申请服务端装饰,支持“半 CSD、半 SSD”配置(保留合成器边框/圆角/阴影,隐藏其标题栏)。 - 逐窗口背景模糊由上游 `ext-background-effect-v1` 协议(wayland-protocols staging)承接,与装饰模式无关,通过其 `capabilities` 事件通告模糊能力。旧协议的 `wallpaper` 混合模式废弃且无替代;消费者不得依赖该模式。 - 只读用户级外观查询与订阅(光标主题/大小、字体、图标主题、强调色、窗口不透明度、配色方案、标题栏高度、圆角)拆分为 `treeland-appearance-unstable-v1.xml`(在 `public/`),面向所有常规应用。 - 特权用户级外观配置(修改光标、字体、视觉主题)拆分为 `treeland-appearance-manager-unstable-v1.xml`(在 `dde/`),面向桌面控制中心与系统设置组件。 2. **Push 模型状态同步**: - 移除冗余的同步 `get_*` 查询请求。合成器在创建 context 时立即推送当前值,并在变更时广播给所有已绑定的 context。 3. **光标设置简化**: - 移除 `commit` 请求和 `verfity` 事件。`set_theme` 和 `set_size` 现立即生效,与字体和外观 context 语义一致。 4. **配色方案枚举重命名与规范化**: - `theme_type` 重命名为 `color_scheme`,移除 `auto`,规范为 `light`(0)和 `dark`(1);动态自动切换策略交由客户端处理。 5. **标准化生命周期与结构**: - 为 `destroy` 请求显式添加 `type="destructor"`,并移至每个接口的首个请求位置; - 将所有 `enum` 定义置于 requests 之前,所有 `event` 定义置于 requests 之后。 6. **数值表示规范化(线缆不兼容)**: - `window_opacity`:旧的无范围定义的 `uint` 值改为 `fixed` 值,范围为 `[0.0, 1.0]`(1.0 全不透明,0.0 全透明)。`set_window_opacity` 请求参数与 `window_opacity` 事件参数的类型与刻度均变更;消费者须从整数百分比处理改为定点数处理。 - `active_color`:旧的单个 `string` 参数(颜色描述)改为四个 `uint` 分量 `r, g, b, a`,范围 `[0, 255]`,`set_accent_color` 请求与 `accent_color` 事件均如此。 #### `treeland-window-management-v1.xml` 被 `treeland-show-desktop-unstable-v1.xml` 取代;旧 v1 文件已移至 `deprecated/`。协议被重命名以反映其实际范围(仅显示桌面模式)。与旧 `treeland_window_management_v1` 接口相比: 1. 接口重命名为 `treeland_show_desktop_v1`。 2. `destroy` 请求移至第一个请求位置。 3. `show_desktop` 事件重命名为 `show_desktop_state`。 4. `desktop_state` 枚举重命名为 `state`。 5. `preview_show` 枚举项被移除,因为从未实现且不再需要。 6. `set_desktop` 请求重命名为 `set_show_desktop_state`。 7. 描述被修正和扩充。 消费者应将全局对象重新绑定为 `treeland_show_desktop_v1`,发送 `set_show_desktop_state` 请求切换模式,监听 `show_desktop_state` 观察合成器驱动的变化;旧 v1 XML 在迁移期间仍会安装,但不得用于新代码。 #### `treeland-foreign-toplevel-manager-v1.xml` 被 `treeland-foreign-toplevel-manager-unstable-v2.xml` 取代;旧 v1 文件已移至 `deprecated/`。协议被重新设计,修正了命名、成员顺序并改进了描述。与旧 `treeland_foreign_toplevel_manager_v1` 接口相比: 1. 命名修正:文件名和协议名添加 `unstable`;三个接口升级为 `_v2`。 2. 三个接口的 `destroy` 析构请求均位于第一个请求位置(管理器接口为新增,另两个接口为位置前移)。 3. 枚举移至请求之前。 4. 事件移至请求之后。 5. `finished` 事件从析构事件改为普通事件,且 `stop` 请求不再禁止一切后续请求。合成器不再自动销毁管理器对象;客户端须显式发送 `destroy`,建议先 `stop` 并等待 `finished`。 6. `set_rectangle` 请求重命名为 `set_icon_geometry`,`invalid_rectangle` 错误枚举项重命名为 `invalid_geometry`。 7. Dock 预览 `show` 请求的 `surfaces` 参数重命名为 `identifiers`,以反映其携带的是 uint32 顶层窗口标识符而非 wl_surface 对象。 8. 管理器接口新增 `error` 枚举,含 `invalid_surface`,当传入 `get_dock_preview_context` 的 `relative_surface` 不是调用客户端拥有的有效 wl_surface 时触发。 9. 描述被修正和扩充。 消费者应将全局对象重新绑定为 `treeland_foreign_toplevel_manager_v2`,从 `toplevel` 事件获取 `treeland_foreign_toplevel_handle_v2` 对象,并使用 `treeland_dock_preview_context_v2` 进行预览;旧 v1 XML 在迁移期间仍会安装,但不得用于新代码。 #### `treeland-shortcut-manager-v2.xml` 被 `treeland-shortcut-manager-unstable-v3.xml` 取代;旧 v2 文件原样移至 `deprecated/`。协议按 unstable 命名规范重命名,接口随新主版本重命名。与旧 `treeland_shortcut_manager_v2` 接口相比: 1. 协议重命名为 `treeland_shortcut_manager_unstable_v3`;接口重命名为 `treeland_shortcut_manager_v3` 和 `treeland_shortcut_capture_v3`。 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` 失败条件及有效快捷键规则)。 消费者应将全局对象重新绑定为 `treeland_shortcut_manager_v3`,在发送任何 bind 或 unbind 请求前先 `acquire`,并通过 `capture_next_shortcut` 创建捕获对象;旧 v2 XML 在迁移期间仍会安装,但不得用于新代码。 linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-activation-token-unstable-v1.xml000066400000000000000000000133201527251314000311170ustar00rootroot00000000000000 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 is privileged and singleton: only the DDE application manager may bind it, and at most one client may bind it at a time within a given user session. It lets that client obtain an xdg-activation-v1 token for an application it is about to launch. The compositor only checks the caller's identity; deciding whether an application may be activated is the client's responsibility. A token obtained through this protocol is accepted by xdg_activation_v1.activate() from any client. Even though it carries no serial and no originating surface, a still-valid token is never downgraded to an attention request for that reason. Each token is one-shot and expires after a limited time; see the treeland_activation_token_v1 interface for the detailed semantics. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A privileged, singleton global that mints xdg-activation-v1 tokens for the DDE application manager. Only the DDE application manager may bind this interface, and only one client may bind it at a time within a given user session. The compositor must reject bind attempts from non-privileged clients by sending a protocol error (not_privileged), and must reject a second concurrent bind attempt by sending a protocol error (binding_rejected). Error codes sent as protocol errors via wl_display.error. Destroy the treeland_activation_token_manager_v1 object and release the singleton binding. The compositor accepts a new binding from another client after this request is processed. Tokens already delivered through this manager are not affected. Create a treeland_activation_token_v1 object. The compositor mints the token and delivers it with the token event on the new object. Each request_token call mints an independent token. Multiple outstanding (unconsumed and unexpired) tokens may coexist; requesting a new token does not consume, invalidate, or expire any previously issued token. A token object delivers exactly one token event and is then inert. The token is one-shot: only the first xdg_activation_v1.activate() request that uses it produces a real activation and consumes the token. The token also expires after a limited time. Once consumed or expired, a subsequent activate() with the same token produces no activation and is downgraded to an attention request instead. The client should destroy the object after receiving the token, to release the object and its associated compositor resources. Destroy the treeland_activation_token_v1 object. This does not invalidate a token that was already delivered. Sent once, in response to the request_token request that created this object. The event is delivered as part of that request's dispatch, so the client must add its listener before the next wl_display_dispatch()/roundtrip(). linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-active-notify-unstable-v1.xml000066400000000000000000000205121527251314000304220ustar00rootroot00000000000000 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. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-appearance-manager-unstable-v1.xml000066400000000000000000000261051527251314000313540ustar00rootroot00000000000000 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 privileged clients such as the desktop control center to configure user-level appearance settings managed by the compositor, including cursor theme and size, fonts, and visual theming (icon theme, accent color, window opacity, color scheme, titlebar height, and corner radius). This protocol is privileged. Binding it without compositor-level authorization may result in requests being silently ignored or the connection being terminated. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A singleton privileged global for modifying user-level appearance settings of the current user. These settings are shared by all windows and clients of the user rather than being per-window. Settings take effect immediately when a set_* request is sent. The compositor applies each change and broadcasts the new value to all clients bound to treeland_appearance_v1. A user-level hint for the preferred color scheme. Clients should use this value to style their self-drawn widgets and UI elements accordingly. The compositor also applies this hint to server-side decorations. This is semantically equivalent to org.freedesktop.appearance color-scheme and the CSS prefers-color-scheme media feature. This enum mirrors treeland_appearance_v1.color_scheme (in the read-only treeland-appearance-unstable-v1 protocol): the entry names and values are identical and must stay in sync. Any new value must be added to both at once. Destroy the treeland_appearance_manager_v1 object. Set the cursor theme name. The compositor applies the change immediately and broadcasts a cursor_theme event to all active appearance observers. If the requested theme is empty or not installed, the compositor falls back to a default cursor theme. Set the cursor size in pixels. Width and height are specified independently to accommodate hardware cursor planes that support non-square sizes. The compositor applies the change immediately and broadcasts a cursor_size event to all active appearance observers. Values of 0 or exceeding compositor limits are clamped to the minimum or maximum supported size. Set the proportional font family. The compositor applies the change immediately and broadcasts a font event to all active appearance observers. If the requested font family is empty or not installed, the compositor falls back to a default font. Set the monospace font family. The compositor applies the change immediately and broadcasts a monospace_font event to all active appearance observers. If the requested font family is empty or not installed, the compositor falls back to a default monospace font. Set the base font size. The value is in points multiplied by 10, so 105 means 10.5 points. The compositor applies the change immediately and broadcasts a font_size event to all active appearance observers. A size of 0 or exceeding compositor limits is clamped to the minimum or maximum supported size. Set the icon theme name. The compositor applies the change immediately and broadcasts an icon_theme event to all active appearance observers. If the specified theme is empty or not installed, the compositor falls back to a default icon theme or ignores the change. Set the accent color used for window decorations, focus indicators, and compositor UI elements. Color components are unsigned values in the range [0, 255]. The compositor handles out-of-range values according to its own policy and may clamp a component to a supported bound. The compositor applies the change immediately and broadcasts an accent_color event to all active appearance observers. Set the global window background opacity as a fixed-point value in the range [0.0, 1.0]. A value of 1.0 means fully opaque; 0.0 means fully transparent. The compositor handles out-of-range values according to its own policy and may clamp a value to a supported bound. The compositor applies the change immediately and broadcasts a window_opacity event to all active appearance observers. Set the color scheme hint. Values outside the color_scheme enum range are silently ignored; the current color scheme is kept unchanged. The compositor applies the change immediately, updates server-side decorations, and broadcasts a color_scheme event to all active appearance observers so that clients can restyle their self-drawn components. Set the height of the compositor-drawn titlebar in pixels. A value of 0 hides the compositor titlebar. The compositor handles out-of-range values according to its own policy and may clamp a value to a supported bound. The compositor applies the change immediately and broadcasts a titlebar_height event to all active appearance observers. Set the global default corner radius applied to window decorations in pixels. This is the default for all windows; individual windows may override it via treeland_decoration_context_v1.set_corner_radius. A value of 0 specifies square (unrounded) corners. The compositor handles out-of-range values according to its own policy and may clamp a value to a supported bound. The compositor applies the change immediately and broadcasts a corner_radius event to all active appearance observers. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-compositor-action-unstable-v1.xml000066400000000000000000000251221527251314000313140ustar00rootroot00000000000000 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. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-dde-shell-unstable-v2.xml000066400000000000000000000266251527251314000275160ustar00rootroot00000000000000 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 either at the overlay level of the workspace (above normal toplevel windows but below layer-shell surfaces) or at the normal window layer, as selected by the set_role request. The default role is overlay. 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. Assigning the normal role returns the surface to the regular window layer, participating in normal toplevel stacking again. 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. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-foreign-toplevel-manager-unstable-v3.xml000066400000000000000000001010301527251314000325270ustar00rootroot00000000000000 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 privileged clients such as dock or taskbar components to observe and manage toplevel windows on behalf of the compositor. It provides access to window metadata (title, app-id, state, parent, outputs), allows requests to maximize, minimize, activate, close, or fullscreen a toplevel, and supports a dock preview context for thumbnail display and tooltip overlays. The terms "must", "must not", "should", "may", and "recommended" in this document are to be interpreted as described in RFC 2119. A singleton global that emits one treeland_foreign_toplevel_handle_v3 object per mapped toplevel window. Clients bind this global to receive the toplevel event stream and to create dock preview contexts. A toplevel is defined as a surface with a role similar to xdg_toplevel. XWayland surfaces may be treated like toplevels in this protocol. Clients which only care about the current state can perform a roundtrip after binding this global. The typical lifecycle is: 1. Client binds treeland_foreign_toplevel_manager_v3. 2. Compositor emits a toplevel event for each already-mapped toplevel, followed by individual property events and a done event on each handle. 3. As windows appear and disappear the compositor emits further toplevel events and closed events on the corresponding handles. 4. When the client no longer needs the manager it sends stop, waits for the finished event, destroys the handles, and then the manager itself. Outstanding handles remain usable until the client destroys them individually. Error values raised as protocol errors on misuse of treeland_foreign_toplevel_manager_v3 requests. This request should be called either when the client will no longer use the manager, or after the finished event has been received. If a client wishes to destroy this object it should send a stop request and wait for a finished event, then destroy the handles and then this object. Existing treeland_foreign_toplevel_handle_v3 objects created through this manager are not affected and must be destroyed separately by the client. This request indicates that the client no longer wishes to receive events for new toplevels. The Wayland protocol is asynchronous, meaning the compositor may send further toplevel events until the stop request is processed. The client should wait for a finished event before destroying this object. Create a treeland_dock_preview_context_v3 associated with the given surface. The surface must be a valid wl_surface owned by the calling client and serves as the anchor for all preview and tooltip positioning. Only one dock preview context may be active per surface at a time. If the surface already has an active context, the client must destroy it via treeland_dock_preview_context_v3.destroy before creating a new one; otherwise the compositor raises the context_already_exists protocol error and does not create the requested object. Emitted by the compositor whenever a new toplevel window is mapped. The event is sent for all toplevels regardless of which application created them. Immediately after this event the compositor will send the initial property events (title, app_id, pid, identifier, state, output_enter, parent, and so on) on the new handle, followed by a done event. The client should treat all property events received before the first done as the initial snapshot. This event indicates that the compositor is done sending events to this object. The client should destroy the object. See treeland_foreign_toplevel_manager_v3.destroy for more information. The compositor must not send any more toplevel events after this event. Outstanding treeland_foreign_toplevel_handle_v3 objects are not affected by this event. Represents a single mapped toplevel window. The compositor creates this object in response to the manager's toplevel event and destroys the server-side resource when the window is unmapped (signalled by the closed event). After the compositor sends closed, the client must not send any requests other than destroy. The client should call destroy promptly after receiving closed to release compositor-side tracking state. All property events (title, app_id, pid, identifier, output_enter, output_leave, state, parent) are grouped by a trailing done event so that a batch of related changes appears atomic to the client. Flags that describe the current state of a toplevel window. These correspond to the states with the same names defined in the xdg-toplevel interface. Each flag is encoded as a uint32 value in the array sent by the state event. Error values raised as protocol errors on misuse of treeland_foreign_toplevel_handle_v3 requests. Destroy the treeland_foreign_toplevel_handle_v3 object and release all associated client-side resources. This request may be sent at any time, including before the compositor sends the closed event. When sent after closed, it finalizes the destruction sequence initiated by the compositor. When sent before closed, the compositor will silently drop any further events for this handle. When a handle is destroyed, a new handle may not be created by the compositor until the toplevel is unmapped and then remapped. Destroying a toplevel handle is not recommended unless the client is cleaning up child objects before destroying the manager, the toplevel was closed, or the handle will not be used in the future. Other protocols which extend the treeland_foreign_toplevel_handle_v3 interface should require destructors for extension interfaces to be called before allowing the toplevel handle to be destroyed. Request that the compositor maximize the toplevel. The compositor may ignore the request. If the maximized state changes, the compositor will reflect this in a subsequent state event followed by done. Request that the compositor restore the toplevel from the maximized state. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor minimize the toplevel. The compositor may ignore the request. If the minimized state changes, the compositor will reflect this in a subsequent state event followed by done. Request that the compositor restore the toplevel from the minimized state. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor fullscreen the toplevel on the given output. If output is null, the compositor chooses the output. The output argument is a hint only; the compositor may fullscreen on a different output or not at all. If the fullscreen state or visible outputs change, the compositor will reflect this via state and output_enter / output_leave events followed by done. Request that the compositor exit the fullscreen state for the toplevel. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor give keyboard focus to the toplevel on the given seat. There is no guarantee the toplevel will actually be activated; the compositor may ignore the request based on seat focus policy or security considerations. Send a close request to the toplevel. The compositor typically forwards this to the application using a shell-specific mechanism such as xdg_toplevel.close. There is no guarantee the application will honour the request. If the toplevel is eventually unmapped, the compositor will emit the closed event on this handle. Inform the compositor of the rectangle on surface that visually represents this toplevel (for example the taskbar icon or thumbnail), similar to the EWMH _NET_WM_ICON_GEOMETRY property. The compositor may use this as a hint for minimize animations or similar effects. The client is not required to set this geometry. If unset, the compositor applies an implementation-defined default. If the client sets multiple rectangles, only the last one takes effect. Coordinates are in surface-local space of the given surface. Setting width = height = 0 removes a previously set geometry. The compositor raises the invalid_geometry error if the provided dimensions are otherwise out of range. Emitted by the compositor when it knows the process ID of the application that owns this toplevel. This event is sent once as part of the initial property snapshot, before the first done event, and is not re-sent unless the owning process changes. Emitted whenever the title of the toplevel changes. The initial title is sent as part of the snapshot before the first done event. Emitted whenever the app-id of the toplevel changes. The initial app-id is sent as part of the snapshot before the first done event. This identifier is used to check if two or more toplevel handles belong to the same toplevel. The identifier is useful for command line tools or privileged clients which may need to reference an exact toplevel across processes or instances of the treeland_foreign_toplevel_manager_v3 global. The compositor sends this event exactly once, when the handle is created, as part of the initial property snapshot. The identifier must be unique per toplevel and its handles. Two different toplevels must not have the same identifier. The identifier is only valid as long as the toplevel is mapped. If the toplevel is unmapped the identifier must not be reused. An identifier must not be reused by the compositor to ensure there are no races when sharing identifiers between processes. Emitted when the toplevel becomes visible on the given output. A toplevel may be visible on multiple outputs simultaneously. This event is sent as part of the initial snapshot and whenever the set of visible outputs changes. Emitted when the toplevel stops being visible on the given output. A corresponding output_enter event for the same output is guaranteed to have been sent before this event. Emitted immediately after the handle is created as part of the initial property snapshot, and again each time the toplevel state changes due to a compositor action or a client request on this protocol. The state argument is an array of uint32 values, each corresponding to an entry in the treeland_foreign_toplevel_handle_v3.state enum. An entry is present in the array when the corresponding state is active. Emitted after the compositor has sent all property events for the current atomic update batch (title, app_id, pid, identifier, state, output_enter, output_leave, parent). The client should process the preceding events as a single coherent state snapshot only upon receiving done. This allows changes to the treeland_foreign_toplevel_handle_v3 properties to be atomically applied. Other protocols which extend the treeland_foreign_toplevel_handle_v3 interface may use this event to also atomically apply any pending state. This event must not be sent after the treeland_foreign_toplevel_handle_v3.closed event. Emitted when the toplevel is unmapped or destroyed by the compositor. No further property events will be sent on this handle after closed. The handle becomes inert; the client must not send any requests except destroy, which it should call promptly to release compositor-side tracking resources. Other protocols which extend the treeland_foreign_toplevel_handle_v3 interface must also ignore requests other than their destructors. Emitted whenever the parent-child relationship of this toplevel changes. The parent arg is null when the toplevel has no parent (i.e. it is a top-level root window). This event is not re-sent when the client destroys the parent handle; the relationship on the compositor side is unchanged by client-side destruction of the parent object. Provides the dock or taskbar component with the ability to display a thumbnail preview of one or more toplevels and to show a client-drawn tooltip surface, both positioned relative to the anchor surface supplied to get_dock_preview_context. The object is created by treeland_foreign_toplevel_manager_v3.get_dock_preview_context and is valid until the client calls destroy. The compositor emits enter and leave events when the pointer enters or leaves the active preview area. The preview and the tooltip share one popover slot: showing either one replaces whatever the context displayed before. Error values raised as protocol errors on misuse of treeland_dock_preview_context_v3 requests. Specifies on which side of the anchor surface the preview popup or tooltip should appear. The compositor uses this value as a placement hint; it may choose a different side if the requested side would be clipped by the screen edge. Destroy the treeland_dock_preview_context_v3 object and release all associated compositor resources. Any visible preview or tooltip is hidden immediately. After this request the compositor will no longer send any event. Request that the compositor display thumbnail previews for the toplevels identified by the identifiers array. The popup is positioned at (x, y) in the coordinate space of the anchor surface supplied at context creation, on the side indicated by direction. The identifiers argument is a wl_array of uint32 identifier values, each matching the identifier sent by the treeland_foreign_toplevel_handle_v3.identifier event. The compositor ignores identifiers that do not correspond to a currently mapped toplevel. Calling show while a preview is already visible replaces the previous content atomically. If a tooltip is visible, the preview replaces it as well: the tooltip is hidden. Display the given surface as the tooltip of this context, at (x, y) in the coordinate space of the anchor surface and on the side indicated by direction. The compositor computes the final position from these values and may move the tooltip to keep it on the output; clients must not assume the request is honored exactly. Any tooltip this context displayed before is replaced. The compositor draws its popover frame (tint, border, shadow) exactly behind the surface and uses the surface's committed logical size as the tooltip size. There is no extra padding on any side: the client is responsible for its own inner padding and for keeping its content inside the rounded corners. The client provides content only and must not draw its own popover background, otherwise it covers the frame the compositor draws. The surface must already have a committed buffer when this request is sent. A surface without content is a client error: the compositor shows nothing for that request. Asking for a surface that is already shown, with the same or a new position, is allowed and needs no further commit; commits after the tooltip is shown update its content. A request for a surface other than the one this context already shows replaces the tooltip, and the compositor may animate the switch, shrinking and fading out the replaced tooltip into the new one. Showing the surface this context already shows is not a replacement: the compositor keeps drawing that one surface, moved to the new position, and plays no animation, even when the surface committed different content in the meantime. A client that wants a transition between two tooltips therefore has to put them on separate surfaces; one surface repainted in place changes the tooltip without animating. This request assigns a compositor-side role to the surface, so the surface must be owned by the calling client and must not have any other role yet; the anchor surface of this context cannot be used either. Otherwise the compositor raises invalid_surface. The role is never released: once a surface has been shown as a tooltip it can only be shown as a tooltip again. The compositor does not scale the tooltip; if it does not fit on the output it may be clipped. The surface receives no pointer or keyboard input, no focus and no activation. It is owned by the client: the compositor only stops using it and never destroys it. Request that the compositor hide the currently visible popover, that is the preview popup and the tooltip surface alike. If nothing is visible this request is a no-op. A hidden tooltip is not destroyed and keeps the role of its surface; the client shows it again with another show_tooltip_surface request. Emitted when the pointer device enters the active preview popup area managed by this context. The compositor sends this event only while a preview is visible (i.e. after show and before close or destroy). Emitted when the pointer device leaves the active preview popup area managed by this context. A corresponding enter event is guaranteed to have been sent before this event. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-input-manager-unstable-v1.xml000066400000000000000000001254771527251314000304300ustar00rootroot00000000000000 This protocol allows a privileged client to discover seat capabilities and configure compositor-managed mouse, touchpad, and keyboard devices. A treeland_input_manager_v1 object is a global manager. It creates settings objects that represent configuration state for existing input devices; those settings objects are not the device objects themselves. For mouse and touchpad devices, pointer device settings such as acceleration speed, acceleration profile, natural scrolling, scroll factor, handed mode, double-click interval, send events mode, disable-while-typing and tap-to-click are managed through a treeland_pointer_device_configuration_v1 object created from the device-specific settings interface. Keyboard settings include repeat behavior, num lock state, and XKB layout, model, variant, and option strings for the target seat. 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. The treeland_input_manager_v1 interface is a global object used to create per-device settings objects for input devices exposed by the compositor. The compositor advertises device capability changes with the capability_available and capability_unavailable events. For each target device or seat-level settings scope, the compositor may allow at most one live settings object of a given interface created from one manager object. virtual-pointer and virtual-keyboard are not included in the list. This informs the compositor that the treeland input manager object will no longer be used. Existing objects created through this interface are not destroyed automatically. Clients should destroy those objects before destroying the manager. Create a treeland_mouse_settings_v1 object bound to the specified wl_seat. The created object acts as a factory for treeland_pointer_device_configuration_v1 objects that manage mouse device settings on the target seat. The seat must currently expose mouse capability. If the seat does not identify a valid mouse-capable target, the compositor raises the protocol error. Note: 1. The treeland_mouse_settings_v1 object must be destroyed before the associated wl_seat is destroyed. Create a treeland_touchpad_settings_v1 object bound to the specified wl_seat. The created object acts as a factory for treeland_pointer_device_configuration_v1 objects that manage touchpad device settings on the target seat. The seat must currently expose touchpad capability. If the seat does not identify a valid touchpad-capable target, the compositor raises the protocol error. Note: 1. The treeland_touchpad_settings_v1 object must be destroyed before the associated wl_seat is destroyed. Create a treeland_keyboard_settings_v1 object bound to the specified wl_seat. The seat must currently expose keyboard capability. If the seat does not identify a valid keyboard-capable target, the compositor raises the protocol error. Note: 1. The treeland_keyboard_settings_v1 object must be destroyed before the associated wl_seat is destroyed. This event is emitted when the compositor detects that a seat now exposes the specified device capability. The compositor sends this event immediately after the treeland_input_manager_v1 object is created to report capabilities currently available on a seat. The compositor may also send this event later when input devices are hot-plugged and a seat gains the specified capability. A client may create a treeland_mouse_settings_v1 object for a given seat only if the compositor has advertised device_type mouse capability for that seat. Likewise, a client may create a treeland_touchpad_settings_v1 or treeland_keyboard_settings_v1 object for a given seat only if the compositor has advertised device_type touchpad or keyboard capability for that seat. This event is emitted when the compositor detects that a seat no longer exposes the specified device capability. The compositor may also send this event later when input devices are hot-unplugged and a seat loses the specified capability. If type includes mouse capability, the client must destroy any treeland_mouse_settings_v1 objects targeting the seat. This also destroys any treeland_pointer_device_configuration_v1 objects created from those mouse settings objects. If type includes touchpad capability, the client must destroy any treeland_touchpad_settings_v1 objects targeting the seat. This also destroys any treeland_pointer_device_configuration_v1 objects created from those touchpad settings objects. If type includes keyboard capability, the client must destroy any treeland_keyboard_settings_v1 objects targeting the seat. The treeland_pointer_device_configuration_v1 interface represents pending configuration for pointer devices associated with the parent device settings object. This object is created via get_pointer_configuration on a treeland_mouse_settings_v1 or treeland_touchpad_settings_v1 object. It collects configuration that applies to the associated device type. Requests on this object update pending state. The compositor applies the accumulated settings when the client sends apply. Destroying the object before apply discards any pending state that has not yet been applied. The compositor sends configuration events after object creation to report the current effective settings. It may later send additional state batches when those effective settings change for compositor-defined reasons. A done event terminates each event batch. Optional features supported by pointer devices. The compositor sends a feature event to indicate which features are supported by at least one device associated with the parent settings object. A client must only send a set request if the corresponding feature has been advertised. It is a protocol error to send a set request for a feature that has not been advertised. Pointer acceleration profiles. The semantics correspond to libinput acceleration profiles. Modes controlling whether the target pointer device should send events and whether those events depend on the presence of an external pointer device on the same seat. Destroy this treeland_pointer_device_configuration_v1 object. Destroying the object discards any pending state that has not yet been applied. Set a scaling factor applied to scroll axis delta generated by wheel and other continuous scrolling input sources. This request requires the scroll_factor feature to be advertised via the feature event. The compositor multiplies scroll axis values by the specified factor before forwarding them to clients. This affects continuous scroll delta only and does not modify discrete scroll step events. This request updates only the pending state associated with this object. The change takes effect after the next apply request. Sending this request or the corresponding apply request does not by itself cause a scroll_factor event to be emitted. delta = factor * _delta Set whether primary and secondary buttons use left-handed or right-handed ordering. This request requires the handed_mode feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a handed_mode event to be emitted. Set the pointer acceleration speed. This request requires the accel_speed feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause an accel_speed event to be emitted. Set the acceleration profile. This request requires the acceleration_profile feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause an acceleration_profile event to be emitted. Set how events from the target pointer device are delivered. This request requires the send_events_mode feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a send_events_mode event to be emitted. Enable or disable natural scrolling. This request requires the natural_scroll feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a natural_scroll event to be emitted. Enable or disable temporarily disabling pointer devices while the user is typing. This request requires the disable_while_typing feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a disable_while_typing event to be emitted. Enable or disable tap-to-click. This request requires the tap_to_click feature to be advertised via the feature event. The change takes effect on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a tap_to_click event to be emitted. Ask the compositor to apply the pending pointer device configuration carried by this object. This event reports which optional features are supported by at least one device associated with the parent settings object. The compositor sends this event as part of the initial state batch after the treeland_pointer_device_configuration_v1 object is created. The compositor may also send this event again when devices are added to or removed from the target seat and the set of supported features changes. This event reports the current scroll factor used for wheel and similar scroll input. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_scroll_factor do not cause this event to be emitted automatically. This event reports whether left-handed or right-handed button ordering is currently used. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_handed_mode do not cause this event to be emitted automatically. This event reports the current pointer acceleration speed. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_accel_speed do not cause this event to be emitted automatically. This event reports the current acceleration profile. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_acceleration_profile do not cause this event to be emitted automatically. This event reports the current event delivery mode used for the target pointer device. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_send_events_mode do not cause this event to be emitted automatically. This event reports whether natural scrolling is enabled. The compositor sends this event immediately after the treeland_pointer_device_configuration_v1 object is created as part of the initial state batch. Changes requested through set_natural_scroll do not cause this event to be emitted automatically. This event reports whether pointer devices are temporarily disabled while the user is typing. The compositor sends this event as part of the initial state batch if the disable_while_typing feature has been advertised. Changes requested through set_disable_while_typing do not cause this event to be emitted automatically. This event reports whether tap-to-click is enabled. The compositor sends this event as part of the initial state batch if the tap_to_click feature has been advertised. Changes requested through set_tap_to_click do not cause this event to be emitted automatically. This event indicates that the compositor failed to apply one or more pending pointer device configuration changes carried by this object. This event does not destroy the object. The client may continue using the object and send further requests. This event is sent once when all pointer device configuration state events in the current batch have been sent. The compositor must always end a batch of pointer device configuration state events with this event, regardless of whether it sends the initial state or a later update. The serial is used in a future get_pointer_configuration request to ensure the client's configuration is based on up-to-date state. The treeland_mouse_settings_v1 interface acts as a factory for treeland_pointer_device_configuration_v1 objects that manage mouse device settings on the target seat. A treeland_pointer_device_configuration_v1 object is created via get_pointer_configuration on this object. Destroy this treeland_mouse_settings_v1 object. Existing treeland_pointer_device_configuration_v1 objects created from this object are also destroyed. Create a treeland_pointer_device_configuration_v1 object for this mouse settings scope. The created object manages mouse device configuration on the target seat. The serial argument must match the serial from the most recent done event sent on the previous treeland_pointer_device_configuration_v1 object for this treeland_mouse_settings_v1 object. For the first creation, the serial should be 0. Only one treeland_pointer_device_configuration_v1 object may exist for this treeland_mouse_settings_v1 object at a time. Creating a second one without destroying the first is a protocol error. If the serial does not match the current state, the compositor may immediately send a failed event on the new treeland_pointer_device_configuration_v1 object. The treeland_touchpad_settings_v1 interface acts as a factory for treeland_pointer_device_configuration_v1 objects that manage touchpad device settings on the target seat. A treeland_pointer_device_configuration_v1 object is created via get_pointer_configuration on this object. Destroy this treeland_touchpad_settings_v1 object. Existing treeland_pointer_device_configuration_v1 objects created from this object are also destroyed. Create a treeland_pointer_device_configuration_v1 object for this touchpad settings scope. The created object manages touchpad device configuration on the target seat. The serial argument must match the serial from the most recent done event sent on the previous treeland_pointer_device_configuration_v1 object for this treeland_touchpad_settings_v1 object. For the first creation, the serial should be 0. Only one treeland_pointer_device_configuration_v1 object may exist for this treeland_touchpad_settings_v1 object at a time. Creating a second one without destroying the first is a protocol error. If the serial does not match the current state, the compositor may immediately send a failed event on the new treeland_pointer_device_configuration_v1 object. The treeland_keyboard_settings_v1 interface represents pending settings for all keyboards associated with the target seat. Requests on this object update pending keyboard state. The compositor applies the accumulated settings when the client sends apply. The compositor sends keyboard-specific state events after object creation to report the current effective settings for the target seat. It may later send additional state batches when those effective settings change for compositor-defined reasons. A done event terminates each event batch. Optional features supported by keyboard devices. The compositor sends a feature event to indicate which features are supported by at least one keyboard device associated with the target seat. A client must only send a set request if the corresponding feature has been advertised. It is a protocol error to send a set request for a feature that has not been advertised. Destroy this treeland_keyboard_settings_v1 object. Destroying the object discards any pending state that has not yet been applied. Set the keyboard repeat rate and delay to apply on the next apply request. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a repeat event to be emitted. Set the num lock state to apply on the next apply request. This request requires the num_lock feature to be advertised via the feature event. This request updates only the pending state tracked by this object. Sending this request, or the following apply request, does not by itself cause a num_lock event to be emitted. Ask the compositor to apply the pending keyboard settings carried by this object. Set the XKB layout, model, variant, and options to apply on the next apply request. These four values form one configuration snapshot and replace the complete pending XKB rules state. Layout contains one or more comma-separated layout names, for example "us" or "cz,us". An empty layout selects the XKB default layout, which is "us". Model identifies the keyboard model, for example "pc104" or "pc105". An empty model selects the XKB default model. Variant contains a comma-separated list whose entries correspond to the layouts, for example "" or ",dvorak". Empty entries select no variant for the corresponding layout. Options contains a comma-separated list of XKB options, for example "grp:win_space_toggle". An empty options string selects no extra options. This request updates only the pending state tracked by this object. Multiple calls before apply replace the complete pending XKB rules configuration; only the last configuration is applied. Sending this request, or the following apply request, does not by itself cause an xkb_rules event to be emitted. This event reports which optional features are supported by at least one keyboard device associated with the target seat. The compositor sends this event as part of the initial state batch after the treeland_keyboard_settings_v1 object is created. The compositor may also send this event again when keyboard devices are added to or removed from the target seat and the set of supported features changes. This event reports the current keyboard repeat configuration. The compositor sends this event immediately after the treeland_keyboard_settings_v1 object is created as part of the initial keyboard state batch. Changes requested through set_repeat do not cause this event to be emitted automatically. This event reports the current num lock state. The compositor sends this event immediately after the treeland_keyboard_settings_v1 object is created as part of the initial keyboard state batch. Changes requested through set_num_lock do not cause this event to be emitted automatically. This event indicates that the compositor failed to apply one or more pending keyboard settings carried by this object. This event does not destroy the object. The client may continue using the object and send further requests. This event is sent once when all keyboard state events in the current batch have been sent. The compositor must always end a batch of keyboard state events with this event, regardless of whether it sends the initial state or a later update. This event reports the current XKB layout, model, variant, and options as one consistent configuration snapshot. The string formats and empty-value semantics match set_xkb_rules. The compositor sends this event after object creation as part of the initial keyboard state batch. It may send the event again in a later batch when any effective XKB rules value changes. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-keyboard-state-notify-unstable-v1.xml000066400000000000000000000301271527251314000320700ustar00rootroot00000000000000 This protocol allows privileged clients to subscribe to global keyboard state changes (e.g. Caps Lock, Num Lock). Clients create watcher objects through the manager global, each bound to a seat. The client then configures the watcher with set_modifiers to choose which modifiers to monitor, and set_flags to choose which event types (locked, unlocked, or both) to receive. Configuration changes are double-buffered and take effect atomically when the client sends apply. Both set_modifiers and set_flags can be called multiple times before apply; only the values from the most recent calls are committed. This allows changing the configuration at runtime without destroying and recreating the watcher. After apply, the compositor sends a current_state event for each watched modifier containing its current lock state, so the client can synchronize its initial state without waiting for the next physical key press. The compositor then sends state_changed events on the watcher whenever any of the watched modifiers changes lock state globally, regardless of which surface has keyboard focus. This protocol is observation-only. Keyboard state changes are never consumed or intercepted by this protocol. 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. The treeland_keyboard_state_notify_manager_v1 interface is a singleton global object used to create watcher objects for monitoring keyboard state changes on a given seat. A client may create multiple watcher objects for the same seat if needed. Destroy this treeland_keyboard_state_notify_manager_v1 object. Existing watcher objects created through this interface are not destroyed automatically. Clients should destroy those objects before destroying the manager. Create a treeland_keyboard_state_watcher_v1 object for monitoring keyboard state changes on the given seat, or on all seats if seat is null. The watcher is created with no modifiers and no flags set by default. The client should use set_modifiers and set_flags on the watcher to configure what to monitor. Note: 1. The treeland_keyboard_state_watcher_v1 object must be destroyed before the associated wl_seat is destroyed. The treeland_keyboard_state_watcher_v1 interface represents a subscription to keyboard state changes on a specific seat. This object is created via get_keyboard_state_watcher on the treeland_keyboard_state_notify_manager_v1 global. The client configures the watcher with set_modifiers to choose which modifiers to monitor and set_flags to choose which state transitions to receive. Both can be changed at runtime. Configuration changes are double-buffered: set_modifiers and set_flags only update the pending state, which is applied atomically when apply is called. The compositor sends a current_state event for each modifier in the committed modifier set immediately after apply is called. It then sends state_changed events whenever any of the watched modifiers changes lock state, according to the committed modifiers and flags. Bitfield of keyboard modifiers whose lock state can be monitored. Multiple modifier values can be combined using bitwise OR. caps_lock: the Caps Lock modifier. num_lock: the Num Lock modifier. Examples: caps_lock: monitor only Caps Lock. caps_lock | num_lock: monitor both Caps Lock and Num Lock. Flags to specify which modifier lock state transitions the client wants to be notified about. none: do not notify on any state transition. locked: notify when a watched modifier becomes locked. unlocked: notify when a watched modifier becomes unlocked. Examples: locked: the client receives events only when a modifier is locked. unlocked: the client receives events only when a modifier is unlocked. locked | unlocked: the client receives events on both. The current lock state of a keyboard modifier. Destroy this treeland_keyboard_state_watcher_v1 object and stop receiving keyboard state notifications. Set the keyboard modifiers to watch on this watcher. The modifiers argument is a bitfield of values from the modifier enum (e.g. caps_lock = 1, num_lock = 2). Multiple modifiers can be combined using bitwise OR. Calling set_modifiers replaces any previously pending modifiers. This request only updates the pending configuration. The change takes effect when apply is called. If set_modifiers is called multiple times before apply, only the values from the most recent call are used. Change the watch flags for this watcher, selecting which modifier state transitions (locked, unlocked, or both) the client wants to be notified about. This request only updates the pending configuration. The change takes effect when apply is called. If set_flags is called multiple times before apply, only the values from the most recent call are used. Apply the pending configuration state for this watcher atomically. The compositor will use the modifiers and flags set by the most recent set_modifiers and set_flags calls as the new active configuration for this watcher. If set_modifiers or set_flags have not been called since the last apply (or since the watcher was created), the corresponding pending values remain unchanged. After this request, the pending configuration is considered consumed. Subsequent calls to set_modifiers or set_flags will begin a new pending configuration. The compositor will send a current_state event for each modifier in the newly committed modifier set immediately after processing this request. Sent for each modifier in the committed modifier set after each apply call to provide its current lock state. For example, if the client watches caps_lock and num_lock, the compositor will send two current_state events, one for each modifier. This event is emitted before any subsequent state_changed events for the new configuration. It may be sent again after future apply calls if the client reconfigures the watcher. This event is sent when one of the watched modifiers changes lock state globally, according to the modifiers and flags currently set on this watcher. The modifier argument identifies which modifier changed state. The state argument indicates whether the modifier is now locked or unlocked. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-layer-shell-extension-unstable-v1.xml000066400000000000000000000325141527251314000321010ustar00rootroot00000000000000 This protocol lets a layer-shell client hand interactive move and resize over to the compositor: the client starts an operation with begin_resize or begin_move, the compositor drives the surface size or position through layer-surface configure events, and reports state, rejection reasons, and placement through this interface. The key words "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended", "may", and "optional" in this document are to be interpreted as described in RFC 2119. 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 interface allows a layer-shell client (typically a dock surface) to opt in to compositor-driven interactive move and resize, so the compositor owns the drag state machine and the client follows the resulting layer-surface configure events instead of racing its own set_size requests. This protocol applies to any layer-shell surface. The compositor drives the surface's size (begin_resize) or position (begin_move) over an interactive drag; whether a particular axis is freely resizable depends on the concrete anchor configuration. Destroy the manager object. This does not destroy layer shell objects created with get_layer_shell_extension_object; those remain valid until their wl_surface is destroyed or the client destroys them. Create a layer shell extension object for an existing wl_surface. The surface is expected to be a layer-shell surface; the compositor reports layer_shell_extension_exists if the same wl_surface already has a layer shell extension object bound. The layer shell extension object is tied to the wl_surface: when the wl_surface is destroyed, the treeland_layer_shell_extension_object_v1 object is destroyed by the compositor as well, and the client must call get_layer_shell_extension_object again for a new wl_surface. A layer shell extension object must not outlive its wl_surface. The client starts an interactive resize with begin_resize, passing a serial from a recent pointer event. The compositor validates the serial, takes over the drag (like xdg_toplevel.resize) and drives the surface size through the standard layer-surface configure events, reporting the resize state and any size restrictions through this interface. The client may also start an interactive move with begin_move; the exact move semantics and state reporting are not yet finalized. Values indicate which edge (or corner) of the surface is being dragged in a resize operation, named from the surface's own perspective. Values are bit flags matching xdg_toplevel.resize_edge exactly: 1=top, 2=bottom, 4=left, 8=right; corner values are the OR of two adjacent edges (top_left=5=1|4, bottom_left=6=2|4, top_right=9=1|8, bottom_right=10=2|8). The layer surface is anchored to one screen edge and changes height, vertical surfaces (left/right) change width. Whether an edge may be dragged at all depends on the surface's anchor; see begin_resize. begin_resize is rejected (no resize starts) when the serial is stale (bad_serial), the edges value is not a valid resize_edge (bad_edges), or the compositor cannot take over the resize right now (inactive). It is also rejected when the associated surface is invalid or has been destroyed (bad_surface), or the seat is invalid or has been destroyed (bad_seat). The compositor then emits resize_rejected with the reason; an accepted request instead emits resizing(1). Start a compositor-driven interactive resize of the associated surface. The seat and serial must come from a recent pointer button press on that seat; an invalid serial makes the compositor reject the request with resize_error.bad_serial. edges names which edge (or corner) of the surface the client wants to drag, using the xdg_toplevel.resize_edge values. The client owns which edge it drags; the compositor executes the drag on the reported edge. The compositor rejects the request with resize_error.bad_edges when any of the requested edges is anchored: an anchored edge is already fixed in place by the layer-shell layout, so dragging it has no effect. A corner value (top_left etc.) requires both of its edges to be unanchored, otherwise the request is rejected. A dock anchored to a single screen edge, for example, may only be dragged on the edge opposite to its anchor. Any other value is rejected with resize_error.bad_edges. The compositor emits resizing(1) once the drag actually starts, resizing(0) when it ends, and drives the surface size through the standard layer-surface configure events. On a rejected request it emits resize_rejected with a resize_error reason; in that case no resize starts and resizing is never emitted for this request. A request on a destroyed surface or with a destroyed seat is also rejected, with resize_error.bad_surface or resize_error.bad_seat respectively. The min/max size arguments bound this resize only: they apply while this drag is active and are not a persistent property of the surface. A value of 0 means no limit in that direction (minimum 0 / maximum unbounded); negative values are treated as 0. The compositor clamps the target size to these limits and reflects the clamped size through the standard layer-surface configure event. Invalid limits (min > max with both non-zero) are ignored for that axis. resizing=1 when the compositor starts the interactive drag, resizing=0 when it ends. The client may use this to run a settle / spring animation after the drag finishes. resizing(1) is only emitted after the compositor has actually taken over the drag; rejected begin_resize requests instead cause a resize_rejected event. Emitted when a begin_resize request is rejected: the reason names a resize_error value. No resize starts and resizing is never emitted for the rejected request. The client should use this instead of inferring acceptance from the absence of a resizing(1) event, and may fall back to its own drag logic. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-output-group-manager-unstable-v1.xml000066400000000000000000000737761527251314000317670ustar00rootroot00000000000000 This protocol lets a privileged client such as the DDE display settings panel organize physical outputs into mirroring groups: one source output whose rendered content is duplicated to one or more mirror outputs, so that several screens show the same desktop. This is the "copy mode" of the compositor, as opposed to the default "extension" mode where each output shows an independent desktop region. The protocol exposes a singleton manager global that creates and tracks treeland_output_group_v1 objects. Each group designates a single source output and an ordered list of mirror outputs, all addressed by opaque uuid strings. While copy mode is engaged the compositor exposes a wl_output only for the source output; mirror uuids come from treeland-output-uuid-head-unstable-v1 instead (see treeland_output_group_v1 for details). An output may belong to at most one group at a time, and a group drives copy mode only while it has both a source and at least one mirror. The compositor persists the set of groups and their configuration (name, configured source uuid, and configured mirror uuid list) across compositor restarts and restores them on startup, so groups survive reboots and reappear as group_added events on bind; this lets a privileged client configure mirroring once and have it reapply automatically later. An output must be connected and enabled when it is first added to a group (via create_group, set_source, or add_output); once configured it is kept across unplug/replug and compositor restart and auto-resumes when the output returns. The name never changes; the configured source and mirror list persist until a client changes them with set_source, add_output, remove_output, or dissolve. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. 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. A singleton global that creates treeland_output_group_v1 objects and broadcasts the set of existing groups to bound clients. On bind the compositor emits one group_added event carrying the name of each existing group, followed by a single groups_done event, so the client can distinguish the initial dump of pre-existing groups from later group_added events for groups created after the bind. When any client creates a group every other bound client receives group_added for it, and when a group is dissolved every bound client receives group_removed. Clients therefore never poll for the group set; they obtain a group object for a name with the get_group request when they need to observe or edit that group. Multiple privileged clients such as the DDE display settings panel may bind and use the protocol concurrently. Commits from all clients are applied in arrival order; an output claimed by one group is rejected for another with the non-fatal output_in_use failure, so concurrent edits never terminate a connection and clients may retry or adjust. Destroy the treeland_output_group_manager_v1 object and release the client's binding to the manager global. Existing treeland_output_group_v1 objects are not affected and remain valid until they are destroyed or the compositor dissolves the group. The client must destroy each group object separately; the compositor does not cascade destruction from the manager. Create a new treeland_output_group_v1 object with the given initial source output. An empty source creates a group with no source; the client adds mirrors afterwards with add_output and may change the source with set_source, then commits to apply the changes. Copy mode engages once the group has both a source and at least one mirror after commit. The compositor assigns a unique name to the new group; names are chosen by the compositor, not by clients. The client learns the name from the name event, which the compositor emits on the new group object before any other event. The name identifies the group in the manager's group_removed event. If the source cannot be applied — a non-empty source that does not identify a connected enabled output, or one that is already a member of another group — the group is still created with an empty source: the initial state event reports an empty source uuid, and the compositor emits an operation_failed event on the new group object before its done event, with invalid_output when the uuid does not identify a connected enabled output or output_in_use when it is already claimed by another group. The client may later set a source with set_source or add mirrors with add_output, then commit to apply them. On success the compositor broadcasts a group_added event carrying the new group's name to every other bound client; the caller learns the name from the name event on its new group object and does not get a group_added event for it. Other clients obtain a group object for that name with get_group. Create a new treeland_output_group_v1 object bound to the existing group with the given name, for example a group created by another client or one whose object the client has since destroyed. On success the compositor sends the initial state of the group on the new object: one name event, one state event carrying the effective source and the full mirror list in list order, then one done event marking the end of the initial batch. The name is the compositor-assigned name reported by the name event on group objects. If the name is empty, or does not identify an existing group at the time the request is processed — for example because the group was dissolved between the group_removed event and this request — the object is still created, but it is an invalid group object: the compositor sends no name event and no state event, emits an operation_failed event with invalid_name before the done event, and afterwards rejects every request except destroy with operation_failed invalid_name. The client should destroy the object. On success the returned object is an independent handle: destroying it does not dissolve the group, and several clients may hold objects bound to the same group at the same time. Emitted when an output group is created by any client. Each bound client receives this event once per existing group on bind, and again whenever a new group is created — except for the client that created the group, which learns the name from the name event on its create_group return object instead. The name argument is the compositor-assigned name of the new group. A client that wants to observe or edit the group obtains a group object with the manager's get_group request. Emitted exactly once, after the compositor has finished sending the bind-time group_added events for all groups that existed when the client bound. A client receiving this event knows it has seen the complete initial set and that any later group_added is for a group created after the bind. Emitted when an output group is dissolved, whether because a client sent the dissolve request or because the compositor removed it as a whole. Every bound client receives this event for the group; any group objects that client holds for it receive a removed event and must be destroyed afterwards. Represents one mirroring group: a source output, identified by its uuid, whose content is duplicated to an ordered list of mirror outputs, each identified by its uuid. Output uuids are never empty; an empty uuid in events represents the absence of a source. While the group has both a source and at least one mirror, the compositor exposes a wl_output global only for the source output. Mirror outputs have no wl_output while copy mode is engaged, so clients cannot use wl_output-based protocols (including treeland-output-uuid-unstable-v1, which requires a wl_output) to identify them; they must instead obtain mirror uuids from the treeland-output-uuid-head-unstable-v1 protocol, which resolves a zwlr_output_head_v1 to the same uuid. A configured mirror only loses its wl_output while copy mode is actually engaged; while the group is inert (no effective source or no effective mirrors) the mirror retains its wl_output and behaves as a normal extension output. When copy mode exits — the last mirror is removed, the effective source becomes empty, or the group is dissolved — the affected outputs become normal extension outputs again and their wl_output globals come back. The group keeps a configured source (zero or one) and a configured mirror list (zero or more). set_source, add_output, and remove_output queue changes that take effect only when the client sends commit. The state event reports the effective runtime state, not the configured state: a configured source or mirror whose output is currently unplugged or disabled is absent from that event but remains in the persisted configuration, so copy mode auto-resumes when the output comes back. An output may belong to at most one group at a time; one already in another group fails with the output_in_use failure. Pending set_source, add_output, and remove_output requests that cannot be applied because of transient output state (e.g. an output unplugged between the request and the commit) are reported via a non-fatal operation_failed event when the commit is processed; the group is otherwise unchanged and the client may retry. Only already_dissolved — sending any request other than destroy on a dissolved group — is a fatal protocol error. On creation the compositor sends the current state as one initial batch: one name event carrying the compositor-assigned group name, then one state event carrying the effective source (empty uuid when none is available) and the full mirror list, followed by one done event marking the end of the initial batch. If the create_group source was rejected, an operation_failed event is sent before the done event; for an invalid group object from get_group the batch is only an operation_failed event followed by done. Later changes are reported by further state events; the name never changes. Several group objects may be bound to the same group, for example one from create_group and others from get_group; they all observe the same state. Destroying one object only releases that client's handle. The dissolve request tears down the group as a whole, emitting removed to every bound group object and group_removed on the manager. After removed the object is inert: only destroy is valid, and anything else is rejected with the already_dissolved error. When a member output is unplugged or disabled the compositor updates the effective runtime state without dissolving the group: an unavailable mirror is dropped from the mirror list, and when the configured source becomes unavailable the compositor auto-promotes one of the available mirrors to the effective source, reporting its uuid as the source and dropping it from the mirror list in the same state event. Clients observe only the effective source and mirror list carried by each state event and must not assume which mirror is promoted or whether the promotion outlives the disappearance of the configured source. To pin a particular output as the source, a client calls set_source with its uuid and then commits. The source uuid is empty only when the group has no available output at all: no configured source is available (or none is configured) and there is no available mirror to promote. The group itself remains. Client-driven remove_output, by contrast, removes the output from the persisted configuration. Raised as fatal protocol errors on the group object. Returned by the operation_failed event when a create_group source, get_group, or a committed set_source, add_output, or remove_output request cannot be applied, or when a request is sent to an invalid group object. These reflect transient or dynamic output state (e.g. an output unplugged between the request and the commit, or already claimed by another group), not a protocol violation; the client may retry or adjust and the connection is not terminated. Destroy this group object and release the client's handle. The group itself is not affected: copy mode continues, other handles remain valid, and the compositor does not emit group_removed. Use dissolve to tear down the group as a whole. It is safe to destroy an object that has already received the removed event. Queue the output identified by the given uuid as the configured source of the group, replacing any current configured source. The change takes effect only when the client sends commit. The previous configured source, if any, becomes a mirror and keeps participating in copy mode as an effective mirror while its output is available. If the output is already a member of this group, for example a current mirror, it is directly promoted to the source: the compositor pins it as the configured source and re-resolves the mirror list, which now holds the previous configured source if it is still available. No remove_output is required beforehand. If the output is not a member yet, it joins the group and becomes the source. If the request cannot be applied at commit time, the compositor emits an operation_failed event and leaves the pending change unapplied: invalid_output if the uuid does not identify a connected enabled output, or output_in_use if the output is the source or a mirror of another group. Setting the source again for the output that is already the current effective source succeeds idempotently and pins that output as the configured source. This lets a client pin a particular output as the source. A later set_source replaces an earlier uncommitted one; the compositor applies only the most recent source designation on commit. Queue the output identified by the given uuid to be appended to the end of the group's mirror list at commit time. If the request cannot be applied at commit time, the compositor emits an operation_failed event and leaves the pending addition unapplied: invalid_output if the uuid does not identify a connected enabled output, duplicate_output if the output is already in this group, or output_in_use if it belongs to another group. Queue the removal of the output identified by the given uuid from the configured membership of the group at commit time. If the output is not a configured member at commit time, the compositor emits an operation_failed event with not_in_group and the removal is unapplied; this covers an output that was never added as well as one whose configuration was already removed. If the removed output is the configured source or a configured mirror, the compositor re-resolves the effective source and mirror list as described in the interface description and reports the result in a state event. Apply all pending set_source, add_output, and remove_output requests in the order they were queued. Requests that cannot be applied are skipped, each reported by an operation_failed event, and the remaining requests are still applied. The queue is then cleared. If any applied change altered the effective source or mirror list, the compositor emits one state event carrying the resulting effective state; otherwise no state event is emitted. Sending commit with an empty queue is valid and does nothing. dissolve discards the pending queue. Tear down the group: exit copy mode, remove it from the manager, and release the affected outputs. The configured source and mirror list are discarded and the group is not restored on compositor restart. The compositor emits removed to every group object bound to this group and group_removed on the manager. After removed the object is inert; only destroy is valid, and anything else — including dissolve again — is rejected with already_dissolved. Reports the name the compositor assigned to this group. Emitted exactly once on each group object, before any other event, so the creator of the group learns its name without a group_added event. The name is unique among existing groups and never changes; a dissolved group's name may be reused by a group created later. It identifies the group in the manager's group_removed event and is the name accepted by the manager's get_group request. Emitted exactly once on each group object, immediately after the initial name and state events — or, for an invalid group object, after the operation_failed event — marking the end of the initial state batch. A client receiving this event knows it has the complete initial state of the group and that any later state event reflects a change. It is sent even when the initial source is empty and the mirror list is empty. Reports the current effective runtime state of the group in a single atomic event: the effective source uuid and the complete ordered list of effective mirror uuids. The client replaces any previously known state with the contents of this event; the source and the mirror list are always consistent within one emission. The effective source is the configured source if it is currently connected and enabled; otherwise it is an auto-promoted mirror or empty, as described in the interface description. The mirror list holds the configured mirrors that are currently connected and enabled, in list order; the source output, if any, is not part of the list, and a count of zero means the group has no effective mirrors. Emitted once on creation and again whenever the effective source or the effective mirror list changes: after a successful commit, and when any member output is unplugged, disabled, re-enabled, or replugged. The uuids argument contains the concatenation of count uuids, one per mirror, in list order. Output uuids assigned through treeland-output-uuid-unstable-v1 are fixed-length and never contain the NUL byte; the compositor must preserve this property for every uuid it assigns, and clients may rely on it to split the array. Each uuid is therefore the array size in bytes divided by count, and parsing needs no separators: the client reads count fixed-length uuids back to back. The count argument always matches the number of uuids in the array; a client may use it to validate the array size. The list order follows the order in which mirrors were added; unavailable mirrors are filtered out without shifting the relative order of the others. Emitted to every group object bound to the group when the group is dissolved. After this event the object is inert and the client must destroy it. Emitted when a create_group source, get_group, or a committed set_source, add_output, or remove_output request cannot be applied, or when a request is sent to an invalid group object. For a committed set_source, add_output, or remove_output request the cause is a transient or dynamic output state, such as an output being unplugged between the request and the commit or already claimed by another group; that change is skipped and the client may retry. For a failed create_group source the group is created with an empty source and the event is emitted on the new group object before its done event. For an invalid get_group the object is invalid, no name event is sent, and every later request except destroy is rejected with invalid_name. This is not a protocol error and the connection is not terminated. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-output-manager-unstable-v2.xml000066400000000000000000000467161527251314000306300ustar00rootroot00000000000000 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 provides two capabilities to privileged clients such as display configuration panels: 1. Designating one connected output as the primary output, which the compositor may use to decide placement of panels, notifications, and newly opened windows. 2. Adjusting the color temperature and brightness of individual outputs via a double-buffered pending/commit model. Outputs in this protocol are addressed by opaque uuid strings instead of wl_output objects. Clients obtain the uuid of an output from the treeland-output-uuid-unstable-v1 protocol. A uuid remains stable across sessions and output reconnections, which lets clients and the compositor persist per-output settings and restore them after a restart. In the primary_output event an empty uuid means that no primary output is currently designated. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A singleton global that exposes two capabilities: designating the primary output and creating per-output picture control objects. Only one client should bind this interface at a time. The compositor may not advertise this global to additional clients, or may ignore requests from them, while a binding is already active. On binding, the compositor immediately emits a primary_output event carrying the uuid of the currently designated primary output, or an empty uuid if no primary output has been designated. Reasons returned by the primary_output_failed event. Destroy the treeland_output_manager_v2 object. Existing treeland_output_picture_control_v2 objects created through this manager are not affected and must be destroyed separately by the client. Designate the output identified by the given uuid as the primary output. The compositor uses the primary output as a hint for panel placement, initial window positioning, and other compositor-defined policies. The uuid must identify a currently connected, enabled output. If the uuid is empty, or no enabled output with this uuid is currently connected, the compositor rejects the request and emits a primary_output_failed event with the invalid_output reason; the primary output designation is unchanged. Neither case is a protocol error, so a request carrying a stale uuid never disconnects the client. The compositor applies a successful change immediately and confirms it by emitting a primary_output event carrying the uuid of the newly designated primary output. Create a treeland_output_picture_control_v2 object for the output identified by the given uuid. The returned object allows the client to adjust the color temperature and brightness of that output. The uuid must identify a currently connected, enabled output. If the uuid is empty, or no enabled output with this uuid is currently connected, the request still succeeds as long as the new object id is valid: the picture control object is created, but the compositor immediately emits a result event with the invalid_output result, without waiting for a commit. Such a uuid is not a protocol error. Once an invalid_output result has been delivered on an object, the object is permanently inert: only the destroy request is valid, and no further result, color_temperature, or brightness events are emitted on it. The object does not recover if an output with the same uuid is connected later; the client must destroy the inert object and call get_picture_control again to obtain a usable one. Multiple picture control objects may exist for the same output at the same time; each object reports value changes independently. Emitted by the compositor to report the uuid of the current primary output. This event is sent once immediately after the client binds this interface, and again whenever the primary output designation changes — whether in response to a set_primary_output request or through a compositor-driven fallback. When the designated primary output is disconnected or disabled, the compositor automatically selects another available output as the new primary and emits this event with its uuid. When no output is currently available, the event is emitted with an empty uuid. Emitted when a set_primary_output request cannot be applied, indicating that the primary output designation is unchanged. The reason identifies why the request was rejected: no enabled output with the provided uuid is currently connected. Represents a picture control session bound to the output identified by its uuid, created by treeland_output_manager_v2.get_picture_control. Color temperature and brightness are managed via a double-buffered pending/commit model. The client accumulates changes with set_color_temperature and set_brightness, then atomically applies them with a single commit request. After a successful commit the compositor emits a color_temperature or brightness event for each value that actually changed. On creation with a uuid that identifies a live enabled output, the compositor emits color_temperature and brightness events to report the current values of the output before the client has made any changes. When the object is created for a uuid that does not identify a live enabled output, the compositor immediately emits a result event with the invalid_output result instead of the initial color_temperature and brightness events. An invalid_output result is terminal, whether it is delivered immediately after creation or in response to a later commit: the object becomes permanently inert, only the destroy request remains valid, and no further events are emitted on it. The object never recovers, even if an output with the same uuid is connected afterwards; the client must destroy the inert object and call get_picture_control again to obtain a new one. Raised by the compositor as a fatal protocol error when a set_color_temperature or set_brightness request carries a value outside its valid range. The connection is terminated and no further requests are processed on this object. Indicates the outcome of a commit request, or of object creation when the object was created for a uuid that does not identify a live enabled output. A commit is reported as applied successfully, or as failed because the output does not support the requested adjustment, because the associated output is no longer available, or for another transient or unknown reason. An invalid_output result is terminal: the object becomes permanently inert and only destroy may be sent. Destroy the treeland_output_picture_control_v2 object and release all associated compositor resources. Any uncommitted pending settings are discarded. After this request the compositor will no longer send result, color_temperature, or brightness events on this object. Set the pending color temperature for the output. The value is not applied until the client sends a commit request. Valid range is [1000, 20000] Kelvin. A value outside this range is rejected immediately with the invalid_color_temperature protocol error, terminating the connection; nothing is stored in the pending state and no commit is required to clear the request. Multiple calls before commit replace the pending value; only the last value is applied. Set the pending brightness for the output. The value is not applied until the client sends a commit request. Valid range is [0.0, 100.0]. A value outside this range is rejected immediately with the invalid_brightness protocol error, terminating the connection; nothing is stored in the pending state and no commit is required to clear the request. Multiple calls before commit replace the pending value; only the last value is applied. Atomically apply all pending color temperature and brightness values accumulated since the last commit. The compositor always responds with a result event indicating success or failure. After a successful commit the compositor emits a color_temperature or brightness event for each value that actually changed. It is valid to call commit without any preceding set_* requests; the compositor treats this as a no-op that succeeds without changing any value. A failed commit reports its cause through the result event. Range validation of pending values is performed at set_* time and never reaches a commit; a commit therefore only fails because of the output: it does not support the requested adjustment (unsupported, retrying the same settings is unlikely to succeed), the uuid no longer identifies a live enabled output (invalid_output), or the commit could not be applied for a transient or unknown reason (failed). In every failure case the applied settings remain unchanged. An invalid_output result is terminal: it permanently invalidates the object, so only destroy may be sent afterwards and the object never recovers even if an output with the same uuid is connected again. Emitted by the compositor to report the outcome of a commit request, and immediately after object creation when the object was created for a uuid that does not identify a live enabled output. In response to a commit request the event is always sent, including commits with no pending changes, to indicate whether the settings were applied. Besides the failed, unsupported, and invalid_output causes, no other result value is defined. Out-of-range pending values are rejected at set_* time with a fatal protocol error and never produce a commit result. After a successful commit, a color_temperature or brightness event is emitted for each value that actually changed. An invalid_output result is terminal: once it is delivered, the object is permanently inert, only the destroy request remains valid, and no further events are emitted on it. The object never recovers, even if an output with the same uuid is connected afterwards; the client must destroy the object and call get_picture_control again. Reports the currently applied color temperature of the output. When the object is created for a live enabled output, this event is emitted once immediately after creation to provide the initial value. It is also emitted whenever the applied color temperature changes — whether through a commit on this object, a commit on another color control object for the same output, or a compositor-driven change such as a system setting update. Color temperature is expressed in Kelvin on a Planckian locus, in the range [1000, 20000]. Reports the currently applied brightness of the output. When the object is created for a live enabled output, this event is emitted once immediately after creation to provide the initial value. It is also emitted whenever the applied brightness changes — whether through a commit on this object, a commit on another picture control object for the same output, or a compositor-driven change such as a system setting update. Brightness is expressed as a percentage in the range [0.0, 100.0]. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-region-watch-unstable-v1.xml000066400000000000000000000224121527251314000302310ustar00rootroot00000000000000 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. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-shortcut-manager-unstable-v3.xml000066400000000000000000000665661527251314000311510ustar00rootroot00000000000000 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 privileged clients to register and manage global shortcuts for keyboard key sequences, touch swipe gestures, and touch hold gestures. It also provides a one-shot shortcut capture facility for clients that need to read the next shortcut input from the user. Global shortcuts are managed in a per-user context. Shortcuts for different users are isolated and will not interfere with each other. This behavior is transparent to clients of this interface. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A singleton global that manages global shortcut bindings for key sequences, swipe gestures, and hold gestures. Before registering or removing bindings the client must acquire exclusive control by sending the acquire request. Only one client may hold the manager at a time within a given user session. Bindings are registered via bind_key, bind_swipe_gesture, and bind_hold_gesture, and removed via unbind. All of these requests take effect immediately. A bind request that cannot be applied is reported with a bind_failure event; successful bind and unbind requests generate no event, and the client can use the wl_display.sync request to confirm that earlier requests have been processed. If the client's user session is not the currently active session, bind and unbind requests are deferred: they are applied when that session becomes active again. Destroying the manager object implicitly releases the exclusive control acquired via acquire; no separate release request is needed. The capture_next_shortcut request is independent of acquire and may be sent at any time. Cardinal directions used to specify the direction of a swipe gesture binding. The value 0 is reserved and must not be used as a direction argument. Actions that the compositor executes when a shortcut with this action is activated. The notify action is special: instead of performing a compositor-side operation, the compositor emits an activated event on this interface so the client can respond. Flags that control when a key binding fires relative to the key event lifecycle. key_press: fires when the key is pressed. key_release: fires when the key is released. repeat: fires repeatedly while the key is held down (auto-repeat). Only meaningful when combined with key_press; combining with key_release causes both the press and the release auto-repeat events to fire. Common combinations: - key_press only: fires once on press; ignores repeat and release. - key_press | repeat: fires on press and on every auto-repeat tick. - key_press | key_release: fires on press and release; auto-repeat events are ignored. - key_press | key_release | repeat: fires on press, every auto-repeat tick, and on release. Error codes carried by the bind_failure event to describe why a bind request was rejected. Error codes sent as protocol errors via wl_display.error. Destroy the shortcut manager object. If the client currently holds exclusive control via acquire, that control is implicitly released so another client may acquire it. Existing shortcut bindings registered by this client remain active in the compositor until the compositor or another client removes them. Acquire exclusive control of the shortcut manager for this client. The client must send this request before any bind_key, bind_swipe_gesture, bind_hold_gesture, or unbind request. Sending those requests without first acquiring is a protocol error (not_acquired). Only one client may hold the manager at a time within a given user session. If another client already holds it, the compositor sends a protocol error (occupied). Exclusive control is released implicitly when the client destroys the manager object. Register a key sequence binding. The binding takes effect immediately. The key argument uses the portable textual format of QKeySequence (PortableText); see https://doc.qt.io/qt-6/qkeysequence.html#toString for the format specification. Only combinations that form a valid shortcut can be registered; see the capture_next_shortcut request for the validity rules. An invalid combination is reported with bind_failure and the invalid_argument error. The name argument must be unique among all existing bindings. If a binding with the same name already exists, this request is reported with bind_failure and the name_conflict error. If a binding with the same key sequence and action already exists, this request updates its flags to the new value rather than failing. This upsert-on-trigger semantics applies only to bind_key; bind_swipe_gesture and bind_hold_gesture treat duplicate trigger-action pairs as errors. Sending this request without first acquiring is a protocol error (not_acquired). Register a swipe gesture binding. The binding takes effect immediately. The name argument must be unique among all existing bindings. If a binding with the same name already exists, this request is reported with bind_failure and the name_conflict error. If a binding with the same finger count, direction, and action already exists, this request is reported with bind_failure and the duplicate_binding error. If direction is not one of the defined direction enum values, this request is reported with bind_failure and the invalid_argument error. Sending this request without first acquiring is a protocol error (not_acquired). Register a hold gesture binding. The binding takes effect immediately. The name argument must be unique among all existing bindings. If a binding with the same name already exists, this request is reported with bind_failure and the name_conflict error. If a binding with the same finger count and action already exists, this request is reported with bind_failure and the duplicate_binding error. Sending this request without first acquiring is a protocol error (not_acquired). Remove the binding identified by name. The removal takes effect immediately. If no binding with the given name exists, this request is silently ignored. Sending this request without first acquiring is a protocol error (not_acquired). Create a treeland_shortcut_capture_v3 object and start a one-shot capture of the next shortcut input. This request does not require acquire and does not modify existing bindings. The surface argument must be a wl_surface owned by the requesting client. If it is not, the compositor sends a protocol error (invalid_surface). The compositor handles at most one capture at a time, regardless of which client requested it. A capture is also considered in progress until the compositor has consumed the key_release of the last captured key, so that the release cannot trigger a shortcut bound in the meantime. If a capture is already in progress, the compositor emits failed with reason busy on the newly created object immediately after creation. If the seat argument is not null, the compositor verifies that the keyboard focus of that seat is on the surface. If the seat argument is null, the compositor selects a seat whose keyboard focus is on the surface. If no seat has keyboard focus on the surface, the compositor emits failed with reason not_active on the newly created object immediately after creation. Clients must be prepared to handle a capture object that fails immediately. Input from seats other than the validated seat is not intercepted and is processed normally. On the validated seat the capture intercepts input with priority over registered shortcut bindings. While the capture is pending, input from the validated seat is handled as follows. If the surface loses keyboard focus, the compositor emits failed with reason aborted and lets the current event continue to its new focus target. Auto-repeat events are consumed silently. A pointer button or wheel event terminates the capture with reason interrupted and is consumed. A key_press of a pure modifier key (Ctrl, Alt, Shift, and similar) is consumed silently; its key_release terminates the capture with reason interrupted, unless the key is the Meta (Super) key: releasing Meta with no other modifier held emits captured with the shortcut "Meta". A key_press of any other key terminates the capture immediately on the press. If the pressed combination is a valid shortcut the compositor emits captured and consumes the key_release that follows; otherwise it emits failed with reason interrupted. In the captured and interrupted cases the triggering input event is consumed and not forwarded to any client. A valid shortcut is one of: a non-modifier key combined with Ctrl, Alt, or Meta; a standalone function key (F1 to F35); a standalone key such as Delete, Backspace, Pause, Print, Insert, Help, Menu, or Cancel; Shift combined with Space, Escape, Tab, or a navigation key (Home, End, PageUp, PageDown, and arrows); a standalone media, browser, brightness, or launch key; or the Meta (Super) key pressed alone. An unmodified alphanumeric key and an unmodified Escape are not valid shortcuts. Emitted when a binding registered with action notify is activated. The name argument identifies the binding by its unique name. The flags argument indicates which key event triggered the activation, using the keybind_flag enum values. Emitted when a bind_key, bind_swipe_gesture, or bind_hold_gesture request could not be applied; the rejected binding has no effect. The name argument identifies the rejected binding; the error argument provides the reason. If the requesting client's session is not active, the bind request is applied (and possibly rejected) only when that session becomes active again, so this event may be emitted long after the request was sent. Each rejected request is reported separately; other bindings of the same client are not affected. Represents a single pending request to capture the next shortcut input from the user, created by treeland_shortcut_manager_v3.capture_next_shortcut. The compositor captures input once and emits at most one terminal event: either captured or failed. After a terminal event is sent this object becomes inert; the client should destroy it promptly. If the client destroys this object while capture is still pending, the capture is cancelled and no terminal event is sent. Describes why the compositor could not deliver a captured shortcut to the client. Destroy this capture object. If capture is still pending, destroying the object cancels it; no terminal event will be sent after this request is processed. Emitted when the compositor captured one shortcut input for this request. The key argument carries the shortcut sequence in the same QKeySequence portable text format used by treeland_shortcut_manager_v3.bind_key. A capture of the Meta (Super) key pressed alone is reported as the shortcut "Meta". This is a terminal event; the object is now inert. Emitted when the compositor could not deliver a captured shortcut. The reason argument describes why. See the failed_reason enum for details. This is a terminal event; the object is now inert. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-wallpaper-manager-unstable-v1.xml000066400000000000000000000234731527251314000312510ustar00rootroot00000000000000 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. The treeland_wallpaper_manager_v1 interface is a global object used to create wallpaper objects for specific outputs. Destroy this treeland_wallpaper_manager_v1 object. Destroying a bound treeland_wallpaper_manager_v1 object while there are wallpapers still alive created by this treeland_wallpaper_manager_v1 object instance is illegal and will result in a protocol error. Creates a treeland_wallpaper_v1 object bound to the specified wl_output. The compositor may enforce that only one wallpaper exists for a given (output, role) combination. When a surface is associated, the compositor will track the workspace the surface belongs to. Whenever the workspace changes, the compositor may notify the client of the current wallpaper file path used by that workspace. Note: 1. The treeland_wallpaper_v1 object must be destroyed before the associated wl_output is destroyed. 2. The treeland_wallpaper_v1 object must be destroyed before the associated wl_surface is destroyed. The treeland_wallpaper_v1 interface represents a wallpaper instance created by the compositor for a specific output, role. The wallpaper source provided by the client is stored and managed on the compositor side. Once a wallpaper source has been set, the compositor may cache, reuse, or persist the source independently of the client. Destroys the treeland_wallpaper_v1 object and releases all resources associated with it on the compositor side. After calling this request, the client must not use the wallpaper object anymore. Sets an image as the wallpaper source, apply to the current wl_output and the active workspace. except for lockscreen wallpapers, only one wallpaper can be set per wl_output. Supported formats: - JPG / JPEG (Joint Photographic Experts Group) The compositor will attempt to load and display the specified image file. If the file cannot be accessed, decoded, or is in an unsupported format, the compositor will emit a failed event with an appropriate error code. Access Control: This protocol accepts file_source such as /usr/share/wallpapers/xxx or /var/cache/wallpapers/xxxx provided by the client. the compositor will perform file verification. Sets a video file as the wallpaper source, apply to the current wl_output and the active workspace. except for lockscreen wallpapers, only one wallpaper can be set per wl_output. Supported formats: - MP4 - AVI - MOV The compositor is responsible for decoding and presenting the video. Playback behavior such as looping, synchronization, and performance characteristics are compositor-defined. If the video source cannot be opened or decoded, a failed event will be emitted. Access Control: This protocol accepts file_source such as /usr/share/wallpapers/xxx or /var/cache/wallpapers/xxxx provided by the client. the compositor will perform file verification. This event is emitted when a wallpaper-related request fails. The failure may occur during source loading, validation, or runtime setup. The error code provides additional information about the cause of the failure. Possible error values include: - already_used: The wallpaper source is already configured. This is not a fatal error and serves as a notification to the client. - invalid_source: The specified wallpaper source is invalid, unsupported, or could not be processed. This is a fatal error and the client should verify the source before retrying. - Permission denied, check file permissions. This event is emitted by the compositor to notify the client that the wallpaper source associated with this treeland_wallpaper_v1 object has changed. The event may be emitted during initial object setup or when the wallpaper is changed due to external factors not initiated by this client, such as compositor policy decisions, workspace switches (except for lockscreen wallpapers) that affect the active wallpaper, or other system components. For desktop wallpapers, workspace switches may also trigger this event to report the wallpaper used by the new workspace. The event provides the current wallpaper source type and the corresponding source file path. linuxdeepin-treeland-protocols-bfdd6e0/dde/treeland-xwindow-control-unstable-v1.xml000066400000000000000000000072151527251314000310230ustar00rootroot00000000000000 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 place XWayland windows on the compositor: moving an XWayland window identified by its X11 window ID to a position relative to another surface. The compositor should 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 exposes XWayland window placement actions to a privileged DDE client. The compositor should 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 on this interface; set_xwindow_position_relative reports its result through a per-request wl_callback. Destroy the treeland_xwindow_control_v1 object. This request does not alter any window position; placements already applied remain in effect. Request that the compositor move the XWayland window identified by the X11 window ID wid so that its top-left point is placed at the anchor surface's top-left point offset by (dx, dy). Once the compositor has finished processing, it sends the done event to the callback and destroys the callback. The callback data is 0 when the move succeeded, and 1 when it failed, for example because no XWayland window with the given wid is currently mapped or the anchor surface is invalid. The compositor may apply the new position asynchronously. linuxdeepin-treeland-protocols-bfdd6e0/debian/000077500000000000000000000000001527251314000216525ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/debian/changelog000066400000000000000000000175721527251314000235400ustar00rootroot00000000000000treeland-protocols (0.9.0) unstable; urgency=medium * feat: add treeland-activation-token-unstable-v1 protocol * feat: add treeland-foreign-toplevel-manager-unstable-v3 protocol and deprecate v2 * feat(prelaunch-splash): make the manager a per-session singleton * docs: clarify auto-promotion semantics in output group * docs: align set_source duplicate_output wording with implementation -- rewine Tue, 03 Nov 2026 20:15:48 +0800 treeland-protocols (0.8.0) unstable; urgency=medium * feat: add output-uuid protocols for stable output identity * refactor(output-manager): switch treeland-output-manager-unstable-v2 to uuid addressing * docs: state output uuid is immutable and emitted once * feat: add treeland-output-group-manager unstable-v1 protocol and deprecate treeland-virtual-output-manager-v1 * docs: clarify font size unit is points * 10 -- rewine Thu, 22 Oct 2026 12:30:00 +0800 treeland-protocols (0.7.0) unstable; urgency=medium * feat: add normal role to dde-shell surface role enum * refactor(window-transition): attach rect to activation token string * feat: add XKB settings to input manager * feat(window-transition): use a live source surface for the transition * feat(protocol): add treeland-snap-target-unstable-v1 protocol * refactor: rework dde-shell placement requests as position hints * refactor: rename region-watch and move dde-shell-v2 to dde/ * refactor: rename active-notify events to notify style * feat: add treeland-dde-shell unstable-v2 protocol * feat: add treeland-compositor-action unstable-v1 protocol * feat: add treeland-window-overlap-checker unstable-v1 protocol * feat: add treeland-active-notify unstable-v1 protocol * feat: drop alpha from accent color in appearance protocols * feat(protocol): add treeland-window-transition-unstable-v1 protocol * feat: add treeland-xwindow-control unstable-v1 protocol * revert(remote-subsurface): drop place_above_all/place_below_all, restore empty-string sentinel at v1 * feat(layer-shell-extension): add wl_surface error codes -- rewine Sat, 10 Oct 2026 13:30:30 +0800 treeland-protocols (0.6.0) unstable; urgency=medium * feat(layer-shell-extension): add treeland layer shell extension protocol * feat: add treeland-output-manager unstable-v2 protocol * refactor: replace shortcut-manager-v2 with unstable-v3 * feat: add foreign-toplevel-manager unstable-v2 protocol * refactor: split personalization-manager-v1 into 3 protocols * feat: split show-desktop protocol from window-management * feat: add virtual_output_modified event to virtual output protocol * refactor: adopt unstable-v2 naming for internal protocols * refactor: normalize wine protocol and interface names * deprecate: move treeland-capture-unstable-v1 to deprecated/ * deprecate: move treeland-ddm-v1 to deprecated/ -- rewine Thu, 10 Sep 2026 19:36:09 +0800 treeland-protocols (0.5.10) unstable; urgency=medium * protocols: mark all treeland protocols as experimental with no compatibility guarantees * protocols: add treeland-remote-subsurface-unstable-v1 * feat(shortcut): add tile_left and tile_right actions * docs: update treeland personalization protocol documentation -- rewine Fri, 14 Aug 2026 13:29:46 +0800 treeland-protocols (0.5.9) unstable; urgency=medium * feat(wallpaper-shell): bump treeland_wallpaper_shell_v1 to version 2 * feat: remove wallpapercontext from personalization manager -- YaoBing Xiao Tue, 16 Jun 2026 14:41:16 +0800 treeland-protocols (0.5.8) unstable; urgency=medium * feat: add treeland-keyboard-state-notify-unstable-v1 protocol * feat(input-manager): document valid ranges for scroll factor and accel speed * feat(input-manager): remove bitfield flag from acceleration_profile enum * feat(input-manager): clarify seat association and destruction order for settings objects * feat(wallpaper): document wl_output destruction order requirement * feat(treeland-wine-window-management): add serial to position requests * feat: add ready request for initial wallpaper synchronization * feat: add one-shot shortcut capture interface * feat: add treeland-input-manager-unstable-v1 protocol * refactor: protocol cleanup and version normalization -- rewine Thu, 04 Jun 2026 16:04:48 +0800 treeland-protocols (0.5.7) unstable; urgency=medium * docs: clarify virtual output validation and error codes * foreign-toplevel: add attention state -- rewine Fri, 22 May 2026 09:43:40 +0800 treeland-protocols (0.5.6) unstable; urgency=medium * fix(xml): fix wine window management stacking docs * chore: prettify treeland-capture protocol * chore: remove commented pointer grab protocol sections * refactor: update window management protocol XMLs * treeland-protocols: add Wine Wayland split protocols * feat: add destructor methods and reorganize protocol * chore: treeland-protocol-templated Treeland Wayland protocol authoring skill -- rewine Sat, 09 May 2026 09:55:30 +0800 treeland-protocols (0.5.5) unstable; urgency=medium * feat: add prelaunch splash screen protocol v2 -- rewine Sat, 28 Feb 2026 13:54:07 +0800 treeland-protocols (0.5.4) unstable; urgency=medium * chore: rename move_xwayland_surface to set_position_relative * feat: add treeland_wallpaper_v1 protocol for per-output wallpapers * feat: expose a method to move XWayland window position relative to wl_surface -- rewine Thu, 29 Jan 2026 20:28:33 +0800 treeland-protocols (0.5.3) unstable; urgency=medium * fix: replace XML comments with tags * fix: align protocol and interface names with filenames * fix: correct nonexistent enum reference in protocol -- rewine Thu, 15 Jan 2026 10:43:54 +0800 treeland-protocols (0.5.2) unstable; urgency=medium * fix: enum reference in set_blend_mode request * chore: remove since="1" attributes from protocols * feat: add optional icon buffer parameter to splash screen * fix: fix protocol specification errors and warnings * feat: enhance Wayland protocol with sandbox support * feat: add new Wayland protocols for app launching * fix: correct duplicate enum value in shortcut management protocol & add missing actions * feat: enhancements to treeland-shortcut-manager-v1 protocol * feat: Add treeland-screensaver-v1 protocol -- zhangkun Thu, 18 Dec 2025 17:32:46 +0800 treeland-protocols (0.5.1) unstable; urgency=medium * feat: support setting brightness and color temperature in treeland- output-manager protocol -- rewine Fri, 14 Nov 2025 11:27:09 +0800 treeland-protocols (0.5.0) unstable; urgency=medium * feat: add treeland-ddm communication protocol -- rewine Thu, 21 Aug 2025 11:39:06 +0800 treeland-protocols (0.4.5) unstable; urgency=medium * bump version to 0.4.5 -- rewine Fri, 06 Dec 2024 15:05:05 +0800 treeland-protocols (0.4.4) unstable; urgency=medium * bump version to 0.4.4 -- Groveer Tue, 26 Nov 2024 19:49:21 +0800 treeland-protocols (0.4.3) unstable; urgency=medium * bump version to 0.4.3 -- Groveer Wed, 20 Nov 2024 16:19:23 +0800 treeland-protocols (0.4.2) unstable; urgency=medium * bump version to 0.4.2 -- Groveer Thu, 14 Nov 2024 13:37:11 +0800 treeland-protocols (0.4.1) unstable; urgency=medium * update appearance -- Dingyuan Zhang Fri, 01 Nov 2024 11:07:40 +0800 treeland-protocols (0.4) unstable; urgency=medium * Initial release -- Dingyuan Zhang Tue, 12 Dec 2023 20:07:40 +0800 linuxdeepin-treeland-protocols-bfdd6e0/debian/control000066400000000000000000000010111527251314000232460ustar00rootroot00000000000000Source: treeland-protocols Priority: optional Maintainer: rewine Build-Depends: cmake (>= 3.4~), debhelper-compat (= 13), Standards-Version: 4.6.0 Section: dde Homepage: https://github.com/linuxdeepin/treeland-protocols #Vcs-Browser: https://salsa.debian.org/debian/treeland #Vcs-Git: https://salsa.debian.org/debian/treeland.git Rules-Requires-Root: no Package: treeland-protocols Section: dde Architecture: all Depends: ${misc:Depends}, Description: wayland protocols of treeland. linuxdeepin-treeland-protocols-bfdd6e0/debian/copyright000066400000000000000000000006111527251314000236030ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: treeland-protocols Source: https://github.com/linuxdeepin/treeland-protocols Files: .github/* .obs/*.yml garnix.yaml Copyright: None License: CC0-1.0 Files: *.md README.md README.zh_CN.md CONTRIBUTING.md ChangeLog CONTRIBUTORS Copyright: UnionTech Software Technology Co., Ltd. License: MIT linuxdeepin-treeland-protocols-bfdd6e0/debian/rules000077500000000000000000000002361527251314000227330ustar00rootroot00000000000000#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 %: dh $@ linuxdeepin-treeland-protocols-bfdd6e0/debian/source/000077500000000000000000000000001527251314000231525ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/debian/source/format000066400000000000000000000000151527251314000243610ustar00rootroot000000000000003.0 (native) linuxdeepin-treeland-protocols-bfdd6e0/deprecated/000077500000000000000000000000001527251314000225305ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/deprecated/README.md000066400000000000000000000001771527251314000240140ustar00rootroot00000000000000Deprecated protocols. No longer implemented or their implementation reliability is not guaranteed in new versions of Treeland. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/README.zh_CN.md000066400000000000000000000001341527251314000250050ustar00rootroot00000000000000已弃用的协议。不再实现,或在 Treeland 新版本中不保证实现可靠性。 linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-app-id-resolver-v1.xml000066400000000000000000000076531527251314000304160ustar00rootroot00000000000000 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. Create a resolver object. Typically exactly one privileged helper (a Wayland client with DBus access) binds this interface and serves identification requests coming from the compositor. Create or bind a resolver object. Only one resolver may be registered per session. Treeland is a multi-user compositor; different user sessions may each register their own resolver. If a resolver is already bound in the same session, the compositor will report an error on the manager and will NOT create a new resolver object for this request. The compositor sends identify_request with a unique request_id and a pidfd. The client must answer exactly once via respond(request_id, app_id). If resolution fails respond with an empty string. Sent by the compositor to ask the helper to resolve a process to an application identifier. Respond to an identify_request. The sandbox_engine_name must be provided and matches the context in which the process is running (container, sandbox, etc). If resolution fails, respond with an empty app_id. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-capture-unstable-v1.xml000066400000000000000000000262411527251314000306550ustar00rootroot00000000000000 This protocol allows authorized application to capture output contents or window contents(useful for window streaming). 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. Represents a persistent screen capture session that continuously sends frames. Unreferences the frame. This request must be called as soon as it's no longer valid. Start session and keeps sending frame. This is the ACK to the current "ready" event. The next "frame" event will be sent only when current "ready" event is acknowledged. The timestamp should be the same as the one sent in "ready" event. If the frame has the "transient" flag, all objects sent before become invalid after this event. Main event supplying the client with information about the frame. If the capture didn't fail, this event is always emitted first before any other events. When mask is provided, x and y should be offset relative to mask surface origin. Otherwise offset_x and offset_y should always be zero. Provides a DMA-BUF object for the current frame. This event is sent as soon as the frame is presented, indicating it is available for reading. This event includes the time at which presentation happened at. If the capture failed or if the frame is no longer valid after the "frame" event has been emitted, this event will be used to inform the client to scrap the frame. Destroys the context. This request can be sent at any time by the client. Copy capture contents to provided buffer Inform client to prepare buffer. Inform client that all buffer formats supported are emitted. Provides flags about the frame. This event is sent once before the "ready" event. Inform that buffer is ready for reading Inform that frame copy fails. Destroys the context. This request can be sent at any time by the client. Selector is provided by compositor. Client can provide source hint to hint compositor to provide certain kinds of source. This request can be called just once. A second call might result in a protocol error cause we just provide transient Often used by a screen recorder. This event supplies the client some information about the capture source, including the capture region relative to mask and source type. There could a lot of reasons but the most common one is that selector is busy Global factory for creating capture sessions and capture contexts. Destroy the treeland_capture_manager_v1 object. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-dde-shell-v1.xml000066400000000000000000000432351527251314000272420ustar00rootroot00000000000000 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 interface allows DDE to configure some treeland functions. 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. Create a shell surface for an existing wl_surface. Only one shell surface can be associated with a given surface. Recommended for use with xdg_surface. 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. 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. Create a new window picker to pick window. 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. Deprecated: this request is non-functional and has no effect. Superseded by the set_xwindow_position_relative request of the treeland_xwindow_control_v1 global of the treeland-xwindow-control-unstable-v1 protocol. Destroy the treeland_dde_shell_manager_v1 object. 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. Sent when the detected window region begins to overlap with any xdg-shell toplevel. Sent at most once per update cycle. Sent when the detected window region no longer overlaps with any xdg-shell toplevel. Sent at most once per update cycle. same layershell This interface is used to receive the detected surface. When the xdgshell window in the workspace overlaps with the detected window, an event will be sent to notify the client to process it. The window position will only be recorded when this interface is called. If the window moves, this interface needs to be called again. Destroys the treeland_window_overlap_checker object. Send this request when the client no longer needs overlap notifications from this object. An interface that may be implemented by a wl_surface, for implementations that provide the shell user interface. It provides requests to set surface role, set skip, set the position set auto placement in output coordinates. On the server side the object is automatically destroyed when the related wl_surface is destroyed. On client side, treeland_dde_shell_surface_v1.destroy() must be called before destroying the wl_surface object. The treeland_dde_shell_surface_v1 interface is removed from the wl_surface object that was turned into a shell surface with the treeland_dde_shell_manager_v1.get_shell_surface request. The shell surface role is lost and wl_surface is unmapped. Move the surface to new coordinates. Coordinates are global, for example 50,50 for a 1920,0+1920x1080 output is 1970,50 in global coordinates space. These values indicate which roles a surface can be rendered in, They are ordered by z depth. Displayed below wlr-layer-shell, at the overlay level of the workspace. Multiple surfaces can share a single role, and ordering within a single role is undefined. Assign a role to a shell surface. Set the vertical alignment of the surface within the cursor width. Do not use it together with set_surface_position to avoid exceptions. The position of the surface will be controlled by the compositor after the request, including preventing it from being displayed beyond the edge of the output. Setting this bit will indicate that the window prefers not to be listed in a switcher. Setting this bit will indicate that the window prefers not to be listed in a dock preview. Setting this bit will indicate that the window prefers not to be listed in a mutitask view. Setting this will determine whether the 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 (default), the surface will receive keyboard focus normally. 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. Destroy this object. 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. Destroy this multitaskview context object. Show or hide the multitaskview. An interface used to pick window and return credentials. Destroy this window picker object. Pick a window to get information. Picked window information. 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. Destroy this lockscreen context object. Lock the screen. Show shutdown. Switch user. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-ddm-v1.xml000066400000000000000000000076131527251314000261450ustar00rootroot00000000000000 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 is the treeland - ddm private communication protocol. This object is primarily used for establish connection between treeland and ddm. Send treeland to Greeter mode. Set lockscreen user to username. Ignore when username is "ddm". This is used to prevent ddm from triggering a user switch back to the greeter. Activate treeland session. This will makes treeland try to take control of screen. Deactivate treeland session. This will release control of the screen, but not to close the current seats. Enable treeland rendering. This is primarily called after disable_render to resume treeland. Disable treeland rendering. This will prevent treeland from output to DRM device. Destroys this treeland_ddm_v1 object. Call ddm to switch current virtual terminal to vtnr. ddm should take care of the switch and call ioctl respectively. Call ddm to acquire control of VT at vtnr. ddm should call VT_SETMODE respectively. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-foreign-toplevel-manager-unstable-v2.xml000066400000000000000000000721051527251314000341040ustar00rootroot00000000000000 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 privileged clients such as dock or taskbar components to observe and manage toplevel windows on behalf of the compositor. It provides access to window metadata (title, app-id, state, parent, outputs), allows requests to maximize, minimize, activate, close, or fullscreen a toplevel, and supports a dock preview context for thumbnail display and tooltip overlays. The terms "must", "must not", "should", "may", and "recommended" in this document are to be interpreted as described in RFC 2119. A singleton global that emits one treeland_foreign_toplevel_handle_v2 object per mapped toplevel window. Clients bind this global to receive the toplevel event stream and to create dock preview contexts. A toplevel is defined as a surface with a role similar to xdg_toplevel. XWayland surfaces may be treated like toplevels in this protocol. Clients which only care about the current state can perform a roundtrip after binding this global. The typical lifecycle is: 1. Client binds treeland_foreign_toplevel_manager_v2. 2. Compositor emits a toplevel event for each already-mapped toplevel, followed by individual property events and a done event on each handle. 3. As windows appear and disappear the compositor emits further toplevel events and closed events on the corresponding handles. 4. When the client no longer needs the manager it sends stop, waits for the finished event, destroys the handles, and then the manager itself. Outstanding handles remain usable until the client destroys them individually. Error values raised as protocol errors on misuse of treeland_foreign_toplevel_manager_v2 requests. This request should be called either when the client will no longer use the manager, or after the finished event has been received. If a client wishes to destroy this object it should send a stop request and wait for a finished event, then destroy the handles and then this object. Existing treeland_foreign_toplevel_handle_v2 objects created through this manager are not affected and must be destroyed separately by the client. This request indicates that the client no longer wishes to receive events for new toplevels. The Wayland protocol is asynchronous, meaning the compositor may send further toplevel events until the stop request is processed. The client should wait for a finished event before destroying this object. Create a treeland_dock_preview_context_v2 associated with the given surface. The surface must be a valid wl_surface owned by the calling client and serves as the anchor for all preview and tooltip positioning. Only one dock preview context may be active per surface at a time. If the surface already has an active context, the client must destroy it via treeland_dock_preview_context_v2.destroy before creating a new one; otherwise the compositor raises the context_already_exists protocol error and does not create the requested object. Emitted by the compositor whenever a new toplevel window is mapped. The event is sent for all toplevels regardless of which application created them. Immediately after this event the compositor will send the initial property events (title, app_id, pid, identifier, state, output_enter, parent, and so on) on the new handle, followed by a done event. The client should treat all property events received before the first done as the initial snapshot. This event indicates that the compositor is done sending events to this object. The client should destroy the object. See treeland_foreign_toplevel_manager_v2.destroy for more information. The compositor must not send any more toplevel events after this event. Outstanding treeland_foreign_toplevel_handle_v2 objects are not affected by this event. Represents a single mapped toplevel window. The compositor creates this object in response to the manager's toplevel event and destroys the server-side resource when the window is unmapped (signalled by the closed event). After the compositor sends closed, the client must not send any requests other than destroy. The client should call destroy promptly after receiving closed to release compositor-side tracking state. All property events (title, app_id, pid, identifier, output_enter, output_leave, state, parent) are grouped by a trailing done event so that a batch of related changes appears atomic to the client. Flags that describe the current state of a toplevel window. These correspond to the states with the same names defined in the xdg-toplevel interface. Each flag is encoded as a uint32 value in the array sent by the state event. Error values raised as protocol errors on misuse of treeland_foreign_toplevel_handle_v2 requests. Destroy the treeland_foreign_toplevel_handle_v2 object and release all associated client-side resources. This request may be sent at any time, including before the compositor sends the closed event. When sent after closed, it finalizes the destruction sequence initiated by the compositor. When sent before closed, the compositor will silently drop any further events for this handle. When a handle is destroyed, a new handle may not be created by the compositor until the toplevel is unmapped and then remapped. Destroying a toplevel handle is not recommended unless the client is cleaning up child objects before destroying the manager, the toplevel was closed, or the handle will not be used in the future. Other protocols which extend the treeland_foreign_toplevel_handle_v2 interface should require destructors for extension interfaces to be called before allowing the toplevel handle to be destroyed. Request that the compositor maximize the toplevel. The compositor may ignore the request. If the maximized state changes, the compositor will reflect this in a subsequent state event followed by done. Request that the compositor restore the toplevel from the maximized state. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor minimize the toplevel. The compositor may ignore the request. If the minimized state changes, the compositor will reflect this in a subsequent state event followed by done. Request that the compositor restore the toplevel from the minimized state. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor fullscreen the toplevel on the given output. If output is null, the compositor chooses the output. The output argument is a hint only; the compositor may fullscreen on a different output or not at all. If the fullscreen state or visible outputs change, the compositor will reflect this via state and output_enter / output_leave events followed by done. Request that the compositor exit the fullscreen state for the toplevel. The compositor may ignore the request. If the state changes, it is reflected via state and done events. Request that the compositor give keyboard focus to the toplevel on the given seat. There is no guarantee the toplevel will actually be activated; the compositor may ignore the request based on seat focus policy or security considerations. Send a close request to the toplevel. The compositor typically forwards this to the application using a shell-specific mechanism such as xdg_toplevel.close. There is no guarantee the application will honour the request. If the toplevel is eventually unmapped, the compositor will emit the closed event on this handle. Inform the compositor of the rectangle on surface that visually represents this toplevel (for example the taskbar icon or thumbnail), similar to the EWMH _NET_WM_ICON_GEOMETRY property. The compositor may use this as a hint for minimize animations or similar effects. The client is not required to set this geometry. If unset, the compositor applies an implementation-defined default. If the client sets multiple rectangles, only the last one takes effect. Coordinates are in surface-local space of the given surface. Setting width = height = 0 removes a previously set geometry. The compositor raises the invalid_geometry error if the provided dimensions are otherwise out of range. Emitted by the compositor when it knows the process ID of the application that owns this toplevel. This event is sent once as part of the initial property snapshot, before the first done event, and is not re-sent unless the owning process changes. Emitted whenever the title of the toplevel changes. The initial title is sent as part of the snapshot before the first done event. Emitted whenever the app-id of the toplevel changes. The initial app-id is sent as part of the snapshot before the first done event. This identifier is used to check if two or more toplevel handles belong to the same toplevel. The identifier is useful for command line tools or privileged clients which may need to reference an exact toplevel across processes or instances of the treeland_foreign_toplevel_manager_v2 global. The compositor sends this event exactly once, when the handle is created, as part of the initial property snapshot. The identifier must be unique per toplevel and its handles. Two different toplevels must not have the same identifier. The identifier is only valid as long as the toplevel is mapped. If the toplevel is unmapped the identifier must not be reused. An identifier must not be reused by the compositor to ensure there are no races when sharing identifiers between processes. Emitted when the toplevel becomes visible on the given output. A toplevel may be visible on multiple outputs simultaneously. This event is sent as part of the initial snapshot and whenever the set of visible outputs changes. Emitted when the toplevel stops being visible on the given output. A corresponding output_enter event for the same output is guaranteed to have been sent before this event. Emitted immediately after the handle is created as part of the initial property snapshot, and again each time the toplevel state changes due to a compositor action or a client request on this protocol. The state argument is an array of uint32 values, each corresponding to an entry in the treeland_foreign_toplevel_handle_v2.state enum. An entry is present in the array when the corresponding state is active. Emitted after the compositor has sent all property events for the current atomic update batch (title, app_id, pid, identifier, state, output_enter, output_leave, parent). The client should process the preceding events as a single coherent state snapshot only upon receiving done. This allows changes to the treeland_foreign_toplevel_handle_v2 properties to be atomically applied. Other protocols which extend the treeland_foreign_toplevel_handle_v2 interface may use this event to also atomically apply any pending state. This event must not be sent after the treeland_foreign_toplevel_handle_v2.closed event. Emitted when the toplevel is unmapped or destroyed by the compositor. No further property events will be sent on this handle after closed. The handle becomes inert; the client must not send any requests except destroy, which it should call promptly to release compositor-side tracking resources. Other protocols which extend the treeland_foreign_toplevel_handle_v2 interface must also ignore requests other than their destructors. Emitted whenever the parent-child relationship of this toplevel changes. The parent arg is null when the toplevel has no parent (i.e. it is a top-level root window). This event is not re-sent when the client destroys the parent handle; the relationship on the compositor side is unchanged by client-side destruction of the parent object. Provides the dock or taskbar component with the ability to display a thumbnail preview of one or more toplevels and to show tooltip overlays, both positioned relative to the anchor surface supplied to get_dock_preview_context. The object is created by treeland_foreign_toplevel_manager_v2.get_dock_preview_context and is valid until the client calls destroy. The compositor emits enter and leave events when the pointer enters or leaves the active preview area. Specifies on which side of the anchor surface the preview popup or tooltip should appear. The compositor uses this value as a placement hint; it may choose a different side if the requested side would be clipped by the screen edge. Destroy the treeland_dock_preview_context_v2 object and release all associated compositor resources. Any visible preview or tooltip is hidden immediately. After this request the compositor will no longer send any event. Request that the compositor display thumbnail previews for the toplevels identified by the identifiers array. The popup is positioned at (x, y) in the coordinate space of the anchor surface supplied at context creation, on the side indicated by direction. The identifiers argument is a wl_array of uint32 identifier values, each matching the identifier sent by the treeland_foreign_toplevel_handle_v2.identifier event. The compositor ignores identifiers that do not correspond to a currently mapped toplevel. Calling show while a preview is already visible replaces the previous content atomically. Request that the compositor display a text tooltip at (x, y) in the coordinate space of the anchor surface, on the side indicated by direction. Any previously visible tooltip from this context is replaced. Calling show_tooltip while a preview is visible does not hide the preview; both may be visible simultaneously depending on compositor policy. Request that the compositor hide the currently visible preview popup. If no preview is visible this request is a no-op. The tooltip, if any, is not affected. Emitted when the pointer device enters the active preview popup area managed by this context. The compositor sends this event only while a preview is visible (i.e. after show and before close or destroy). Emitted when the pointer device leaves the active preview popup area managed by this context. A corresponding enter event is guaranteed to have been sent before this event. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-foreign-toplevel-manager-v1.xml000066400000000000000000000404201527251314000322630ustar00rootroot00000000000000 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 interface allows a client to observe information about toplevel windows managed by the compositor. This event is emitted whenever a new toplevel window is created. It is emitted for all toplevels, regardless of the app that has created them. All initial details of the toplevel(title, app_id, states, etc.) will be sent immediately after this event via the corresponding events in treeland_foreign_toplevel_handle_v1. Indicates the client no longer wishes to receive events for new toplevels. However the compositor may emit further toplevel_created events, until the finished event is emitted. The client must not send any more requests after this one. This event indicates that the compositor is done sending events to the treeland_foreign_toplevel_manager_v1. The server will destroy the object immediately after sending this request, so it will become invalid and the client should free any resources associated with it. Create a treeland_dock_preview_context_v1 for the given surface. A treeland_foreign_toplevel_handle_v1 object represents an opened toplevel window. Each app may have multiple opened toplevels. This event will be sent when the compositor has set the process id this window belongs to. This should be set once before the initial_state is sent. This event is emitted whenever the title of the toplevel changes. This event is emitted whenever the app-id of the toplevel changes. The identifier of each top level and its handle must be unique. Two different top layers cannot have the same identifier. This identifier is only valid as long as the top level is mapped. Identifiers must not be reused if the top level is not mapped. The compositor must not reuse identifiers to ensure there are no races when identifiers are shared between processes. This event is emitted whenever the toplevel becomes visible on the given output. A toplevel may be visible on multiple outputs. This event is emitted whenever the toplevel stops being visible on the given output. It is guaranteed that an entered-output event with the same output has been emitted before this event. Requests that the toplevel be maximized. If the maximized state actually changes, this will be indicated by the state event. Requests that the toplevel be unmaximized. If the maximized state actually changes, this will be indicated by the state event. Requests that the toplevel be minimized. If the minimized state actually changes, this will be indicated by the state event. Requests that the toplevel be unminimized. If the minimized state actually changes, this will be indicated by the state event. Request that this toplevel be activated on the given seat. There is no guarantee the toplevel will be actually activated. The different states that a toplevel can have. These have the same meaning as the states with the same names defined in xdg-toplevel This event is emitted immediately after the treeland_foreign_toplevel_handle_v1 is created and each time the toplevel state changes, either because of a compositor action or because of a request in this protocol. This event is sent after all changes in the toplevel state have been sent. This allows changes to the treeland_foreign_toplevel_handle_v1 properties to be seen as atomic, even if they happen via multiple events. Send a request to the toplevel to close itself. The compositor would typically use a shell-specific method to carry out this request, for example by sending the xdg_toplevel.close event. However, this gives no guarantees the toplevel will actually be destroyed. If and when this happens, the treeland_foreign_toplevel_handle_v1.closed event will be emitted. The rectangle of the surface specified in this request corresponds to the place where the app using this protocol represents the given toplevel. It can be used by the compositor as a hint for some operations, e.g minimizing. The client is however not required to set this, in which case the compositor is free to decide some default value. If the client specifies more than one rectangle, only the last one is considered. The dimensions are given in surface-local coordinates. Setting width=height=0 removes the already-set rectangle. This event means the toplevel has been destroyed. It is guaranteed there won't be any more events for this treeland_foreign_toplevel_handle_v1. The toplevel itself becomes inert so any requests will be ignored except the destroy request. Destroys the treeland_foreign_toplevel_handle_v1 object. This request should be called either when the client does not want to use the toplevel anymore or after the closed event to finalize the destruction of the object. Requests that the toplevel be fullscreened on the given output. If the fullscreen state and/or the outputs the toplevel is visible on actually change, this will be indicated by the state and output_enter/leave events. The output parameter is only a hint to the compositor. Also, if output is NULL, the compositor should decide which output the toplevel will be fullscreened on, if at all. Requests that the toplevel be unfullscreened. If the fullscreen state actually changes, this will be indicated by the state event. This event is emitted whenever the parent of the toplevel changes. No event is emitted when the parent handle is destroyed by the client. This interface allows dock set windows preview. Direction of the dock preview relative to the anchor surface. This event is sent after mouse enter preview box. This event is sent after mouse leave preview box. X and Y are relative to the relative_surface. surfaces wl_array is identifiers. Show a tooltip at the specified position relative to the relative_surface. Close the preview box and hide it. Destroy the context object. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-output-manager-v1.xml000066400000000000000000000132431527251314000303450ustar00rootroot00000000000000 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. Protocol for telling which is the primary display among the selection of enabled outputs. Select the primary output by name. The compositor will emit a primary_output event with the current primary output name upon binding. Specifies which output is the primary one identified by their name. Protocol for controlling color temperature and brightness settings of a specific output. Color temperature settings are applied only after a commit request is made. Setting a value outside the range [1000, 20000] is a protocol error. Brightness settings are applied only after a commit request is made. Setting a value outside the range [0.0, 100.0] is a protocol error. Provides the current color temperature setting of the output. Color temperature is valued in the range [1000, 20000]. Color temperature is defined as the corresponding temperature (in Kelvin) of the current white point of the display on a Planckian locus. With the current implementation, the neutral temperature is 6600K. This event is sent once after the treeland_output_color_control_v1 object is created, or right after when a color temperature change for the output is successfully committed. Provides the current brightness setting of the output. Brightness is valued in the range [0.0, 100.0]. This event is sent once after the treeland_output_color_control_v1 object is created, or right after when a brightness change for the output is successfully committed. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-personalization-manager-v1.xml000066400000000000000000000450211527251314000322250ustar00rootroot00000000000000 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 interface allows a client to customize display effects. set window background, shadow based on context Create a cursor customization context for configuring the system cursor. custom treeland and window global font context custom user treeland window appearance global This interface allows a client personalization cursor. Set the system cursor theme name. Query the current system cursor theme name. The compositor will respond with a theme event. Set the system cursor size. Query the current system cursor size. The compositor will respond with a size event. Apply pending cursor configuration changes. Destroy the context object. Send this signal after commit cursor configure. Sent when the system cursor theme has changed. Sent when the system cursor size has changed. This interface allows a client to customize per-window visual properties including background blend mode, round corner radius, shadow, border, and titlebar visibility. Window blend mode defines how compositor composite window's surface over other surfaces. Set window background blend mode This request will set window round corner radius, invoking this request means user want to manage window round corner radius by itself. If not invoked, window round corner radius will be decided by compositor. Set window shadow's radius, offset and color. When enabled, the client manages the window shadow itself. - radius = -1: enable shadow with system default parameters - radius = 0: disable shadow completely - radius > 0: enable shadow with custom parameters If not invoked, the compositor uses its default behavior. Set window border width and color. When enabled, the client manages the window border itself. - width = -1: enable border with system default parameters - width = 0: disable border completely - width > 0: enable border with custom parameters If not invoked, the compositor uses its default behavior. Set window enable mode Set system titlebar state. - mode = enable: force show the system titlebar - mode = disable: force hide the system titlebar Once set, the compositor will not use its own default behavior for the titlebar. If not invoked, the compositor uses its default behavior. Destroy the context object. This interface allows a client to configure global font settings including the general font, monospace font, and font size. Send this signal after setting the system font. Send this signal after setting the system monospace font. Send this signal after setting the system font size. Set the system font size Get the system font size Set the system font Get the system font Set the system monospace font Get the system monospace font Destroy the context object. This interface allows a client to configure global appearance settings including round corner radius, icon theme, active color, window opacity, window theme type, and window titlebar height. Send this signal after setting the round corner radius. Send this signal after setting the system icon theme. Send this signal after setting the system active color Sent when the window opacity has changed. Send this signal after setting the system theme Send this signal after setting the window titlebar height Set window round corner radius Get window round corner radius Set the system icon theme Get the system icon theme Set the system active color Get the system active color Set the window opacity. Get the current window opacity. Set the window theme. Get the window theme type Set the window titlebar height Get the window titlebar height Destroy the context object. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-prelaunch-splash-v1.xml000066400000000000000000000054401527251314000306460ustar00rootroot00000000000000 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 interface is a manager for creating prelaunch splash screens. A prelaunch splash screen is a placeholder surface that is shown before an application's main window is mapped. This helps to improve the perceived startup time. It is particularly useful for application launchers to provide immediate feedback to the user. Creates a new prelaunch splash screen. The `app_id` is a string that identifies the application. The compositor will use this ID together with `sandbox_engine_name` to match the splash screen with the actual application window when it appears. This matching mechanism should also work for XWayland windows. Callers MUST provide a non-empty `sandbox_engine_name` string which identifies the sandboxing/container. If there is already an active (not-yet-completed) splash for the same `sandbox_engine_name` and `app_id`, the compositor will silently ignore this request (no new splash will be created and no error is raised). linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-screensaver-v1.xml000066400000000000000000000053231527251314000277150ustar00rootroot00000000000000 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 object implements a simple idle inhibit protocol used to implement org.freedesktop.ScreenSaver D-Bus interface. Call inhibit to prevent treeland from entering idle state. Call uninhibit or disconnect from the global to release the inhibit. If the client disconnects from the compositor, the inhibit associated with that client is automatically released. There can be only one inhibit per client per time. Calling inhibit multiple times will raise an error. Call uninhibit before inhibit to update application_name and reason recorded. Inhibit idleness with given application_name and reason_for_inhibit. Uninhibit idleness previously inhibited by inhibit request. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-shortcut-manager-v1.xml000066400000000000000000000046631527251314000306660ustar00rootroot00000000000000 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 interface allows a client to get some shell's info. The format of the shortcut key is 'Modify+Key', such as 'Ctrl+Alt+T'. If the format is wrong, the synthesizer will give a "format error". If the shortcut key is already registered, the compositor will give a "register error" and issue a destruction to the context. This interface allows a client to listen a shortcut action. Destroy the context object. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-shortcut-manager-v2.xml000066400000000000000000000502161527251314000306620ustar00rootroot00000000000000 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 interface allows privileged clients to register global shortcuts. In treeland, global shortcuts are managed in a per-user context. Shortcuts for different users are isolated, and will not interfere with each other. This allows multiple users to use their own set of global shortcuts on the same system without conflicts. This behavior is transparent to the clients of this interface (i.e., the user context used by this protocol is the same as that of the client.) Compositor actions that can be assigned to a shortcut. Flags to specify the keybinding mode. With key_press, the action is triggered on key press. With key_release, the action is triggered on key release. With repeat, the action is repeatedly triggered if the key is held down. Examples: key_press | repeat: the action is triggered on key press, and repeatedly triggered if the key is held down. key_press | key_release: the action is triggered on both key press and key release, auto-repeated events are ignored. key_press | key_release | repeat: note that treeland repeats both key press and key release events. Error codes indicating the reason of a binding failure. Destroy the shortcut manager. Existing shortcuts created through this interface remain valid. Acquire the shortcut manager for the current client. This request must be sent before any bind/unbind request can be performed. Only one client can hold exclusive control of the shortcut manager at a time, for a given session. If the shortcut manager is already acquired by another client, the compositor will raise the `occupied` protocol error. Bind a key sequence to a compositor action. The key sequence is specified in the string format used by QKeySequence, see https://doc.qt.io/qt-6/qkeysequence.html#toString for details. Sending this request without first acquiring the shortcut manager will result in a `not_acquired` protocol error. The name argument must be unique among all existing bindings. If a binding with the same name already exists, the bind_key request will fail. The action argument specifies the compositor action to be executed when the key sequence is activated. Each keybind has a flags argument that specifies the exact triggering condition, see the documentation of the keybind_flag enum for details. If a binding with the same key sequence and action already exists, its flags will be updated to the new value. Note that the binding will not take effect until a commit request is sent. Bind a swipe gesture to a compositor action. Sending this request without first acquiring the shortcut manager will result in a `not_acquired` protocol error. The name argument must be unique among all existing bindings. If a binding with the same name already exists, the bind_swipe_gesture request will fail. The direction argument specifies the direction towards which the swipe gesture must be performed. If this argument is not one of the defined enum values, the bind_swipe_gesture request will fail. The action argument specifies the compositor action to be executed when the swipe gesture is activated. If a binding with the same gesture and action already exists, the bind_swipe_gesture request will fail. Note that the binding will not take effect until a commit request is sent. Bind a hold gesture to a compositor action. Sending this request without first acquiring the shortcut manager will result in a `not_acquired` protocol error. The name argument must be unique among all existing bindings. If a binding with the same name already exists, the bind_hold_gesture request will fail. The action argument specifies the compositor action to be executed when the hold gesture is activated. If a binding with the same gesture and action already exists, the bind_hold_gesture request will fail. Note that the binding will not take effect until a commit request is sent. Commit the pending bindings. This request applies all the bind_key, bind_swipe_gesture and bind_hold_gesture requests sent since the last commit. After processing this request, the compositor will emit a `commit_success` event if the commit was successful or `commit_failure` event if the commit failed. On a successful commit, all the pending bindings will take effect. On a failed commit, none of the pending bindings will take effect. Sending this request without first acquiring the shortcut manager will result in a `not_acquired` protocol error. Sending further commit requests before `commit_success` or `commit_failure` is sent is a protocol error. Remove an existing binding. Sending this request without first acquiring the shortcut manager will result in a `not_acquired` protocol error. The binding to be removed is identified by its unique name. If no binding with the specified name exists, the unbind request has no effect. Request the compositor to capture the next shortcut input once, bound to the provided surface. The capture object is created by this request via new_id. The compositor performs validation after receiving the request, and may immediately emit a terminal event on the newly created object. Clients must be prepared to handle a capture object that is failed immediately after creation. The surface argument must be a wl_surface owned by the requesting client. Otherwise, the compositor will raise the `invalid_surface` protocol error. The compositor must verify that the provided surface currently has keyboard focus or is active before starting capture. If this check fails, the compositor must first decide that capture does not start, and then must emit `failed` with reason `not_active` on the created object. The compositor monitors both key_press and key_release events during capture. The shortcut candidate is established on key_press of a valid non-modifier key; the terminal event (captured or failed) is sent on key_release of that non-modifier key. Pure modifier-only key presses (e.g. Ctrl, Alt, Shift) are silently consumed while waiting for a non-modifier key. Auto-repeat events are consumed and ignored. If the next intercepted input is not a valid shortcut input (for example: unmodified alphanumeric keys such as a, b, c, d, 1, 2, 3, unmodified Escape, or pointer button and wheel events), the compositor must fail capture with reason `interrupted`. For either `interrupted` failure or successful `captured`, the triggering input event must be consumed by the compositor and must not be forwarded to the client. The compositor creates a treeland_shortcut_capture_v1 object and starts a one-shot capture flow for this request. This request does not modify existing shortcut bindings. This request does not require acquire. This event is emitted when a binding registered with action `notify` is activated. The flags argument indicates the type of key event as defined in the keybind_flag enum. This event is emitted in response to a commit request, indicating that the commit was successful. This event is emitted in response to a commit request, indicating that the commit has failed. The error argument indicates the first error that caused the commit to fail. This object represents one request to capture the next shortcut input. After creation, the compositor captures input once and may send at most one terminal event: either captured or failed. If the client destroys this object while capture is pending, no terminal event is sent. After a terminal event is sent, this object becomes inert. The client should destroy this object promptly after receiving captured or failed. Reasons why a one-shot capture could not complete. Destroy this capture object. Destroying the object cancels capture if it is still pending. The compositor captured one shortcut input for this request. The key argument uses the same textual format as bind_key. The compositor could not complete this capture request. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-show-desktop-unstable-v1.xml000066400000000000000000000111521527251314000316340ustar00rootroot00000000000000 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 client such as a dock or desktop shell to control and observe the compositor's show-desktop mode. In show-desktop mode the compositor minimizes or hides all toplevel windows to reveal the desktop surface underneath. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A singleton global that provides read/write access to the compositor's show-desktop mode state. Only one client may bind this interface at a time. The compositor should reject subsequent bind attempts from other clients while a binding is already active. On binding, the compositor immediately sends a show_desktop_state event carrying the current mode so that the client starts synchronized. The client sends set_show_desktop_state to request a mode transition. The compositor applies the transition at its discretion and confirms the new state via a show_desktop_state event. The compositor may also emit show_desktop_state spontaneously when the mode changes through other means (e.g. a keyboard shortcut or gesture). Describes the current display state of the desktop. Destroy the treeland_show_desktop_v1 object and release the singleton binding. The compositor will accept a new binding from another client after this request is processed. This request does not alter the current show-desktop mode; the compositor retains whatever state was last set. Request that the compositor transition to the given show-desktop mode. The compositor may ignore the request or apply it asynchronously. If the mode changes, the compositor confirms the new state by emitting a show_desktop_state event. Sending the same mode that is already active is a no-op; the compositor need not emit a show_desktop_state event in response. Emitted by the compositor whenever the show-desktop mode changes, including once immediately after the client binds this interface to convey the initial state. The compositor emits this event both in response to a set_show_desktop_state request and when the mode changes through any other compositor-side mechanism. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-virtual-output-manager-v1.xml000066400000000000000000000152761527251314000320410ustar00rootroot00000000000000 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 interface is a manager that allows the creation of copied output. Create virtual output that can be used when setting screen copy mode for use on multiple screens. Virtual outputs are created to mirror multiple wl_output outputs. The name argument must not be empty. If name is empty, the compositor emits an error event with code invalid_group_name. The element of the array is the name of the screen. The first element of the array outputs is the screen to be copied, and the subsequent elements are the screens to be mirrored. The outputs array must contain at least two elements. If the number of elements is less than two, the compositor emits an error event with code invalid_screen_number. If any output name in the outputs array does not exist, the compositor emits an error event with code invalid_output. The client calling this interface will not generate an additional wl_output object on the client. Gets a list of virtual output names. The compositor emits one virtual_output_list event for each request. Clients should avoid issuing a new get_virtual_output_list request before receiving the corresponding event. Sends a list of virtual output names to the client. The client obtains the corresponding virtual_output_v1 object through the virtual output name. Sent whenever the set of virtual output groups changes: a group was created, updated, or removed (e.g. copy mode collapsed to extension after its source was disabled). The client should re-issue get_virtual_output_list to refresh its view of the available groups. Represents a virtual screen output object that mirrors the content of physical outputs. This event is sent to the client when any screen in the array changes. The element of the array is the name of the screen. The first element of the array outputs is the screen to be copied, and the subsequent elements are the screens to be mirrored. When the primary screen (the screen being copied) is removed, a successor is selected from the queue as the primary screen, and the queue information is updated. When an error occurs, an error event is emitted, terminating the replication mode request issued by the client. The code argument uses treeland_virtual_output_v1.error. Destroy the output. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-wallpaper-color-v1.xml000066400000000000000000000041751527251314000305040ustar00rootroot00000000000000 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. Monitor the wallpaper color of a given screen. Stop monitor the wallpaper color for the given screen. The client no longer cares about wallpaper_color. Tell the client that the wallpaper color of the screen it is monitoring has changed. This event will also be sent immediately when the client requests a watch. linuxdeepin-treeland-protocols-bfdd6e0/deprecated/treeland-window-management-v1.xml000066400000000000000000000050041527251314000310120ustar00rootroot00000000000000 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 interface manages application windows. It provides requests to show and hide the desktop and emits an event every time a window is created so that the client can use it to manage the window. Only one client can bind this interface at a time. Tell the compositor to show/hide the desktop. This event will be sent whenever the show desktop mode changes. For example, this event is sent when the user enters or leaves show desktop mode. On binding the interface the current state is sent. linuxdeepin-treeland-protocols-bfdd6e0/flake.lock000066400000000000000000000036361527251314000223740ustar00rootroot00000000000000{ "nodes": { "flake-utils": { "inputs": { "systems": "systems" }, "locked": { "lastModified": 1726560853, "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", "owner": "numtide", "repo": "flake-utils", "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "nix-filter": { "locked": { "lastModified": 1730207686, "narHash": "sha256-SCHiL+1f7q9TAnxpasriP6fMarWE5H43t25F5/9e28I=", "owner": "numtide", "repo": "nix-filter", "rev": "776e68c1d014c3adde193a18db9d738458cd2ba4", "type": "github" }, "original": { "owner": "numtide", "repo": "nix-filter", "type": "github" } }, "nixpkgs": { "locked": { "lastModified": 1730531603, "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=", "owner": "NixOS", "repo": "nixpkgs", "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d", "type": "github" }, "original": { "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { "flake-utils": "flake-utils", "nix-filter": "nix-filter", "nixpkgs": "nixpkgs" } }, "systems": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } } }, "root": "root", "version": 7 } linuxdeepin-treeland-protocols-bfdd6e0/flake.nix000066400000000000000000000012601527251314000222310ustar00rootroot00000000000000{ description = "A basic flake to help develop"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; nix-filter.url = "github:numtide/nix-filter"; }; outputs = { self, nixpkgs, flake-utils, nix-filter }@input: flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" "riscv64-linux" ] (system: let pkgs = nixpkgs.legacyPackages.${system}; treeland-protocols = pkgs.callPackage ./nix { nix-filter = nix-filter.lib; }; in { packages = { default = treeland-protocols; }; } ); } linuxdeepin-treeland-protocols-bfdd6e0/internal/000077500000000000000000000000001527251314000222445ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/internal/README.md000066400000000000000000000052461527251314000235320ustar00rootroot00000000000000# Internal Protocols Treeland compositor internals — not for general application developers. Installed via `TREELAND_PROTOCOL_INTERNAL_XML_FILES`. | File | Protocol | Interfaces | Purpose | |------|----------|-----------|---------| | `treeland-app-id-resolver-unstable-v2.xml` | `treeland_app_id_resolver_unstable_v2` | `treeland_app_id_resolver_manager_v2`, `treeland_app_id_resolver_v2` | Resolve process (pidfd) to application ID for sandboxed apps | | `treeland-prelaunch-splash-unstable-v2.xml` | `treeland_prelaunch_splash_unstable_v2` | `treeland_prelaunch_splash_manager_v2`, `treeland_prelaunch_splash_v2` | Application pre-launch splash screen control | | `treeland-screensaver-unstable-v2.xml` | `treeland_screensaver_unstable_v2` | `treeland_screensaver_v2` | Screensaver activation and configuration | | `treeland-wallpaper-shell-unstable-v1.xml` | `treeland_wallpaper_shell_unstable_v1` | `treeland_wallpaper_notifier_v1`, `treeland_wallpaper_shell_v1`, `treeland_wallpaper_surface_v1` | Wallpaper source notification and per-surface wallpaper binding | ## Breaking changes Breaking changes are grouped by version. Under each version heading, one subsection per affected protocol explains what changed, what replaces it, and how existing consumers should adapt. ### 0.6.0 #### `treeland-ddm-v1.xml` Removed from `internal/`. DDM now communicates with Treeland via Qt Remote Objects, so this Wayland protocol is no longer needed and the file moved to `deprecated/`. Consumers should switch DDM↔Treeland IPC to the Qt Remote Objects channel and drop any binding to `treeland_ddm_v1`; the deprecated XML is still installed for one cycle but must not be used in new code. #### `treeland-app-id-resolver-v1.xml` Superseded by `treeland-app-id-resolver-unstable-v2.xml`; the old v1 file moved to `deprecated/`. The manager and resolver interfaces were renamed to `treeland_app_id_resolver_manager_v2` / `treeland_app_id_resolver_v2` (interface version reset to 1). Consumers should rebind the global as `treeland_app_id_resolver_manager_v2`, replace `get_resolver` target interface with `_v2`, and adjust to the clarified request/response contract; the old v1 XML is kept installed during migration but binds the deprecated interface name. #### `treeland-screensaver-v1.xml` Superseded by `treeland-screensaver-unstable-v2.xml`; the old v1 file moved to `deprecated/`. The interface was renamed to `treeland_screensaver_v2` (interface version reset to 1), and the `destroy` request is now part of the base interface rather than a `since="2"` addition. Consumers should rebind the global as `treeland_screensaver_v2` and call `destroy` unconditionally; the old v1 XML is kept installed during migration. linuxdeepin-treeland-protocols-bfdd6e0/internal/README.zh_CN.md000066400000000000000000000046401527251314000245270ustar00rootroot00000000000000# 内部协议 Treeland 合成器内部协议 — 不面向通用应用开发者。通过 `TREELAND_PROTOCOL_INTERNAL_XML_FILES` 安装。 | 文件 | 协议 | 接口 | 用途 | |------|----------|-----------|---------| | `treeland-app-id-resolver-unstable-v2.xml` | `treeland_app_id_resolver_unstable_v2` | `treeland_app_id_resolver_manager_v2`, `treeland_app_id_resolver_v2` | 将进程(pidfd)解析为沙箱应用的应用 ID | | `treeland-prelaunch-splash-unstable-v2.xml` | `treeland_prelaunch_splash_unstable_v2` | `treeland_prelaunch_splash_manager_v2`, `treeland_prelaunch_splash_v2` | 应用预启动闪屏控制 | | `treeland-screensaver-unstable-v2.xml` | `treeland_screensaver_unstable_v2` | `treeland_screensaver_v2` | 屏保激活与配置 | | `treeland-wallpaper-shell-unstable-v1.xml` | `treeland_wallpaper_shell_unstable_v1` | `treeland_wallpaper_notifier_v1`, `treeland_wallpaper_shell_v1`, `treeland_wallpaper_surface_v1` | 壁纸来源通知和逐表面壁纸绑定 | ## 破坏性变更 破坏性变更按版本分组。每个版本标题下,每个受影响协议有一个子节说明变更内容、替代方案以及现有消费者如何适配。 ### 0.6.0 #### `treeland-ddm-v1.xml` 从 `internal/` 移除。DDM 现在通过 Qt Remote Objects 与 Treeland 通信,不再需要此 Wayland 协议。文件已移至 `deprecated/`。消费者应将 DDM↔Treeland IPC 切换到 Qt Remote Objects 通道,并停止绑定 `treeland_ddm_v1`;旧 XML 在迁移期间仍会安装,但不得用于新代码。 #### `treeland-app-id-resolver-v1.xml` 被 `treeland-app-id-resolver-unstable-v2.xml` 取代;旧 v1 文件移至 `deprecated/`。管理器和解析器接口重命名为 `treeland_app_id_resolver_manager_v2` / `treeland_app_id_resolver_v2`(接口版本重置为 1)。消费者应重新绑定全局对象为 `treeland_app_id_resolver_manager_v2`,将 `get_resolver` 目标接口替换为 `_v2`,并适配澄清后的请求/响应契约;旧 v1 XML 在迁移期间仍会安装,但绑定的是已弃用的接口名。 #### `treeland-screensaver-v1.xml` 被 `treeland-screensaver-unstable-v2.xml` 取代;旧 v1 文件移至 `deprecated/`。接口重命名为 `treeland_screensaver_v2`(接口版本重置为 1),`destroy` 请求现在属于基础接口而非 `since="2"` 的新增。消费者应重新绑定为 `treeland_screensaver_v2` 并无条件调用 `destroy`;旧 v1 XML 在迁移期间仍会安装。 linuxdeepin-treeland-protocols-bfdd6e0/internal/treeland-app-id-resolver-unstable-v2.xml000066400000000000000000000137011527251314000317350ustar00rootroot00000000000000 Internal bridge between treeland and the user-session treeland-session-helper. Treeland is a multi-user compositor and does not host per-user-session D-Bus itself, so it asks treeland-session-helper, running in the user session, to map a process (identified by a pidfd) to its application identifier and sandbox engine name. treeland-session-helper answers over this Wayland protocol; it in turn resolves the request through D-Bus with dde-application-manager. This protocol is only for that dedicated treeland-session-helper bridge, not a general application-developer API, and regular clients must not bind it. The key words "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended", "may", and "optional" in this document are to be interpreted as described in RFC 2119. 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. Factory global for creating resolver objects. Typically exactly one treeland-session-helper instance (a Wayland client in the user session) binds this interface and serves identification requests coming from the compositor. Only the treeland-session-helper bridge should bind this global; regular application clients must not use it. Destroy the manager object. Existing resolver objects remain valid and must be destroyed independently. Create a resolver object. Only one resolver may be registered per session. Treeland is a multi-user compositor; different user sessions may each register their own resolver. If a resolver is already bound in the same session, the compositor will raise the resolver_already_exists error and will not create a new resolver object. Per-session resolver object created through the manager. The compositor sends identify_request events carrying a pidfd, and treeland-session-helper must respond exactly once per request via the respond request. If resolution fails it responds with an empty app_id. Destroy the resolver object. The compositor will no longer send identify_request events after this request is processed. Respond to a prior identify_request event. treeland-session-helper must call this exactly once for each identify_request. If the application cannot be identified, respond with an empty app_id. The sandbox_engine_name must always be provided and describes the security context in which the process is running (container, sandbox, etc.). Sent by the compositor to ask treeland-session-helper to resolve a process to an application identifier. The compositor emits this event each time it needs to identify a process for which it does not already have a cached result. treeland-session-helper must respond exactly once via the respond request using the provided request_id. Failure to respond in a timely manner may cause the compositor to treat the process as unidentified. linuxdeepin-treeland-protocols-bfdd6e0/internal/treeland-prelaunch-splash-unstable-v2.xml000066400000000000000000000117271527251314000322030ustar00rootroot00000000000000 The key words "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended", "may", and "optional" in this document are to be interpreted as described in RFC 2119. 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 interface is a manager for creating prelaunch splash screens. A prelaunch splash screen is a placeholder surface that is shown before an application's main window is mapped. This helps to improve the perceived startup time. It is particularly useful for application launchers to provide immediate feedback to the user. Compared to treeland_prelaunch_splash_manager_v1, this version returns a splash object from create_splash. The caller can destroy the object to dismiss the splash, and the compositor can send events (e.g. timeout) back to the caller through the object. This interface is a singleton. Only one client may bind it at a time within a given user session. If a second client attempts to bind while a binding is already active, the compositor must reject the attempt by sending a protocol error (binding_rejected). The singleton binding is released when the client destroys the manager object. Error codes sent as protocol errors via wl_display.error. Creates a new prelaunch splash screen and returns a splash object. The `app_id` is a string that identifies the application. The compositor will use this ID together with `sandbox_engine_name` to match the splash screen with the actual application window when it appears. This matching mechanism should also work for XWayland windows. The `instance_id` identifies a specific application instance, allowing multiple splashes for non-singleton applications. The compositor can use this to associate a splash with a particular launch instance. Callers MUST provide a non-empty `sandbox_engine_name` string which identifies the sandboxing/container. Represents a single prelaunch splash screen created by the manager. The caller can destroy this object to dismiss the corresponding splash. The compositor may also send events through this object, for example to notify the caller that the splash was closed due to a timeout. Dismisses the splash screen and destroys this object. linuxdeepin-treeland-protocols-bfdd6e0/internal/treeland-screensaver-unstable-v2.xml000066400000000000000000000104121527251314000312400ustar00rootroot00000000000000 Internal protocol that relays org.freedesktop.ScreenSaver inhibit/uninhibit requests between treeland and a per-user-session helper, because a multi-user compositor does not host per-user-session D-Bus itself. The key words "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended", "may", and "optional" in this document are to be interpreted as described in RFC 2119. 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 interface is an internal relay between treeland and a privileged helper that implements the org.freedesktop.ScreenSaver D-Bus interface. Treeland is a multi-user compositor and does not host per-user-session D-Bus itself, so the org.freedesktop.ScreenSaver Inhibit/UnInhibit calls are forwarded over this Wayland protocol to a helper running in the user session, which then performs the actual idle-inhibit bookkeeping. Only that dedicated relay helper should bind this global. Regular applications must NOT use this protocol to inhibit idleness; they should use the upstream zwp_idle_inhibit_manager_v1 protocol instead, which treeland exposes for normal clients. The relay helper calls inhibit to register an inhibit on behalf of a D-Bus caller and uninhibit (or disconnects the bound object) to release it. If the bound object is destroyed, the inhibit associated with it is automatically released. At most one inhibit is active per bound object at a time; calling inhibit while an inhibit is already active raises already_inhibited, and calling uninhibit with no active inhibit raises not_yet_inhibited. Call uninhibit before inhibit to update application_name and reason. Destroy the bound treeland_screensaver_v2 object. Any inhibit previously registered through this object is released as if uninhibit had been called, and the relay helper must stop holding the corresponding org.freedesktop.ScreenSaver inhibit on the D-Bus caller's behalf. Inhibit idleness with given application_name and reason_for_inhibit. Uninhibit idleness previously inhibited by inhibit request. linuxdeepin-treeland-protocols-bfdd6e0/internal/treeland-wallpaper-shell-unstable-v1.xml000066400000000000000000000300351527251314000320160ustar00rootroot00000000000000 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. The treeland_wallpaper_notifier_v1 interface provides notifications about the availability and lifetime of wallpaper sources managed by the compositor. This interface is purely event-driven. Clients receive events when wallpaper sources are added, become active, or are removed, and may update their internal state or user interface accordingly. Destroys this treeland_wallpaper_notifier_v1 object. Destroying a bound treeland_wallpaper_notifier_v1 object while wallpaper surface objects created from it are still alive is illegal and will result in a protocol error. This event is sent by the compositor when a new wallpaper source is added or becomes active. The source_type argument describes the type of the wallpaper source. The meaning of the file_source argument depends on the reported source_type. This event indicates that the wallpaper source identified by file_source is no longer available. After receiving this event, the client should discard any internal state associated with the wallpaper source and must not reference it anymore. The treeland_wallpaper_shell_v1 interface is a global object exposed by the compositor that allows a client to assign the wallpaper role to a wl_surface and create wallpaper surface objects. A wallpaper surface represents content intended to be displayed as the desktop wallpaper, such as a static image or a dynamic media source, and is associated with exactly one wl_surface. This interface follows the shell pattern used by other Wayland protocols: it assigns a specific role to a wl_surface and manages the lifetime and behavior of wallpaper surfaces. This interface is a singleton. At most one client may bind to treeland_wallpaper_shell_v1 at any given time. Destroys this treeland_wallpaper_shell_v1 object. Destroying a bound treeland_wallpaper_shell_v1 object while there are still treeland_wallpaper_surface_v1 objects created from it is illegal and will result in a protocol error. Creates a treeland_wallpaper_surface_v1 object and assigns the wallpaper role to the given wl_surface. The provided wl_surface must not already have a role, and while it is used as a wallpaper surface, it must not be assigned any other role. The file_source argument specifies the initial wallpaper source identifier. Its interpretation depends on the wallpaper source type selected by the compositor. The treeland_wallpaper_surface_v1 interface controls the behavior of a wallpaper surface. A wallpaper surface is bound to exactly one wl_surface and defines how that surface should be sized, positioned, and synchronized with the compositor's wallpaper management logic. Destroy the wallpaper surface object and release its association with the underlying wl_surface. After calling this request, the wallpaper surface object becomes invalid and must not be used again. This request should only be sent when the client intends to permanently stop using the wallpaper surface, such as when the client is shutting down or after receiving the treeland_wallpaper_notifier_v1.remove event for this surface. The surface should also have released its wl_buffer attachment. Reports to the compositor that a wallpaper-related operation has failed on the client side. This request may be sent by the client when it fails to open, load, or otherwise process the configured wallpaper source. The compositor may use this information for diagnostics, policy decisions, or to adjust internal state. Possible error values include: - invalid_source: The specified wallpaper source is invalid, unsupported, or could not be processed. This is a fatal error and indicates that the source should be verified before retrying. - permission_denied: The client does not have permission to access the specified wallpaper source. Informs the compositor that the wallpaper surface has completed its initial rendering and is ready to be displayed. The client should send this request only after a valid buffer has been attached and committed to the associated wl_surface. Before receiving this request, the compositor may keep the wallpaper hidden or continue displaying a fallback wallpaper. This request is typically used to avoid visual glitches such as black frames, incomplete rendering, or uninitialized content during wallpaper startup. Calling this request multiple times has no additional effect. This event provides a position value associated with the wallpaper. The semantic meaning of the position value is compositor-defined. It may represent a scroll offset, animation progress, or playback position. The value is expressed as a fixed-point number[0, 1.0]. This event instructs the client to pause wallpaper updates or animations. After receiving this event, the client should stop advancing any time-based or animated wallpaper content until a play event is received. Sets the playback speed of the wallpaper content. A rate of 1.0 represents normal speed. A rate of 0.0 is equivalent to receiving a pause event. This event instructs the client to resume wallpaper updates or animations after a pause. This event instructs the client to progressively reduce the playback or animation update rate of the wallpaper content until it comes to a complete stop. The slowdown should be smooth and continuous rather than abrupt. The duration argument specifies the amount of time, in milliseconds, over which the slowdown should occur. After this duration has elapsed, the client should consider the wallpaper paused. A duration of 0 means the client should pause immediately. linuxdeepin-treeland-protocols-bfdd6e0/nix/000077500000000000000000000000001527251314000212265ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/nix/default.nix000066400000000000000000000012761527251314000234000ustar00rootroot00000000000000{ stdenv , lib , nix-filter , cmake , pkg-config , wayland-scanner }: stdenv.mkDerivation (finalAttrs: { pname = "treeland-protocols"; version = "0.4"; src = nix-filter.filter { root = ./..; exclude = [ ".git" "debian" "LICENSES" "README.md" "README.zh_CN.md" ]; }; depsBuildBuild = [ pkg-config ]; nativeBuildInputs = [ cmake pkg-config wayland-scanner ]; meta = { description = "Wayland protocol extensions for treeland"; homepage = "https://github.com/linuxdeepin/treeland-protocols"; license = lib.licenses.mit; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ rewine ]; }; }) linuxdeepin-treeland-protocols-bfdd6e0/public/000077500000000000000000000000001527251314000217065ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/public/README.md000066400000000000000000000204651527251314000231740ustar00rootroot00000000000000# Public Protocols 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 an optional live source surface | | `treeland-snap-target-unstable-v1.xml` | `treeland_snap_target_unstable_v1` | `treeland_snap_target_v1` | Compositor-side snap region hints; an optional pidfd event for window targets can be enabled via the `event_type.pidfd` bit of `start` | | `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 | | `treeland-output-uuid-unstable-v1.xml` | `treeland_output_uuid_unstable_v1` | `treeland_output_uuid_manager_v1`, `treeland_output_uuid_v1` (frozen) | Stable opaque uuid identity for `wl_output` objects; the uuid is shared with the head variant | | `treeland-output-uuid-head-unstable-v1.xml` | `treeland_output_uuid_head_unstable_v1` | `treeland_output_uuid_head_manager_v1` | Companion to `treeland-output-uuid-unstable-v1`: obtain the same `treeland_output_uuid_v1` object from a `zwlr_output_head_v1` (wlr-output-management), including disabled outputs with no live `wl_output` | ## Breaking changes Breaking changes are grouped by version. Under each version heading, one subsection per affected protocol explains what changed, what replaces it, and how existing consumers should adapt. ### 0.7.0 #### `treeland-appearance-unstable-v1.xml` The `accent_color` event dropped its `a` (alpha) argument. The accent color is now reported as 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 reading the trailing `a` argument and must not derive accent color opacity from this event; opacity is outside the scope of the accent color setting. #### `treeland-dde-shell-v1.xml` 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. 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 gains a `normal` value at 0 while `overlay` keeps its v1 value of 1; both semantics are stated precisely (`normal` is the regular window layer, `overlay` is above normal toplevels and 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 1 (unchanged) while `normal` (0) restores the regular window layer; 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 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 #### `treeland-personalization-manager-v1.xml` Split from `dde/treeland-personalization-manager-v1.xml`. The protocol is split by audience into three role-scoped protocols: - `treeland-decoration-unstable-v1.xml` (in `public/`): per-window server-side decoration (SSD) customization (corner radius, shadow, border, titlebar visibility); requires xdg-decoration server-side decorations first, enabling a "half-CSD, half-SSD" configuration. - `treeland-appearance-unstable-v1.xml` (in `public/`): read-only user-level appearance querying and observation for all regular applications. - `treeland-appearance-manager-unstable-v1.xml` (in `dde/`): privileged user-level appearance configuration for the desktop control center and system settings components. Per-window background blur should use the upstream `ext-background-effect-v1` protocol (staging in wayland-protocols) instead; it advertises its blur capability via the `capabilities` event. The `wallpaper` blend mode of the old protocol is deprecated without replacement; consumers must not rely on it. The old v1 file is moved to `deprecated/` unchanged. Consumers should adopt the role-scoped replacement protocols and the upstream `ext-background-effect-v1`; the old XML is kept installed during migration but must not be used in new code. #### `treeland-capture-unstable-v1.xml` Removed from `public/`. Replaced by upstream `ext-image-capture-source-v1` and `ext-image-copy-capture-v1`; this protocol is deprecated and the file moved to `deprecated/`. Consumers should adopt the upstream `ext-image-capture-*` protocols instead; the deprecated XML is kept installed during migration but must not be used in new code. linuxdeepin-treeland-protocols-bfdd6e0/public/README.zh_CN.md000066400000000000000000000166661527251314000242040ustar00rootroot00000000000000# 公共协议 面向通用应用开发者。通过 `TREELAND_PROTOCOL_XML_FILES` 安装。 | 文件 | 协议 | 接口 | 用途 | |------|----------|-----------|---------| | `treeland-window-transition-unstable-v1.xml` | `treeland_window_transition_unstable_v1` | `treeland_window_transition_manager_v1`, `treeland_window_transition_rect_v1` | 相对某个矩形的窗口打开/关闭转场,可附带实时源 surface | | `treeland-snap-target-unstable-v1.xml` | `treeland_snap_target_unstable_v1` | `treeland_snap_target_v1` | 合成器侧吸附区域提示;窗口目标的 pidfd 事件为可选项,需在 `start` 中置 `event_type.pidfd` 位启用 | | `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 | | `treeland-output-uuid-unstable-v1.xml` | `treeland_output_uuid_unstable_v1` | `treeland_output_uuid_manager_v1`、`treeland_output_uuid_v1`(frozen) | `wl_output` 的稳定不透明 uuid 身份;该 uuid 与 head 变体共享 | | `treeland-output-uuid-head-unstable-v1.xml` | `treeland_output_uuid_head_unstable_v1` | `treeland_output_uuid_head_manager_v1` | `treeland-output-uuid-unstable-v1` 的配套协议:从 `zwlr_output_head_v1`(wlr-output-management)获取同一个 `treeland_output_uuid_v1` 对象,涵盖无存活 `wl_output` 的禁用输出 | ## 破坏性变更 破坏性变更按版本分组。每个版本标题下,每个受影响协议有一个子节说明变更内容、替代方案以及现有消费者如何适配。 ### 0.7.0 #### `treeland-appearance-unstable-v1.xml` `accent_color` 事件移除了 `a`(alpha)参数。活动色现以不透明 RGB 三元组 `r, g, b` 上报(每个为 `[0, 255]` 范围内的 `uint`);alpha 通道不再上线缆传输。消费者须停止读取末尾的 `a` 参数,且不得从该事件推断活动色不透明度;不透明度不在活动色设置范围内。 #### `treeland-dde-shell-v1.xml` 整个文件已废弃并移至 `deprecated/`。由 `treeland-dde-shell-unstable-v2.xml`(在 `dde/`,surface 角色功能)连同上述专用协议取代;`treeland_window_picker_v1` 接口无替代直接移除。 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 值的 `normal`,`overlay` 保留 v1 的值 1;两者语义明确化(`normal` 为普通窗口层,`overlay` 高于普通顶层窗口、低于 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` 视为 1(不变),以 `normal`(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 #### `treeland-personalization-manager-v1.xml` 由 `dde/treeland-personalization-manager-v1.xml` 拆分而来。该协议按受众拆分为三个职责清晰的协议: - `treeland-decoration-unstable-v1.xml`(在 `public/`):逐窗口服务端装饰(SSD)定制(圆角、阴影、边框、标题栏可见性),需先经 xdg-decoration 申请服务端装饰,支持“半 CSD、半 SSD”配置。 - `treeland-appearance-unstable-v1.xml`(在 `public/`):只读用户级外观查询与订阅,面向所有常规应用。 - `treeland-appearance-manager-unstable-v1.xml`(在 `dde/`):特权用户级外观配置,面向桌面控制中心与系统设置组件。 逐窗口背景模糊应改用上游 `ext-background-effect-v1` 协议(wayland-protocols staging),其通过 `capabilities` 事件通告模糊能力。旧协议的 `wallpaper` 混合模式废弃且无替代;消费者不得依赖该模式。 旧 v1 文件已原样移至 `deprecated/`。消费者应改用上述按职责拆分的新协议以及上游 `ext-background-effect-v1`;旧 XML 在迁移期间仍会安装,但不得用于新代码。 #### `treeland-capture-unstable-v1.xml` 从 `public/` 移除。被上游 `ext-image-capture-source-v1` 和 `ext-image-copy-capture-v1` 取代;此协议已弃用,文件移至 `deprecated/`。消费者应改用上游 `ext-image-capture-*` 协议;旧 XML 在迁移期间仍会安装,但不得用于新代码。 linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-appearance-unstable-v1.xml000066400000000000000000000213641527251314000304700ustar00rootroot00000000000000 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 general applications to query and receive live notifications for user-level appearance settings managed by the compositor, including cursor theme and size, fonts (proportional, monospace, size), and visual appearance (icon theme, accent color, window opacity, color scheme, titlebar height, and corner radius). Any client may bind this interface. The compositor pushes the current value of every setting immediately after the client binds this global, and broadcasts events to all bound clients whenever a setting changes. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A singleton global for observing user-level appearance settings of the current user. These settings are shared by all windows and clients of the user rather than being per-window. Each bound client receives events reporting the initial values of all settings immediately after binding, and subsequent events whenever any setting changes. A user-level hint for the preferred color scheme. Clients should use this value to style their self-drawn widgets and UI elements accordingly. The compositor also applies this hint to server-side decorations. This is semantically equivalent to org.freedesktop.appearance color-scheme and the CSS prefers-color-scheme media feature. This enum mirrors treeland_appearance_manager_v1.color_scheme (in the privileged treeland-appearance-manager-unstable-v1 protocol): the entry names and values are identical and must stay in sync. Any new value must be added to both at once. Destroy the treeland_appearance_v1 object. The compositor will no longer send events on this object after this request. Emitted by the compositor when the cursor theme changes. Also emitted immediately after binding to report the current theme. Emitted by the compositor when the cursor size changes. Also emitted immediately after binding to report the current size in pixels. Width and height may differ on hardware that supports non-square cursor planes. Emitted when the proportional font family changes. Also emitted immediately after binding to report the current font. Emitted when the monospace font family changes. Also emitted immediately after binding to report the current font. Emitted when the base font size changes. Also emitted immediately after binding to report the current size in points multiplied by 10. Emitted when the icon theme changes. Also emitted immediately after binding to report the current theme. Emitted when the accent color changes. Also emitted immediately after binding to report the current color. Color components are unsigned values in the range [0, 255]. Emitted when the global window background opacity changes. Also emitted immediately after binding to report the current value. The value is a fixed-point value in the range [0.0, 1.0]. Emitted when the color scheme hint changes. Also emitted immediately after binding to report the current scheme. Clients should restyle their self-drawn components whenever this event is received. Emitted when the compositor titlebar height changes. Also emitted immediately after binding to report the current value in pixels. Emitted when the global default corner radius changes. Also emitted immediately after binding to report the current value in pixels. linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-decoration-unstable-v1.xml000066400000000000000000000241101527251314000305100ustar00rootroot00000000000000 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 fine-tunes the compositor-drawn server-side decorations (SSD) of the client's own toplevel windows: corner radius, shadow, border, and titlebar visibility. It is not standalone: the client must first negotiate SSD for the surface via xdg-decoration. The compositor applies these requests according to its own policy; in particular it may silently ignore a set_* request on a surface that has not negotiated SSD, or clamp an out-of-range value to a supported bound instead of raising an error. This enables a "half-CSD, half-SSD" configuration: keep the compositor's border, corners and shadow while hiding its titlebar (set_titlebar_mode(hide)) and drawing a custom one. Each property is opt-in: if a set_* request is never sent, the compositor applies its own default for that window's SSD. Sending a request takes ownership of that property for the lifetime of the context. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. A global that creates per-surface SSD customization contexts. Each surface may have at most one active decoration context. Attempting to create a second context for the same surface while one is already alive is a protocol error (already_used). Error codes sent as protocol errors via wl_display.error. Destroy the treeland_decoration_manager_v1 object. Existing treeland_decoration_context_v1 objects created through this manager are not affected and must be destroyed separately by the client. Create a treeland_decoration_context_v1 for the given surface. The surface must be owned by the requesting client; passing a surface owned by another client raises the invalid_surface protocol error. The surface should hold a toplevel role (xdg_toplevel). The context itself may be created before SSD is negotiated; until SSD is negotiated via xdg-decoration, set_* requests on the context have no effect and are silently ignored by the compositor. Creating a second context for the same surface while one is already alive is a protocol error (already_used). Controls the compositor-drawn server-side decorations for a single surface. Created by treeland_decoration_manager_v1.get_decoration_context. All requests take effect immediately; there is no pending/commit model. The compositor applies each change as soon as it processes the request. This object becomes inert when the underlying wl_surface is destroyed; requests on an inert context are silently ignored. The client should destroy this context before or immediately after destroying the associated wl_surface. Controls whether the compositor-drawn (server-side) titlebar is visible, overriding the compositor's default. Hiding the titlebar while keeping the rest of the SSD is what produces a "half-CSD, half-SSD" configuration. Destroy the context. The compositor may revert any or all customized properties to its default behavior after this request. Override the compositor's corner rounding for this surface. Once set, the compositor no longer applies its global corner radius to this window. A value of 0 requests square corners. The compositor applies this request according to its own policy and may clamp an out-of-range value to a supported bound. Override the compositor-drawn drop shadow for this surface. When radius is 0 the shadow is disabled and all other arguments are ignored. Color components are unsigned in [0, 255]. The compositor applies this request according to its own policy and may clamp an out-of-range radius to a supported bound. Override the compositor-drawn border for this surface. When width is 0 the border is disabled and the color arguments are ignored. Color components are unsigned in [0, 255]. The compositor applies this request according to its own policy and may clamp an out-of-range width to a supported bound. Override whether the compositor draws a server-side titlebar for this surface, per the titlebar_mode enum. A mode value outside the titlebar_mode enum range is silently ignored; the current titlebar visibility is kept. Hiding the titlebar leaves the rest of the SSD (border, corner radius, shadow) in effect; the client is then expected to draw its own titlebar inside the window content. linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-output-uuid-head-unstable-v1.xml000066400000000000000000000075251527251314000315770ustar00rootroot00000000000000 Companion of treeland-output-uuid-unstable-v1 for clients that identify outputs through the wlr-output-management protocol. It lets a client obtain the same stable treeland_output_uuid_v1 object from a zwlr_output_head_v1 instead of a wl_output. A zwlr_output_head_v1 is advertised by the wlr-output-management protocol even while the output is disabled and has no live wl_output global, so this protocol lets clients identify an output in that state. The uuid returned for a head is the same uuid that treeland_output_uuid_manager_v1.get_uuid returns for the wl_output of the same physical output device. The treeland_output_uuid_v1 interface, including the meaning and stability of the uuid, is defined by treeland-output-uuid-unstable-v1 and is not duplicated here; this protocol only adds a second factory that creates the same object. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. 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. A singleton global that creates treeland_output_uuid_v1 objects from zwlr_output_head_v1 objects. The client calls get_uuid for each head it wants to identify; the compositor reports the uuid in the initial uuid event on the returned object. Multiple uuid objects may be created for the same output, whether through this manager or through treeland_output_uuid_manager_v1; each reports independently. Destroy the treeland_output_uuid_head_manager_v1 object and release the client's binding to the manager global. Existing treeland_output_uuid_v1 objects created through this manager are not affected and must be destroyed separately by the client. Create a treeland_output_uuid_v1 object for the output represented by the given zwlr_output_head_v1. The head may be in any state, including disabled: a wlr_output_head is advertised even when the output is turned off, so this request can identify an output with no live wl_output global. linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-output-uuid-unstable-v1.xml000066400000000000000000000154421527251314000306750ustar00rootroot00000000000000 This protocol lets clients obtain a stable uuid for each output, identifying the physical output device behind it. The uuid is an opaque, non-empty UTF-8 string that remains stable across sessions and output reconnections, so clients and the compositor can persist per-output settings and restore them after a restart. Uuids are fixed-length, exactly 36 bytes, and never contain the NUL byte; the canonical form is a lowercase 8-4-4-4-12 hexadecimal string with hyphens, for example 8dd6d52e-1f60-4649-9c2c-6fb7e055272e. The uuid is unique among the currently connected outputs: the compositor must ensure that no two connected outputs report the same uuid at the same time. The compositor assigns the uuid to each physical output device and persists the assignment, so a given device keeps the same uuid across sessions and across being disconnected and reconnected. Once assigned, the uuid never changes for the lifetime of the physical output device. Clients must not assume the uuid is derived from any particular device attribute. Clients obtain a uuid for a wl_output object via get_uuid on this protocol, or for a zwlr_output_head_v1 via the companion treeland-output-uuid-head-unstable-v1 protocol; both entry points return the same uuid for the same physical output device. The head variant can identify an output that is disabled and has no live wl_output global. Clients must treat the uuid as opaque: they must not parse it, derive meaning from its contents, or present it to users. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. 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. A singleton global that creates treeland_output_uuid_v1 objects from wl_output objects. The client calls get_uuid for each output it wants to identify; the compositor reports the uuid in the initial uuid event on the returned object. Multiple uuid objects may be created for the same output; each reports independently. Destroy the treeland_output_uuid_manager_v1 object and release the client's binding to the manager global. Existing treeland_output_uuid_v1 objects created through this manager are not affected and must be destroyed separately by the client. Create a treeland_output_uuid_v1 object for the given wl_output. The output may be in any state, including disabled: the uuid identifies the physical device regardless of its enabled state. For an output that is currently disabled and has no live wl_output global, the client should use the companion treeland-output-uuid-head-unstable-v1 protocol with the corresponding zwlr_output_head_v1 instead. Represents the uuid identity of the output it was created for, obtained from treeland_output_uuid_manager_v1.get_uuid or from the companion treeland-output-uuid-head-unstable-v1 protocol. The compositor emits the uuid event once immediately after the object is created. The uuid never changes, so the event is not emitted again while the object exists. The object is not tied to the lifetime of the wl_output global: when the output is unplugged and its wl_output global is destroyed, this object remains valid and the last reported uuid remains the identity of the physical device, which may reappear later with the same uuid. The client should destroy this object when it no longer needs the mapping. Note, because treeland_output_uuid_v1 objects are created from multiple independent factory interfaces — treeland_output_uuid_manager_v1 on this protocol and treeland_output_uuid_head_manager_v1 on the companion treeland-output-uuid-head-unstable-v1 protocol — the treeland_output_uuid_v1 interface is frozen at version 1. Destroy this object. Only this object is affected; the uuid of the output and other uuid objects for the same output are unchanged. Reports the current uuid of the output. It is emitted once immediately after the object is created and never again, because the uuid never changes for the lifetime of the output device. linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-snap-target-unstable-v1.xml000066400000000000000000000250251527251314000306140ustar00rootroot00000000000000 This protocol allows a client to request snap region hints from the compositor. While snapping is active, the compositor tracks the cursor position and notifies the client of the rectangle currently hovered by the cursor (e.g., a window boundary or a full output). The client uses these hints to draw its own snap preview UI. Snap targets are computed against the window layout captured when the snap session starts: the compositor records the position and stacking order of every window at that moment and keeps them unchanged for the whole session. Windows that move, are mapped or unmapped, change stacking order, or are destroyed after start are not reflected in the snap targets. A client may identify an overlay surface by setting the xdg-toplevel-tag "org.deepin.treeland.snap-mask" on that toplevel. When the compositor detects this tag, it applies the following configuration to the surface: 1. Raises the surface above normal windows and their popup panels. 2. Disables window open/close animations. 3. Excludes the surface from the multitask view and window switcher. 4. Disables automatic positioning by the compositor's layout engine. Such a surface does not affect the snapping protocol; snapping behaves the same whether or not the surface exists. Surfaces carrying the snap-mask tag are excluded from snapping, i.e., they are never reported as snap targets. 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 interface is a global singleton for requesting snap region hints from the compositor. Each client binds at most one instance of this global. The compositor tracks the cursor position and notifies the client of the rectangle currently hovered by the cursor. The snap object is created in an idle state. The client starts snapping by calling start, which causes the compositor to capture the current window positions and stacking order and begin tracking the cursor position, providing snap region hints based on the captured layout. While snapping is active, the compositor sends a snap_region event each time the snap target changes (i.e., when the cursor moves to a different window or output). A client that also needs to know which process owns a window snap target can enable the optional pidfd event by setting the event_type.pidfd bit in the events argument of start; without that bit the compositor sends no pidfd events. When enabled, and when the new snap target is a window with a determinable owning process, a pidfd event reporting that process is sent before the snap_region event it applies to. The client can use these events to update its snap preview UI. When the client is done (e.g., the user has clicked or dragged to confirm a selection in the client's UI), the client calls stop to stop snap notifications. A stopped snap object may be restarted by calling start again. Only one snap session may be active across all clients at any time. If another client's snap session is active, start fails with the snap_busy reason. Bitfield of optional events the client may request when starting a snap session. Bits not listed here are reserved for future events and are ignored by the compositor. Destroy the treeland_snap_target_v1 object. If snapping is in progress, the compositor automatically stops it (stops cursor tracking). No further events are emitted on this object. Request the compositor to capture the current window positions and stacking order and begin tracking the cursor, sending snap region hints based on the captured layout. The seat argument associates this snap session with a seat. How the compositor uses the seat is compositor policy. This request may be called again after stop to restart snapping; a fresh capture of the window layout is taken on every start. start must not be called on an already active snap object; the compositor ignores such a request. The events argument selects which optional events the compositor may send for this session. It is a bitfield of event_type values: only the events whose bits are set are enabled, and passing 0 enables no optional events. Bits that do not correspond to a known event_type value are ignored. The selection applies to this session only; a start after stop establishes a new selection. If snapping cannot be started because another client's snap session is already active, the compositor sends a failed event with the snap_busy reason instead. Signal that the client is done with snapping. The compositor stops tracking the cursor and stops sending snap_region events. This request is a no-op if snapping is not in progress (e.g., if failed was already emitted or stop was already called). The client should call destroy afterwards to free the snap object. Reports the process owning the window that corresponds to the snap target reported by the next snap_region event. This event is sent only if the client enabled the event_type.pidfd bit in the events argument of start; otherwise it is never sent. When enabled, the compositor sends this event before the snap_region event it applies to, and only when the snap target is a window whose owning process can be determined. If the snap target is not a window (for example an output or empty desktop space), or the owning process cannot be determined, this event is omitted and snap_region is sent on its own. No pidfd event is ever sent for a snap target whose window was destroyed after start: the captured region remains a snap target, but its owning process no longer exists. The client owns the received file descriptor and is responsible for closing it. The descriptor stays valid independently of the snap session. Notifies the client of the current snap target rectangle. The snap target set is captured at start and is fixed for the whole session: a window that moves, is mapped or unmapped, changes stacking order, or is destroyed after start does not add, remove, move, resize, or reorder the targets captured at start. In particular, a window destroyed after start keeps its captured region as a snap target. This event is sent each time the snap target changes due to cursor movement. This event commits the snap target. A pidfd event, when sent for this target, precedes it and reports the process owning the target. When processing this event, the client should associate the most recent preceding pidfd event, if any, with this target; if no pidfd event precedes it, the target has no associated process. The region is in global logical coordinates (i.e., the xdg_output logical coordinate space). The client is responsible for any coordinate transformation needed for its UI. If width and height are both zero, there is no current snap target (e.g., the cursor is over empty desktop space). The client should hide its snap preview in this case. Snapping could not be started. The compositor will not send any more snap_region events. The client should call destroy to free the snap object. This event is sent when another client's snap session is already active (reason snap_busy). linuxdeepin-treeland-protocols-bfdd6e0/public/treeland-window-transition-unstable-v1.xml000066400000000000000000000252331527251314000320670ustar00rootroot00000000000000 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 extension allows a client to request that the compositor play a window transition for a new window that opens from a specified rectangular area, and, when the window is closed, transitions back to that same rectangular area. The rectangle is attached to an xdg-activation-v1 token string after the token is committed, so the compositor can associate the rectangle with the originating surface and use it as the animation source when the target window appears. The client may call set_geometry multiple times to update the geometry, and the compositor uses the latest set geometry for both the open and the close animation. Optionally, the client may attach a live source surface to the rectangle via set_source_surface. When a source surface is set, the compositor uses its content as the source of the transition instead of an empty rectangle, and renders it live while the transition is playing. The client may temporarily disable the rectangle by setting a geometry of 0x0 size (zero width and zero height). While the rectangle is disabled, the compositor does not use it as the animation source or target and behaves as if no rectangle were set, but the rectangle object and its association with the activation token remain alive. The client can re-enable the rectangle later by setting a positive size again; the target window uses the latest set geometry whenever the rectangle is enabled. The full flow is: 1. A, the originating surface, obtains an xdg_activation_token_v1, calls set_surface to identify itself, and calls commit to obtain the token string. 2. A calls get_window_transition_rect on this manager, passing the token string. 3. A calls set_geometry on the resulting rect object to define the transition rectangle (relative to A), and optionally calls set_source_surface on the rect object to attach a live source surface for the transition. 4. A passes the token string to B, the target window. 5. B calls xdg_activation_v1.activate with the token and B's surface. 6. The compositor looks up the rectangle associated with the token, converts it to global coordinates using A's position, and plays the open animation from that rectangle to B's geometry. 7. While B is alive, A may call set_geometry again on the rect object to update the transition rectangle. The compositor uses the latest set geometry when B is closed. 8. When B is closed, the compositor plays the close animation from B's geometry back to the rectangle. 9. Once the compositor stops using the rectangle, it sends the closed event on the rect object. A destroys the rect object after receiving this event. 10. If A destroys the rect object before B is closed (or if A's client disconnects, or if A is destroyed), the compositor falls back to its default animation. Timing and responsibilities: The client must call xdg_activation_v1.activate on the target surface before that surface is first mapped (i.e. before the wl_surface.commit that causes the compositor to map it). This ensures the compositor has the transition rectangle available when the surface appears. The terms "must", "must not", "should", and "may" in this document are to be interpreted as described in RFC 2119. This interface is a manager for creating window transition rectangle objects. A window transition rectangle is attached to an xdg-activation-v1 token string to request that the compositor play a window transition from that rectangle when the token is used to activate a new window, and back to that rectangle when the window is closed. Creates a new window transition rectangle object associated with the given activation token string. Represents a rectangle that the compositor uses as the reference area for window open and close animations. The rectangle coordinates are relative to the surface that was set on the associated activation token via set_surface. The compositor combines the surface's position with the rectangle offset to determine the global animation area. The object remains live: the client may call set_geometry again to update the rectangle, and the compositor will use the latest set geometry for the close animation when the target window is closed. When the client destroys this object (or the client disconnects, or the originating surface is destroyed), the compositor falls back to its default close animation for the target window. Destroying the rectangle object removes the animation association. If the target window is still alive, the compositor will use its default close animation when the window is closed. Sets the rectangle geometry, taking effect immediately. The x and y coordinates are relative to the surface set on the associated activation token via set_surface. This request may be called multiple times to update the geometry. A geometry with a positive width and a positive height is guaranteed to be valid. A width and height of both 0 is also guaranteed to be valid and temporarily disables the rectangle. Otherwise might be rejected with the invalid_geometry error. Sets the surface whose content the compositor uses as the source of the transition for this rectangle. The surface is rendered live while the transition is playing; its content is scaled into the rectangle set via set_geometry. The surface must not already be in use for any other purpose, and the compositor reserves it for use as a transition source only: it is not displayed anywhere else, and the client must not use it for any other purpose. A surface that has previously been used as a transition source may be used again. The client should keep the surface alive, and keep valid content on it, while it is set as the source. Passing null clears the source surface. The client may replace the source by passing another surface; a previously set surface is no longer used as a source. Destroying the rect object or the surface itself also ends its use as a source. A surface that cannot be used as a source, for example one that is already in use for another purpose, or that belongs to another client, raises the invalid_surface error. Sent when the compositor is done with this rectangle. The client must destroy the rectangle object after receiving this event. This is a notification only. No further events are delivered on this object after closed. linuxdeepin-treeland-protocols-bfdd6e0/wine/000077500000000000000000000000001527251314000213725ustar00rootroot00000000000000linuxdeepin-treeland-protocols-bfdd6e0/wine/README.md000066400000000000000000000020301527251314000226440ustar00rootroot00000000000000# Wine Compatibility Protocols Protocols for the Wine Windows compatibility layer. Installed via `TREELAND_PROTOCOL_WINE_XML_FILES`. | File | Protocol | Interfaces | Purpose | |------|----------|-----------|---------| | `treeland-remote-subsurface-unstable-v1.xml` | `treeland_remote_subsurface_unstable_v1` | `treeland_remote_subsurface_manager_v1`, `treeland_exported_surface_v1`, `treeland_remote_subsurface_v1` | Token-based cross-process sub-surface relationships (replaces wl_subcompositor for Wine) | | `treeland-wine-window-management-unstable-v1.xml` | `treeland_wine_window_management_unstable_v1` | `treeland_wine_window_manager_v1`, `treeland_wine_window_control_v1` | Wine window positioning (SetWindowPos) and Z-order control (HWND_TOPMOST etc.) | | `treeland-wine-window-state-unstable-v1.xml` | `treeland_wine_window_state_unstable_v1` | `treeland_wine_window_state_manager_v1`, `treeland_wine_window_state_v1` | Wine window state: minimize/unminimize, activation with focus-stealing prevention, attention hints (FlashWindowEx) | linuxdeepin-treeland-protocols-bfdd6e0/wine/README.zh_CN.md000066400000000000000000000017341527251314000236560ustar00rootroot00000000000000# Wine 兼容协议 Wine Windows 兼容层协议。通过 `TREELAND_PROTOCOL_WINE_XML_FILES` 安装。 | 文件 | 协议 | 接口 | 用途 | |------|----------|-----------|---------| | `treeland-remote-subsurface-unstable-v1.xml` | `treeland_remote_subsurface_unstable_v1` | `treeland_remote_subsurface_manager_v1`, `treeland_exported_surface_v1`, `treeland_remote_subsurface_v1` | 基于令牌的跨进程子 surface 关系(替代 Wine 的 wl_subcompositor) | | `treeland-wine-window-management-unstable-v1.xml` | `treeland_wine_window_management_unstable_v1` | `treeland_wine_window_manager_v1`, `treeland_wine_window_control_v1` | Wine 窗口定位(SetWindowPos)和 Z 序控制(HWND_TOPMOST 等) | | `treeland-wine-window-state-unstable-v1.xml` | `treeland_wine_window_state_unstable_v1` | `treeland_wine_window_state_manager_v1`, `treeland_wine_window_state_v1` | Wine 窗口状态:最小化/还原、带焦点抢占防护的激活、注意提示(FlashWindowEx) | linuxdeepin-treeland-protocols-bfdd6e0/wine/treeland-remote-subsurface-unstable-v1.xml000066400000000000000000000353141527251314000315100ustar00rootroot00000000000000 This protocol provides sub-surface relationships between wl_surface objects using token-based identifiers exchanged out-of-band, instead of the direct wl_surface references required by wl_subcompositor. In wl_subcompositor the parent and sibling surfaces must be local wl_surface objects from the same client; this protocol removes that restriction, allowing parent-child relationships both across different client connections and within the same client: 1. A client exports a wl_surface and receives a surface_token. 2. Another client (or the same client) exports their own wl_surface and then calls create_remote_subsurface with the parent's surface_token, attaching their surface as a child. All sub-surface semantics follow the wl_subcompositor specification unless explicitly noted in this document. Cross-process sub-surfaces are always in desynchronized mode; synchronized mode is not supported. This protocol is not interoperable with wl_subsurface: a wl_subsurface cannot reference a surface that carries a treeland_remote_subsurface_v1 role, and the two kinds of sub-surface cannot be ordered relative to each other. When a parent surface has both, wl_subsurface is always kept closest to the parent surface content on each side: a wl_subsurface placed above the parent content sits below the treeland_remote_subsurface_v1 children that are above the parent, and one placed below sits above the treeland_remote_subsurface_v1 children that are below the parent. The relative z-order between the two kinds cannot be controlled precisely, since place_above and place_below order treeland_remote_subsurface_v1 children among themselves and relative to the parent surface content, but cannot position them relative to wl_subsurface children, and the wl_subcompositor requests cannot position a wl_subsurface relative to treeland_remote_subsurface_v1 children. Clients that need fine-grained z-order control across all sub-surfaces of a parent should replace wl_subsurface with treeland_remote_subsurface_v1, which is designed for cross-process relationships but may equally be used within a single client, avoiding two separate sub-surface trees that cannot interact with each other. The compositor must restrict binding to trusted clients. A client that obtains a surface_token must only share it with other trusted clients through a secure mechanism; the compositor does not disclose tokens to other clients. The key words "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended", "may", and "optional" in this document are to be interpreted as described in RFC 2119. 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. Global factory for exporting wl_surface objects as token-addressable sub-surface parents or children. The typical workflow is: 1. The client calls export_surface on a wl_surface to obtain a treeland_exported_surface_v1 and receive a surface_token event. 2. The token is shared out-of-band with another client. 3. That client exports its own wl_surface, then calls create_remote_subsurface with the parent's token to establish a sub-surface relationship. Destroying this manager does not affect already-exported surfaces or existing sub-surface relationships; it only prevents creation of new exported surfaces. Destroys this manager object. Already-exported treeland_exported_surface_v1 objects and existing sub-surface relationships are not affected. Registers a wl_surface as addressable by token, creating a treeland_exported_surface_v1. Upon success the compositor emits the surface_token event on the new object. The surface must not have been previously exported through this manager; doing so is a bad_surface error. A surface may carry both an xdg_toplevel (or any other role) and an export; the export only marks it as addressable by token. Represents a wl_surface registered for sub-surface use via this protocol. The surface may act as a parent or a child; a surface can have at most one parent via this protocol. Destroying this object revokes the surface_token without affecting existing parent-child relationships or treeland_remote_subsurface_v1 objects. These errors can be raised in response to treeland_exported_surface_v1 requests. Indicates why a create_remote_subsurface request could not establish the requested parent-child relationship. Revokes the surface_token; subsequent use of the token in create_remote_subsurface results in an invalid_token parent_rejected event on the requesting treeland_exported_surface_v1. The client must destroy this object before destroying the associated wl_surface. Attaches the exported surface to the parent identified by parent_token, creating a treeland_remote_subsurface_v1. The surface must not already have a wlroots role; it will be assigned the exclusive treeland_remote_subsurface_v1 role. If the surface already has an incompatible role, a bad_surface error is raised and the new treeland_remote_subsurface_v1 object is inert. If the parent_token is invalid or would introduce a cycle, the request is ignored and a parent_rejected event is emitted carrying the reject_reason. The sub-surface addition is double-buffered on the parent. Emitted immediately after export_surface. The token is a unique string of at most 128 characters, generated by a cryptographically secure random number generator, intended to be shared out-of-band so that other clients can reference this surface as a parent or sibling. Emitted when create_remote_subsurface cannot establish the requested parent-child relationship. An additional interface to a wl_surface that has been made a sub-surface via this protocol. A sub-surface has one parent and is not automatically clipped to its parent's area. Mapping and commit semantics follow wl_subcompositor except that desynchronized mode is always used. A sub-surface never has the keyboard focus of any seat. The parent is identified at creation time and cannot be changed. place_above and place_below accept a token (string) instead of a wl_surface proxy; see the request documentation for valid values. The wl_surface.offset request is ignored; clients must use set_position instead. Removes the sub-surface association, unmaps the wl_surface immediately, and destroys this object. Schedules a position change relative to the parent surface coordinate system. Coordinates are not restricted to the parent area; negative values are allowed. Double-buffered on the parent; replaces any previous pending position. Initial position is 0, 0. Places this sub-surface just above the reference identified by sibling_token, changing the z-order. Z-order is double-buffered on the parent surface. A new sub-surface is initially added at the top. Valid sibling_token values: - The surface_token of the parent exported surface. - The surface_token of any sibling cross-process sub-surface under the same parent, shared via out-of-band communication. - An empty string (""), a sentinel meaning "place at the very top of the sibling stack". If the sibling_token does not identify a valid target, the request is ignored and an invalid_sibling event is emitted. Places this sub-surface just below the reference identified by sibling_token. The same sibling_token values are accepted as in place_above, except that an empty string is a sentinel meaning "place at the very bottom of the sibling stack". If the sibling_token does not identify a valid target, the request is ignored and an invalid_sibling event is emitted. Emitted when a sibling_token does not identify a valid target. The corresponding restack request was ignored. linuxdeepin-treeland-protocols-bfdd6e0/wine/treeland-wine-window-management-unstable-v1.xml000066400000000000000000000356451527251314000324450ustar00rootroot00000000000000 This protocol provides privileged window management capabilities required by Wine (the Windows API compatibility layer) that are not available through standard Wayland protocols. Standard xdg-shell intentionally prevents clients from setting their own screen position or controlling z-order. Wine applications rely heavily on absolute positioning (SetWindowPos, MoveWindow) and stacking control (HWND_TOPMOST, HWND_TOP) to implement the Windows window management model. This protocol bridges that gap by allowing a trusted Wine client to request positioning and stacking changes while leaving the compositor the final authority over actual placement. A client obtains a treeland_wine_window_control_v1 object for each xdg_toplevel it wishes to manage. Requests on that object express the client's desired geometry and stacking. The compositor applies or adjusts them and reports the actual result through events. A Wine session is the set of all treeland_wine_window_control_v1 objects created through the same treeland_wine_window_manager_v1 global binding. window_id values emitted by the window_id event are unique and valid only within that set. The compositor must enforce this boundary: a sibling_id supplied to set_z_order that refers to a control object from a different manager binding must be treated as if no matching sibling exists, causing hwnd_insert_after to have no effect. The key words "must", "must not", "should", "should not", and "may" in this document are to be interpreted as described in IETF RFC 2119. 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. Lets a Wine client create per-toplevel control objects. The compositor should restrict binding to trusted clients identified by app_id or an equivalent policy mechanism. The client must destroy all child treeland_wine_window_control_v1 objects before destroying this object. Destroys this manager object. The client must destroy every treeland_wine_window_control_v1 created through this manager before sending this request; otherwise the compositor must raise an implementation-defined protocol error. Creates a treeland_wine_window_control_v1 bound to the given xdg_toplevel. At most one control object may exist for each toplevel; requesting a second one is a toplevel_already_controlled error. If the xdg_toplevel has been destroyed or has no configured role the compositor must raise a defunct_toplevel error. Controls the screen geometry and stacking order for one xdg_toplevel surface. All coordinate values are in the compositor's global logical coordinate space (the same space used by wl_output.geometry and xdg_output.logical_position). Position requests are not applied immediately. The compositor processes them and reports the result via configure_position. The client should treat the values in configure_position as authoritative and update its internal state accordingly. If the associated xdg_toplevel is destroyed, this object becomes inert. All subsequent requests are ignored and no further events are emitted. The client should destroy the inert object. Window size is managed through the standard xdg_toplevel configure / xdg_surface.ack_configure mechanism. This interface only controls screen position and stacking order. Encodes the Windows SetWindowPos hWndInsertAfter parameter directly. The first four values correspond to the four special HWND constants. hwnd_insert_after requires a non-zero sibling_id in set_z_order. hwnd_topmost and hwnd_notopmost change WS_EX_TOPMOST tier membership; the compositor must preserve the resulting tier until explicitly changed. hwnd_bottom also clears topmost. hwnd_top does not alter tier membership. This is a superset of what the Wine X11 driver implements: the X11 driver tracks only the topmost flag and a boolean "raise to top", skipping HWND_BOTTOM and sibling-relative ordering (see sync_window_position comment in winex11.drv). This protocol implements all five Windows cases. Destroys the control object. This does not affect the associated xdg_toplevel or its current position on screen. Requests that the compositor place this window at the specified position in the compositor's global logical coordinate space. The client must supply a non-zero serial that monotonically increases with each request, starting from 1. The compositor echoes this serial in the resulting configure_position event so the client can correlate responses to requests. The requested position must fall within the bounds of an active screen. If the compositor determines that (x, y) is outside all screen regions, it rejects the request and emits a configure_position event reporting the current unchanged position. Even for valid positions the compositor does not guarantee exact placement: it may adjust the position to respect window management rules or layer-shell exclusive zones. The client must treat the values in the resulting configure_position event as authoritative and update its internal state accordingly. Window size changes must use the standard xdg_toplevel configure / xdg_surface.ack_configure flow and are outside the scope of this protocol. Corresponds to the position component of the Windows SetWindowPos and MoveWindow APIs. Requests a Z-order change that directly encodes the Windows SetWindowPos hWndInsertAfter parameter. For ops hwnd_top, hwnd_bottom, hwnd_topmost, and hwnd_notopmost, sibling_id must be 0; a non-zero value is an invalid_sibling error. For op hwnd_insert_after, sibling_id must be the window_id of a control object in the same Wine session as emitted by the window_id event on that control. The compositor places this surface directly below the identified sibling in Z-order. If sibling_id is 0 or does not identify a live surface in the same session, the compositor must ignore the request and leave the current Z-order unchanged. hwnd_insert_after must not mix tiers: if the sibling is in a different tier from this surface, the compositor must clamp to hwnd_top within the appropriate tier. The compositor reports the resulting stacking state via configure_stacking. Note: hwnd_top and hwnd_insert_after do not change tier membership and therefore do not emit configure_stacking. Emitted by the compositor immediately after this control object is created, before any configure_position or configure_stacking event. The id is a non-zero uint32 that uniquely identifies this toplevel within the current Wine session for the lifetime of this control object. The Wine driver must store this mapping (HWND to window_id) in wineserver shared memory so that other Wine processes in the same session can look up the sibling_id to use in set_z_order requests. Sent by the compositor to inform the client of the actual window position in the compositor's global logical coordinate space. This event is emitted: - immediately after window_id on initial creation, - in response to set_position requests, - when the user or compositor moves the window. The serial field echoes the serial from the set_position request that caused this event. If the position change was not initiated by a set_position request (e.g. initial creation, user drag, or compositor policy), serial is 0. Window size is communicated via the standard xdg_toplevel configure event and is not reported here. The client should use these coordinates to synchronize its internal window state (e.g. update the wineserver window rectangles with the correct screen origin). Sent by the compositor to report whether this toplevel is currently in the topmost tier (WS_EX_TOPMOST equivalent). This event is emitted: - immediately after window_id and configure_position on initial creation, to report the current tier state, - in response to set_z_order requests that change tier membership (hwnd_topmost, hwnd_notopmost, hwnd_bottom), - when the compositor changes tiers on its own initiative. Note: hwnd_top and hwnd_insert_after do not change tier membership and therefore do not trigger this event. linuxdeepin-treeland-protocols-bfdd6e0/wine/treeland-wine-window-state-unstable-v1.xml000066400000000000000000000325601527251314000314420ustar00rootroot00000000000000 This protocol provides window state management capabilities required by Wine (the Windows API compatibility layer) that are not available through standard Wayland protocols. Standard xdg-shell lacks: - any way to read whether a toplevel is minimized, - any way to programmatically unminimize a toplevel, - any way to request activation without a valid xdg-activation token originating from a prior user interaction, - any way to request a visual attention hint (taskbar flash) without stealing focus. This protocol fills those gaps. A client obtains a treeland_wine_window_state_v1 object for each xdg_toplevel whose state it needs to observe or control. The compositor remains the final authority: every request is advisory, and the compositor reports the authoritative state through events. The key words "must", "must not", "should", "should not", and "may" in this document are to be interpreted as described in IETF RFC 2119. 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. Lets a Wine client create per-toplevel state objects. The compositor should restrict binding to trusted clients identified by app_id or an equivalent policy mechanism. The client must destroy all child treeland_wine_window_state_v1 objects before destroying this object. Destroys this manager object. The client must destroy every treeland_wine_window_state_v1 created through this manager before sending this request; otherwise the compositor must raise an implementation-defined protocol error. Creates a treeland_wine_window_state_v1 bound to the given xdg_toplevel. At most one state object may exist for each toplevel; requesting a second one is a toplevel_already_bound error. If the xdg_toplevel has been destroyed or has no configured role, the compositor must raise a defunct_toplevel error. Upon creation, the compositor immediately sends a state_changed event to report the current state of the toplevel. Observes and controls the lifecycle state for one xdg_toplevel surface. State flags are reported via the state_changed event. Each flag corresponds to a Windows window state that xdg-shell does not expose to clients. If the associated xdg_toplevel is destroyed, this object becomes inert. All subsequent requests are ignored and no further events are emitted. The client should destroy the inert object. Bitfield of window states that the compositor tracks for this toplevel. These supplement the states delivered by xdg_toplevel.configure. Keyboard focus (activated) is excluded because it is already delivered by xdg_toplevel; duplicating it here would create two conflicting sources of truth. Provides semantic context for an activate request so the compositor can apply appropriate focus-stealing prevention policy. Destroys the state object. This does not affect the associated xdg_toplevel. Requests that the compositor restore this toplevel from the minimized state. Standard xdg-shell provides xdg_toplevel.set_minimized but no way to reverse it. This request fills that gap. If the toplevel is not currently minimized, this request has no effect. If the compositor honors the request, it emits a state_changed event with the minimized flag cleared. This corresponds to the Wine/Windows ShowWindow(SW_RESTORE) call on a minimized window. Requests that the compositor give keyboard focus to this toplevel and raise it in the stacking order. serial is a client-assigned value that is echoed back in any activate_denied event for this request, allowing the client to correlate denials when multiple activations are in flight. The reason argument informs the compositor about the context of the activation. Compositors should generally honor user_request and restore activations, and may choose to deny or convert programmatic activations into attention requests based on focus-stealing prevention policy. If the compositor accepts the request, no activate_denied event is sent. Acceptance does not guarantee immediate keyboard focus: if another surface (e.g. a layer-shell surface with exclusive keyboard interactivity) currently holds focus, the compositor places this toplevel at the head of the focus fallback queue and activates it once the exclusive focus is released. The client will observe the eventual focus grant through the normal xdg_toplevel.configure activated state. If the compositor denies the request, it emits an activate_denied event carrying the same serial, and may set the attention flag via state_changed. Corresponds to the Wine/Windows SetForegroundWindow API. Under X11, Wine sends a _NET_ACTIVE_WINDOW client message with source indication; this request serves the same role under Wayland. Asks the compositor to signal that this toplevel needs user attention in the taskbar or dock. This must not steal keyboard focus. The compositor forwards this hint to the taskbar via the foreign toplevel manager protocol. Whether the taskbar honors count and timeout_ms is implementation-defined and not guaranteed by the compositor; clients must not rely on exact flash behavior. count specifies how many times to flash. 0 means flash indefinitely until the window is activated, corresponding to FLASHW_TIMER in the Windows FlashWindowEx API. timeout_ms specifies the desired interval between flashes in milliseconds. 0 requests the compositor or taskbar default rate. This value is forwarded as a hint only. Sending this request replaces any currently active attention hint. To stop flashing, use clear_attention. This request covers the taskbar/tray component (FLASHW_TRAY) of the Windows FlashWindowEx API. Title-bar caption flashing (FLASHW_CAPTION) is handled by Wine's client-side decoration layer and is outside the scope of this protocol. Under X11, Wine sets _NET_WM_STATE_DEMANDS_ATTENTION; this request serves the same role under Wayland. Cancels any active attention hint set via set_attention. If no hint is active, this request has no effect. The compositor emits a state_changed event with the attention flag cleared. Corresponds to FlashWindowEx with FLASHW_STOP. Emitted whenever the state flags of the toplevel change. This event is sent: - immediately after the treeland_wine_window_state_v1 is created, to report current state, - when the user or compositor minimizes or restores the window, - when an attention hint is set or cleared. The state argument is a bitfield of treeland_wine_window_state_v1.state values. Flags not present in the bitfield are considered unset. Emitted when the compositor denies an activate request. The serial matches the serial field of the activate request that was denied. The compositor may have set the attention flag via state_changed instead. The client must not retry the activation automatically.