handling
Changed m_popupContainer from PopupSurfaceContainer to SurfaceContainer
to fix tooltip damage issue caused by PR #428. This is a temporary
fix while a better solution for handling popup click events is being
developed.
Log: Fixed tooltip display issues by changing popup container
implementation
Influence:
1. Test tooltip display functionality across different applications
2. Verify popup windows and menus still work correctly
3. Check for any regression in popup interaction behavior
4. Test various popup types including context menus and tooltips
5. Verify z-ordering of popup elements remains correct
refactor: 将弹出窗口容器从 PopupSurfaceContainer 替换为 SurfaceContainer
将 m_popupContainer 从 PopupSurfaceContainer 改为 SurfaceContainer,以修
复 PR #428 导致的工具提示损坏问题。这是一个临时修复方案,同时正在开发更
好的弹出窗口点击事件处理方案。
Log: 通过更改弹出窗口容器实现修复了工具提示显示问题
Influence:
1. 测试不同应用程序中的工具提示显示功能
2. 验证弹出窗口和菜单是否仍能正常工作
3. 检查弹出窗口交互行为是否有回归问题
4. 测试各种弹出类型,包括上下文菜单和工具提示
5. 验证弹出元素的 Z 轴排序是否保持正确
- Use WOutputRenderWindow interface for output configuration
- Complete output state management with all properties
- Ensure settings only saved when configuration succeeds
The WSurface's `aboutToBeInvalidated` signal connection was incorrectly
using `QObject::connect` instead of `safeConnect`. This could lead
to issues when the WSurface object is modified using `setSurface`,
as the previous object's `aboutToBeInvalidated` signal would not be
disconnected, potentially causing a crash or unexpected behavior. This
change replaces the regular `QObject::connect` with `safeConnect` to
ensure proper disconnection and avoid potential issues when the surface
is replaced.
Influence:
1. Test replacing a WSurface multiple times with different WSurface
objects using `setSurface`.
2. Verify that the `releaseResources` function is only called when the
current WSurface is truly invalidated and not prematurely.
3. Observe application behavior under heavy WSurface replacement
scenarios to ensure stability and prevent crashes.
fix: 使用 safeConnect 连接 aboutToBeInvalidated 信号
WSurface 的 `aboutToBeInvalidated` 信号连接错误地使用了
`QObject::connect` 而不是 `safeConnect`。当使用 `setSurface` 修改
WSurface 对象时,这可能导致问题,因为前一个对象的 `aboutToBeInvalidated`
信号不会断开,可能导致崩溃或意外行为。此更改将常规的 `QObject::connect`
替换为 `safeConnect`,以确保正确断开连接并避免在表面替换时出现潜在问题。
Influence:
1. 使用 `setSurface` 多次用不同的 WSurface 对象替换 WSurface。
2. 验证 `releaseResources` 函数仅在当前 WSurface 真正失效时才被调用,而
不是过早调用。
3. 观察在大量 WSurface 替换场景下的应用程序行为,以确保稳定并防止崩溃。
* [skip CI] Translate wallpaper.en_US.ts in sq
91% of minimum 10% translated source file: 'wallpaper.en_US.ts'
on 'sq'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in sq
95% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'sq'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in sq
100% translated source file: 'lockscreen.en_US.ts'
on 'sq'.
* [skip CI] Translate multitaskview.en_US.ts in sq
100% translated source file: 'multitaskview.en_US.ts'
on 'sq'.
* [skip CI] Translate treeland.en_US.ts in sq
100% translated source file: 'treeland.en_US.ts'
on 'sq'.
---------
Log:
- Track each WXWayland instance by uid so every session gets its own
XWayland socket
- Hide/show XWayland surfaces when switching users to prevent previous
windows leaking
为不同用户管理独立的 XWayland 会话
- 为每个 uid 记录 WXWayland 实例,实现按用户隔离的 XWayland socket
- 切换用户时自动隐藏/显示对应的 XWayland 窗口,避免旧会话窗口外泄
Add AddressSanitizer (ASAN) environment variables to the treeland
systemd service file. This aids in debugging memory-related issues
within treeland, particularly when running with ASAN enabled. The
`ASAN_SYMBOLIZER_PATH` variable points to the llvm-symbolizer, enabling
symbolization of ASAN reports. The `ASAN_OPTIONS` variable configures
ASAN to log its output to a specific file (`/tmp/treeland-asan`),
disables leak detection (due to false positives in some environments),
enables immediate abortion on error, and enables symbolization within
the log file. This change facilitates easier debugging of memory
corruption and other ASAN-detectable errors.
Influence:
1. Verify that ASAN logs are generated in the specified log file when
ASAN is enabled.
2. Ensure that the ASAN logs contain symbolized stack traces.
3. Confirm that treeland aborts when memory errors are detected with
ASAN enabled.
chore: 添加 ASAN 环境变量
将 AddressSanitizer (ASAN) 环境变量添加到 treeland systemd 服务文件中。
这有助于调试 treeland 中与内存相关的问题,尤其是在启用 ASAN 的情况下。
`ASAN_SYMBOLIZER_PATH` 变量指向 llvm-symbolizer,从而可以对 ASAN 报告
进行符号化。`ASAN_OPTIONS` 变量配置 ASAN 将其输出记录到特定文件 (`/tmp/
treeland-asan`),禁用泄漏检测(由于某些环境中的误报),在发生错误时立即
中止,并启用日志文件中的符号化。此更改有助于更轻松地调试内存损坏和其他
ASAN 可检测到的错误。
Influence:
1. 验证启用 ASAN 后,是否在指定的日志文件中生成 ASAN 日志。
2. 确保 ASAN 日志包含符号化的堆栈跟踪。
3. 确认在启用 ASAN 的情况下检测到内存错误时,treeland 会中止。
This change addresses the issue where the client process ID associated
with an XWayland surface could not be directly obtained through
`WClient`. Previously, accessing the `WClient` of an XWayland
surface always returned the XWayland process itself. To resolve
this, two virtual functions, `pid()` and `pidFD()`, have been added
to the `WObject` class and overridden in `WXWaylandSurface`. These
functions allow retrieving the actual PID and PID file descriptor
of the XWayland window's client. The `pidFD` is obtained by using
`syscall(SYS_pidfd_open, pid(), 0)`. This approach enables correct
identification of the client process owning the XWayland surface.
Influence:
1. Verify that the `pid()` function on a `WXWaylandSurface` object
returns the correct process ID of the client application, not the
XWayland process.
2. Confirm that `pidFD()` returns a valid file descriptor for the client
application's PID. Check the returned file descriptor is valid.
3. Ensure that these new functions do not negatively impact other parts
of the Waylib codebase.
4. Test multiple XWayland applications to ensure consistent and accurate
PID retrieval.
5. Test on different platforms to ensure `syscall(SYS_pidfd_open, pid(),
0)` is working correctly, and fallback gracefully if not.
feat: 暴露 XWayland surface 进程 ID
此更改解决了无法通过 `WClient` 直接获取与 XWayland surface 关联的客户
端进程 ID 的问题。 以前,访问 XWayland surface 的 `WClient` 始终返回
XWayland 进程本身。 为了解决这个问题,我们在 `WObject` 类中添加了两个虚
函数 `pid()` 和 `pidFD()`,并在 `WXWaylandSurface` 中重写了它们。 这些函
数允许检索 XWayland 窗口客户端的实际 PID 和 PID 文件描述符。 `pidFD` 通
过使用 `syscall(SYS_pidfd_open, pid(), 0)` 获得。 这种方法可以正确识别拥
有 XWayland surface 的客户端进程。
Influence:
1. 验证 `WXWaylandSurface` 对象上的 `pid()` 函数返回客户端应用程序的正确
进程 ID,而不是 XWayland 进程。
2. 确认 `pidFD()` 为客户端应用程序的 PID 返回有效的文件描述符。 检查返回
的文件描述符是否有效。
3. 确保这些新函数不会对 Waylib 代码库的其他部分产生负面影响。
4. 测试多个 XWayland 应用程序,以确保一致且准确的 PID 检索。
5. 在不同平台上进行测试,以确保 `syscall(SYS_pidfd_open, pid(), 0)` 正常
工作,如果不能正常工作,则优雅地回退。
The Debian build environment in the CI workflows for both qwlroots and
waylib has been changed from `experimental` to `unstable`. This change
was necessary because the `experimental` environment was proving to
be unstable, frequently causing CI failures. Debian `unstable` is more
reliable and now provides wlroots 0.19 which meets the required version.
The apt sources in the build workflows have been updated to reflect
this change.
Influence:
1. Monitor CI build stability for both qwlroots and waylib on the Debian
unstable environment.
2. Verify that the builds are successful and that the required
dependencies, including wlroots 0.19, are correctly installed.
3. Check for any compatibility issues introduced by the change in the
build environment.
chore: 更改 Debian 构建环境为 unstable
qwlroots 和 waylib 的 CI 工作流程中的 Debian 构建环境已从 `experimental`
更改为 `unstable`。 这一更改是必要的,因为 `experimental` 环境被证明不
稳定,经常导致 CI 失败。 Debian `unstable` 更加可靠,现在提供 wlroots
0.19,满足了所需的版本。 构建工作流程中的 apt 源已更新以反映此更改。
Influence:
1. 监控 Debian unstable 环境上 qwlroots 和 waylib 的 CI 构建稳定性。
2. 验证构建是否成功,以及是否正确安装了所需的依赖项,包括 wlroots 0.19。
3. 检查构建环境更改引入的任何兼容性问题。
This commit removes the branch filters from the `on` triggers in several
GitHub workflow files. Specifically, the `branches: - master` filter has
been removed from the `push` and `pull_request` triggers in `.github/
workflows/qwlroots-archlinux-build.yml`, `.github/workflows/qwlroots-
debian-build.yml`, `.github/workflows/treeland-archlinux-build.yml`,
`.github/workflows/waylib-archlinux-build.yml`, and `.github/workflows/
waylib-debian-build.yml`.
This change ensures that the workflows are triggered for all branches,
including feature branches and release branches, rather than being
limited to the `master` branch. This provides better coverage for
automated builds and tests whenever changes are pushed or a pull request
is created against *any* branch. This is important as the project
evolves beyond relying solely on master and introduces feature branches,
ensuring consistent CI across development.
Influence:
1. Verify that all workflows trigger correctly on pushes and pull
requests for all branches, not just master.
2. Create a pull request to a new branch and ensure that all relevant
workflows are triggered.
3. Push a commit to a new branch and verify that all relevant workflows
are triggered.
重构: 移除工作流程触发器的分支筛选器
此提交从多个 GitHub 工作流程文件的 `on` 触发器中删除了分支筛选器。
具体来说,已从 `.github/workflows/qwlroots-archlinux-build.yml`、
`.github/workflows/qwlroots-debian-build.yml`、`.github/workflows/
treeland-archlinux-build.yml`、`.github/workflows/waylib-archlinux-
build.yml` 和 `.github/workflows/waylib-debian-build.yml` 中的 `push` 和
`pull_request` 触发器中删除 `branches: - master` 筛选器。
此更改确保工作流程在所有分支(包括功能分支和发布分支)上触发,而不是仅限
于 `master` 分支。 无论何时推送更改或针对*任何*分支创建拉取请求,这都为
自动构建和测试提供了更好的覆盖范围。 这一点很重要,因为项目的发展不仅仅
依赖于 master,还引入了功能分支,确保了整个开发过程中的持续集成。
Influence:
1. 验证所有工作流程是否在所有分支(不仅仅是 master)的推送和拉取请求上正
确触发。
2. 创建一个到新分支的拉取请求,并确保所有相关的工作流程都被触发。
3. 将提交推送到一个新分支,并验证所有相关的工作流程是否被触发。
Fixes a build failure that occurs when Treeland examples are enabled,
specifically in higher versions of Qt6. The issue arises because certain
private Qt modules (like `WaylandClientPrivate`) are not automatically
included and need to be explicitly specified using `find_package`.
Failing to do so results in linker errors during the build process. This
change ensures that the necessary private modules are found, allowing
the examples to compile successfully.
Influence:
1. Build the `test_multitaskview` example with Treeland examples
enabled.
2. Verify that the build completes without any errors related to missing
Qt private modules.
3. Confirm that the compiled example runs correctly.
fix: 修复开启 treeland 示例时构建失败的问题
修复了在 Qt6 的较高版本中,启用 Treeland 示例时发生的构建失败。 出现此问
题的原因是某些私有 Qt 模块(如 `WaylandClientPrivate`)不会自动包含,需
要使用 `find_package` 显式指定。 否则,会导致构建过程中出现链接器错误。
此更改确保找到必要的私有模块,从而使示例能够成功编译。
Influence:
1. 在启用 Treeland 示例的情况下构建 `test_multitaskview` 示例。
2. 验证构建是否完成,并且没有与缺少的 Qt 私有模块相关的任何错误。
3. 确认编译后的示例可以正确运行。
The build was failing on Arch Linux due to an upgrade to Qt 6.10.
This version of Qt requires explicitly finding the private modules
(QuickPrivate, WaylandClientPrivate). This commit updates the
CMakeLists.txt files in the affected directories (src/, src/treeland-
shortcut/, waylib/examples/tinywl/, and waylib/src/server/) to
explicitly find these private modules. It also updates the minimum
required Qt version in some waylib CMakeLists.txt files to 6.8 to align
with the actual required version.
修复了在 Arch Linux 上的构建失败
由于升级到 Qt 6.10,导致在 Arch Linux 上的构建失败。 此版本的 Qt 需要显
式查找私有模块(QuickPrivate, WaylandClientPrivate)。 此提交更新了受影
响目录(src/、src/treeland-shortcut/、waylib/examples/tinywl/ 和 waylib/
src/server/)中的 CMakeLists.txt 文件,以显式查找这些私有模块。 它还在一
些 waylib CMakeLists.txt 文件中更新了最低要求的 Qt 版本到 6.8,以与实际
要求的版本保持一致。
This commit explicitly includes `GuiPrivate` and `QuickPrivate` Qt
modules in `CMakeLists.txt` for both the `waylib` and `waylib/src/
server` directories. This is necessary because Qt 6.11 and later
versions no longer implicitly include these private modules. Failing
to include them results in build failures due to missing headers and
symbols.
Log: Fixed build issue with Qt 6.11 and later versions by explicitly
including necessary private Qt modules.
Influence:
1. Verify that the project builds successfully with Qt versions 6.11
and later.
2. Ensure that all functionalities relying on Qt private modules
(e.g., custom QML components, internal Qt API usage) continue to work
as expected.
3. Test on different platforms (Linux, Windows, macOS) where Qt is used.
fix: 为 Qt 6.11 包含 Qt 私有模块
此提交在 `waylib` 和 `waylib/src/server` 目录的 `CMakeLists.txt` 中显式
包含 `GuiPrivate` 和 `QuickPrivate` Qt 模块。 这是必要的,因为 Qt 6.11
及更高版本不再隐式包含这些私有模块。 未能包含它们会导致由于缺少头文件和
符号而导致构建失败。
Log: 通过显式包含必要的私有 Qt 模块,修复了 Qt 6.11 及更高版本的构建
问题。
Influence:
1. 验证项目是否可以使用 Qt 6.11 及更高版本成功构建。
2. 确保所有依赖于 Qt 私有模块的功能(例如,自定义 QML 组件、内部 Qt API
使用)继续按预期工作。
3. 在使用 Qt 的不同平台(Linux、Windows、macOS)上进行测试。
Introduces an on-screen FPS overlay with timer-based sampling aligned
to the active screen’s refresh rate. automatic refresh-rate handling
on screen changes.
This commit fixed the SessionModel and SessionList, and enabled session
selection by adding a button to ControlAction.qml. Thus treeland can act
as a greeter of ddm, guide the start of other desktop environment.
This commit adds support for the ext-session-lock-v1 protocol to
Treeland compositor.
The implementation allows for a grace delay of 300ms for client to
properly setup locking surfaces before sending locking.
The implementation also disables animation for locking triggered by
ext-session-lock-v1.
When the lock is abandoned, if lockscreen plugin is loaded, treeland
automaticly replace lock surfaces with that provided by the plugin.
If else, the session will remain locked forever.
Implementation Details:
1. lockscreen.cpp: extend the LockScreen class to handle locking
initiated by WSessionLock object.
2. qmlengine: add a fallback LockScreen of solid grey color, in case
if the locking client erronously deleted a lock surface before unlock.
3. treeland.cpp: allow loading the lockscreen plugin without DDM support.
4. output.cpp: allow session lock surfaces to ignore exclusive zones.
5. helper.cpp: attaches WSessionLockManager and handle screen lock logics.
6. surfacewrapper.cpp: added the LockScreen type to SurfaceWrapper
This commit adds support for the Wayland ext-session-lock-v1 protocol.
1. Added Class
- WSessionLockManager
- WSessionLock
- WSessionLockSurface
2. Implementation Details
Lifecycle of WSessionLock is managed by the WSessionLockManager.
Lifecycle of WSessionLockSurface is managed by its WSessionLock.
WSessionLock handles identification of all possible states a session lock
object can experiance, they are listed as follows:
- Created: default state
- Locked: session locked (after send_locked() is sent)
- Unlocked: client sent unlock_and_destroy()
- Finished: locking denyed by server sending finish()
- Canceled: lock destroyed by client before send_locked() is sent
- Abandoned: lock abnormally destroyed by client after locking
3. tinywl
An example usage is provided in the updated tinywl compositor.
This commit added the override specifier for waylandClient() and
instantRelease() methods in class WLayerSurfacePirvate.
waylandClient() is a virtual function in class WObjectPrivate,
instantRelease() is a virtual function in clas WWrapObjectPrivate.
This commit exposes wlr_session_lock_v1_destroy as
qw_session_lock_v1::destroy(), which allows the compositor
to send finished() event on an ext_session_lock_v1 object.
qw_session_lock_v1 objects are not the owner of their handles,
thus cannot be properly destroyed via operator delete. Exposing
the destroy() method as public is necessary.
According to wayland protocol, compositor should have the ability
to deny a session lock request.
This commit addresses an issue where the application would fail with
an assertion failure related to `qw_buffer` objects not being properly
released upon exiting the application. The previous implementation
directly called `QCoreApplication::exit` or `QCoreApplication::quit`,
which would trigger the destruction of various `QObject` instances
(such as `Helper` and `QmlEngine`) *after* the Qt event loop had already
exited.
Since many of these objects relied on `deleteLater` for their
destruction, and `deleteLater` calls are ineffective once the event loop
has terminated, these objects were not being fully destructed, leading
to resource leaks and the aforementioned assertion failure.
The solution involves ensuring that all necessary objects are
explicitly destroyed *before* calling `QCoreApplication::exit` or
`QCoreApplication::quit`. Specifically:
1. A `quit()` method has been added to the `Treeland` class, which
disconnects the object from all signals and slots, and then resets the
`d_ptr` (unique pointer to the private implementation) to ensure all
Treeland related objects are properly deleted. This cleanup happens
before calling `qApp->quit()`.
2. The signal connection between `QQmlEngine::quit` and
`QCoreApplication::quit` is changed to a `Qt::QueuedConnection` to avoid
potential issues when the quit call originates from within an event
handler (e.g., a cursor button press/release event).
3. A new signal `requestQuit()` is introduced in `Helper` and emitted
instead of directly calling `qApp->quit()`. This signal is then
connected to the `Treeland::quit()` method using `Qt::QueuedConnection`.
4. In the `tinywl` example, the `QmlEngine` object is now
dynamically allocated and explicitly deleted before `app.exit()`
is called. The `Helper::requestQuit` signal is also connected to
`QmlEngine::deleteLater`.
These changes ensure that all relevant objects have been properly
cleaned up before the application terminates, resolving the assertion
failure and preventing potential resource leaks.
Influence:
1. Verify that the application exits cleanly without any assertion
failures related to `qw_buffer` or other resources.
2. Test exiting the application using various methods (e.g., the window
close button, a menu item, or a keyboard shortcut).
3. Ensure that all application data is saved correctly before exiting.
4. Test that the `LockScreen` object is properly destroyed by manually
creating and destroying a LockScreen object with the setLockScreenImpl
call in Helper.
修复程序退出前对象未正确销毁的问题
此提交修复了应用程序退出时,由于 `qw_buffer` 对象未正确释放而导
致的断言失败问题。 之前的实现直接调用 `QCoreApplication::exit` 或
`QCoreApplication::quit`,导致各种 `QObject` 实例(例如 `Helper` 和
`QmlEngine`)在 Qt 事件循环结束后才被销毁。
由于许多这些对象依赖于 `deleteLater` 进行销毁,并且一旦事件循环终止,
`deleteLater` 调用将无效,因此这些对象没有被完全销毁,从而导致资源泄漏和
前面提到的断言失败。
解决方案包括确保在调用 `QCoreApplication::exit` 或
`QCoreApplication::quit` 之前显式销毁所有必要的对象。 具体来说:
1. 在 `Treeland` 类中添加了一个 `quit()` 方法,该方法断开对象与所有
信号和槽的连接,然后重置 `d_ptr`(指向私有实现的唯一指针),以确保与
Treeland 相关的所有对象都得到正确删除。 此清理发生在调用 `qApp->quit()`
之前。
2. `QQmlEngine::quit` 和 `QCoreApplication::quit` 之间的信号连接已更改
为 `Qt::QueuedConnection`,以避免在退出调用源自事件处理程序内(例如,光
标按钮按下/释放事件)时出现潜在问题。
3. 在 `Helper` 中引入了一个新的信号 `requestQuit()`,并发出该信号而不是
直接调用 `qApp->quit()`。 然后使用 `Qt::QueuedConnection` 将此信号连接到
`Treeland::quit()` 方法。
4. 在`tinywl`示例中,`QmlEngine` 对象现在是动态分配的,并在调
用 `app.exit()` 之前显式删除。 `Helper::requestQuit` 信号也连接到
`QmlEngine::deleteLater`。
这些更改确保在应用程序终止之前已正确清理所有相关对象,从而解决了断言失败
并防止了潜在的资源泄漏。
Influence:
1. 验证应用程序是否干净地退出,而不会出现与 `qw_buffer` 或其他资源相关的
任何断言失败。
2. 使用各种方法(例如,窗口关闭按钮、菜单项或键盘快捷键)测试退出应用
程序。
3. 确保在退出之前正确保存所有应用程序数据。
4. 通过使用 Helper 中的 setLockScreenImpl 调用手动创建和销毁 LockScreen
对象来测试 LockScreen 对象是否已正确销毁。
1. Changed the destruction timing of RenderControl. Using deleteLater()
on RenderControl caused a crash when OpenGL makeCurrent() was called.
This is because the RenderControl was being deleted in a deferred
manner, potentially after the OpenGL context was already being used
or destroyed.
2. Switched to immediate deletion of RenderControl in the
WOutputRenderWindow destructor to avoid the crash.
3. Modified WBufferRenderer to use std::unique_ptr for buffer
management to ensure timely unlocking.
Influence:
1. Verify that applications using WOutputRenderWindow do not crash
on shutdown.
2. Check resource usage related to graphics buffers to ensure proper
allocation and deallocation.
3. Run performance tests to ensure that the change in deletion timing
does not negatively impact rendering performance.
4. Test the texture provider to verify the buffer is handled correctly.
fix: 改善 RenderControl 的资源管理
1. 更改了 RenderControl 的销毁时机。在 RenderControl 上使用
deleteLater() 会导致调用 OpenGL makeCurrent() 时崩溃。这是因为
RenderControl 以延迟方式被删除,可能在 OpenGL 上下文已经被使用或销毁
之后。
2. 切换到在 WOutputRenderWindow 析构函数中立即删除 RenderControl,以避
免崩溃。
3. 修改 WBufferRenderer 以使用 std::unique_ptr 进行缓冲区管理,以确保及
时解锁。
Influence:
1. 验证使用 WOutputRenderWindow 的应用程序在关闭时不会崩溃。
2. 检查与图形缓冲区相关的资源使用情况,以确保正确分配和释放。
3. 运行性能测试以确保删除时机的变化不会对渲染性能产生负面影响。
4. 测试纹理提供程序以验证缓冲区是否已正确处理。
The WQuickCursor was using a raw pointer to WCursor, which could be
accessed after the WCursor object had been destroyed during application
shutdown, leading to a heap-use-after-free error. This change replaces
the raw pointer with a QPointer, ensuring that the WQuickCursor only
accesses the WCursor object if it is still valid.
Influence:
1. Run the application and exit to ensure no heap-use-after-free error
occurs.
2. Test cursor functionalities to ensure they still work as expected.
fix: 修复程序退出时堆释放后使用问题
WQuickCursor 使用指向 WCursor 的原始指针,该指针可能在应用程序关闭期间
WCursor 对象被销毁后被访问,从而导致堆释放后使用错误。此更改将原始指针替
换为 QPointer,确保 WQuickCursor 仅在 WCursor 对象仍然有效时才访问它。
Influence:
1. 运行应用程序并退出,确保不会发生堆释放后使用错误。
2. 测试光标功能,确保它们仍然按预期工作。
The verbosity of cursor input and touch event logs has been reduced
from `QtDebugMsg` to `QtInfoMsg`. The high volume of debug logs was
overwhelming during development and debugging, making it difficult to
identify important information. By reducing the default log level,
only essential cursor-related information will be displayed unless debug
logging is specifically enabled. This change improves the clarity and
usability of log output during development.
Influence:
1. Verify cursor functionality remains unaffected by the log level
change.
2. Confirm that important cursor events are still logged at the
`QtInfoMsg` level.
3. Enable debug logging to ensure detailed cursor information is
available when needed.
4. Test with different input devices (mouse, touchpad, touch screen) to
ensure consistent behavior.
refactor: 降低光标相关日志的详细程度
光标输入和触摸事件日志的详细程度已从 `QtDebugMsg` 降低到 `QtInfoMsg`。
大量的调试日志在开发和调试过程中造成了信息过载,难以识别重要信息。 通过
降低默认日志级别,除非专门启用调试日志记录,否则只会显示基本的光标相关信
息。 此更改提高了开发期间日志输出的清晰度和可用性。
Influence:
1. 验证光标功能是否未受日志级别更改的影响。
2. 确认重要的光标事件仍然以 `QtInfoMsg` 级别记录。
3. 启用调试日志记录以确保在需要时可以使用详细的光标信息。
4. 使用不同的输入设备(鼠标、触摸板、触摸屏)进行测试,以确保行为一致。
The m_config member variable contained garbage value instead of
nullptr because C++ doesn't auto-initialize pointer members.
This caused invalid memory access and crash during startup.
Initialize m_config to nullptr to ensure proper initial state.
1. Set server socket to non-blocking mode to prevent accept() calls from
blocking the main thread indefinitely.
2. Improved wl_os_accept_cloexec function to use accept4 with SOCK_CLOEXEC
flag as the preferred method on modern Linux systems, with fallback to
traditional accept() + fcntl approach for compatibility.
3. Added proper error handling for ENOSYS case when accept4 is not supported.
The blocking issue occurred when the Wayland server was waiting for client
connections, causing the entire compositor to freeze. This fix follows the
same pattern used in libwayland for robust socket handling.
Log: Fixed Wayland server socket blocking in accept() calls
Influence:
1. Test server startup and client connection establishment
2. Verify proper handling of multiple concurrent client connections
3. Check compatibility on systems without accept4 support
4. Ensure no regression in socket file descriptor management
修复:修复Wayland服务器连接处理中的socket阻塞问题
1. 将服务器socket设置为非阻塞模式,防止accept()调用无限期阻塞主线程。
2. 改进wl_os_accept_cloexec函数,在现代Linux系统上优先使用带SOCK_CLOEXEC
标志的accept4方法,同时为兼容性保留传统的accept() + fcntl方法作为后备。
3. 为不支持accept4的ENOSYS情况添加了适当的错误处理。
当Wayland服务器等待客户端连接时会发生阻塞问题,导致整个合成器冻结。此修复
遵循libwayland中用于健壮socket处理的相同模式。
Log: 修复Wayland服务器socket在accept()调用中的阻塞问题
Influence:
1. 测试服务器启动和客户端连接建立
2. 验证多个并发客户端连接的正确处理
3. 检查在不支持accept4的系统上的兼容性
4. 确保socket文件描述符管理中没有回归
Changed the visibility condition for window titles in the multitask view
from checking 'highlighted' to checking the surfaceItemDelegate state.
This ensures titles are only shown when in taskview mode, not during
other states like window dragging or animation transitions.
The previous implementation could show titles during transitions when
they shouldn't be visible, causing visual artifacts. The new condition
properly aligns with the intended UI behavior where titles should only
appear in the stable taskview state.
Log: Fixed window titles appearing during transitions in multitask view
Influence:
1. Test multitask view to verify titles only appear in taskview state
2. Check window dragging and transitions to ensure titles remain hidden
3. Verify title visibility with empty/non-empty titles
4. Test with different window states and transitions
fix: 修正窗口标题可见性条件
将多任务视图中窗口标题的可见性条件从检查'highlighted'改为检查
surfaceItemDelegate状态。这确保标题仅在taskview模式下显示,而不是在窗口
拖动或动画过渡等其他状态时显示。
之前的实现在不应显示标题的过渡期间可能会显示标题,导致视觉伪影。新条件正
确符合预期的UI行为,即标题应仅在稳定的taskview状态下出现。
Log: 修复多任务视图中窗口标题在过渡期间出现的问题
Influence:
1. 测试多任务视图,验证标题仅在taskview状态下显示
2. 检查窗口拖动和过渡,确保标题保持隐藏
3. 验证空/非空标题的可见性
4. 测试不同窗口状态和过渡
1. Fixed a crash issue where clients created through the security
context could not obtain the corresponding WClient object.
2. Clients created via security context use a new socket connection,
which is not managed by WSocket by default.
3. The wlroots protocol provides limited information for monitoring
such wl_clients.
4. This commit adapts the wlroots implementation: in
`security_context_handle_commit`, a new WSocket object is created for
the listening socket, and the new wl_client object created from this
socket is added to WClient for management.
Influence:
1. Test the creation of clients using the security context.
2. Verify that the created clients can correctly obtain the WClient
object.
3. Ensure that newly created sockets are correctly managed.
修复:修复通过安全上下文创建的客户端崩溃问题
1. 修复了通过安全上下文创建的客户端无法获取对应的 WClient 对象导致崩溃的
问题。
2. 通过安全上下文创建的客户端使用新的套接字连接,默认情况下不由 WSocket
管理。
3. wlroots 协议为监控此类 wl_clients 提供的相关信息有限。
4. 本次提交采纳了 wlroots 的实现:在 `security_context_handle_commit`
中,为监听的套接字创建一个新的 WSocket 对象,并将由此套接字创建的新
wl_client 对象添加到 WClient 中进行管理。
Influence:
1. 测试使用安全上下文创建客户端的过程。
2. 验证创建的客户端能否正确获取 WClient 对象。
3. 确保新创建的套接字能够得到正确的管理。
DConfig object creation involves D-Bus communication, which may block
when placed in the main thread. This commit adapt dconfig2cpp tool to
generate DConfig wrapper safely running in another thread, to avoid this
problem.
Since obtaining DBus interface & calling DBus functions may block
current thread, it's better to place DBus-related codes out of the main
thread. This commit puts DBus call to separate thread if possible.
- Added include for `wxdgtoplevelsurface.h`
- Added include for `qwxdgshell.h`
- Handled initialization check for XDG toplevel surface
- Updated logic to set owns output and ensure surface position validity for XDG toplevel surface
- Added support to set Xwayland position from surface when initialized
Background:
When the window is destroyed while being dragged, `endMoveResize` is triggered. If `config` function is called after the window is destroyed, it will crash. Therefore, the check for `initialized` is added due to its reset in `reset_xdg_surface` where an `xdg_surface` implementation is reset under the following conditions:
1) A surface is unmapped due to a commit with NULL buffer
2) The `xdg_surface` role object is destroyed
3) `wlr_xdg_surface` is destroyed
1. Fixed an issue where the client window's refresh rate was incorrect
when using multiple monitors.
2. The problem was caused by sending `frame_done` notifications to the
client window regardless of which screen refreshed. This resulted in
double the `frame_done` notifications being sent when using two screens.
3. The solution is to only send `frame_done` notifications to the
surface when the screen with the highest refresh rate, where the surface
is located, commits. This behavior is consistent with how wlroots and
mutter handle it.
4. The code was modified in `WOutputRenderWindow::doRender` to track
which outputs were actually committed and then the `WSurfaceItem` checks
that it only sends `notifyFrameDone` if the `framePacingOutput` was
committed.
5. Added logging for when there is no `WOutputRenderWindow`.
Influence:
1. Test with multiple monitors with different refresh rates.
2. Verify that the client window's refresh rate matches the refresh rate
of the screen it's primarily on.
3. Use a tool like http://testufo.com/ to visually confirm the correct
refresh rate.
4. Test moving the window between screens with different refresh rates
and observe the refresh rate change.
fix: 修复多显示器刷新率错误问题
1. 修复了使用多个显示器时客户端窗口刷新率不正确的问题。
2. 问题的原因是无论哪个屏幕刷新,都会向客户端窗口发送 `frame_done` 通
知。这导致在使用两个屏幕时发送双倍的 `frame_done` 通知。
3. 解决方案是仅在表面所在的具有最高刷新率的屏幕提交时才向该表面发送
`frame_done` 通知。此行为与 wlroots 和 mutter 的处理方式一致。
4. 修改了 `WOutputRenderWindow::doRender` 中的代码以跟踪实际提交的输出,
然后 `WSurfaceItem` 检查它是否仅在 `framePacingOutput` 已提交时才发送
`notifyFrameDone`。
5. 添加了在没有 `WOutputRenderWindow` 时的日志记录。
Influence:
1. 使用具有不同刷新率的多个显示器进行测试。
2. 验证客户端窗口的刷新率与其主要所在的屏幕的刷新率相匹配。
3. 使用 http://testufo.com/ 等工具以直观地确认正确的刷新率。
4. 测试在具有不同刷新率的屏幕之间移动窗口并观察刷新率的变化。
1. The previous logic only redrew the surface when the buffer changed,
which is insufficient.
2. Firefox frequently updates the frame callback list using
`WLR_SURFACE_STATE_FRAME_CALLBACK_LIST`. Receiving such commits should
also trigger a redraw to trigger the frame done event for the surface.
3. This fixes an issue where Firefox windows would often not refresh
until the mouse was moved.
Influence:
1. Verify that Firefox windows now refresh correctly without requiring
mouse movement.
2. Ensure that other applications are not negatively affected by this
change.
3. Check for any performance regressions related to the increased redraw
frequency.
fix: 当帧回调列表更新时重绘
1. 之前的逻辑仅在缓冲区更改时才重绘表面,这不足够。
2. Firefox 经常使用 `WLR_SURFACE_STATE_FRAME_CALLBACK_LIST` 更新帧回调列
表。收到此类提交也应触发重绘,以触发表面的帧完成事件。
3. 这修复了 Firefox 窗口经常不刷新直到鼠标移动的问题。
Influence:
1. 验证 Firefox 窗口现在可以正确刷新,而无需移动鼠标。
2. 确保其他应用程序不会受到此更改的负面影响。
3. 检查与增加的重绘频率相关的任何性能下降。
Treeland will stuck in lockscreen after crash recovery, which is caused
by unintended login request for (for DDM) already logined user. This
commit adds a new DaemonMessages type, which is used to convey logined
users from DDM after socket connected, to avoid this problem.
1. Add callback for disableRender, to ensure render is exactly disabled
before DDM doing further actions;
2. Revoke all evdev devices before VT switch (at disableRender()), to
prevent accidental input events during switch;
3. Refine logic of switchToUser, take care of showing lockscreen after
switch;
4. Make event function args const
This commit aims to improve the overall robustness of the code,
potentially addressing a rare crash scenario related to window
animations. While the exact cause of the crash is difficult to
reproduce, the changes implemented here are believed to mitigate the
issue. Specifically, the commit includes two key modifications:
1. **SurfaceWrapper Destruction:** Enhanced the `SurfaceWrapper`
destructor to properly handle and delete animation objects
(`m_minimizeAnimation`, `m_showDesktopAnimation`). Additionally,
disconnect signals before deleting m_decoration and m_titleBar.
This ensures that these objects are properly cleaned up when the
`SurfaceWrapper` is destroyed, preventing potential dangling pointers
or memory leaks that could lead to crashes, especially in scenarios
involving complex window state transitions.
2. **QmlEngine Component Ownership:** Modified the ownership
of objects created using `QmlEngine::createComponent`.
The ownership is now explicitly set to follow the parent
object using `QQmlEngine::setObjectOwnership(item,
QQmlEngine::objectOwnership(parent))`. This change ensures that the
QML engine correctly manages the lifecycle of these objects, preventing
potential issues related to object deletion or memory management if the
parent object is destroyed before the created component.
These changes are intended to make the application more stable and
resilient to unexpected conditions, particularly those involving
animations and object lifetime management within the QML engine.
Influence:
1. Thoroughly test window animations, including opening, closing,
minimizing, maximizing, and transitioning between different window
states.
2. Test application under heavy load and stress conditions to trigger
potential race conditions or memory leaks related to object creation
and destruction.
3. Monitor application logs for any warnings or errors related to QML
component creation or object lifetime management.
4. Try to reproduce corner cases when animations are interrupted.
重构: 提高代码健壮性
本次提交旨在提高代码的整体健壮性,可能修复与窗口动画相关的罕见崩溃情况。
虽然崩溃的确切原因难以重现,但相信此处实现的更改可以缓解该问题。具体来
说,此提交包括两个关键修改:
1. **SurfaceWrapper 析构:** 增强了 `SurfaceWrapper` 析构函数,可以正确
处理和删除动画对象(`m_minimizeAnimation`, `m_showDesktopAnimation`)。此
外,在删除 m_decoration 和 m_titleBar 之前断开信号连接。这样可以确保在销
毁 `SurfaceWrapper` 时正确清理这些对象,防止潜在的悬空指针或内存泄漏,否
则可能导致崩溃,尤其是在涉及复杂窗口状态转换的情况下。
2. **QmlEngine 组件所有权:** 修改了使用 `QmlEngine::createComponent`
创建的对象的所有权。现在,使用 `QQmlEngine::setObjectOwnership(item,
QQmlEngine::objectOwnership(parent))` 将所有权显式设置为跟随父对象。此更
改确保 QML 引擎正确管理这些对象的生命周期,防止在父对象在创建的组件之前
被销毁时,可能导致与对象删除或内存管理相关的问题。
这些更改旨在使应用程序更加稳定并能够适应意外情况,尤其是涉及 QML 引擎内
动画和对象生命周期管理的情况。
Influence:
1. 全面测试窗口动画,包括打开、关闭、最小化、最大化以及在不同窗口状态之
间转换。
2. 在高负载和压力条件下测试应用程序,以触发与对象创建和销毁相关的潜在竞
争条件或内存泄漏。
3. 监视应用程序日志,查找与 QML 组件创建或对象生命周期管理相关的任何警告
或错误。
4. 尝试重现动画中断时的极端情况。
Fixes: linuxdeepin/treeland#528
the crash originates from improper signal-slot disconnection and object
deletion order, leading to use-after-free scenarios in QObject desructor
chain, especially involving SurfaceWrapper.
Fixes: linuxdeepin/treeland#528
Log:
1. Move D-Bus includes to fix potential header conflicts
2. Add new D-Bus signal handler for systemd-logind's PrepareForSleep
3. Implement onPrepareForSleep slot to manage rendering during hibernate
4. Improve session management with proper signal connections
5. Add logging for better debugging of power management events
The changes address the brief black screen issue that occurs during
system standby/hibernate transitions by properly managing the rendering
state through systemd-logind's PrepareForSleep signal. When entering
hibernate, we now explicitly disable rendering to prevent visual
artifacts, and re-enable it after waking up. The D-Bus signal handlers
have been reorganized for better maintainability and proper header
inclusion order.
fix: 解决待机时短暂黑屏问题
1. 移动 D-Bus 头文件包含位置以修复潜在的头文件冲突
2. 添加对 systemd-logind PrepareForSleep 信号的新 D-Bus 处理器
3. 实现 onPrepareForSleep 槽函数来管理休眠期间的渲染状态
4. 通过改进的信号连接提升会话管理功能
5. 添加日志记录以便更好地调试电源管理事件
1. Add wlr_buffer.h header to access buffer locking functionality
2. Lock buffer during copy operation to prevent race conditions
3. Implement comprehensive validation of source and destination buffers
4. Add dynamic constraint updating when buffer size mismatches occur
5. Handle client buffer source explicitly for better compatibility
6. Add detailed logging for debugging copy operations
The changes fix a critical crash that occurred during window resizing by
ensuring proper buffer synchronization and validation. The fix includes
safety checks to validate buffer dimensions, pointer validity, and
proper constraint handling when sizes change. By locking buffers during
copy operations and properly handling client buffer sources, we prevent
race conditions that could lead to crashes during window resizing.
fix: 修复录窗口时resize崩溃
1. 添加 wlr_buffer.h 头文件以访问缓冲区锁定功能
2. 在复制操作期间锁定缓冲区以防止竞争条件
3. 实现对源缓冲区和目标缓冲区的全面验证
4. 在缓冲区大小不匹配时动态更新约束条件
5. 显式处理客户端缓冲区源以提高兼容性
6. 添加详细的日志记录用于调试复制操作
When cooperating with DDM, switching VT will not drop DRM FD. This makes
treeland still able to draw to the DRM after VT switch, which will cause
wrong display rendering when switching VT too quickly. This commit
cooperate new treeland-ddm-v1 protocol and expose interface to enable /
disable global rendering, which is used in DDM to control render before
/ after TTY switching, to solve the render issue.
Treeland will failed to deactivate session when the animation is still
playing, and get the whole VT stuck. Disable all animation to prevent it
as mostly as possible.
1. Remove dependence of seatd-dde.service, use system provided seatd
service;
2. Add private wayland protocol treeland-private-protocol.xml for IPC
3. Acquire VT control immediately after first rendering complete;
4. Call DDM to switch VT when Ctrl+Alt+Fx is pressed, if available;
5. Expose wayland request for deactivate and re-activate session to DDM;
* [skip CI] Translate lockscreen.en_US.ts in fi
77% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'fi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in fi
100% translated source file: 'lockscreen.en_US.ts'
on 'fi'.
* [skip CI] Translate wallpaper.en_US.ts in fi
66% of minimum 10% translated source file: 'wallpaper.en_US.ts'
on 'fi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate wallpaper.en_US.ts in fi
100% translated source file: 'wallpaper.en_US.ts'
on 'fi'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: zccrs <zhangjide@deepin.org>
1. Replace manual CMake configuration with --preset ci in all ArchLinux
workflows
2. Add new CI build preset in CMakePresets.json with -Werror enabled
3. Remove redundant per-project CMake configuration steps
4. Simplify workflow steps by combining configure and build phases
5. Maintain compatibility with existing build requirements while
standardizing
The changes standardize build configuration across projects using a
centralized CMake preset. This ensures consistent build behavior while
maintaining the strict -Werror flag for CI builds. The update simplifies
workflow maintenance and improves build reliability by using CMake's
modern preset system.
1. Replace WWrapPointer with QPointer for SurfaceWrapper
2. Add shellSurface() check before accessing preview item properties
3. Fix race condition where SurfaceWrapper might be invalid
The changes prevent a crash that occurred when accessing a
SurfaceWrapper object after it had been invalidated. Using QPointer
with an explicit shellSurface() validity check ensures we don't access
dangling pointers, as the SurfaceWrapper::aboutToBeInvalidated signal
doesn't nullify WWrapPointer in time.
fix: 修复预览项处理时的崩溃问题
1. 将 SurfaceWrapper 的指针类型从 WWrapPointer 改为 QPointer
2. 在访问预览项属性前增加 shellSurface() 有效性检查
3. 解决 SurfaceWrapper 被标记为无效后仍被访问的竞态条件
这些修改解决了在 SurfaceWrapper 对象被销毁后仍然尝试访问其属性导致的崩溃
问题。使用 QPointer 并配合显式的 shellSurface() 有效性检查,可以确保不会
访问到悬空指针,因为 SurfaceWrapper::aboutToBeInvalidated 信号无法及时将
WWrapPointer 置空。
1. Remove `WBufferRenderer::resetTextureProvider` to avoid accidentally
cleaning the cached buffer in `WBufferRenderer` when switching from a
software cursor to a hardware cursor.
2. The root cause was that switching from a software cursor
to a hardware cursor inadvertently cleared the cached buffer
in `WBufferRenderer`, causing the buffer referenced by
`BufferRendererProxy` to become null.
3. The `resetTextureProvider` function was originally introduced in
the `WOutputLayer` implementation (https://github.com/vioken/waylib/
commit/ea814c44), and the buffer lock/unlock mechanism was introduced
in https://github.com/vioken/waylib/commit/35fdcb72. The lock/unlock
mechanism is a new design, so manually resetting the buffer is no longer
necessary.
4. Update `WSGTextureProvider::setBuffer` to emit `textureChanged()`
signal when `buffer` is not null and the buffer object is not changed,
but maybe the buffer's content is changed.
Influence:
1. Verify that the cursor no longer flickers during screen recording,
especially when switching between software and hardware cursors.
2. Test screen sharing and ensure that the shared content is displayed
correctly without any visual artifacts.
3. Check the buffer management to ensure that buffers are properly
locked and unlocked, and that no memory leaks occur.
fix: 修复录屏时光标闪烁问题
1. 移除 `WBufferRenderer::resetTextureProvider` 以避免在从软光标切换到
硬光标时意外清理 `WBufferRenderer` 中的缓存 buffer。
2. 根本原因是,从软光标切换到硬光标时,无意中清除了 `WBufferRenderer`
中的缓存 buffer,导致 `BufferRendererProxy` 引用的 buffer 变为 null。
3. `resetTextureProvider` 函数最初是在 `WOutputLayer` 实现中引入的
(https://github.com/vioken/waylib/commit/ea814c44),buffer 锁/解锁机制是
在 https://github.com/vioken/waylib/commit/35fdcb72 中引入的。 锁/解锁机
制是一种新的设计,因此不再需要手动重置 buffer。
4. 更新 `WSGTextureProvider::setBuffer`,当 `buffer` 不为 null 且
buffer 对象没有更改时,发出 `textureChanged()` 信号,但 buffer 的内容可
能会更改。
Influence:
1. 验证在屏幕录制过程中,尤其是在软件和硬件光标之间切换时,光标不再
闪烁。
2. 测试屏幕共享,确保共享内容显示正确,没有任何视觉伪影。
3. 检查 buffer 管理,确保 buffer 被正确锁定和解锁,并且没有发生内存
泄漏。
Add detailed logging guidelines for both treeland and waylib modules,
and update logging implementation across multiple files to follow the
new standards.
1. Create comprehensive logging documentation covering:
- Category organization patterns for treeland and waylib
- Log level usage guidelines
- Best practices for message formatting and context
- Implementation examples for both module types
- Debugging tips and common mistakes to avoid
2. Update waylib modules with new logging categories:
- wcursor.cpp: Add detailed cursor-related categories and update
logging statements
- winputdevice.cpp: Add input device category and improve debug
messages
- woutput.cpp: Add output-related categories and enhance buffer/
output logging
- wseat.cpp: Replace old logging categories with new structured ones
- wsocket.cpp: Add socket management category and improve connection
logging
3. Remove outdated logging categories:
- Remove lcGeneral from wglobal.cpp
- Remove obsolete qLcWlrCursor and related categories
4. Improve logging quality throughout:
- Add contextual information to log messages
- Use appropriate log levels for different message types
- Add missing debug statements for important state changes
- Fix incorrect
1. Added new centralized logging system in common/treelandlogging.h
and .cpp
2. Replaced local logging categories with standardized ones across all
modules
3. Added comprehensive logging category definitions covering all system
components
4. Updated CMakeLists.txt to include new logging files
5. Modified multiple source files to use the standardized logging
categories
The changes provide a unified logging framework across the entire
codebase, enabling better log management and filtering. The centralized
system improves maintainability and ensures consistent log formatting
across different components.
feat: 添加集中化日志系统并规范日志使用
1. 在 common/treelandlogging.h 和 .cpp 中添加了新的集中化日志系统
2. 替换所有模块中的本地日志分类为标准化分类
3. 添加了涵盖所有系统组件的综合日志分类定义
4. 更新 CMakeLists.txt 以包含新的日志文件
5. 修改多个源文件以使用标准化日志分类
这些更改提供了统一的日志框架,改进了整个代码库的日志管理能力。集中化的系
统提高了可维护性,并确保不同组件之间日志格式的一致性。
updates the condition to use surface.shellSurface.isMaximized, ensuring the icon
accurately reflects the window's maximized state when using the shell surface.
Fixes: linuxdeepin/treeland#501
Log:
90% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
90% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
90% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
- Initialize Content pointer to nullptr for safety.
- Use Qt::UniqueConnection when connecting BlitTextureProvider::textureChanged
to Content::update, both in Content and WRenderBufferBlitterPrivate, to avoid
multiple identical connections and ensure the slot is triggered only once per
signal emission.
- Add QMetaObject::Connection and QMutex members to WQuickTextureProxyPrivate
to track and protect the textureChanged signal connection.
- Disconnect previous textureChanged connections in initSourceItem to
avoid dangling or duplicate connections.
- Use a mutex to ensure thread-safety when establishing the textureChanged
connection in updatePaintNode.
This change helps prevent occasional crashes when moving the cursor by ensuring
signals are properly managed and connections are safely handled.
Fixes: #494
Log:
- Use exec to replace treeland.sh process with treeland, avoiding dual processes
- Include all user arguments in --try-exec test for environment consistency
- Disable systemd logs from treeland.sh to prevent duplicate journal entries
- Add English comments explaining the process replacement logic
This resolves the issue where treeland.sh and treeland would run as separate
processes, and eliminates duplicate log entries in journalctl.
Use the q pointer as the context object host.
Use QPointer to prevent crash when WOutputCursor is
destroyed during signal handling.
Fixes: linuxdeepin/treeland#490
Log:
1. Replace generic static_assert with Qt-specific type check
2. Use QtPrivate::HasQ_OBJECT_Macro to ensure proper QObject inheritance
3. Add explicit QObject include for better header dependency management
4. Maintain existing functionality while improving compile-time safety
The change replaces a generic type trait check with Qt's specific type
validation mechanism, ensuring that template parameters properly inherit
from QObject. This provides better error messages and stronger type
safety guarantees during compilation.
fix: 改进渲染缓冲节点的类型安全性
1. 用 Qt 特定的类型检查替换通用的 static_assert
2. 使用 QtPrivate::HasQ_OBJECT_Macro 确保正确的 QObject 继承关系
3. 添加显式的 QObject 包含头文件以改善头文件依赖管理
4. 在保持现有功能的同时提高编译时的安全性
该修改将通用类型特征检查替换为 Qt 的特定类型验证机制,确保模板参数正确地
继承自 QObject。这提供了更好的错误提示信息,并在编译时提供了更强的类型安
全保证。
1. Added QT_MESSAGELOGCONTEXT definition to enable detailed logging in
Qt applications
2. Downgraded cursor shape manager protocol version from 2 to 1
temporarily due to wlroots version constraints
3. The changes help with debugging while maintaining compatibility with
current wlroots version (pre-0.20)
chore: 启用 Qt 日志上下文并调整光标形状管理器版本
1. 添加 QT_MESSAGELOGCONTEXT 定义以启用 Qt 应用程序的详细日志记录功能
2. 由于 wlroots 版本限制(尚未升级到 0.20),临时将光标形状管理器协议版
本从 2 降级为 1
3. 这些更改有助于调试,同时保持与当前 wlroots 版本的兼容性
Update the version number of the CURSOR_SHAPE_MANAGER_V1 protocol from
1 to 2 to reflect recent implementation changes and ensure protocol
version consistency across components.
refactor: 更新光标形状管理器版本至 2
将 CURSOR_SHAPE_MANAGER_V1 协议的版本号从 1 更新至 2,以反映最近的实现更
改,并确保组件间的协议版本一致性。
1. Remove setOutputProxy method from Helper class
2. Delete corresponding declaration in header file
3. The function was never implemented and not used anywhere in the
codebase
4. Cleaning up unused code improves code maintainability and reduces
technical debt
fix: 移除未使用的 setOutputProxy 函数
1. 从 Helper 类中移除 setOutputProxy 方法
2. 同时删除头文件中的相应声明
3. 该函数从未被实现且代码库中没有任何使用
4. 清理未使用的代码可提高代码可维护性并减少技术债务
Replace all instances of Q_EMIT with the modern signal
emission syntax
and replace Q_SLOTS with the modern slots syntax. Also add
[[maybe_unused]] attributes to parameters that are intentionally unused.
fix: 替换 Q_EMIT 和 Q_SLOTS 为 Qt5 风格的信号/槽
替换所有 Q_EMIT 为现代风格的信号发射语法,并将 Q_SLOTS 替换为现代风格的槽语法。
同时为故意未使用的参数添加 [[maybe_unused]] 属性。
1. Fix order of member variable initialization in qw_interface
constructor
2. Move add_compile_options after ASAN flags to ensure proper priority
3. Fix member variable order in TreelandConfig to match declaration
4. Add [[maybe_unused]] attribute to unused function parameters
5. Fix surface wrapper bitfield member ordering
6. Fix cursor image index comparison type mismatch
7. Fix various minor code style and structure issues
fix: 解决编译警告并改进代码结构
1. 修复 qw_interface 构造函数中成员变量的初始化顺序
2. 将 add_compile_options 移至 ASAN 标志之后以确保优先级
3. 修复 TreelandConfig 中成员变量顺序以匹配声明
4. 为未使用的函数参数添加 [[maybe_unused]] 属性
5. 修复 surface wrapper 位域成员顺序
6. 修复光标图像索引比较的类型不匹配问题
7. 解决其他次要的代码风格和结构问题
Added resetGlState() call immediately after ending frame to ensure correct
OpenGL state before committing outputs in doRender(), improving GPU context
handling, prevent gles2-render exception in wlroots.
Fixes: linuxdeepin/treeland#488
Log:
The QRhi-based render() implementation in WSGRenderFootprintNode relies on explicit rendering
flags to ensure correct and efficient rendering behavior. This commit introduces an override
for the flags() method, returning a combination of QSGRenderNode::NoExternalRendering and
QSGRenderNode::BoundedRectRendering. These flags clarify the rendering node's capabilities
to the Qt scene graph, preventing potential rendering issues or crashes.
This change may address issues reported in https://github.com/linuxdeepin/treeland/issues/478.
Log:
1. Replace Q_ASSERT with proper error handling in image capture code
2. Add comprehensive validation checks for null pointers and invalid
states
3. Replace manual memory management with RAII-style helper classes
4. Move constraint building logic to dedicated helper struct
5. Add proper copyright headers to source files
6. Update CMakeLists.txt with consistent TODO markers
7. Implement WPixmanRegion class for automatic region management
8. Add detailed debug logging for capture operations
The changes enhance code reliability by properly handling error
conditions instead of relying on assertions, improve memory safety
through better resource management, and make the code more maintainable
with clearer structure and documentation.
fix: 改进图像捕获错误处理和代码结构
1. 在图像捕获代码中替换 Q_ASSERT 为适当的错误处理
2. 添加全面的空指针和无效状态验证检查
3. 使用 RAII 风格的辅助类替代手动内存管理
4. 将约束构建逻辑移至专用辅助结构体
5. 为源文件添加正确的版权标头
6. 在 CMakeLists.txt 中使用一致的 TODO 标记
7. 实现 WPixmanRegion
Qt will create virtual device for QInputEvent when no physical device
available (e.g. switched to another VT), which will leads to a failed
assertion and make treeland crash. This commit applies a special guarded
getter for such case.
When switching back from TTY the Greeter will be re-created, and somehow
leads to an incorrect lockscreen animation on HiRes screen. This commit
adds skip function to lockscreen animation, and skips the animation when
the first time it adds to an output.
This commit modifies the GitHub Actions workflows for waylib builds to
ensure they are triggered when qwlroots code changes occur, since waylib
depends on qwlroots.
Changes:
1. Added 'qwlroots/**' to the paths trigger for waylib-archlinux-build.yml
2. Added 'qwlroots/**' to the paths trigger for waylib-debian-build.yml
3. Updated README.md to document the CI workflow dependencies
4. Updated README.zh_CN.md to maintain consistency across all language versions
This ensures proper dependency management and prevents build failures
when qwlroots modifications affect waylib compilation.
ci: 当qwlroots代码修改时触发waylib构建
此提交修改了waylib构建的GitHub Actions工作流,确保在qwlroots
代码发生变化时触发waylib构建,因为waylib依赖于qwlroots。
变更内容:
1. 在waylib-archlinux-build.yml的路径触发器中添加'qwlroots/**'
2. 在waylib-debian-build.yml的路径触发器中添加'qwlroots/**'
3. 更新README.md文档记录CI工作流的依赖关系
4. 更新README.zh_CN.md保持所有语言版本文档的一致性
这确保了正确的依赖管理,防止qwlroots修改影响waylib编译时
出现构建失败的情况。
1. Remove the unused "quitFullBtn" Loader component that was not visible
2. Add Helper.activateSurface call before maximizing window
3. This ensures proper window activation before state change
fix: 删除未使用的退出全屏按钮并添加窗口激活
1. 移除了未使用的 "quitFullBtn" Loader 组件
2. 在窗口最大化前添加了 Helper.activateSurface 调用
3. 这确保了在状态改变前正确激活窗口
1. Added Qt.NoFocus policy to title bar component to prevent keyboard
focus
2. Added focusPolicy to all window control buttons (minimize, close,
maximize)
3. Ensures focus remains with active window content during window
operations
4. Improves accessibility and prevents focus-related UI glitches
fix: 防止标题栏和窗口按钮获取焦点
1. 为标题栏组件添加 Qt.NoFocus 策略以阻止键盘焦点
2. 为所有窗口控制按钮(最小化、关闭、最大化)添加 focusPolicy
3. 确保窗口操作期间焦点保留在活动窗口内容上
4. 提升可访问性并防止焦点相关的界面故障
* fix: Handle VT switching keys
This commit addresses an issue where the XF86Switch_VT_1 to
XF86Switch_VT_12 keys were not properly handled by Qt. Qt does not
directly support these keys. The fix involves converting these keys to
Ctrl+Alt+F1 through Ctrl+Alt+F12 when the Ctrl and Alt modifiers are
already pressed. This enables users to switch virtual terminals within
the Wayland environment using these key combinations, matching the
expected behavior on traditional Linux systems. This conversion only
happens when Ctrl+Alt are already pressed, preventing accidental mapping
of other keys.
fix: 处理 VT 切换键
此提交解决了一个 Qt 无法正确处理 XF86Switch_VT_1 到 XF86Switch_VT_12
键的问题。Qt 不直接支持这些键。此修复包括将这些键转换为 Ctrl+Alt+F1
到 Ctrl+Alt+F12(如果 Ctrl 和 Alt 修改键已被按下)。这使得用户能够在
Wayland 环境中使用这些组合键切换虚拟终端,从而匹配传统 Linux 系统上的预
期行为。此转换仅在 Ctrl+Alt 已被按下时发生,防止意外映射其他键。
1. Introduce `default.nix` at the root to define Nix packages and
dependencies
2. Migrate CMakeLists.txt to use `option()` and `add_feature_info()` for
better feature management
3. Update `flake.nix` to import and organize Nix modules and packages
4. Modify `nix/default.nix` to use `nix-filter.lib` and add new
dependencies like `qwlroots` and `waylib`
5. Update `waylib/flake.nix` and `waylib/nix/default.nix` to improve
test support and source filtering
feat: 添加 Nix flake 支持以优化项目配置
1. 在项目根目录引入 `default.nix` 来定义 Nix 包及其依赖
2. 将 CMakeLists.txt 中的配置改为使用 `option()` 和 `add_feature_info()`
以更好地管理功能选项
3. 更新 `flake.nix` 以导入并组织 Nix 模块和包
4. 修改 `nix/default.nix` 使用 `nix-filter.lib` 并添加 `qwlroots` 和
`waylib` 等包
1. Remove duplicate CMake option for WITH_SUBMODULE_WAYLIB that was both
defined and set to ON
2. Eliminate redundant build presets (submodule & submodule-with-clang)
that only differed by compiler settings
3. Simplify CMakePresets.json by keeping only essential configurations
4. Maintain single source of truth for binary directory configuration
fix: 删除冗余的子模块选项和配置
1. 移除重复定义的 WITH_SUBMODULE_WAYLIB 选项,该选项已被设置为 ON
2. 删除冗余的构建预设(submodule 和 submodule-with-clang),这些配置仅编
译器设置不同
3. 简化 CMakePresets.json 文件,保留必要配置
4. 维护单一可信的二进制目录配置来源
1. Remove redundant seatd service configuration in flake.nix that was
previously used for testing
2. Clean up development shell packages by removing unnecessary Wayland-
related dependencies
3. Update wlroots dependency to wlroots_0_19 in both flake.nix and
default.nix
4. Update project version from 0.2.2 to 0.5-unstable to reflect recent
development progress
5. Add depsBuildBuild input for pkg-config to ensure proper build
environment setup
6. Remove outdated wlroots reference from nativeBuildInputs
chore: 更新 nix 依赖并清理配置
1. 移除 flake.nix 中冗余的 seatd 服务配置(之前用于测试)
2. 清理开发环境中的 shell 包,移除不必要的 Wayland 相关依赖
3. 在 flake.nix 和 default.nix 中将 wlroots 依赖更新为 wlroots_0_19
4. 将项目版本从 0.2.2 更新为 0.5-unstable 以反映最新开发进展
5. 添加 pkg-config 的 depsBuildBuild 输入以确保正确的构建环境
This commit enforces the use of Ninja as the build system during the
debian package creation process for treeland, qwlroots, and waylib.
This change was made to significantly improve build times, as Ninja
generally offers faster and more efficient builds compared to the
default make system. The changes involve adding `ninja-build` as a
build dependency in the `debian/control` files and adding `-GNinja` to
the `dh_auto_configure` commands in the `debian/rules` files for all
three packages. This ensures that CMake uses Ninja to generate the build
files.
chore: 在 deb 打包过程中强制使用 Ninja 构建
此提交强制在 treeland、qwlroots 和 waylib 的 debian 包创建过程中使用
Ninja 作为构建系统。 此更改旨在显着缩短构建时间,因为与默认的 make 系统
相比,Ninja 通常提供更快、更高效的构建。 更改包括在 `debian/control` 文
件中添加 `ninja-build` 作为构建依赖项,并在所有三个包的 `debian/rules`
文件中的 `dh_auto_configure` 命令中添加 `-GNinja`。 这确保 CMake 使用
Ninja 来生成构建文件。
This commit adds a timeout of 3 seconds to several protocol unit tests
in their respective CMakeLists.txt files. These tests were observed
to block indefinitely in certain build environments, specifically
when building deb packages. Adding a timeout ensures that these tests
will not hang the build process, improving overall build reliability
and preventing potential deadlocks. The timeout value of 3 seconds
was chosen to allow sufficient time for the tests to complete under
normal conditions while still providing a reasonable safeguard against
indefinite blocking.
fix: 为协议测试添加超时
此提交在其各自的 CMakeLists.txt 文件中为多个协议单元测试添加了 3 秒的超
时。据观察,这些测试在某些构建环境中(尤其是在构建 deb 软件包时)会无限
期地阻塞。添加超时可确保这些测试不会使构建过程挂起,从而提高整体构建可靠
性并防止潜在的死锁。选择 3 秒的超时值是为了在正常情况下为测试完成留出足
够的时间,同时仍提供合理的保护以防止无限期阻塞。
The ArchLinux build workflows for qwlroots, treeland and waylib now
create a zip archive of the installed files in a staging directory
and upload it as an artifact. This allows for easy inspection of the
built files and verification of the build process's correctness. The
zip includes a `PACKAGE_INFO.txt` containing package metadata, build
configuration details, and a list of installed files. Pacman is used to
install the zip tool if it isn't already available.
feat: 上传构建产物为 zip 压缩包
qwlroots、treeland 和 waylib 的 ArchLinux 构建工作流程现在会在暂存目录中
创建已安装文件的 zip 压缩包,并将其作为工件上传。这样可以方便地检查构建
的文件并验证构建过程的正确性。该 zip 包含一个 `PACKAGE_INFO.txt`,其中包
含包元数据、构建配置详细信息和已安装文件列表。 如果 zip 工具尚不可用,则
使用 Pacman 安装它。
1. Fixes and updates CI configurations for treeland.
2. Merges `reuse` files for comprehensive license information.
3. Updates dependencies in `debian/control` to align with the combined
codebase.
4. Introduces separate build workflows for `waylib` and `qwlroots` to
ensure they can be built independently.
5. This ensures modularity and prevents accidental breakages during
future development, maintaining the option to separate these components
again.
chore: 修复 CI 并启用独立构建
1. 修复并更新了 treeland 的 CI 配置。
2. 合并 `reuse` 文件以提供全面的许可证信息。
3. 更新了 `debian/control` 中的依赖项,以与合并的代码库保持一致。
4. 引入了 `waylib` 和 `qwlroots` 的独立构建工作流程,以确保它们可以独立
构建。
5. 确保模块化,防止未来开发过程中意外损坏,保持再次分离这些组件的选项。
Removed qwlroots and waylib from git submodules, and merged their
source code directly into the treeland repository. This change
reduces development overhead during the rapid iteration phase of
treeland, as frequent coordinated changes are required across
treeland, qwlroots, and waylib. By merging them now, we simplify
development and maintenance. In the future, when the project
stabilizes, we may consider splitting them back into independent
repositories.
To prepare for this possible future split, the original directory
structures and all files from qwlroots and waylib are preserved and
placed under separate subdirectories in treeland.
Original project commits at the time of merge:
- qwlroots: https://github.com/vioken/qwlroots(00b09f9047ac0eaf26757e8af3d31f35d22bbce3)
- waylib: https://github.com/vioken/waylib(9564027cc6c89dc5262c03d183f743b71a0e621e)
重构:将 qwlroots 和 waylib 项目代码合并到 treeland
将 qwlroots 和 waylib 从 git 子模块中移除,直接把它们的代码合并
到 treeland 项目中。这样做是为了在 treeland 快速迭代期间减少开发
成本,因为经常需要同时修改 treeland、waylib 和 qwlroots,合并后
开发会更方便,待项目稳定后再考虑重新拆分为独立项目。
为方便将来拆分,保留了原项目的目录结构和全部文件,并使用独立子
目录维护代码。
合并时原项目的提交信息如下:
- qwlroots: https://github.com/vioken/qwlroots(00b09f9047ac0eaf26757e8af3d31f35d22bbce3)
- waylib: https://github.com/vioken/waylib(9564027cc6c89dc5262c03d183f743b71a0e621e)
This commit modifies the treeland systemd service file to use the
`seatd-dde.service` instead of the generic `seatd.service`. This change
is necessary because treeland now utilizes a dedicated seatd instance,
`seatd-dde`, specifically configured for its requirements. By switching
to the dedicated service, treeland avoids potential conflicts or
misconfigurations that could arise from sharing a common seatd instance
with other applications or services.
chore: 使用 treeland 专用的 seatd 服务
此提交修改了 treeland systemd 服务文件,以使用 `seatd-dde.service` 而不
是通用的 `seatd.service`。 这一更改是必要的,因为 treeland 现在使用专门
为其需求配置的专用 seatd 实例 `seatd-dde`。 通过切换到专用服务,treeland
可以避免因与其他应用程序或服务共享通用 seatd 实例而可能引起的潜在冲突或
错误配置。
81% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in pl
27% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'pl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in pt_BR
100% translated source file: 'treeland.en_US.ts'
on 'pt_BR'.
---------
Log:
The polkit rules for `org.freedesktop.login1.manage` are no longer
required because the DDE user no longer logs in via the `login1`
interface. This change removes the `misc/polkit-1` directory,
the `debian/treeland.install` reference to polkit rules, and the
corresponding `CMakeLists.txt` entry. This simplifies the codebase and
removes unnecessary configuration files.
chore: 移除 login1 的 polkit 规则
由于 DDE 用户不再通过 `login1` 接口登录,因此不再需要
`org.freedesktop.login1.manage` 的 polkit 规则。此更改移除了 `misc/
polkit-1` 目录、`debian/treeland.install` 中对 polkit 规则的引用以及相应
的 `CMakeLists.txt` 条目。这简化了代码库并删除了不必要的配置文件。
I can't explain this phenomenon. As long as the DLog registration
function is before QApplication, it is impossible to obtain all the
contents registered by dbus.
DTK Team reported that other projects encountered the same problem and
suspected that it was a Qt problem.
Log:
only treeland-session-shutdown.service can be clean TREELAND_RUN_MODE.
treeland-session-shutdown.service need TREELAND_RUN_MODE env, but
environment unset before treeland service stop.
Log:
LightDM will not store the desktop file name used for startup in DESKTOP_SESSION,
so we need a wrapper to provide new environment for treeland user mode.
Log:
1. Added [[maybe_unused]] attribute to multiple function parameters
across various modules
2. This resolves compiler warnings about unused variables in Wayland
interface implementations
3. The changes affect DDE shell interfaces, foreign toplevel handling,
personalization manager, output management, and other components
4. Modern C++ compilers can now properly ignore these parameters without
generating unnecessary warnings
fix: 为未使用的参数添加 [[maybe_unused]] 属性
1. 在多个模块的函数参数中添加了 [[maybe_unused]] 属性
2. 这解决了Wayland接口实现中关于未使用变量的编译器警告问题
3. 修改涉及DDE shell接口、外部顶层窗口处理、个性化管理器、输出管理以及其
他组件
4. 现代C++编译器现在可以正确忽略这些参数,而不会生成不必要的警告
1. Added ninja build tool to nativeBuildInputs in nix/default.nix to
support faster builds
2. Added popupsurfacecontainer files to CMakeLists.txt for proper
compilation
3. Created new PopupSurfaceContainer class to handle popup surfaces with
mouse event detection
4. Modified WindowMenu.qml to set modal property ensuring proper popup
behavior
5. Updated ShellHandler to use PopupSurfaceContainer instead of generic
SurfaceContainer
The changes implement a specialized container for handling
popup surfaces with proper event handling and closure logic. The
PopupSurfaceContainer class provides specific functionality for managing
popup windows, including detecting mouse press events outside popup
areas and closing popups accordingly. This improves the user experience
by ensuring popups are properly dismissed when users interact outside
their boundaries.
* [skip CI] Translate treeland.en_US.ts in af
10% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'af'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in th
20% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'th'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in te
20% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'te'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ku
20% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ku'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in nb
10% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'nb'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in uk [Manual Sync]
100% translated source file: 'treeland.en_US.ts'
on 'uk'.
* [skip CI] Translate wallpaper.en_US.ts in uk [Manual Sync]
66% of minimum 1% translated source file: 'wallpaper.en_US.ts'
on 'uk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in uk [Manual Sync]
100% translated source file: 'multitaskview.en_US.ts'
on 'uk'.
* [skip CI] Translate multitaskview.en_US.ts in ja
100% translated source file: 'multitaskview.en_US.ts'
on 'ja'.
* [skip CI] Translate treeland.en_US.ts in ja
100% translated source file: 'treeland.en_US.ts'
on 'ja'.
* [skip CI] Translate wallpaper.en_US.ts in ja
100% translated source file: 'wallpaper.en_US.ts'
on 'ja'.
* [skip CI] Translate lockscreen.en_US.ts in ja
100% translated source file: 'lockscreen.en_US.ts'
on 'ja'.
* [skip CI] Translate multitaskview.en_US.ts in ca
100% translated source file: 'multitaskview.en_US.ts'
on 'ca'.
* [skip CI] Translate wallpaper.en_US.ts in ca
100% translated source file: 'wallpaper.en_US.ts'
on 'ca'.
* [skip CI] Translate wallpaper.en_US.ts in uk
100% translated source file: 'wallpaper.en_US.ts'
on 'uk'.
* [skip CI] Translate lockscreen.en_US.ts in uk
59% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'uk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate wallpaper.en_US.ts in pt_BR
100% translated source file: 'wallpaper.en_US.ts'
on 'pt_BR'.
* [skip CI] Translate wallpaper.en_US.ts in es
100% translated source file: 'wallpaper.en_US.ts'
on 'es'.
* [skip CI] Translate treeland.en_US.ts in es
100% translated source file: 'treeland.en_US.ts'
on 'es'.
* [skip CI] Translate multitaskview.en_US.ts in es
100% translated source file: 'multitaskview.en_US.ts'
on 'es'.
* [skip CI] Translate lockscreen.en_US.ts in pt_BR
95% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'pt_BR'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ca
100% translated source file: 'treeland.en_US.ts'
on 'ca'.
* [skip CI] Translate multitaskview.en_US.ts in pt_BR
100% translated source file: 'multitaskview.en_US.ts'
on 'pt_BR'.
* [skip CI] Translate lockscreen.en_US.ts in ca
100% translated source file: 'lockscreen.en_US.ts'
on 'ca'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* [skip CI] Translate treeland.en_US.ts in ja
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ja'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ko
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ko'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in cs
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in it
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'it'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in sr
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'sr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in hu
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'hu'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in zh_TW
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'zh_TW'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ro
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ro'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in fi
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'fi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate wallpaper.en_US.ts in zh_CN
83% of minimum 10% translated source file: 'wallpaper.en_US.ts'
on 'zh_CN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ms
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ms'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in uk
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'uk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in sv
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'sv'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ar
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ar'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in fr
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'fr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in es
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in he
60% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'he'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in hi_IN
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'hi_IN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in pl
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'pl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in az
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'az'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ka
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ka'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in gl_ES
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'gl_ES'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in am_ET
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'am_ET'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in bg
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'bg'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in zh_CN
100% translated source file: 'multitaskview.en_US.ts'
on 'zh_CN'.
* [skip CI] Translate multitaskview.en_US.ts in ms
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ms'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in bg
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'bg'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ta
40% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ta'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in de
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'de'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in zh_HK
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'zh_HK'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in am_ET
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'am_ET'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ne
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ne'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in cs
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in si
10% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'si'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in sk
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'sk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in km_KH
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'km_KH'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in sq
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'sq'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ru
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ru'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in fi
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'fi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in tr
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'tr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in lt
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'lt'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in id
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'id'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in de
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'de'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in zh_CN
27% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_CN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in tzm
30% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'tzm'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in el
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'el'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ka
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ka'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in nl
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'nl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in zh_TW
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'zh_TW'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ast
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ast'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in br
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'br'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in el
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'el'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ca
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ca'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in sq
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'sq'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in hi_IN
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'hi_IN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in kab
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'kab'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in bo
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'bo'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in sl
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'sl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in pt_BR
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'pt_BR'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in it
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'it'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in bqi
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'bqi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ro
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ro'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in zh_HK
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'zh_HK'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in hr
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'hr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in uk
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'uk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in sk
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'sk'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in fa
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'fa'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in vi
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'vi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in da
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'da'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in id
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'id'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ja
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ja'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ca
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ca'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in zh_CN
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'zh_CN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in gl_ES
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'gl_ES'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ug
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ug'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in sl
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'sl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in bo
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'bo'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in sr
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'sr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in hr
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'hr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ar
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ar'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in da
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'da'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in bqi
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'bqi'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in fr
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'fr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in pt
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'pt'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in pt
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'pt'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in hu
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'hu'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in pl
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'pl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in az
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'az'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ast
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ast'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ckb
20% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ckb'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in tr
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'tr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in bn
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'bn'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in nl
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'nl'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in ug
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'ug'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in pt_BR
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'pt_BR'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in ru
50% of minimum 10% translated source file: 'multitaskview.en_US.ts'
on 'ru'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in es
80% of minimum 10% translated source file: 'treeland.en_US.ts'
on 'es'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate treeland.en_US.ts in zh_CN
100% translated source file: 'treeland.en_US.ts'
on 'zh_CN'.
* [skip CI] Translate multitaskview.en_US.ts in zh_HK
100% translated source file: 'multitaskview.en_US.ts'
on 'zh_HK'.
* [skip CI] Translate treeland.en_US.ts in zh_TW
100% translated source file: 'treeland.en_US.ts'
on 'zh_TW'.
* [skip CI] Translate lockscreen.en_US.ts in zh_TW
27% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_TW'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate multitaskview.en_US.ts in zh_TW
100% translated source file: 'multitaskview.en_US.ts'
on 'zh_TW'.
* [skip CI] Translate treeland.en_US.ts in zh_HK
100% translated source file: 'treeland.en_US.ts'
on 'zh_HK'.
* [skip CI] Translate lockscreen.en_US.ts in zh_HK
27% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_HK'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate wallpaper.en_US.ts in zh_CN
100% translated source file: 'wallpaper.en_US.ts'
on 'zh_CN'.
* [skip CI] Translate lockscreen.en_US.ts in zh_TW
63% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_TW'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in zh_HK
63% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_HK'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* [skip CI] Translate lockscreen.en_US.ts in zh_CN
63% of minimum 10% translated source file: 'lockscreen.en_US.ts'
on 'zh_CN'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: rewine <luhongxu@deepin.org>
1. Add .tx/config file to set up Transifex translation management with
multiple resource configurations for different components
2. Update Simplified Chinese translations in wallpaper plugin by
removing 'type="unfinished"' from several entries
3. Update Simplified Chinese translations in lockscreen plugin by
removing 'type="unfinished"' from multiple translation tags
These changes improve translation management workflow through proper
Transifex configuration and ensure the Chinese translations are marked
as completed rather than unfinished.
chore: 配置翻译文件并更新中文翻译
1. 添加 .tx/config 文件,配置多个组件的 Transifex 翻译资源管理
2. 在壁纸插件中更新简体中文翻译,移除多个条目中的 'type="unfinished"'
3. 在锁屏插件中更新简体中文翻译,移除多个标签中的 'type="unfinished"'
这些更改通过正确的 Transifex 配置改进了翻译管理工作流程,并确保中文翻译
标记为已完成状态而非未完成状态。
- Adjust member initialization order in `DDEShellSurfaceInterfacePrivate`
- Use `static_cast<size_t>` for type-safe assertion in `CaptureSource::copyBuffer`
- Reorder member variables in `treelandconfig.h` to match initialization order
- Remove unused static functions and redundant friend declarations
1. Removed jemalloc from the build dependencies in debian/control
2. Eliminated jemalloc reference in nix/default.nix
3. Deleted pkg_check_modules(JEMALLOC) call in src/CMakeLists.txt
4. Removed PkgConfig::JEMALLOC from target_link_libraries in src/
CMakeLists.txt
5. This change simplifies the build process and reduces external
dependencies
重构:移除jemalloc依赖
1. 从debian/control中删除jemalloc的构建依赖
2. 在nix/default.nix中消除对jemalloc的引用
3. 删除src/CMakeLists.txt中的pkg_check_modules(JEMALLOC)调用
4. 从src/CMakeLists.txt的target_link_libraries中移除PkgConfig::JEMALLOC
5. 此更改简化了构建过程并减少了外部依赖项
Log: The layer surface must appear on a specific screen. This should be handled in OutputLayerSurfaceContainer and not by RootSurfaceContainer. It is unreasonable to calculate the screen based on the position when the layer surface is not fully initialized.
Log: shouldn't set elide for tooltip, and I forgot why I didn't use AlignHCenter before, but now it works fine
Only update the transparency of tooltipText/titleIconText, no longer modify visible, to prevent both from being invisible when the state is wrong
The z-index of the surface for deepin-screen-recorder is higher than that of ordinary popups, so special handling is required for the popups of such applications
Adjust button's sequence of Power.
Fix Icon's color not following changes by replacing DciIcon.
Adjust color of windowText, maybe it should adjust by window's themeType.
pms: BUG-291189
Adjust font and color of password input.
Add blur, and using Treeland's Blur for RoundBlur.
Refact ControlAction's Item, and fix Power's state of expand.
Add isLocked to distinguish between
greeter and lockscreen.
pms: BUG-297083 BUG-297027 BUG-297015 BUG-297009 BUG-296977
This modification has multiple benefits. DM and the synthesizer will
become two independent parts. If one of them crashes, it will not cause
a large-scale component crash.
DM should also delegate the user's session to systemd for management in
the future, so that if any of the three parts crash, they can rely on
crash recovery to restart.
By the way, DDE users will not have sessions, so the pulseaudio service
will not be started in advance on deepin, and the file permissions of
/dev/dri/renderD128 are set by logind using acl when activating the
session. Now that dde is not a logged-in session, the activation
relationship between normal users will be correct, and I hope that the
sudden panic rhi rendering crash can be solved.
Log:
Should reparent capture mask surface wrapper before destructor. Its
QQmlData is marked as isQueuedForDeletion before destructor of
CaptureSourceSelector is invoked.
Only show LockScreen for primary output.
Add logout function.
adjust lockscreen UI
Lock lockscreen when session locked.
Lock lockscreen when clicking some PowerAction.
pms: BUG-291189 BUG-291179
notitlebar window is a special type that expects to use the shadows,
borders and rounded corners provided by the compositor, but does not
want the SSD titlebar.
Log:
WrapData is only constructed for non-null ptr. By the way, connection
is not connected to the life scope of wrapdata. Invalidate WrapData
on destructed.
WrapPointer is a smart pointer for WrapObject. It will become null
automatically when wrap object becomes invalid. Note that WrapObject
should provide a signal called aboutToBeInvalidated.
The internal information of an uninitialized shell surface may not be correct.
If configure it at this time, the client will receive an error message.
For example, if the layershell surface has no anchor information, its size will be incorrect.
pms: BUG-288905
According to Qt official usage, beginMoveRows should return false
when it fails, and endMoveRows should not be executed, otherwise
an exception will occur.
touchpad data has the following problems
- there may be duplicate data on the touchpad
- The accuracy between data is very small
- The maximum touch may not be 1.0, there is a certain error.
Currently, 0.98 is tentative
Signed-off-by: pengwenhao <pengwenhao@uniontech.com>
There is no need to disable radius and decoration on a invisible
SurfaceWrapper. Meanwhile, multitaskview and task switcher might
need to show minimized windows, it should have the same appearance
as normal state.
* Fix order and layout error in removing model.
* Add hint label when there is no windows.
* Add wheel handler to switch workspace when scrolling.
* Add utility function in Helper, filter windows not belong to current
user.
* Handle surface addition and removal correctly.
* Handle surface mapped() state correctly.
* Handle minimized animation correctly.
* Add shortcut triggers of multitaskview.
Exiting using the shortcut key is considered an abnormal exit. DDM will
count the number of abnormal exits and will not start treeland
afterwards.
Log:
added an example for SystemClipboard developers to use
wlr-data-control-unstable-v1 transparently in Wayland.
implementation based on Qt Wayland Extension.
Log:
Signed-off-by: lbwtw <xiaoyaobing@uniontech.com>
Repositioning the position of the OutputDelegate when the screen is
unplugged, No longer need to move the mouse position.
The screen with literacy layout will only be rearranged when x or y
intersects with the removed screen.
1,DRadiusEffect supports scissor the material of a sourceItem to
different radius at bottomLeft, bottomRight, topLeft, topRight.
2,replace the Decoration and SurfaceItemContent rounded corners
implementation.
Log:
Signed-off-by: lbwtw <xiaoyaobing@uniontech.com>
Adapt Waylib refactoring and replace WaylandSurface with wSurface.
When the component is loaded, saveState cannot save the geometry of
the actual surfaceItem, resulting in incomplete display of the window
during layout recovery.
drm is pending, commit will fail, set scale to become
invalid. do not commit and wait until the next frame to
complete the scaling settings.
Signed-off-by: pengwenhao <pengwenhao@uniontech.com>
When removing the output, the cursor did not update to the second screen,
resulting in lastActivecursor not updating and the window not moving to
the second screen.
the time interval between two alt+tabs is too short, and
the previous window animation is not stopped, causing
problems. added an interruption mechanism.
Log:
1,in WindowsSwitcher, when taking a snapshot of a
SurfaceItem, a BoxShadow may be obtained, and a
black image will appear around the rounded corners
of the snapshot.
2,no Boxshadow on the preview window edges.
3,preview window's shadow flickers when animator
end.
Log:
1,Add WorkspaceMask as background mask to make the desktop
look translucent.
2,Add window activation animator to make the window transition
from the preview position to the original position.
3,window activation animator is limited to 18 windows at most.
Log:
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.
As an alternative you can edit Xorg configuration ``xorg.conf``, please refer to the
Xorg documentation.
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
- [Code contribution via GitHub](https://github.com/linuxdeepin/treeland/)
- [Submit bug or suggestions to GitHub Issues or GitHub Discussions](https://github.com/linuxdeepin/developer-center/issues/new/choose)
## License
treeland is licensed under Apache-2.0 OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only.