Go to file
rewine 7080047a90 fix: fix potential crash in moveResizeState surface handling
Fixed a potential crash when accessing surface outputs
during move/resize operations. The issue occurred when
moveResizeState.surface->surface() returned a null pointer, causing a
crash when trying to access its outputs. Added a new outputs() method
in SurfaceWrapper that safely handles null surface pointers by returning
an empty list. Also unified container types from QVector to QList for
consistency across the codebase.

Log: Fixed potential crash during window move/resize operations

Influence:
1. Test window move and resize operations to ensure no crashes occur
2. Verify that surfaces properly track output changes during movement
3. Check that pre-launch splash screens handle outputs correctly
4. Test multi-monitor scenarios with window movement between outputs
5. Verify output list consistency across different surface types

fix: 修复moveResizeState表面处理中的潜在崩溃问题

修复了在移动/调整大小操作期间访问表面输出时可能发生的崩溃问题。该问题出
现在moveResizeState.surface->surface()返回空指针时,尝试访问其输出会导致
崩溃。在SurfaceWrapper中添加了新的outputs()方法,通过返回空列表安全处理
空表面指针。同时将容器类型从QVector统一为QList,以保持代码库的一致性。

Log: 修复了窗口移动/调整大小操作期间的潜在崩溃问题

Influence:
1. 测试窗口移动和调整大小操作,确保不会发生崩溃
2. 验证表面在移动过程中是否正确跟踪输出变化
3. 检查预启动闪屏是否正确处理输出
4. 测试多显示器场景下窗口在输出设备间的移动
5. 验证不同表面类型的输出列表一致性
2025-10-30 11:01:56 +08:00
.github refactor: remove branch filter for workflow triggers 2025-10-16 21:33:40 +08:00
.tx chore: configure translation files and update Chinese translations 2025-06-24 14:43:20 +08:00
LICENSES feat: add foreign toplevel image capture support 2025-07-31 20:37:24 +08:00
cmake chore: improvement fixes the translation configuration 2025-06-30 13:40:51 +08:00
debian chore: update changelog for 0.7.4 release 2025-10-16 21:33:40 +08:00
docs docs: add comprehensive logging guidelines and update module logging 2025-08-11 18:21:02 +08:00
examples fix: fix build when treeland examples are enabled 2025-10-16 21:33:40 +08:00
misc chore: update systemd service dependencies and surface wrapper setup 2025-10-15 15:51:33 +08:00
nix fix: Separate DConfig object creation to another thread to avoid blocking 2025-09-11 19:06:22 +08:00
qwlroots fix: Fix client crash when created via security context 2025-09-15 14:48:34 +08:00
src fix: fix potential crash in moveResizeState surface handling 2025-10-30 11:01:56 +08:00
tests fix: add timeout to protocol tests 2025-07-23 15:27:52 +08:00
tools move test_app_id_resolver_helper to tools 2025-10-15 10:17:26 +08:00
translations Updates for project TreeLand (#563) 2025-09-21 15:05:11 +08:00
waylib fix: fix potential crash in moveResizeState surface handling 2025-10-30 11:01:56 +08:00
.clang-format Revert too new clang-format standard. 2024-11-15 14:37:55 +08:00
.editorconfig feat: add `.editorconfig` 2024-03-07 11:26:41 +08:00
.envrc chore: fix not found qtsvg in nixos 2024-01-24 21:47:19 +08:00
.gitignore refactor: merge qwlroots and waylib source code into treeland 2025-07-23 15:27:52 +08:00
CMakeLists.txt move test_app_id_resolver_helper to tools 2025-10-15 10:17:26 +08:00
CMakePresets.json refactor: use unified CI build preset with Werror 2025-08-18 16:01:51 +08:00
README.md ci: Trigger waylib builds when qwlroots changes 2025-07-30 17:57:57 +08:00
README.zh_CN.md ci: Trigger waylib builds when qwlroots changes 2025-07-30 17:57:57 +08:00
REUSE.toml chore: fix CI and enable independent builds 2025-07-23 15:27:52 +08:00
default.nix feat: add Nix flake support for project configuration 2025-07-24 20:07:56 +08:00
flake.lock chore: fix CI and enable independent builds 2025-07-23 15:27:52 +08:00
flake.nix feat: add Nix flake support for project configuration 2025-07-24 20:07:56 +08:00
garnix.yaml feat: allow ddm works in nixos 2024-03-06 13:21:37 +08:00
renovate.json chore(config): migrate config renovate.json 2025-06-23 13:22:14 +08:00

README.md

Treeland

treeland is a wayland compositor based on wlroots and QtQuick, designed to provide efficient and flexible graphical interface support.

Dependencies

Check the debian/control file to understand specific build and runtime dependencies, or use cmake to check for missing necessary components.

Core build dependencies:

  • waylib: A Wayland compositor development library based on wlroots and QtQuick
    • Qt >= 6.8.0
    • wlroots = 0.19
  • treeland-protocols: Private Wayland protocols used by treeland

Recommended runtime dependencies:

  • ddm: A display manager optimized for multiple users

Building

Treeland uses cmake for building. The WITH_SUBMODULE_WAYLIB option can force the use of the waylib code from the submodule. If you want to use the system-provided waylib, set this option to OFF.

Using the system-provided waylib:

$ git clone git@github.com:linuxdeepin/treeland.git
$ cd treeland
$ cmake -Bbuild -DWITH_SUBMODULE_WAYLIB=OFF
$ cmake --build build

Using the waylib from the submodule:

$ git clone git@github.com:linuxdeepin/treeland.git --recursive
$ cd treeland
$ cmake -Bbuild -DWITH_SUBMODULE_WAYLIB=ON
$ cmake --build build

Packaging

A debian folder is provided to build the package under the deepin linux desktop distribution. To build the package, use the following command:

$ sudo apt build-dep . # install build dependencies
$ dpkg-buildpackage -uc -us -nc -b # build binary package(s)

GitHub Actions / CI

This project uses GitHub Actions for continuous integration. The following workflows are configured:

  • qwlroots builds: Triggered when qwlroots/** files are modified
  • waylib builds: Triggered when waylib/** or qwlroots/** files are modified (since waylib depends on qwlroots)
  • treeland builds: Main project builds

The waylib workflows are configured to also trigger when qwlroots code changes, ensuring that waylib builds remain compatible with qwlroots modifications.

Getting Involved

License

treeland is licensed under Apache-2.0 OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only.