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. 验证不同表面类型的输出列表一致性 |
||
|---|---|---|
| .github | ||
| .tx | ||
| LICENSES | ||
| cmake | ||
| debian | ||
| docs | ||
| examples | ||
| misc | ||
| nix | ||
| qwlroots | ||
| src | ||
| tests | ||
| tools | ||
| translations | ||
| waylib | ||
| .clang-format | ||
| .editorconfig | ||
| .envrc | ||
| .gitignore | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| README.md | ||
| README.zh_CN.md | ||
| REUSE.toml | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| garnix.yaml | ||
| renovate.json | ||
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/**orqwlroots/**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.