Compare commits

..

No commits in common. "master" and "5.6.8" have entirely different histories.

189 changed files with 2827 additions and 11254 deletions

View File

@ -1,20 +1 @@
blank_issues_enabled: false
contact_links:
- name: BUG Report | 缺陷报告
url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=bug-report.yml
about: Please create bug reports to the issue board in our dtk repo.
- name: docs-update | 文档补充
url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=docs-update.yml
about: Please create docs-update to the issue board in our dtk repo.
- name: unit-test-report | 单元测试报告
url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=unit-test-report.yml
about: Please create unit-test-report to the issue board in our dtk repo.
- name: Feature Request | 特性请求
url: https://github.com/linuxdeepin/developer-center/discussions/new?category=features-request-ideas-%E7%89%B9%E6%80%A7%E8%AF%B7%E6%B1%82-%E5%A4%B4%E8%84%91%E9%A3%8E%E6%9A%B4
about: Please create feature requests to the discussion board in our developer-center repo.
- name: General Discussion & Questions | 常规讨论与问答
url: https://github.com/linuxdeepin/developer-center/discussions/categories/q-a-%E9%97%AE%E7%AD%94%E6%9D%BF%E5%9D%97
about: Please use the discussion board in our developer-center repo.
blank_issues_enabled: true

8
.github/ISSUE_TEMPLATE/empty-issue.md vendored Normal file
View File

@ -0,0 +1,8 @@
---
name: Empty issue
about: File a Empty issue
title: ''
labels: ''
assignees: ''
---

View File

@ -0,0 +1,12 @@
---
name: Unit test report
about: File a unit test report.
title: 'Test: [class name]'
labels: ''
assignees: ''
---
Path: [class file path]
Interface: [class interface name]

View File

@ -8,8 +8,10 @@ concurrency:
jobs:
backup-to-gitlabwh:
uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master
secrets: inherit
secrets:
BRIDGETOKEN: ${{ secrets.BRIDGETOKEN }}
backup-to-gitee:
uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master
secrets: inherit
secrets:
GITEE_SYNC_TOKEN: ${{ secrets.GITEE_SYNC_TOKEN }}

View File

@ -1,13 +0,0 @@
name: apiCheck
on:
pull_request_target:
types: [opened, synchronize, reopened]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
api-check:
uses: linuxdeepin/.github/.github/workflows/api-check.yml@master
secrets: inherit

View File

@ -1,50 +0,0 @@
name: Auto Release
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., 1.0.0)'
type: string
required: false
name:
description: 'The name of the person to release the version'
type: string
required: false
email:
description: 'The email of the person to release the version'
type: string
required: false
timezone:
description: 'The timezone in the debian changelog file'
required: false
type: string
default: 'Asia/Shanghai'
workflow_call:
inputs:
version:
description: 'Release version (e.g., 1.0.0)'
type: string
required: true
name:
description: 'The name of the person to release the version'
type: string
required: false
email:
description: 'The email of the person to release the version'
type: string
required: false
timezone:
description: 'The timezone in the debian changelog file'
required: false
type: string
default: 'Asia/Shanghai'
jobs:
auto_release:
uses: linuxdeepin/.github/.github/workflows/auto-release.yml@master
secrets: inherit
with:
version: ${{ inputs.version }}
name: ${{ inputs.name }}
email: ${{ inputs.email }}
timezone: ${{ inputs.timezone }}

17
.github/workflows/call-build-deb.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Call build-deb
on:
pull_request_target:
paths-ignore:
- ".github/workflows/**"
types: [ opened, closed, synchronize ]
concurrency:
group: ${{ github.workflow }}-pull/${{ github.event.number }}
cancel-in-progress: true
jobs:
check_job:
if: github.event.action != 'closed' || github.event.pull_request.merged
uses: linuxdeepin/.github/.github/workflows/build-deb.yml@master
secrets:
BridgeToken: ${{ secrets.BridgeToken }}

View File

@ -10,4 +10,8 @@ on:
jobs:
check_job:
uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master
secrets: inherit
secrets:
BUILD_GPG_PRIVATE_KEY: ${{ secrets.BUILD_GPG_PRIVATE_KEY }}
BUILD_SSH_PRIVATE_KEY: ${{ secrets.BUILD_SSH_PRIVATE_KEY }}
WEBDAV_PASSWD: ${{ secrets.WEBDAV_PASSWD }}
WEBDAV_USER: ${{ secrets.WEBDAV_USER }}

View File

@ -6,4 +6,5 @@ on:
jobs:
chatopt:
uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master
secrets: inherit
secrets:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

View File

@ -12,4 +12,5 @@ concurrency:
jobs:
clacheck:
uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master
secrets: inherit
secrets:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

View File

@ -1,13 +0,0 @@
name: debianCheck
on:
pull_request_target:
types: [opened, synchronize, reopened]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
debian-check:
uses: linuxdeepin/.github/.github/workflows/debian-check.yml@master
secrets: inherit

View File

@ -23,4 +23,5 @@ jobs:
uses: linuxdeepin/.github/.github/workflows/deploy-dev-doc.yml@master
with:
ref: ${{ inputs.tag }}
secrets: inherit
secrets:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

View File

@ -11,4 +11,5 @@ concurrency:
jobs:
check_job:
uses: linuxdeepin/.github/.github/workflows/doc-check.yml@master
secrets: inherit
secrets:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

View File

@ -1,13 +0,0 @@
name: staticCheck
on:
pull_request_target:
types: [opened, synchronize, reopened]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
static-check:
uses: linuxdeepin/.github/.github/workflows/static-check.yml@master
secrets: inherit

View File

@ -1,19 +0,0 @@
name: Call synchronize to dtk6
on:
pull_request_target:
paths-ignore:
- "debian/**"
- "archlinux/**"
- "rpm/**"
- ".obs/**"
- ".github/**"
jobs:
call-synchronize:
uses: linuxdeepin/dtk/.github/workflows/synchronize-to-dtk6.yml@master
secrets: inherit
with:
dest_repo: linuxdeepin/dtk6gui
source_repo: ${{ github.event.pull_request.head.repo.full_name }}
source_ref: ${{ github.event.pull_request.head.ref }}
pull_number: ${{ github.event.pull_request.number }}

13
.github/workflows/call-tag-build.yml vendored Normal file
View File

@ -0,0 +1,13 @@
name: tag build
on:
push:
tags: "*"
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
build:
uses: linuxdeepin/.github/.github/workflows/tag-build.yml@master
secrets: inherit

View File

@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- run: export
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false

6
.gitignore vendored
View File

@ -51,9 +51,6 @@ CMakeLists.txt.user*
#clangformat
.clang-format
# build
compile_commands.json
bin
DtkGuis
dtkgui_config.h
@ -64,6 +61,3 @@ dtkgui.pc
DtkGuiConfig.cmake
asan.*
Testing
# Ignore Doxygen theme files
docs/doxygen-theme/

View File

@ -1,51 +0,0 @@
test_build:
steps:
- link_package:
source_project: deepin:Develop:dde
source_package: %{SCM_REPOSITORY_NAME}
target_project: deepin:CI
- configure_repositories:
project: deepin:CI
repositories:
- name: deepin_develop
paths:
- target_project: deepin:CI
target_repository: deepin_develop
architectures:
- x86_64
- aarch64
- name: debian
paths:
- target_project: deepin:CI
target_repository: debian_sid
architectures:
- x86_64
- name: archlinux
paths:
- target_project: deepin:CI
target_repository: archlinux
architectures:
- x86_64
filters:
event: pull_request
tag_build:
steps:
- branch_package:
source_project: deepin:Develop:dde
source_package: %{SCM_REPOSITORY_NAME}
target_project: deepin:Unstable:dde
filters:
event: tag_push
commit_build:
steps:
- trigger_services:
project: deepin:Develop:dde
package: %{SCM_REPOSITORY_NAME}
filters:
event: push

View File

@ -4,12 +4,12 @@ Upstream-Contact: UnionTech Software Technology Co., Ltd. <>
Source: https://github.com/linuxdeepin/dtkgui
# ci
Files: .github/* .gitlab-ci.yml .obs/*
Files: .github/* .gitlab-ci.yml
Copyright: None
License: CC0-1.0
# gitignore
Files: .gitignore .syncexclude
Files: .gitignore
Copyright: None
License: CC0-1.0
@ -34,7 +34,7 @@ Copyright: None
License: LGPL-3.0-or-later
# README
Files: *README.md *README.zh_CN.md CHANGELOG.md
Files: *README.md *README.zh_CN.md
Copyright: None
License: CC-BY-4.0
@ -49,20 +49,14 @@ Copyright: None
License: CC0-1.0
# Project file
Files: *.pro *.prf *.pri *.qrc *CMakeLists.txt *.cmake *.in VERSION
Files: *.pro *.prf *.pri *.qrc *CMakeLists.txt *.cmake *.in
Copyright: None
License: CC0-1.0
# images: png svg dci webp
# images: svg dci webp
Files: src/util/icons/actions/* src/util/icons/icons/* src/util/icons/texts/*
src/util/icons/dci/* tests/images/* tests/actions/* tests/dcis/* examples/animation-dci/*
src/util/icons/dci/* tests/images/logo_icon.svg
examples/animation-dci/dci_heart.dci tests/images/dci_heart.dci
tests/images/*.webp
Copyright: UnionTech Software Technology Co., Ltd.
License: LGPL-3.0-or-later
Files: toolGenerate/**/*
Copyright: None
License: CC0-1.0
Files: src/kernel/orgdeepindtkpreference.hpp
Copyright: None
License: CC0-1.0

View File

@ -1,13 +0,0 @@
# Paths that will be exclude from synchronize workflow
# Please use relative path which use project directory as root
# Notice that
# * .git
# * debian
# * archlinux
# * .obs
# * .github
# are always ignored
linglong.yaml
conanfile.py
VERSION
CHANGELOG.md

View File

@ -1,97 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [5.7.25] - 2025-10-30
### Changed
- Improve icon theme generation with scalable support
## [5.7.24] - 2025-10-16
### Added
- Support Qt 6.10
### Changed
- Improve icon size detection and duplicate handling
### Fixed
- Correct lockfile path construction
- Fix Qt6 compilation error with libxdg
## [5.7.23] - 2025-09-25
### Fixed
- 解决控制中心闪烁问题
- Fix build for Qt 6.9
## [5.7.22] - 2025-09-04
### Added
- Add T11 font size and adjust T5 default
### Fixed
- Improve PID namespace detection in setSingleInstance
## [5.7.21] - 2025-08-14
### Added
- Add flags parameter to DDciIconPlayer play method
### Fixed
- Resolve compilation warnings and deprecation issues
## [5.7.20] - 2025-07-31
### Added
- Add pid namespace isolation to setSingleInstance
- Add concurrent processing for DCI icon conversion
### Changed
- Update REUSE license file for CHANGELOG
- Move icon finder functionality to separate tool
- Switch to QGuiApplication for SVG rendering
## [5.7.19] - 2025-07-03
### Fixed
- Enhance build security hardening
## [5.7.18] - 2025-06-27
### Fixed
- Make version parameter optional in release workflow
## [5.7.17] - 2025-06-19
### Added
- Add missing header
- Fix: add missing prefix for QTranslator::load()
### Changed
- Chore: use another QTranslator::load overload to tidy code
- Support VERSION file
- Add auto release workflow
- Update .syncexclude
[5.7.17]: https://github.com/linuxdeepin/dtkgui/compare/5.7.16..5.7.17
<!-- generated by git-cliff -->

View File

@ -1,22 +1,134 @@
cmake_minimum_required(VERSION 3.25)
cmake_minimum_required(VERSION 3.5)
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" DTK_FILE_VERSION)
string(STRIP "${DTK_FILE_VERSION}" DTK_FILE_VERSION)
set(DTK_VERSION "${DTK_FILE_VERSION}" CACHE STRING "define project version")
set(DVERSION "5.6.8" CACHE STRING "define project version")
project(DtkGui
VERSION ${DTK_VERSION}
VERSION ${DVERSION}
DESCRIPTION "DTK Gui module"
HOMEPAGE_URL "https://github.com/linuxdeepin/dtkgui"
LANGUAGES CXX C
)
set(LIB_NAME dtkgui)
if("${PROJECT_VERSION_MAJOR}" STREQUAL "5")
set(QT_VERSION_MAJOR "5")
elseif("${PROJECT_VERSION_MAJOR}" STREQUAL "6")
set(QT_VERSION_MAJOR "6")
set(DTK_VERSION_MAJOR "6")
else()
message(SEND_ERROR "not support Prject Version ${PROJECT_VERSION}.")
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set build option
option(DTK_DISABLE_LIBXDG "Disable libxdg" OFF)
option(DTK_DISABLE_LIBRSVG "Disable librsvg" OFF)
option(DTK_DISABLE_EX_IMAGE_FORMAT "Disable libraw and freeimage" OFF)
set(BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
# Set install path
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif ()
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/dtk${PROJECT_VERSION_MAJOR}/DGui")
set(TOOL_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/dtk${PROJECT_VERSION_MAJOR}/DGui/bin")
set(LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
set(MKSPECS_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/qt5/mkspecs/modules" CACHE STRING "Install dir for qt pri module files")
set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/DtkGui")
set(PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra -fopenmp")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_TESTING ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fno-omit-frame-pointer")
else ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Ofast")
endif ()
set(CONFIGNAME include/global/dtkgui_config.h)
file(WRITE ${CONFIGNAME}
"// This is an auto-generated header, please don't modify it.\n"
)
file(GLOB CONFIGSOURCE include/DtkGui/*)
foreach(FILENAME ${CONFIGSOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${CONFIGNAME} "#define DTKGUI_CLASS_${thefile}\n")
endforeach()
# Generate cmake config file
configure_package_config_file(misc/DtkGuiConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/DtkGuiConfig.cmake
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
PATH_VARS TOOL_INSTALL_DIR
)
# Generate cmake version file
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/DtkGuiConfigVersion.cmake"
VERSION ${DVERSION}
COMPATIBILITY SameMajorVersion
)
# Install cmake config file and version file to CONFIG_INSTALL_DIR
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/DtkGuiConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/DtkGuiConfigVersion.cmake
DESTINATION "${CONFIG_INSTALL_DIR}"
)
# Install pkgconfig file
configure_file(misc/dtkgui.pc.in dtkgui.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtkgui.pc DESTINATION "${PKGCONFIG_INSTALL_DIR}")
# Install pri module
configure_file(misc/qt_lib_dtkgui.pri.in qt_lib_dtkgui.pri @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_dtkgui.pri DESTINATION "${MKSPECS_INSTALL_DIR}")
set(GUISGNAME DtkGuis)
file(WRITE ${GUISGNAME}
"// This is an auto-generated header, please don't modify it.\n"
"#ifndef DTK_GUI_MODULE_H\n"
"#define DTK_GUI_MODULE_H\n"
)
file(GLOB FILEGRAGTOWRITSOURCE include/filedrag/*)
foreach(FILENAME ${FILEGRAGTOWRITSOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(GLOB KERNELTOWRITESOURCE include/kernel/*)
foreach(FILENAME ${KERNELTOWRITESOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(GLOB UTILTOWRITESOURCE include/util/*)
foreach(FILENAME ${UTILTOWRITESOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(APPEND ${GUISGNAME} "#endif")
install(FILES DtkGuis DESTINATION "${INCLUDE_INSTALL_DIR}")
# Find common dependencies
find_package(Qt5 REQUIRED COMPONENTS Gui DBus Network)
find_package(PkgConfig REQUIRED)
find_package(DtkCore 5.6 REQUIRED)
pkg_check_modules(librsvg REQUIRED IMPORTED_TARGET librsvg-2.0)
# Check optional image handler dependencies.
find_package(FreeImage)
pkg_check_modules(libraw IMPORTED_TARGET libraw)
if(FreeImage_FOUND AND libraw_FOUND)
set(EX_IMAGE_FORMAT_LIBS_FOUND ON)
endif()
include(dtkgui.cmake)
add_subdirectory(src)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tests)
endif()
add_subdirectory(tools)
add_subdirectory(examples)
if (BUILD_DOCS)
add_subdirectory(docs)
endif ()

View File

@ -1 +0,0 @@
5.7.25

View File

@ -1 +0,0 @@
@version@

View File

@ -1,30 +1,28 @@
# Maintainer: justforlxz <justforlxz@gmail.com>
pkgname=dtkgui-git
pkgver=5.7.25
pkgver=5.5.22.r8.g6ef1509
pkgrel=1
sourcename=dtkgui
sourcetars=("$sourcename"_"$pkgver".tar.xz)
sourcedir="$sourcename"
pkgdesc='Deepin Toolkit, gui module for DDE look and feel'
arch=('x86_64' 'aarch64')
url="https://github.com/linuxdeepin/dtkgui"
license=('LGPL3')
depends=('dtkcore-git' 'dtkcommon-git' 'qt5-svg' 'libqtxdg' 'freeimage' 'librsvg' 'qt5-wayland')
depends=('dtkcore-git' 'qt5-svg' 'libqtxdg' 'freeimage')
# INFO: you can disable freeimage not to support RAW images
# Then set DTK_DISABLE_EX_IMAGE_FORMAT=OFF
makedepends=('git' 'qt5-tools' 'gtest' 'gmock' 'ninja' 'cmake' 'doxygen' 'extra-cmake-modules')
makedepends=('git' 'qt5-tools' 'dtkcommon-git' 'dtkcore-git' 'librsvg' 'gtest' 'gmock' 'libqtxdg' 'ninja' 'cmake' 'doxygen')
conflicts=('dtkgui')
provides=('dtkgui')
groups=('deepin-git')
source=("${sourcetars[@]}")
source=('source.tar.gz')
sha512sums=('SKIP')
build() {
cd $sourcedir
cd $deepin_source_name
cmake -GNinja \
-DMKSPECS_INSTALL_DIR=lib/qt/mkspecs/modules/ \
-DBUILD_DOCS=ON \
-DDTK_DISABLE_LIBRSVG=ON \
-DQCH_INSTALL_DESTINATION=share/doc/qt \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_PREFIX=/usr \
@ -35,6 +33,6 @@ build() {
}
package() {
cd $sourcedir
cd $deepin_source_name
DESTDIR="$pkgdir" ninja install
}

394
debian/changelog vendored
View File

@ -1,397 +1,3 @@
dtkgui (5.7.25) unstable; urgency=medium
* Release 5.7.25
-- yeshanshan <yeshanshan@uniontech.com> Thu, 30 Oct 2025 21:47:33 +0800
dtkgui (5.7.24) unstable; urgency=medium
* Release 5.7.24
-- yeshanshan <yeshanshan@uniontech.com> Thu, 16 Oct 2025 19:45:30 +0800
dtkgui (5.7.23) unstable; urgency=medium
* Release 5.7.23
-- yeshanshan <packages@deepin.org> Thu, 25 Sep 2025 16:49:18 +0800
dtkgui (5.7.22) unstable; urgency=medium
* Release 5.7.22
-- yeshanshan <yeshanshan@uniontech.com> Thu, 04 Sep 2025 19:27:38 +0800
dtkgui (5.7.21) unstable; urgency=medium
* Release 5.7.21
-- yeshanshan <packages@deepin.org> Thu, 14 Aug 2025 19:47:40 +0800
dtkgui (5.7.20) unstable; urgency=medium
* Release 5.7.20
-- yeshanshan <yeshanshan@uniontech.com> Thu, 31 Jul 2025 19:59:35 +0800
dtkgui (5.7.19) unstable; urgency=medium
* Release 5.7.19
-- yeshanshan <yeshanshan@uniontech.com> Thu, 03 Jul 2025 21:12:27 +0800
dtkgui (5.7.18) unstable; urgency=medium
* Release 5.7.18
-- yeshanshan <yeshanshan@uniontech.com> Fri, 27 Jun 2025 17:09:35 +0800
dtkgui (5.7.17) unstable; urgency=medium
* Release 5.7.17
-- yeshanshan <yeshanshan@uniontech.com> Thu, 19 Jun 2025 10:03:48 +0800
dtkgui (5.7.16) unstable; urgency=medium
* Release 5.7.16
-- YeShanShan <yeshanshan@uniontech.com> Mon, 19 May 2025 17:21:59 +0800
dtkgui (5.7.15) unstable; urgency=medium
* fix: correct bitwise operation in preference handling
* fix: prevent theme saving when DontSaveApplicationTheme is set
* refactor: improve thread safety in OrgDeepinDTKPreference
* fix: build failed in qt5
* feat: use dconfig2cpp for read/write the DConfig
* fix: fix build on Qt 6.8
-- YeShanShan <yeshanshan@uniontech.com> Thu, 08 May 2025 17:53:09 +0800
dtkgui (5.7.14) unstable; urgency=medium
* build: compiling failed with Qt 6.9
-- YeShanShan <yeshanshan@uniontech.com> Thu, 17 Apr 2025 21:51:32 +0800
dtkgui (5.7.13) unstable; urgency=medium
* Release 5.7.13
-- YeShanShan <yeshanshan@uniontech.com> Thu, 20 Mar 2025 17:05:55 +0800
dtkgui (5.7.12) unstable; urgency=medium
* fix: palette refresh delayed in qt6
* feat: Add files generated by qdbusXML2cpp and DCONG2cpp
-- YeShanShan <yeshanshan@uniontech.com> Thu, 06 Mar 2025 17:29:35 +0800
dtkgui (5.7.11) unstable; urgency=medium
* Release 5.7.11
-- YeShanShan <yeshanshan@uniontech.com> Thu, 27 Feb 2025 20:47:39 +0800
dtkgui (5.7.10) unstable; urgency=medium
* fix: icon is blurry
-- YeShanShan <yeshanshan@uniontech.com> Thu, 13 Feb 2025 17:18:19 +0800
dtkgui (5.7.9) unstable; urgency=medium
[ root ]
* UNRELEASED
-- Deepin Packages Builder <packages@deepin.org> Thu, 23 Jan 2025 09:07:08 +0000
dtkgui (5.7.8) unstable; urgency=medium
* fix: missing window decoration for treeland
* chore: update default window corner size
-- Deepin Packages Builder <packages@deepin.org> Tue, 14 Jan 2025 11:17:31 +0000
dtkgui (5.7.7) unstable; urgency=medium
* fix: accessing wild pointer in qt6
* chore: correct typos about Dtk::Gui::DDciIcon::IconAttribute
Thanks to Felix Yan
-- Deepin Packages Builder <packages@deepin.org> Thu, 09 Jan 2025 09:28:38 +0000
dtkgui (5.7.6) unstable; urgency=medium
* refact: refacting DPlatformHandle to adap treeland
* Revert "refact: refacting DPlatformHandle to adap treeland"
* refact: refacting DPlatformHandle to adapt treeland
* fix: iterator out of bounds for dciicon
* fix: set font family invalid
-- Deepin Packages Builder <packages@deepin.org> Thu, 02 Jan 2025 05:43:53 +0000
dtkgui (5.7.5) unstable; urgency=medium
* fix: availableSizes not work on Qt6
-- Deepin Packages Builder <packages@deepin.org> Thu, 12 Dec 2024 03:03:53 +0000
dtkgui (5.7.4) unstable; urgency=medium
* chore(CI): add debian check workflow
Thanks to kuchune
* refactor: xcb platform theme interface
* refactor: treeland platform theme interface 扩展Treeland的个性化接口
* fix: Possible null pointer dereference and Notitlebar input parameter error
* feat: support treeland platform for wmHelper
* fix: blur is invalid for treeland
* feat: Limit maximum and minimum fonts
* fix: app crashed when window destroyed in quick
* fix: app crashed when window destroyed in quick
* fix: linglong app load qt translations failed
-- Deepin Packages Builder <packages@deepin.org> Tue, 03 Dec 2024 02:00:46 +0000
dtkgui (5.7.3) unstable; urgency=medium
* fix: No judgment on the validity of the protocol(Bug: 286859)
-- Deepin Packages Builder <packages@deepin.org> Wed, 20 Nov 2024 02:19:06 +0000
dtkgui (5.7.2) unstable; urgency=medium
* chore: Correct the name of TreelandProtocols package in cmake
* fix: Under treeland, the dialog has not disabled titlebar
* fix: Print "load translate" debug log to channels(Bug: 284539)
* chore: add IsWaylandPlatform attribute
* chore: highlight color is inconsistency
-- Deepin Packages Builder <packages@deepin.org> Wed, 13 Nov 2024 01:53:26 +0000
dtkgui (5.7.1) unstable; urgency=medium
* Revert "feat: add close.dci"(Issue: https://github.com/linuxdeepin/developer-center/issues/10482)
* feat: Add notitlebar function on wayland platform
* feat: support qt5 and qt6
* fix: cannot move window on wayland
* fix: remove treeland personalization protocols useless function
* feat: add fixme note
* chore: update license info
* chore: add build dep
* chore: update license
* chore: add extra cmake modules
* chore: add dtkgui namespace
* fix: app crashed in x11
-- Deepin Packages Builder <packages@deepin.org> Wed, 16 Oct 2024 03:30:46 +0000
dtkgui (5.6.34) unstable; urgency=medium
* feat: add close.dci
Thanks to Yixue Wang
* chore: animation-dci supports custom icon
* fix: wrong judgment conditions
* feat: support to change window effects(Bug: 244347)
* feat: add window startup effect Type(Issue: https://github.com/linuxdeepin/developer-center/issues/10322)
-- Deepin Packages Builder <packages@deepin.org> Tue, 20 Aug 2024 05:03:52 +0000
dtkgui (5.6.32) unstable; urgency=medium
* Revert "fix: jagged edges on ddciicon"(Issue: https://github.com/linuxdeepin/developer-center/issues/9443)
* chore: dci-icon-theme tool tweak
-- Deepin Packages Builder <packages@deepin.org> Mon, 08 Jul 2024 02:29:21 +0000
dtkgui (5.6.31) unstable; urgency=medium
* fix: jagged edges on ddciicon(Issue: https://github.com/linuxdeepin/developer-center/issues/8691)
-- Deepin Packages Builder <packages@deepin.org> Thu, 27 Jun 2024 09:11:34 +0000
dtkgui (5.6.30) unstable; urgency=medium
[ root ]
* UNRELEASED
-- Deepin Packages Builder <packages@deepin.org> Thu, 30 May 2024 02:46:31 +0000
dtkgui (5.6.29) unstable; urgency=medium
[ root ]
* UNRELEASED
-- Deepin Packages Builder <packages@deepin.org> Mon, 13 May 2024 03:02:53 +0000
dtkgui (5.6.28) unstable; urgency=medium
* chore: insert to cache when icon is not null
* chore: add flag to disable noncache flag
* fix: missing initialization for baseFont of fontManager(Issue: https://github.com/linuxdeepin/developer-center/issues/8040)
* feat: dci-icon-theme support multiple icon size
-- Deepin Packages Builder <packages@deepin.org> Mon, 29 Apr 2024 08:23:44 +0000
dtkgui (5.6.27) unstable; urgency=medium
* fix: setWindowBlurAreaByWM only work once in qt6
-- Deepin Packages Builder <packages@deepin.org> Fri, 19 Apr 2024 08:55:34 +0000
dtkgui (5.6.26) unstable; urgency=medium
* fix: wrong availableSizes for DIconProxyEngine
* fix: PlaceholderText color tweak(Issue: https://github.com/linuxdeepin/developer-center/issues/7554)
* feat: support to get specified palette
-- Deepin Packages Builder <packages@deepin.org> Tue, 26 Mar 2024 05:47:35 +0000
dtkgui (5.6.25) unstable; urgency=medium
* fix: icon doesn't update when iconTheme changed
* fix: font can't follow changes in qt6
* fix: app refresh slowly
* fix: changed paletteType's config value
* fix: search icon can't change with theme change(Issue: #6230)
-- Deepin Packages Builder <packages@deepin.org> Mon, 11 Mar 2024 01:16:27 +0000
dtkgui (5.6.22) unstable; urgency=medium
* fix: menu icon incorrect in dark mode(Issue: https://github.com/linuxdeepin/developer-center/issues/6624)
* feat: enable xdgIconLoader under Qt6
* chore: warning for connect
-- Deepin Packages Builder <packages@deepin.org> Wed, 10 Jan 2024 02:30:59 +0000
dtkgui (5.6.21) unstable; urgency=medium
* chore: update cmake version
* fix: xdg icon loading failed with qt6(Issue: https://github.com/linuxdeepin/developer-center/issues/6459)
* fix: debian build failed
* fix: DIconProxyEngine read not ensureEngine
* chore: fix ut_dciiconengine failed on dark theme
-- Deepin Packages Builder <packages@deepin.org> Tue, 09 Jan 2024 01:45:43 +0000
dtkgui (5.6.20) unstable; urgency=medium
* chore: add synchronization workflow
* fix: indirect inclusion of QSharedPointer
* feat: move ddesktopservices to dtkgui(Issue: #134)
-- Deepin Packages Builder <packages@deepin.org> Tue, 28 Nov 2023 05:40:52 +0000
dtkgui (5.6.19) unstable; urgency=medium
[ root ]
* UNRELEASED
-- Deepin Packages Builder <packages@deepin.org> Mon, 23 Oct 2023 07:33:18 +0000
dtkgui (5.6.18) unstable; urgency=medium
* fix: Wrong value of DPalette::TextLively
* chore: find qhelpgenerator from property
* fix: svg with filter attribute rendering exception
* fix: when iconName is absolute path
* fix: missing link when disable librsvg
* fix: Wrong IconName for DIconEngine(Issue: https://github.com/linuxdeepin/developer-center/issues/5760)
-- Deepin Packages Builder <packages@deepin.org> Wed, 18 Oct 2023 06:01:44 +0000
dtkgui (5.6.17) unstable; urgency=medium
* Release 5.6.17
-- Deepin Packages Builder <packages@deepin.org> Fri, 08 Sep 2023 15:15:39 +0800
dtkgui (5.6.16) unstable; urgency=medium
* chore: ut build without source
* fix: Compiling error in qt6.4
* chore: add DtkBuildHelper depends
* fix(build): ut failed on Qt6.4
* fix: dci icon cache key miss theme name(Issue: https://github.com/linuxdeepin/developer-center/issues/4517)
-- Deepin Packages Builder <packages@deepin.org> Tue, 22 Aug 2023 06:13:45 +0000
dtkgui (5.6.15) unstable; urgency=medium
* chore: iconengine tweak and uint test
* chore: do not show ui in ut
* chore: add unit test
* chore: Adaptation for Qt5.11
* refator: rewrite hasUserManual function
-- Yixue Wang <wangyixue@deepin.org> Fri, 11 Aug 2023 13:57:02 +0800
dtkgui (5.6.14) unstable; urgency=medium
* chore: ignore doxygen-theme folder
Thanks to syn(Task: 99)
* chore: change OUTPUT_DIR variable in cmake (#163)
Thanks to WangFei
* chore: adjust builtiniconengine (#164)
Thanks to WangFei
* chore: adjust xdgiconproxyengine (#167)
Thanks to WangFei
* chore: add unit test about builtinengine
* refactor!: deprecate some interfaces in dtk6
* chore: add dciiconengine
* chore: adjust icontheme
* chore: add unit test about dciiconengine
* chore: reduce compilation warnings
Thanks to SPUER(Issue: #96)
* chore: Sync by https://github.com/linuxdeepin/.github/commit/559e91167d4919644f37bbcf123eb0651c1528ea(Influence: none)
* chore: add proxyiconengine
* refactor: Move dotsPerInch from normal function to slots
* chore: remove unused pro files
* fix: build failed in qt6 due to proxyengine
* feat: DIconTheme::findQIcon add fallback icon
* fix(build): DIconTheme ut failed
* fix: DFileDragClient::serverDestroyed nerver emit
* feat: add helper for high dpi pixmap
* fix: dplatformtheme fetchPalette crash
* feat: load app and qt Translation files
-- Deepin Packages Builder <packages@deepin.org> Thu, 27 Jul 2023 06:56:34 +0000
dtkgui (5.6.12) unstable; urgency=medium
* chore: Sync by https://github.com/linuxdeepin/.github/commit/2e5e092ba3f86b16d1aabbabcf0bfd2ae65b19c8(Influence: none)
* fix: fix build failure due to metasystem change
* fix(build): suport build with Qt6 && Qt5
* chore: Adapt Qt6 && Dtk6 compilation
* fix: ut failed
* chore: update dconfig appid
-- Deepin Packages Builder <packages@deepin.org> Sun, 25 Jun 2023 14:43:42 +0800
dtkgui (5.6.11) unstable; urgency=medium
* Release 5.6.11
* Fix developer-center#4117
* Fix bug-197713(App blocked by hasUserManual in live system)
-- Deepin Packages Builder <packages@deepin.com> Mon, 08 May 2023 13:16:17 +0800
dtkgui (5.6.10) unstable; urgency=medium
* Release 5.6.10
* support XDG_SESSION_DESKTOP set to DDE
* add DontSaveApplciationTheme Attribute
-- Deepin Packages Builder <packages@deepin.com> Mon, 17 Apr 2023 17:11:55 +0800
dtkgui (5.6.9) unstable; urgency=medium
* Release 5.6.9
-- Deepin Packages Builder <packages@deepin.com> Mon, 03 Apr 2023 10:13:06 +0800
dtkgui (5.6.8) unstable; urgency=medium
* Release 5.6.8

10
debian/control vendored
View File

@ -3,15 +3,14 @@ Section: libdevel
Priority: optional
Maintainer: Deepin Packages Builder <packages@deepin.com>
Build-Depends: debhelper-compat (= 12), pkg-config,
qtbase5-private-dev, qtbase5-dev-tools, doxygen, graphviz, qttools5-dev,
qtbase5-private-dev, qtbase5-dev-tools, doxygen, graphviz, qttools5-dev-tools,
libdtkcore-dev, librsvg2-dev, libfreeimage-dev, libraw-dev, libgtest-dev, libgmock-dev,
libqt5xdg-dev, libqt5xdgiconloader-dev, cmake, qt5-image-formats-plugins, libqt5waylandclient5-dev,
extra-cmake-modules, qtwayland5-dev-tools, qtwayland5-private-dev, libkf5wayland-dev, treeland-protocols
libqt5xdg-dev, libqt5xdgiconloader-dev, cmake, qt5-image-formats-plugins
Standards-Version: 3.9.8
Package: libdtkgui5
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkdata,
Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkcommon,
qt5-image-formats-plugins
Multi-Arch: same
Description: Deepin Tool Kit Gui library
@ -30,14 +29,13 @@ Description: Deepin Tool Kit Gui Utilities
Package: libdtkgui-dev
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkgui5( =${binary:Version}), libdtkcommon-dev(>=5.6.16)
Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkgui5( =${binary:Version})
Description: Deepin Tool Kit Gui Devel library
DtkGui is base devel library of Deepin Qt/C++ applications.
.
This package contains the header files and static libraries of DtkGui
Package: libdtkgui-doc
Build-Profiles: <!nodoc>
Architecture: any
Depends: ${misc:Depends}
Description: Deepin Tool Kit Gui (Document)

View File

@ -1 +1 @@
usr/*/*/DGui/bin/*
usr/lib/*/*/DGui/bin/*

View File

@ -1,2 +1 @@
usr/lib/*/lib*.so.*
#usr/share/dsg/*/*

8
debian/rules vendored
View File

@ -3,12 +3,6 @@ DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk
export QT_SELECT = qt5
# 安全编译参数
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_CFLAGS_MAINT_APPEND = -Wall
export DEB_CXXFLAGS_MAINT_APPEND = -Wall
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wl,-E
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
VERSION = $(DEB_VERSION_UPSTREAM)
@ -24,7 +18,7 @@ endif
dh $@
override_dh_auto_configure:
dh_auto_configure -- -DBUILD_TESTING=OFF -DBUILD_DOCS=ON -DDTK_VERSION=$(_PACK_VER)
dh_auto_configure -- -DBUILD_TESTING=OFF -DBUILD_DOCS=ON -DDVERSION=$(_PACK_VER)
#override_dh_auto_test:
# echo "skip auto test"

944
debian/symbols.amd64 vendored Normal file
View File

@ -0,0 +1,944 @@
libdtkgui.so.5 libdtkgui5 #MINVER#
_Z27qRegisterNormalizedMetaTypeI5QListI12QPainterPathEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS6_Xaasr12QMetaTypeId2IS6_E7DefinedntsrSB_9IsBuiltInEE11DefinedTypeE@Base 5.2.2-1
_Z27qRegisterNormalizedMetaTypeI5QListI5QRectEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS6_Xaasr12QMetaTypeId2IS6_E7DefinedntsrSB_9IsBuiltInEE11DefinedTypeE@Base 5.2.2-1
_Z27qRegisterNormalizedMetaTypeI7QVectorIjEEiRK10QByteArrayPT_N9QtPrivate21MetaTypeDefinedHelperIS5_Xaasr12QMetaTypeId2IS5_E7DefinedntsrSA_9IsBuiltInEE11DefinedTypeE@Base 5.2.2-1
_ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListI12QPainterPathELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZGVZN9QtPrivate19ValueTypeIsMetaTypeI5QListI5QRectELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZGVZN9QtPrivate19ValueTypeIsMetaTypeI7QVectorIjELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZN10QByteArrayD1Ev@Base 5.2.2-1
_ZN10QByteArrayD2Ev@Base 5.2.2-1
_ZN12QWeakPointerI14QDBusInterfaceED1Ev@Base 5.2.2-1
_ZN12QWeakPointerI14QDBusInterfaceED2Ev@Base 5.2.2-1
_ZN12QWeakPointerI7QObjectED1Ev@Base 5.2.2-1
_ZN12QWeakPointerI7QObjectED2Ev@Base 5.2.2-1
_ZN12QWeakPointerIN3Dtk3Gui19DDndSourceInterfaceEED1Ev@Base 5.2.2-1
_ZN12QWeakPointerIN3Dtk3Gui19DDndSourceInterfaceEED2Ev@Base 5.2.2-1
_ZN12QWeakPointerIN3Dtk3Gui21DDndClientSignalRelayEED1Ev@Base 5.2.2-1
_ZN12QWeakPointerIN3Dtk3Gui21DDndClientSignalRelayEED2Ev@Base 5.2.2-1
_ZN15QtSharedPointer33ExternalRefCountWithCustomDeleterIN3Dtk3Gui21DDndClientSignalRelayENS_13NormalDeleterEE7deleterEPNS_20ExternalRefCountDataE@Base 5.2.2-1
_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE5equalEPKPvS6_@Base 5.2.2-1
_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE6assignEPPvPKS4_@Base 5.2.2-1
_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE7advanceEPPvi@Base 5.2.2-1
_ZN17QtMetaTypePrivate13IteratorOwnerIPKjE7destroyEPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE5equalEPKPvS8_@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE6assignEPPvPKS6_@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE7advanceEPPvi@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI12QPainterPathE14const_iteratorEE7destroyEPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QRectE14const_iteratorEE5equalEPKPvS8_@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QRectE14const_iteratorEE6assignEPPvPKS6_@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QRectE14const_iteratorEE7advanceEPPvi@Base 5.2.2-1
_ZN17QtMetaTypePrivate19IteratorOwnerCommonIN5QListI5QRectE14const_iteratorEE7destroyEPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QPainterPathLb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI12QPainterPathLb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI13QDBusArgumentLb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI13QDBusArgumentLb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI12QPainterPathELb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI12QPainterPathELb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI5QRectELb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QListI5QRectELb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI7QVectorIjELb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI7QVectorIjELb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI8QMarginsLb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI8QMarginsLb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_23QSequentialIterableImplELb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_23QSequentialIterableImplELb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk3Gui14DPlatformThemeELb1EE8DestructEPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIPN3Dtk3Gui14DPlatformThemeELb1EE9ConstructEPvPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListI12QPainterPathEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI5QListI5QRectEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl13moveToEndImplI7QVectorIjEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListI12QPainterPathEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI5QListI5QRectEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl15moveToBeginImplI7QVectorIjEEEvPKvPPv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListI12QPainterPathEEEPKvS6_i@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI5QListI5QRectEEEPKvS6_i@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl6atImplI7QVectorIjEEEPKvS5_i@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListI12QPainterPathEEENS_11VariantDataEPKPvij@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI5QListI5QRectEEENS_11VariantDataEPKPvij@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl7getImplI7QVectorIjEEENS_11VariantDataEPKPvij@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListI12QPainterPathEEEiPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI5QListI5QRectEEEiPKv@Base 5.2.2-1
_ZN17QtMetaTypePrivate23QSequentialIterableImpl8sizeImplI7QVectorIjEEEiPKv@Base 5.2.2-1
_ZN18QSharedDataPointerIN3Dtk3Gui12DPaletteDataEE13detach_helperEv@Base 5.2.2-1
_ZN18QSharedDataPointerIN3Dtk3Gui12DPaletteDataEED1Ev@Base 5.2.2-1
_ZN18QSharedDataPointerIN3Dtk3Gui12DPaletteDataEED2Ev@Base 5.2.2-1
_ZN29QWindowSystemInterfacePrivate16ThemeChangeEventD0Ev@Base 5.2.2-1
_ZN29QWindowSystemInterfacePrivate16ThemeChangeEventD1Ev@Base 5.2.2-1
_ZN29QWindowSystemInterfacePrivate16ThemeChangeEventD2Ev@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface10CursorIntoEiiRK7QString@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface10CursorMoveEiiRK7QString@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface10KeyReleaseERK7QStringiiS2_@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface11ButtonPressEiiiRK7QString@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface11qt_metacastEPKc@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface13ButtonReleaseEiiiRK7QString@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface13CancelAllAreaEv@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface16staticMetaObjectE@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface8KeyPressERK7QStringiiS2_@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterface9CursorOutEiiRK7QString@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterfaceC1ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterfaceC2ERK7QStringS2_RK15QDBusConnectionP7QObject@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterfaceD0Ev@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterfaceD1Ev@Base 5.2.2-1
_ZN34ComDeepinApiXEventMonitorInterfaceD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer10setViewBoxERK5QRect@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer10setViewBoxERK6QRectF@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer4loadERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer4loadERK7QString@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer6renderEP8QPainter@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer6renderEP8QPainterRK6QRectF@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRenderer6renderEP8QPainterRK7QStringRK6QRectF@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC1ERK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC1ERK7QStringP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC2ERK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererC2ERK7QStringP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui12DSvgRendererD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow10pidChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow14wmClassChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow5eventEP6QEvent@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindow9fromWinIdEy@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindowC1EP7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindowC2EP7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindowD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindowD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DForeignWindowD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme10midChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme10setPaletteERKNS0_8DPaletteE@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11baseChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11darkChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11linkChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11setFontNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11setMidlightERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11setTextTipsERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme11textChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme12lightChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme12setHighlightERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme12setTextTitleERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme12setThemeNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13buttonChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13setBrightTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13setButtonTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13setDarkLivelyERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13setTextLivelyERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13setWindowTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13shadowChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme13windowChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14paletteChangedENS0_8DPaletteE@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setActiveColorE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setCursorBlinkEb@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setDotsPerInchERK7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setFrameBorderERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setGtkFontNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setLightLivelyERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setLinkVisitedERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setTextWarningERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setToolTipBaseERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme14setToolTipTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme15fontNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme15midlightChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme15setMonoFontNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme15textTipsChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16highlightChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16setAlternateBaseERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16setFontPointSizeEd@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16setIconThemeNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16textTitleChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme16themeNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17brightTextChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17buttonTextChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17darkLivelyChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17setItemBackgroundERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17setSoundThemeNameERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17textLivelyChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme17windowTextChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18activeColorChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18cursorBlinkChangedEb@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18dotsPerInchChangedERK7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18frameBorderChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18gtkFontNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18lightLivelyChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18linkVisitedChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18setCursorBlinkTimeEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18setDoubleClickTimeEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18setHighlightedTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18textWarningChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18toolTipBaseChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme18toolTipTextChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme19monoFontNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme19setDndDragThresholdEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme19setFallbackPropertyEb@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme20alternateBaseChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme20fontPointSizeChangedEd@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme20iconThemeNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme21itemBackgroundChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme21setCursorBlinkTimeoutEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme21soundThemeNameChangedE10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme22cursorBlinkTimeChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme22doubleClickTimeChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme22highlightedTextChangedE6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme22setDoubleClickDistanceEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme23dndDragThresholdChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme25cursorBlinkTimeoutChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme26doubleClickDistanceChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme6setMidERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme7setBaseERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme7setDarkERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme7setLinkERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme7setTextERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme8setLightERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme9setButtonERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme9setShadowERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformTheme9setWindowERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeC1EjP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeC1EjPS1_@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeC2EjP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeC2EjPS1_@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DPlatformThemeD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor14registerRegionEv@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor16setWatchedRegionERK7QRegion@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor16unregisterRegionEv@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitor17setCoordinateTypeENS1_14CoordinateTypeE@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitorC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitorC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitorD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitorD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui14DRegionMonitorD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient12setTargetUrlEPK9QMimeData4QUrl@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient12stateChangedENS0_14DFileDragStateE@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient13checkMimeDataEPK9QMimeData@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient13setTargetDataEPK9QMimeData7QString8QVariant@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient15progressChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient15serverDestroyedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClient16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClientC1EPK9QMimeDataP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClientC2EPK9QMimeDataP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClientD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClientD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragClientD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer11setProgressEi@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer17targetDataChangedERK7QString@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServer8setStateENS0_14DFileDragStateE@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServerC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServerC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServerD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServerD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DFileDragServerD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings10setSettingERK10QByteArrayRK8QVariant@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings12__setAllKeysERK5QListI10QByteArrayE@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings14allKeysChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings15propertyChangedERK10QByteArrayRK8QVariant@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettings4initEPK11QMetaObjectj@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC1EPK11QMetaObjectjRK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC1ERNS0_22DNativeSettingsPrivateEPK11QMetaObjectjP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC1EjRK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC2EPK11QMetaObjectjRK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC2ERNS0_22DNativeSettingsPrivateEPK11QMetaObjectjP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsC2EjRK10QByteArrayP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DNativeSettingsD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle11eventFilterEP7QObjectP6QEvent@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle11setClipPathERK12QPainterPath@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle12setFrameMaskERK7QRegion@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle12windowLeaderEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle13isEnabledDXcbEPK7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle13pluginVersionEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle14isDXcbPlatformEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle14setBorderColorERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle14setBorderWidthEi@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle14setShadowColorERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle15clipPathChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle15setShadowOffsetERK6QPoint@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle15setShadowRadiusEi@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle15setWindowRadiusEi@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle16frameMaskChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle18borderColorChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle18borderWidthChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle18shadowColorChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19enableDXcbForWindowEP7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19enableDXcbForWindowEP7QWindowb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19frameMarginsChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19isEnabledNoTitlebarEPK7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19setEnableBlurWindowEb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19setEnableSystemMoveEb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19shadowOffsetChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19shadowRadiusChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle19windowRadiusChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle21setEnableSystemResizeEb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle21setWindowBlurAreaByWMEP7QWindowRK5QListI12QPainterPathE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle21setWindowBlurAreaByWMEP7QWindowRK7QVectorINS1_10WMBlurAreaEE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle21setWindowBlurAreaByWMERK5QListI12QPainterPathE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle21setWindowBlurAreaByWMERK7QVectorINS1_10WMBlurAreaEE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle23enableBlurWindowChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle23enableSystemMoveChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle24setTranslucentBackgroundEb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle25enableSystemResizeChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle26setAutoInputMaskByClipPathEb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle27connectHasBlurWindowChangedEP7QObjectSt8functionIFvvEE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle28translucentBackgroundChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle29setEnabledNoTitlebarForWindowEP7QWindowb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle30autoInputMaskByClipPathChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle30setDisableWindowOverrideCursorEP7QWindowb@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandle33connectWindowManagerChangedSignalEP7QObjectSt8functionIFvvEE@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandleC1EP7QWindowP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandleC2EP7QWindowP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandleD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandleD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DPlatformHandleD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl10setCounterEbi@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl10setUrgencyEb@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl11sendMessageERK4QMapI7QString8QVariantE@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl11setProgressEbd@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl14counterChangedEi@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl15progressChangedEd@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl17setCounterVisibleEb@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl21counterVisibleChangedEb@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControl22progressVisibleChangedEb@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControlC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControlC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControlD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControlD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui15DTaskbarControlD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui16DFileDragPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui16DFileDragPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui16DFileDragPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider12setSizeLimitERK9QMimeTypex@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider15createThumbnailERK9QFileInfoNS1_4SizeE@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider19setDefaultSizeLimitEx@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider20appendToProduceQueueERK9QFileInfoNS1_4SizeESt8functionIFvRK7QStringEE@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider20removeInProduceQueueERK9QFileInfoNS1_4SizeE@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider3runEv@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProvider8instanceEv@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProviderC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProviderC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProviderD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProviderD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui18DThumbnailProviderD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeader12removeWindowEP7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeader9addWindowEP7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeaderC1Ej@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeaderC2Ej@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeaderD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui18DWindowGroupLeaderD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface12stateChangedE7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface15progressChangedE7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface15serverDestroyedE7QString@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterface16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterfaceD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterfaceD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DDndSourceInterfaceD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DSvgRendererPrivateC1EPNS_4Core7DObjectE@Base 5.2.2-1
_ZN3Dtk3Gui19DSvgRendererPrivateC2EPNS_4Core7DObjectE@Base 5.2.2-1
_ZN3Dtk3Gui19DSvgRendererPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DSvgRendererPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui19DSvgRendererPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper17getMotifFunctionsEPK7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper17setMotifFunctionsEPK7QWindow6QFlagsINS1_13MotifFunctionEE@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper17setMotifFunctionsEPK7QWindow6QFlagsINS1_13MotifFunctionEEb@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper17windowListChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper19getMotifDecorationsEPK7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper19hasCompositeChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper19setMotifDecorationsEPK7QWindow6QFlagsINS1_15MotifDecorationEE@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper19setMotifDecorationsEPK7QWindow6QFlagsINS1_15MotifDecorationEEb@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper20hasBlurWindowChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper20hasNoTitlebarChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper20windowManagerChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper21popupSystemWindowMenuEPK7QWindow@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper25windowMotifWMHintsChangedEj@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelper8instanceEv@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelperC1EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelperC2EP7QObject@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelperD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelperD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui20DWindowManagerHelperD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay12stateChangedE7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay15progressChangedE7QStringi@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay15serverDestroyedE7QString@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelay8relayrefE@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelayD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelayD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DDndClientSignalRelayD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DForeignWindowPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DForeignWindowPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DForeignWindowPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper10blendColorERK6QColorS4_@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper10initializeEv@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper11adjustColorERK6QColoraaaaaaa@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper11toColorTypeERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper11toColorTypeERK8QPalette@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper12fetchPaletteEPKNS0_14DPlatformThemeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper12setThemeTypeENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper14setPaletteTypeENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper15generatePaletteERNS0_8DPaletteENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper15standardPaletteENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper16themeTypeChangedENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper17isXWindowPlatformEv@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper17setSingleInstanceERK7QStringNS1_11SingleScopeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper18newProcessInstanceExRK11QStringList@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper18paletteTypeChangedENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper20generatePaletteColorERNS0_8DPaletteEN8QPalette9ColorRoleENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper20generatePaletteColorERNS0_8DPaletteENS2_9ColorTypeENS1_9ColorTypeE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper21setApplicationPaletteERKNS0_8DPaletteE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper23registerInstanceCreatorEPFPS1_vE@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper24setUseInactiveColorGroupEb@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper25setSingelInstanceIntervalEi@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper25setSingleInstanceIntervalEi@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper26setColorCompositingEnabledEb@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelper8instanceEv@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelperC1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelperC2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelperD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelperD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DGuiApplicationHelperD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivate16onQtColorChangedEN8QPalette9ColorRoleERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivate17onDtkColorChangedENS0_8DPalette9ColorTypeERK6QColor@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivate20notifyPaletteChangedEv@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivate25_q_onThemePropertyChangedERK10QByteArrayRK8QVariant@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivateC1EPNS0_14DPlatformThemeE@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivateC2EPNS0_14DPlatformThemeE@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DPlatformThemePrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate11_q_KeyPressERK7QStringiiS4_@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate13_q_CursorMoveEiiRK7QString@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate13_q_KeyReleaseERK7QStringiiS4_@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate14_q_ButtonPressEiiiRK7QString@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate16_q_ButtonReleaseEiiiRK7QString@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate21registerMonitorRegionEv@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate23unregisterMonitorRegionEv@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivate4initEv@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivateC1EPNS0_14DRegionMonitorE@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivateC2EPNS0_14DRegionMonitorE@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DRegionMonitorPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DWindowManagerHelper_D0Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DWindowManagerHelper_D1Ev@Base 5.2.2-1
_ZN3Dtk3Gui21DWindowManagerHelper_D2Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragClientPrivate13connectionmapE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragClientPrivate8ifacemapE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragClientPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragClientPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragClientPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivate10dbusifinstE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivate13writeMimeDataEP9QMimeData@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivate9servermapE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivateC1EPNS0_15DFileDragServerE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivateC2EPNS0_15DFileDragServerE@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DFileDragServerPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivate4initEPK11QMetaObjectj@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivateC1EPNS0_15DNativeSettingsERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivateC2EPNS0_15DNativeSettingsERK10QByteArray@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DNativeSettingsPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DTaskbarControlPrivateC1EPNS0_15DTaskbarControlE@Base 5.2.2-1
_ZN3Dtk3Gui22DTaskbarControlPrivateC2EPNS0_15DTaskbarControlE@Base 5.2.2-1
_ZN3Dtk3Gui22DTaskbarControlPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DTaskbarControlPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui22DTaskbarControlPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui22_DGuiApplicationHelper14defaultCreatorEv@Base 5.2.2-1
_ZN3Dtk3Gui22_DGuiApplicationHelper7creatorE@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivate20hasThumbnailMimeHashE@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivate4initEv@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivateC1EPNS0_18DThumbnailProviderE@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivateC2EPNS0_18DThumbnailProviderE@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui25DThumbnailProviderPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui25DWindowGroupLeaderPrivate17ensureGroupLeaderEv@Base 5.2.2-1
_ZN3Dtk3Gui25DWindowGroupLeaderPrivate20setWindowGroupLeaderEjj@Base 5.2.2-1
_ZN3Dtk3Gui27DWindowManagerHelperPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui27DWindowManagerHelperPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui27DWindowManagerHelperPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate15initApplicationEP15QGuiApplication@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate16compositingColorE@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate16useInactiveColorE@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate21notifyAppThemeChangedEP15QGuiApplicationb@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate21staticInitApplicationEv@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate23_q_initApplicationThemeEb@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate4initEv@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivate8waitTimeE@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivateC1EPNS0_21DGuiApplicationHelperE@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivateC2EPNS0_21DGuiApplicationHelperE@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui28DGuiApplicationHelperPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui29DFileThumbnailProviderPrivateD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui29DFileThumbnailProviderPrivateD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui29DFileThumbnailProviderPrivateD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui8DPalette8setBrushEN8QPalette10ColorGroupENS1_9ColorTypeERK6QBrush@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC1ERK8QPalette@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC1ERKS1_@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC1Ev@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC2ERK8QPalette@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC2ERKS1_@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteC2Ev@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteD2Ev@Base 5.2.2-1
_ZN3Dtk3Gui8DPaletteaSERKS1_@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag11qt_metacastEPKc@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag11setMimeDataEP9QMimeData@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag16staticMetaObjectE@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag16targetUrlChangedE4QUrl@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDrag9targetUrlEv@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDragC1EP7QObjectPNS0_15DFileDragServerE@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDragC2EP7QObjectPNS0_15DFileDragServerE@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDragD0Ev@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDragD1Ev@Base 5.2.2-1
_ZN3Dtk3Gui9DFileDragD2Ev@Base 5.2.2-1
_ZN4QMapI7QString8QVariantE13detach_helperEv@Base 5.2.2-1
_ZN4QMapI7QString8QVariantE6insertERKS0_RKS1_@Base 5.2.2-1
_ZN4QMapI7QString8QVariantED1Ev@Base 5.2.2-1
_ZN4QMapI7QString8QVariantED2Ev@Base 5.2.2-1
_ZN4QSetI7QStringED1Ev@Base 5.2.2-1
_ZN4QSetI7QStringED2Ev@Base 5.2.2-1
_ZN5QHashI5QPairI7QStringN3Dtk3Gui18DThumbnailProvider4SizeEE15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI5QPairI7QStringN3Dtk3Gui18DThumbnailProvider4SizeEE15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI5QPairI7QStringN3Dtk3Gui18DThumbnailProvider4SizeEE15QHashDummyValueE6removeERKS6_@Base 5.2.2-1
_ZN5QHashI7QString12QWeakPointerI14QDBusInterfaceEE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI7QString12QWeakPointerI14QDBusInterfaceEE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI7QString12QWeakPointerI14QDBusInterfaceEE6removeERKS0_@Base 5.2.2-1
_ZN5QHashI7QString12QWeakPointerI14QDBusInterfaceEED1Ev@Base 5.2.2-1
_ZN5QHashI7QString12QWeakPointerI14QDBusInterfaceEED2Ev@Base 5.2.2-1
_ZN5QHashI7QString15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI7QString15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragClientEE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragClientEE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragClientEE6removeERKS0_@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragClientEED1Ev@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragClientEED2Ev@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragServerEE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragServerEE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragServerEE6removeERKS0_@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragServerEED1Ev@Base 5.2.2-1
_ZN5QHashI7QStringPN3Dtk3Gui15DFileDragServerEED2Ev@Base 5.2.2-1
_ZN5QHashI7QStringiE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI7QStringiE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QHashI9QMimeTypexE11deleteNode2EPN9QHashData4NodeE@Base 5.2.2-1
_ZN5QHashI9QMimeTypexE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.2.2-1
_ZN5QListI10QByteArrayEC1ERKS1_@Base 5.2.2-1
_ZN5QListI10QByteArrayEC2ERKS1_@Base 5.2.2-1
_ZN5QListI10QByteArrayED1Ev@Base 5.2.2-1
_ZN5QListI10QByteArrayED2Ev@Base 5.2.2-1
_ZN5QListI12QPainterPathE13detach_helperEi@Base 5.2.2-1
_ZN5QListI12QPainterPathE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListI12QPainterPathE6appendERKS0_@Base 5.2.2-1
_ZN5QListI12QPainterPathEC1ERKS1_@Base 5.2.2-1
_ZN5QListI12QPainterPathEC2ERKS1_@Base 5.2.2-1
_ZN5QListI12QPainterPathED1Ev@Base 5.2.2-1
_ZN5QListI12QPainterPathED2Ev@Base 5.2.2-1
_ZN5QListI5QRectEC1ERKS1_@Base 5.2.2-1
_ZN5QListI5QRectEC2ERKS1_@Base 5.2.2-1
_ZN5QListI5QRectED1Ev@Base 5.2.2-1
_ZN5QListI5QRectED2Ev@Base 5.2.2-1
_ZN5QListI7QStringE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListI7QStringE5clearEv@Base 5.2.2-1
_ZN5QListI7QStringE6appendERKS0_@Base 5.2.2-1
_ZN5QListI7QStringED1Ev@Base 5.2.2-1
_ZN5QListI7QStringED2Ev@Base 5.2.2-1
_ZN5QListI8QPointerI7QWindowEE13detach_helperEi@Base 5.2.2-1
_ZN5QListI8QPointerI7QWindowEE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListI8QPointerI7QWindowEE6appendERKS2_@Base 5.2.2-1
_ZN5QListI8QPointerI7QWindowEED1Ev@Base 5.2.2-1
_ZN5QListI8QPointerI7QWindowEED2Ev@Base 5.2.2-1
_ZN5QListI8QVariantE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListI8QVariantE6appendERKS0_@Base 5.2.2-1
_ZN5QListI8QVariantED1Ev@Base 5.2.2-1
_ZN5QListI8QVariantED2Ev@Base 5.2.2-1
_ZN5QListIN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoEE13detach_helperEi@Base 5.2.2-1
_ZN5QListIN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoEE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListIN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoEE6appendERKS3_@Base 5.2.2-1
_ZN5QListIN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoEED1Ev@Base 5.2.2-1
_ZN5QListIN3Dtk3Gui25DThumbnailProviderPrivate11ProduceInfoEED2Ev@Base 5.2.2-1
_ZN5QListIP7QScreenE13detach_helperEi@Base 5.2.2-1
_ZN5QListIP7QScreenED1Ev@Base 5.2.2-1
_ZN5QListIP7QScreenED2Ev@Base 5.2.2-1
_ZN5QListIP7QWindowED1Ev@Base 5.2.2-1
_ZN5QListIP7QWindowED2Ev@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEE13detach_helperEi@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEE6appendERKS3_@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEEC1ERKS4_@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEEC2ERKS4_@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEED1Ev@Base 5.2.2-1
_ZN5QListIPN3Dtk3Gui14DForeignWindowEED2Ev@Base 5.2.2-1
_ZN5QListIyE18detach_helper_growEii@Base 5.2.2-1
_ZN5QListIyE6appendERKy@Base 5.2.2-1
_ZN5QListIyED1Ev@Base 5.2.2-1
_ZN5QListIyED2Ev@Base 5.2.2-1
_ZN6QColorC1EPKc@Base 5.2.2-1
_ZN6QColorC2EPKc@Base 5.2.2-1
_ZN7QStringD1Ev@Base 5.2.2-1
_ZN7QStringD2Ev@Base 5.2.2-1
_ZN7QVectorIN3Dtk3Gui15DPlatformHandle10WMBlurAreaEE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 5.2.2-1
_ZN7QVectorIN3Dtk3Gui15DPlatformHandle10WMBlurAreaEE6appendEOS3_@Base 5.2.2-1
_ZN7QVectorIjE11reallocDataEii6QFlagsIN10QArrayData16AllocationOptionEE@Base 5.2.2-1
_ZN7QVectorIjEC1ERKS0_@Base 5.2.2-1
_ZN7QVectorIjEC2ERKS0_@Base 5.2.2-1
_ZN8QMapNodeI7QString8QVariantE14destroySubTreeEv@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED1Ev@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI12QPainterPathEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED2Ev@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI5QRectEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI5QRectEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED1Ev@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI5QListI5QRectEN17QtMetaTypePrivate23QSequentialIterableImplENS4_33QSequentialIterableConvertFunctorIS3_EEED2Ev@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED1Ev@Base 5.2.2-1
_ZN9QtPrivate16ConverterFunctorI7QVectorIjEN17QtMetaTypePrivate23QSequentialIterableImplENS3_33QSequentialIterableConvertFunctorIS2_EEED2Ev@Base 5.2.2-1
_ZN9QtPrivate16StreamStateSaverD1Ev@Base 5.2.2-1
_ZN9QtPrivate16StreamStateSaverD2Ev@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt5_BindIFMN3Dtk3Gui21DPlatformThemePrivateEFvN8QPalette9ColorRoleERK6QColorEPS4_S6_St12_PlaceholderILi1EEEELi1ENS_4ListIJS7_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt5_BindIFMN3Dtk3Gui21DPlatformThemePrivateEFvNS3_8DPalette9ColorTypeERK6QColorEPS4_S6_St12_PlaceholderILi1EEEELi1ENS_4ListIJS7_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt5_BindIFMN3Dtk3Gui28DGuiApplicationHelperPrivateEFvP15QGuiApplicationbEPS4_S6_bEELi1ENS_4ListIJ10QByteArrayEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt5_BindIFMN3Dtk3Gui28DGuiApplicationHelperPrivateEFvP15QGuiApplicationbEPS4_S6_bEELi1ENS_4ListIJ6QColorEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt5_BindIFMN3Dtk3Gui28DGuiApplicationHelperPrivateEFvP15QGuiApplicationbEPS4_S6_bEELi1ENS_4ListIJNS3_8DPaletteEEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate18QFunctorSlotObjectISt8functionIFvvEELi0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.2.2-1
_ZN9QtPrivate23readArrayBasedContainerI5QListI7QStringEEER11QDataStreamS5_RT_@Base 5.2.2-1
_ZN9QtPrivate24writeSequentialContainerI5QListI7QStringEEER11QDataStreamS5_RKT_@Base 5.2.2-1
_ZN9QtPrivate8RefCount3refEv@Base 5.2.2-1
_ZNK34ComDeepinApiXEventMonitorInterface10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer11defaultSizeEv@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer13elementExistsERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer15boundsOnElementERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer7isValidEv@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer7toImageE5QSizeRK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer7viewBoxEv@Base 5.2.2-1
_ZNK3Dtk3Gui12DSvgRenderer8viewBoxFEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DForeignWindow10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DForeignWindow3pidEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DForeignWindow7wmClassEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10brightTextEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10buttonTextEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10darkLivelyEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10textLivelyEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme10windowTextEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11activeColorEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11cursorBlinkEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11dotsPerInchERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11frameBorderEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11gtkFontNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11lightLivelyEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11linkVisitedEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11parentThemeEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11textWarningEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11toolTipBaseEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme11toolTipTextEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme12fetchPaletteERKNS0_8DPaletteEPb@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme12monoFontNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme13alternateBaseEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme13fontPointSizeEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme13iconThemeNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme14isValidPaletteEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme14itemBackgroundEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme14soundThemeNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme15cursorBlinkTimeEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme15doubleClickTimeEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme15highlightedTextEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme16dndDragThresholdEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme18cursorBlinkTimeoutEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme19doubleClickDistanceEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme3midEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme4baseEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme4darkEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme4linkEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme4textEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme5lightEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme6buttonEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme6shadowEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme6windowEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme7isValidEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme7paletteEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme8fontNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme8midlightEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme8textTipsEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme9highlightEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme9textTitleEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DPlatformTheme9themeNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor10cursorMoveERK6QPoint@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor10keyReleaseERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor10registeredEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor11buttonPressERK6QPointi@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor13buttonReleaseERK6QPointi@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor13watchedRegionEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor14coordinateTypeEv@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor21coordinateTypeChangedENS1_14CoordinateTypeE@Base 5.2.2-1
_ZNK3Dtk3Gui14DRegionMonitor8keyPressERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui15DFileDragClient10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DFileDragClient5stateEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DFileDragClient8progressEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DFileDragServer10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DFileDragServer10targetDataERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui15DNativeSettings10getSettingERK10QByteArray@Base 5.2.2-1
_ZNK3Dtk3Gui15DNativeSettings10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DNativeSettings7allKeysEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DNativeSettings7isValidEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle11borderColorEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle11borderWidthEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle11shadowColorEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle12frameMarginsEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle12realWindowIdEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle12shadowOffsetEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle12shadowRadiusEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle12windowRadiusEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle16enableBlurWindowEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle16enableSystemMoveEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle18enableSystemResizeEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle21translucentBackgroundEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle23autoInputMaskByClipPathEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle8clipPathEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DPlatformHandle9frameMaskEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DTaskbarControl10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DTaskbarControl14counterVisibleEv@Base 5.2.2-1
_ZNK3Dtk3Gui15DTaskbarControl7counterEv@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider11errorStringEv@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider12hasThumbnailERK9QFileInfo@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider12hasThumbnailERK9QMimeType@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider16defaultSizeLimitEv@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider16thumbnailChangedERK7QStringS4_@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider17thumbnailFilePathERK9QFileInfoNS1_4SizeE@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider21createThumbnailFailedERK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider23createThumbnailFinishedERK7QStringS4_@Base 5.2.2-1
_ZNK3Dtk3Gui18DThumbnailProvider9sizeLimitERK9QMimeType@Base 5.2.2-1
_ZNK3Dtk3Gui18DWindowGroupLeader13groupLeaderIdEv@Base 5.2.2-1
_ZNK3Dtk3Gui18DWindowGroupLeader14clientLeaderIdEv@Base 5.2.2-1
_ZNK3Dtk3Gui19DDndSourceInterface10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui19DSvgRendererPrivate8getImageERK5QSizeRK7QString@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper12hasCompositeEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper13hasBlurWindowEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper13hasNoTitlebarEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper15allWindowIdListEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper17windowManagerNameEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper23currentWorkspaceWindowsEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper23windowManagerNameStringEv@Base 5.2.2-1
_ZNK3Dtk3Gui20DWindowManagerHelper28currentWorkspaceWindowIdListEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DDndClientSignalRelay10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper10metaObjectEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper11paletteTypeEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper11systemThemeEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper11windowThemeEP7QWindow@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper13windowPaletteEP7QWindow@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper16applicationThemeEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper18applicationPaletteEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DGuiApplicationHelper9themeTypeEv@Base 5.2.2-1
_ZNK3Dtk3Gui21DRegionMonitorPrivate22deviceScaledCoordinateERK6QPointd@Base 5.2.2-1
_ZNK3Dtk3Gui25DThumbnailProviderPrivate14sizeToFilePathENS0_18DThumbnailProvider4SizeE@Base 5.2.2-1
_ZNK3Dtk3Gui28DGuiApplicationHelperPrivate10initWindowEP7QWindow@Base 5.2.2-1
_ZNK3Dtk3Gui8DPalette5brushEN8QPalette10ColorGroupENS1_9ColorTypeE@Base 5.2.2-1
_ZNK3Dtk3Gui9DFileDrag10metaObjectEv@Base 5.2.2-1
_ZNK5QHashI5QPairI7QStringN3Dtk3Gui18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_Pj@Base 5.2.2-1
_ZNK5QHashI5QPairI7QStringN3Dtk3Gui18DThumbnailProvider4SizeEE15QHashDummyValueE8findNodeERKS6_j@Base 5.2.2-1
_ZNK5QHashI7QString12QWeakPointerI14QDBusInterfaceEE8findNodeERKS0_Pj@Base 5.2.2-1
_ZNK5QHashI7QString12QWeakPointerI14QDBusInterfaceEE8findNodeERKS0_j@Base 5.2.2-1
_ZNK5QHashI7QString15QHashDummyValueE8findNodeERKS0_j@Base 5.2.2-1
_ZNK5QHashI7QStringPN3Dtk3Gui15DFileDragClientEE8findNodeERKS0_Pj@Base 5.2.2-1
_ZNK5QHashI7QStringPN3Dtk3Gui15DFileDragClientEE8findNodeERKS0_j@Base 5.2.2-1
_ZNK5QHashI7QStringPN3Dtk3Gui15DFileDragServerEE8findNodeERKS0_Pj@Base 5.2.2-1
_ZNK5QHashI7QStringPN3Dtk3Gui15DFileDragServerEE8findNodeERKS0_j@Base 5.2.2-1
_ZNK5QHashI7QStringiE8findNodeERKS0_j@Base 5.2.2-1
_ZNK5QHashI9QMimeTypexE8findNodeERKS0_j@Base 5.2.2-1
_ZNK7QWindow4sizeEv@Base 5.2.2-1
_ZNK8QMapDataI7QString8QVariantE8findNodeERKS0_@Base 5.2.2-1
_ZNK8QMapNodeI7QString8QVariantE4copyEP8QMapDataIS0_S1_E@Base 5.2.2-1
_ZNSt8functionIFvRK7QStringEEC1ERKS4_@Base 5.2.2-1
_ZNSt8functionIFvRK7QStringEEC2ERKS4_@Base 5.2.2-1
_ZNSt8functionIFvvEEC1ERKS1_@Base 5.2.2-1
_ZNSt8functionIFvvEEC2ERKS1_@Base 5.2.2-1
_ZTI34ComDeepinApiXEventMonitorInterface@Base 5.2.2-1
_ZTIN29QWindowSystemInterfacePrivate16ThemeChangeEventE@Base 5.2.2-1
_ZTIN29QWindowSystemInterfacePrivate17WindowSystemEventE@Base 5.2.2-1
_ZTIN3Dtk3Gui12DSvgRendererE@Base 5.2.2-1
_ZTIN3Dtk3Gui14DForeignWindowE@Base 5.2.2-1
_ZTIN3Dtk3Gui14DPlatformThemeE@Base 5.2.2-1
_ZTIN3Dtk3Gui14DRegionMonitorE@Base 5.2.2-1
_ZTIN3Dtk3Gui15DFileDragClientE@Base 5.2.2-1
_ZTIN3Dtk3Gui15DFileDragServerE@Base 5.2.2-1
_ZTIN3Dtk3Gui15DNativeSettingsE@Base 5.2.2-1
_ZTIN3Dtk3Gui15DPlatformHandleE@Base 5.2.2-1
_ZTIN3Dtk3Gui15DTaskbarControlE@Base 5.2.2-1
_ZTIN3Dtk3Gui16DFileDragPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui18DThumbnailProviderE@Base 5.2.2-1
_ZTIN3Dtk3Gui19DDndSourceInterfaceE@Base 5.2.2-1
_ZTIN3Dtk3Gui19DSvgRendererPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui20DWindowManagerHelperE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DDndClientSignalRelayE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DForeignWindowPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DGuiApplicationHelperE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DPlatformThemePrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DRegionMonitorPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui21DWindowManagerHelper_E@Base 5.2.2-1
_ZTIN3Dtk3Gui22DFileDragClientPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui22DFileDragServerPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui22DNativeSettingsPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui22DTaskbarControlPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui25DThumbnailProviderPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui27DWindowManagerHelperPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui28DGuiApplicationHelperPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui29DFileThumbnailProviderPrivateE@Base 5.2.2-1
_ZTIN3Dtk3Gui9DFileDragE@Base 5.2.2-1
_ZTS34ComDeepinApiXEventMonitorInterface@Base 5.2.2-1
_ZTSN29QWindowSystemInterfacePrivate16ThemeChangeEventE@Base 5.2.2-1
_ZTSN29QWindowSystemInterfacePrivate17WindowSystemEventE@Base 5.2.2-1
_ZTSN3Dtk3Gui12DSvgRendererE@Base 5.2.2-1
_ZTSN3Dtk3Gui14DForeignWindowE@Base 5.2.2-1
_ZTSN3Dtk3Gui14DPlatformThemeE@Base 5.2.2-1
_ZTSN3Dtk3Gui14DRegionMonitorE@Base 5.2.2-1
_ZTSN3Dtk3Gui15DFileDragClientE@Base 5.2.2-1
_ZTSN3Dtk3Gui15DFileDragServerE@Base 5.2.2-1
_ZTSN3Dtk3Gui15DNativeSettingsE@Base 5.2.2-1
_ZTSN3Dtk3Gui15DPlatformHandleE@Base 5.2.2-1
_ZTSN3Dtk3Gui15DTaskbarControlE@Base 5.2.2-1
_ZTSN3Dtk3Gui16DFileDragPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui18DThumbnailProviderE@Base 5.2.2-1
_ZTSN3Dtk3Gui19DDndSourceInterfaceE@Base 5.2.2-1
_ZTSN3Dtk3Gui19DSvgRendererPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui20DWindowManagerHelperE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DDndClientSignalRelayE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DForeignWindowPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DGuiApplicationHelperE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DPlatformThemePrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DRegionMonitorPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui21DWindowManagerHelper_E@Base 5.2.2-1
_ZTSN3Dtk3Gui22DFileDragClientPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui22DFileDragServerPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui22DNativeSettingsPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui22DTaskbarControlPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui25DThumbnailProviderPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui27DWindowManagerHelperPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui28DGuiApplicationHelperPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui29DFileThumbnailProviderPrivateE@Base 5.2.2-1
_ZTSN3Dtk3Gui9DFileDragE@Base 5.2.2-1
_ZTV34ComDeepinApiXEventMonitorInterface@Base 5.2.2-1
_ZTVN29QWindowSystemInterfacePrivate16ThemeChangeEventE@Base 5.2.2-1
_ZTVN3Dtk3Gui12DSvgRendererE@Base 5.2.2-1
_ZTVN3Dtk3Gui14DForeignWindowE@Base 5.2.2-1
_ZTVN3Dtk3Gui14DPlatformThemeE@Base 5.2.2-1
_ZTVN3Dtk3Gui14DRegionMonitorE@Base 5.2.2-1
_ZTVN3Dtk3Gui15DFileDragClientE@Base 5.2.2-1
_ZTVN3Dtk3Gui15DFileDragServerE@Base 5.2.2-1
_ZTVN3Dtk3Gui15DNativeSettingsE@Base 5.2.2-1
_ZTVN3Dtk3Gui15DPlatformHandleE@Base 5.2.2-1
_ZTVN3Dtk3Gui15DTaskbarControlE@Base 5.2.2-1
_ZTVN3Dtk3Gui16DFileDragPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui18DThumbnailProviderE@Base 5.2.2-1
_ZTVN3Dtk3Gui19DDndSourceInterfaceE@Base 5.2.2-1
_ZTVN3Dtk3Gui19DSvgRendererPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui20DWindowManagerHelperE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DDndClientSignalRelayE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DForeignWindowPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DGuiApplicationHelperE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DPlatformThemePrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DRegionMonitorPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui21DWindowManagerHelper_E@Base 5.2.2-1
_ZTVN3Dtk3Gui22DFileDragClientPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui22DFileDragServerPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui22DNativeSettingsPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui22DTaskbarControlPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui25DThumbnailProviderPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui27DWindowManagerHelperPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui28DGuiApplicationHelperPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui29DFileThumbnailProviderPrivateE@Base 5.2.2-1
_ZTVN3Dtk3Gui9DFileDragE@Base 5.2.2-1
_ZThn16_N3Dtk3Gui12DSvgRendererD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui12DSvgRendererD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DForeignWindowD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DForeignWindowD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DPlatformThemeD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DPlatformThemeD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DRegionMonitorD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui14DRegionMonitorD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DFileDragClientD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DFileDragClientD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DFileDragServerD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DFileDragServerD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DNativeSettingsD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DNativeSettingsD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DTaskbarControlD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui15DTaskbarControlD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui18DThumbnailProviderD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui18DThumbnailProviderD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui20DWindowManagerHelperD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui20DWindowManagerHelperD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui21DGuiApplicationHelperD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui21DGuiApplicationHelperD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui21DWindowManagerHelper_D0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui21DWindowManagerHelper_D1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui29DFileThumbnailProviderPrivateD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui29DFileThumbnailProviderPrivateD1Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui9DFileDragD0Ev@Base 5.2.2-1
_ZThn16_N3Dtk3Gui9DFileDragD1Ev@Base 5.2.2-1
_ZThn16_NK7QWindow4sizeEv@Base 5.2.2-1
_ZThn40_N3Dtk3Gui14DForeignWindowD0Ev@Base 5.2.2-1
_ZThn40_N3Dtk3Gui14DForeignWindowD1Ev@Base 5.2.2-1
_ZZN11QMetaTypeIdI12QPainterPathE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdI13QDBusArgumentE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdI5QListI12QPainterPathEE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdI5QListI5QRectEE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdI7QVectorIjEE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdI8QMarginsE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN11QMetaTypeIdIN17QtMetaTypePrivate23QSequentialIterableImplEE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN18QMetaTypeIdQObjectIPN3Dtk3Gui14DPlatformThemeELi8EE14qt_metatype_idEvE11metatype_id@Base 5.2.2-1
_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListI12QPainterPathELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZZN9QtPrivate19ValueTypeIsMetaTypeI5QListI5QRectELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZZN9QtPrivate19ValueTypeIsMetaTypeI7QVectorIjELb1EE17registerConverterEiE1f@Base 5.2.2-1
_ZZZN34ComDeepinApiXEventMonitorInterface12RegisterAreaEiiiiiENKUlvE_clEvE15qstring_literal@Base 5.2.2-1
_ZZZN34ComDeepinApiXEventMonitorInterface13RegisterAreasE5QListI5QRectEiENKUlvE_clEvE15qstring_literal@Base 5.2.2-1
_ZZZN34ComDeepinApiXEventMonitorInterface14UnregisterAreaERK7QStringENKUlvE_clEvE15qstring_literal@Base 5.2.2-1
_ZZZN34ComDeepinApiXEventMonitorInterface18RegisterFullScreenEvENKUlvE_clEvE15qstring_literal@Base 5.2.2-1
_Zls6QDebugRKN3Dtk3Gui15DNativeSettingsE@Base 5.2.2-1
_Zls6QDebugRKN3Dtk3Gui15DPlatformHandle10WMBlurAreaE@Base 5.2.2-1
_ZlsR11QDataStreamRKN3Dtk3Gui8DPaletteE@Base 5.2.2-1
_ZrsR11QDataStreamRN3Dtk3Gui8DPaletteE@Base 5.2.2-1

View File

@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.10)
find_package (Doxygen REQUIRED)
set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt${QT_VERSION_MAJOR}/doc CACHE STRING "QCH install location")
set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt5/doc CACHE STRING "QCH install location")
set (DOXYGEN_GENERATE_HTML "YES" CACHE STRING "Doxygen HTML output")
set (DOXYGEN_GENERATE_XML "YES" CACHE STRING "Doxygen XML output")
@ -12,24 +12,13 @@ set (DOXYGEN_PROJECT_NUMBER ${CMAKE_PROJECT_VERSION} CACHE STRING "") # Should b
set (DOXYGEN_EXTRACT_STATIC YES)
set (DOXYGEN_OUTPUT_LANGUAGE "Chinese" CACHE STRING "Doxygen Output Language")
set (DOXYGEN_IMAGE_PATH ${CMAKE_CURRENT_LIST_DIR}/images/)
set (DOXYGEN_QHG_LOCATION "qhelpgenerator")
set (DOXYGEN_QHP_NAMESPACE "org.deepin.dtk.gui")
set (DOXYGEN_QCH_FILE "dtkgui.qch")
set (DOXYGEN_QHP_VIRTUAL_FOLDER "dtkgui")
set (DOXYGEN_HTML_EXTRA_STYLESHEET "" CACHE STRING "Doxygen custom stylesheet for HTML output")
set (DOXYGEN_TAGFILES "qtcore.tags=qthelp://org.qt-project.qtcore/qtcore/" CACHE STRING "Doxygen tag files")
# find from cmake target property
if("${QT_VERSION_MAJOR}" STREQUAL "5")
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Help)
else()
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ToolsTools)
endif()
get_target_property(_qhelpgenerator_location Qt${QT_VERSION_MAJOR}::qhelpgenerator IMPORTED_LOCATION)
if("${_qhelpgenerator_location}" STREQUAL "")
set(_qhelpgenerator_location "qhelpgenerator")
endif()
set (DOXYGEN_QHG_LOCATION ${_qhelpgenerator_location} CACHE STRING "Doxygen QHG path")
set (DOXYGEN_PREDEFINED
"D_DECL_DEPRECATED_X(x)="
"DCORE_BEGIN_NAMESPACE=namespace Dtk { namespace Core {"
@ -86,4 +75,5 @@ doxygen_add_docs (doxygen
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generate documentation via Doxygen"
)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/html/dtkgui.qch DESTINATION ${QCH_INSTALL_DESTINATION})
install (FILES ${PROJECT_BINARY_DIR}/docs/html/dtkgui.qch DESTINATION ${QCH_INSTALL_DESTINATION})

View File

@ -47,9 +47,4 @@
@fn void DGuiApplicationHelper::sizeModeChanged(DGuiApplicationHelper::SizeMode sizeMode)
@brief 通知控件大小模式发生改变。
@fn static QStringList DGuiApplicationHelper::userManualPaths(const QString &appName)
@brief 获取帮助手册已存在目录
@param appName 目标应用名称
@detail 目录深度具体到appName层级一个典型的目录路径为:/usr/share/deepin-manual/manual-assets/application/appName
*/

View File

@ -223,7 +223,7 @@ cmake --build build
| Light | 0 |
| Dark | 1 |
@enum Dtk::Gui::DDciIcon::IconAttribute
@enum Dtk::Gui::DDciIcon::IconAttibute
@brief DCI图标属性
@details
| 键 | 值 |
@ -282,7 +282,7 @@ cmake --build build
@param[in] theme 图标主题
@param[in] mode 图标模式默认为Normal
@fn bool Dtk::Gui::DDciIcon::isSupportedAttribute(DDciIconMatchResult result, IconAttribute attr)
@fn bool Dtk::Gui::DDciIcon::isSupportedAttribute(DDciIconMatchResult result, IconAttibute attr)
@brief 判断DCI图标是否支持指定属性
@param[in] result DCI图标匹配结果
@param[in] attr 图标属性

View File

@ -171,11 +171,6 @@
@details 为指定的图标模式计算要显示的内容,这可能会导致 currentImage 发生变化。这是个一次性行为,不会影响下一次调用 setMode 后的结果。
@param[in] mode 指定要播放的图标模式,如果此模式支持动画,会触发此模式自身的动画播放(与 setMode 导致的动画不同的是,此动画不涉及两种模式变化时的过渡规则),否则将修改 currentImage 为此模式对应的静态图片资源。
@fn Dtk::Gui::DDciIconPlayer::play(DDciIcon::Mode mode, DDciIconImagePlayer::Flags flags)
@details 为指定的图标模式和播放参数计算要显示的内容。
@param[in] mode 指定要播放的图标模式。
@param[in] flags 播放参数
@fn Dtk::Gui::DDciIconPlayer::stop()
@details 如果当前正在播放动画,则停止当前动画的播放,但不会影响队列中下一个动画的播放。可能会导致 DDciIconPlayer::state 发生变化。
@sa DDciIconPlayer::abort

View File

@ -1,164 +0,0 @@
/*!
@~chinese
@file include/util/ddesktopservices.h
@ingroup DesktopServices
@brief Dtk 提供常见桌面服务的方法工具类
@namespace Dtk::Gui::DDesktopServices ddesktopservices.h
@details 用于提供一些接口,包括在文件管理器中显示目录,显示文件,显示文件属性,移入回收站,播放系统音效等。
@enum Dtk::Gui::DDesktopServices::SystemSoundEffect
@brief 系统音效的枚举
@var Dtk::Gui::DDesktopServices::SSE_Notifications
@brief 显示通知的音效
@var Dtk::Gui::DDesktopServices::SEE_Screenshot
@brief 截屏的音效
@var Dtk::Gui::DDesktopServices::SSE_EmptyTrash
@brief 清空回收站的音效
@var Dtk::Gui::DDesktopServices::SSE_SendFileComplete
@brief 完成发送文件(到桌面)的音效
@var Dtk::Gui::DDesktopServices::SSE_BootUp
@brief 开机的音效
@var Dtk::Gui::DDesktopServices::SSE_Shutdown
@brief 关机的音效
@var Dtk::Gui::DDesktopServices::SSE_Logout
@brief 注销的音效
@var Dtk::Gui::DDesktopServices::SSE_WakeUp
@brief 唤醒的音效
@var Dtk::Gui::DDesktopServices::SSE_VolumeChange
@brief 音量调节的音效
@var Dtk::Gui::DDesktopServices::SSE_LowBattery
@brief 低电量的音效
@var Dtk::Gui::DDesktopServices::SSE_PlugIn
@brief 电源接入的音效
@var Dtk::Gui::DDesktopServices::SSE_PlugOut
@brief 电源移除的音效
@var Dtk::Gui::DDesktopServices::SSE_DeviceAdded
@brief 移动设备接入的音效
@var Dtk::Gui::DDesktopServices::SSE_DeviceRemoved
@brief 移动设备移除的音效
@var Dtk::Gui::DDesktopServices::SSE_Error
@brief 错误提示的音效
@fn Dtk::Gui::DDesktopServices::showFolder(const QString &localFilePath, const QString &startupId = QString())
@details 通过文件管理器显示目录
@param[in] localFilePath 要显示的目录路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFolders(const QList<QString> &localFilePaths, const QString &startupId = QString())
@details 通过文件管理器显示多个目录
@param[in] localFilePaths 要显示的目录路径列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFolder(const QUrl &url, const QString &startupId = QString())
@details 通过文件管理器显示目录
@param[in] url 要显示的目录 QUrl 形式路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFolders(const QList<QUrl> &urls, const QString &startupId = QString())
@details 通过文件管理器显示多个目录
@param[in] urls 要显示的目录路径 url 列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItemProperty(const QString &localFilePath, const QString &startupId = QString())
@details 通过文件管理器显示文件的属性
@param[in] localFilePath 要显示的文件路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItemProperties(const QList<QString> &localFilePaths, const QString &startupId = QString())
@details 通过文件管理器显示多个文件的属性
@param[in] localFilePaths 要显示的文件路径列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItemProperty(const QUrl &url, const QString &startupId = QString())
@details 通过文件管理器显示文件的属性
@param[in] url 要显示的文件 QUrl 形式路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItemProperties(const QList<QUrl> &urls, const QString &startupId = QString())
@details 通过文件管理器显示多个文件的属性
@param[in] urls 要显示的目录路径 url 列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItem(const QString &localFilePath, const QString &startupId = QString())
@details 通过文件管理器在父目录中显示并选中文件(目录)
@param[in] localFilePath 要显示(选中)的文件(目录)路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItems(const QList<QString> &localFilePaths, const QString &startupId = QString())
@details 通过文件管理器父目录中显示并选中多个文件(目录)
@param[in] localFilePaths 要显示(选中)的文件(目录)路径列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItem(const QUrl &url, const QString &startupId = QString())
@details 通过文件管理器在父目录中显示并选中文件(目录)
@param[in] url 要显示选中的文件目录QUrl 形式路径
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::showFileItems(const QList<QUrl> &urls, const QString &startupId = QString())
@details 通过文件管理器父目录中显示并选中多个文件(目录)
@param[in] urls 要显示选中)的文件(目录)路径 url 列表
@param[in] startupId 本次启动的id, 默认为空
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::trash(const QString &localFilePath)
@details 通过文件管理器将文件移入回收站
@param[in] localFilePath 要移入回收站的文件路径
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::trash(const QList<QString> &localFilePaths)
@details 通过文件管理器将多个文件移入回收站
@param[in] localFilePaths 要移入回收站的文件路径列表
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::trash(const QUrl &url)
@details 通过文件管理器将文件移入回收站
@param[in] url 要移入回收站的文件 url 路径
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::trash(const QList<QUrl> &urls)
@details 通过文件管理器将多个文件移入回收站
@param[in] urls 要移入回收站的文件路径 url 列表
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::playSystemSoundEffect(const SystemSoundEffect &effect)
@details 播放系统音效。如果系统音效被禁用或者要播放音效被禁用将播放失败
@param[in] effect 要播放的音效,见枚举 Dtk::Gui::DDesktopServices::SystemSoundEffect
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::playSystemSoundEffect(const QString &name)
@details 根据音效名播放系统音效。如果系统音效被禁用或者要播放音效被禁用将播放失败
@param[in] name 要播放的音效名称,见 Dtk::Gui::DDesktopServices::getNameByEffectType
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::previewSystemSoundEffect(const SystemSoundEffect &effect)
@details 系统音效预览。
@param[in] effect 要播放的音效,见枚举 Dtk::Gui::DDesktopServices::SystemSoundEffect
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::previewSystemSoundEffect(const QString &name)
@details 根据音效名预览系统音效。
@param[in] name 要播放的音效名称,见 Dtk::Gui::DDesktopServices::getNameByEffectType
@return 调用成功返回 true, 否则返回 false
@fn Dtk::Gui::DDesktopServices::getNameByEffectType(const SystemSoundEffect &effect)
@details 根据音效名预览系统音效。
@param[in] effect 要获取名称的音效,见枚举 Dtk::Gui::DDesktopServices::SystemSoundEffect
@return QString effect 对应的音效名称
@fn Dtk::Gui::DDesktopServices::errorMessage()
@details 文件管理器相关调用出错时可以通过此接口获取错误信息
@return 错误信息
*/

View File

@ -1,94 +0,0 @@
/*!
@~chinese
@file include/util/dicontheme.h
@ingroup dci
@brief Dtk 图标主题工具类
@namespace Dtk::Gui::DIconTheme dicontheme.h
@details 用于提供一些接口,包括查找图标(包括 QIcon 和 DCI 图标 ),图标搜索路径等。
@enum Dtk::Gui::DIconTheme::Option
@brief 查找图标时的选项
@var Dtk::Gui::DIconTheme::DontFallbackToQIconFromTheme
@brief 是否**不使用** QIcon::fromTheme 的方式去查找图标,当设置此 flag 时查找图标失败时直接返回空图标对象,否则回退到通过 QIcon::fromTheme 查找图标
@var Dtk::Gui::DIconTheme::IgnoreBuiltinIcons
@brief 是否忽略通过内置图标引擎方式查找图标资源,当设置此 flag 时查找图标会跳过内置图标引擎的方式查找图标资源,否则优先尝试内置图标引擎查找资源。
@class Dtk::Gui::DIconTheme::Cached
@details 图标查找缓存类,提供的查找图标接口,如果找到会加入缓存,下次查找会更快。
@fn Dtk::Gui::DIconTheme::Cached::Cached()
@details 图标缓存构造函数
@fn Dtk::Gui::DIconTheme::Cached::~Cached()
@details 图标缓存析构函数
@fn Dtk::Gui::DIconTheme::Cached::maxCost() const
@details 返回允许的最大缓存数量
@fn Dtk::Gui::DIconTheme::Cached::setMaxCost(int cost)
@details 将最大允许的缓存数量设置为 cost 。如果当前的缓存数量大于 cost ,则某些缓存对象会立即删除。
@fn Dtk::Gui::DIconTheme::Cached::clear()
@details 清理所有缓存
@fn Dtk::Gui::DIconTheme::Cached::findQIcon(const QString &iconName, Options options, const QIcon &fallback)
@details 通过 iconName 查找 QIcon 的接口,找到时会加入缓存
@param[in] iconName 要查找的图标名称
@param[in] options 要查找的选项
@param[in] fallback 图标查找失败时可以返回用户指定的 fallback 对象,默认为空
@sa DIconTheme::findQIcon
@fn Dtk::Gui::DIconTheme::Cached::findDciIconFile(const QString &iconName, const QString &themeName, const QString &fallback)
@details 通过指定图标名 iconName 和主题名 themeName 查找 DCI 图标文件路径的接口,找到时会加入缓存
@param[in] iconName 要查找的图标名称
@param[in] options 指定 DCI 图标主题
@param[in] fallback 图标查找失败时可以返回用户指定的 fallback ,默认为空
@fn Dtk::Gui::DIconTheme::cached()
@details 获取(首次次调用时构造)缓存对象。
@fn Dtk::Gui::DIconTheme::findQIcon(const QString &iconName, Options options)
@details 返回 DIconTheme::createIconEngine 接口创建的图标引擎构造 QIcon当没有设置 DontFallbackToQIconFromTheme 和 createIconEngine 失败时回退到 QIcon::fromTheme
@param[in] iconName 要查找的图标名称
@param[in] options 要查找的选项, 选项默认为空
@sa DIconTheme::Cached::findQIcon
@sa DIconTheme::createIconEngine
@fn Dtk::Gui::DIconTheme::findQIcon(const QString &iconName, const QIcon &fallback, Options options)
@details 重载 DIconTheme::findQIcon, 当查找图标失败时返回调用者中提供的 fallback 图标
@param[in] iconName 要查找的图标名称
@param[in] options 要查找的选项, 选项默认为空
@param[in] fallback 如果 iconName 无法找到, 返回此图标
@sa DIconTheme::Cached::findQIcon
@sa DIconTheme::createIconEngine
@fn Dtk::Gui::DIconTheme::createIconEngine(const QString &iconName, Options options)
@details 通过图标名构造图标引擎, 如果未设置 IgnoreBuiltinIcons 标志则优先尝试 qrc:/icons/deepin/builtin 目录查找图标来构造内置图标引擎,否则构造 XDG 图标引擎。
@param[in] iconName 图标名称
@param[in] options 选项, 选项默认为 DIconTheme::DontFallbackToQIconFromTheme
@return QIconEngine 对象指针,注意图标查找失败时返回 nullptr。
@fn Dtk::Gui::DIconTheme::findDciIconFile(const QString &iconName, const QString &themeName)
@details 通过指定图标名 iconName 和主题名 themeName 查找 DCI 图标文件路径的接口
@param[in] iconName 要查找的图标名称
@param[in] options 指定 DCI 图标主题
@return 返回找到的 DCI 图标文件路径
@sa DDciIcon::fromTheme
@sa DIconTheme::dciThemeSearchPaths()
@fn Dtk::Gui::DIconTheme::dciThemeSearchPaths()
@details 返回 DCI 图标的搜索路径。默认会从这些路径查找 /usr/share/dsg/icons/$theme_name, qrc:/dsg/icons/$theme_name, qrc:/dsg/built-in-icons
@sa DIconTheme::findDciIconFile
@fn Dtk::Gui::DIconTheme::setDciThemeSearchPaths(const QStringList &path)
@details 设置查找 DCI 图标的搜索路径
@sa DIconTheme::dciThemeSearchPaths
@fn Dtk::Gui::DIconTheme::isBuiltinIcon(const QIcon &icon)
@details 返回 QIcon 是否为内置图标,`内置图标` 是 DTK 中规定的一类集成在二进制内部的图标资源,其一般放置于 qrc:/icons/deepin/builtin 的路径下,在使用 findQIcon 或 createIconEngine 时,如找到此路径下对应的图标文件,则会为其使用一个自定义的 QIconEngine 进行渲染。此方法即通过判断 icon 所使用的 QIconEngine 确认其是否为内置图标。
@fn Dtk::Gui::DIconTheme::isXdgIcon(const QIcon &icon)
@details 返回 QIcon 是否为 XDG 图标, XDG 图标一般放置于系统图标主题目录(如:/usr/share/icons。和 isBuiltinIcon 类似,此方法是通过判断 icon 所使用的 QIconEngine 确认其是否为 XDG 图标。
*/

View File

@ -1,149 +0,0 @@
message(STATUS "Current Qt Version: ${QT_VERSION_MAJOR}")
set(LIB_NAME dtk${DTK_VERSION_MAJOR}gui)
# Set install path
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif ()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Set build option
option(DTK_DISABLE_LIBXDG "Disable libxdg" OFF)
option(DTK_DISABLE_LIBRSVG "Disable librsvg" OFF)
option(DTK_DISABLE_EX_IMAGE_FORMAT "Disable libraw and freeimage" OFF)
set(CMAKE_CXX_STANDARD 17)
if("${QT_VERSION_MAJOR}" STREQUAL "5")
set (BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
else()
# dtk6 not build doc
set (BUILD_DOCS OFF CACHE BOOL "Generate doxygen-based documentation")
endif()
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/dtk${PROJECT_VERSION_MAJOR}/DGui")
set(TOOL_INSTALL_DIR "${CMAKE_INSTALL_LIBEXECDIR}/dtk${PROJECT_VERSION_MAJOR}/DGui/bin")
set(LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
set(MKSPECS_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/mkspecs/modules" CACHE STRING "Install dir for qt pri module files")
set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Gui")
set(PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra -fopenmp")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_TESTING ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fno-omit-frame-pointer")
else ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Ofast")
endif ()
set(CONFIGNAME include/global/dtkgui_config.h)
file(WRITE ${CONFIGNAME}
"// This is an auto-generated header, please don't modify it.\n"
)
file(GLOB CONFIGSOURCE include/DtkGui/*)
foreach(FILENAME ${CONFIGSOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${CONFIGNAME} "#define DTKGUI_CLASS_${thefile}\n")
endforeach()
# Generate cmake config file
configure_package_config_file(misc/DtkGuiConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/Dtk${DTK_VERSION_MAJOR}GuiConfig.cmake
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
PATH_VARS TOOL_INSTALL_DIR
)
# Generate cmake version file
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/Dtk${DTK_VERSION_MAJOR}GuiConfigVersion.cmake"
VERSION ${DTK_VERSION}
COMPATIBILITY SameMajorVersion
)
# Install cmake config file and version file to CONFIG_INSTALL_DIR
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/Dtk${DTK_VERSION_MAJOR}GuiConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/Dtk${DTK_VERSION_MAJOR}GuiConfigVersion.cmake
DESTINATION "${CONFIG_INSTALL_DIR}"
)
# Install pkgconfig file
configure_file(misc/dtkgui.pc.in dtk${DTK_VERSION_MAJOR}gui.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtk${DTK_VERSION_MAJOR}gui.pc DESTINATION "${PKGCONFIG_INSTALL_DIR}")
# Install pri module
configure_file(misc/qt_lib_dtkgui.pri.in qt_lib_dtkgui.pri @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_dtkgui.pri DESTINATION "${MKSPECS_INSTALL_DIR}")
set(GUISGNAME DtkGuis)
file(WRITE ${GUISGNAME}
"// This is an auto-generated header, please don't modify it.\n"
"#ifndef DTK_GUI_MODULE_H\n"
"#define DTK_GUI_MODULE_H\n"
)
file(GLOB FILEGRAGTOWRITSOURCE include/filedrag/*)
foreach(FILENAME ${FILEGRAGTOWRITSOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(GLOB KERNELTOWRITESOURCE include/kernel/*)
foreach(FILENAME ${KERNELTOWRITESOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(GLOB UTILTOWRITESOURCE include/util/*)
foreach(FILENAME ${UTILTOWRITESOURCE})
get_filename_component(thefile ${FILENAME} NAME)
file(APPEND ${GUISGNAME} "#include \"${thefile}\"\n")
endforeach()
file(APPEND ${GUISGNAME} "#endif")
install(FILES DtkGuis DESTINATION "${INCLUDE_INSTALL_DIR}")
# Find common dependencies
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui DBus Network)
find_package(PkgConfig REQUIRED)
find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED Core)
find_package(DtkBuildHelper REQUIRED)
pkg_check_modules(librsvg REQUIRED IMPORTED_TARGET librsvg-2.0)
if(NOT DTK_DISABLE_LIBXDG)
# Only use libxdg under Qt5
if (${QT_VERSION_MAJOR} STREQUAL "5")
find_package(Qt5XdgIconLoader REQUIRED)
if (NOT Qt5XdgIconLoader_FOUND)
message(WARNING " XdgIconLoader Not Found, DISABLE LIBXDG !")
set (DTK_DISABLE_LIBXDG ON)
endif()
else()
set (DTK_DISABLE_LIBXDG ON)
endif()
endif()
# Check optional image handler dependencies.
find_package(FreeImage)
pkg_check_modules(libraw IMPORTED_TARGET libraw)
if(FreeImage_FOUND AND libraw_FOUND)
set(EX_IMAGE_FORMAT_LIBS_FOUND ON)
endif()
set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(src ${OUTPUT_DIR}/src)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tests ${OUTPUT_DIR}/tests)
endif()
add_subdirectory(tools ${OUTPUT_DIR}/tools)
add_subdirectory(examples ${OUTPUT_DIR}/examples)
if (BUILD_DOCS)
add_subdirectory(docs ${OUTPUT_DIR}/docs)
endif ()

View File

@ -1,4 +1,4 @@
add_subdirectory(dnd-example)
#add_subdirectory(test-taskbar) # Don't build
add_subdirectory(test-taskbar)
#add_subdirectory(frameless-window) # Don't build
add_subdirectory(animation-dci)

Binary file not shown.

View File

@ -1,10 +1,9 @@
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Dtk${DTK_VERSION_MAJOR}Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(DtkCore REQUIRED)
find_package(Qt5 REQUIRED COMPONENTS Widgets)
set(BIN_NAME animation-dci)
set(TARGET ${BIN_NAME}${DTK_VERSION_MAJOR})
set(TARGET animation-dci)
add_executable(${TARGET}
main.cpp
@ -13,7 +12,7 @@ add_executable(${TARGET}
target_link_libraries(
${TARGET} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
dtk${DTK_VERSION_MAJOR}gui
Qt5::Widgets
dtkgui
${DtkCore_LIBRARIES}
)
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${BIN_NAME})

View File

@ -16,12 +16,9 @@
#include <QMenuBar>
#include <QPushButton>
#include <QHBoxLayout>
#include <QFileDialog>
#include <DDciIcon>
#include <DDciIconPlayer>
#include <QDropEvent>
#include <QMimeData>
DGUI_USE_NAMESPACE
@ -46,10 +43,9 @@ static QString iconModeToString(DDciIcon::Mode mode)
class IconWidget : public QMainWindow
{
public:
IconWidget(const QString &iconName)
IconWidget(const QString &iconFile)
{
setCentralWidget(label = new QLabel(this));
label->setAcceptDrops(true);
centralWidget()->setAttribute(Qt::WA_MouseTracking);
centralWidget()->installEventFilter(this);
statusBar()->addWidget(message = new QLabel());
@ -70,24 +66,15 @@ public:
connect(disabled, &QPushButton::clicked, this, [this] {
player.setMode(DDciIcon::Disabled);
});
auto open = new QPushButton("...");
connect(open, &QPushButton::clicked, this, [this] {
QString dciFile = QFileDialog::getOpenFileName(this, "select a dci icon file", "", "*.dci");
player.setIcon(DDciIcon(dciFile));
player.setMode(DDciIcon::Normal);
});
QWidget *menuWidget = new QWidget(this);
QHBoxLayout *layout = new QHBoxLayout(menuWidget);
layout->addWidget(normal);
layout->addWidget(hover);
layout->addWidget(pressed);
layout->addWidget(disabled);
layout->addWidget(open);
setMenuWidget(menuWidget);
icon = DDciIcon::fromTheme(iconName);
icon = DDciIcon(iconFile);
connect(&player, &DDciIconPlayer::updated, this, [this] {
auto image = player.currentImage();
@ -125,20 +112,6 @@ private:
player.setMode(DDciIcon::Pressed);
} else if (event->type() == QEvent::MouseButtonRelease) {
player.setMode(label->hasMouseTracking() ? DDciIcon::Hover : DDciIcon::Normal);
} else if (event->type() == QEvent::DragEnter) {
event->accept();
} else if (event->type() == QEvent::Drop) {
auto de = static_cast<QDropEvent *>(event);
if (de->mimeData()->hasFormat("text/uri-list")) {
QString uris = de->mimeData()->data("text/uri-list");
QUrl url(uris.split("\r\n").value(0));
DDciIcon icon(url.path());
if (!icon.isNull()) {
player.setIcon(icon);
player.setMode(DDciIcon::Normal);
}
}
} else {
return false;
}
@ -157,7 +130,7 @@ int main(int argc, char *argv[])
{
QApplication app(argc, argv);
IconWidget *window = new IconWidget(QStringLiteral("test_heart"));
IconWidget *window = new IconWidget(QStringLiteral(":/dsg/bulit-in-icons/test_heart.dci"));
window->setMinimumSize(300, 300);
window->show();

View File

@ -1,6 +1,5 @@
<RCC>
<qresource prefix="/">
<file alias="/dsg/built-in-icons/test_heart.dci">dci_heart.dci</file>
<file alias="/dsg/built-in-icons/test_static_3depict.dci">3depict.dci</file>
<file alias="/dsg/bulit-in-icons/test_heart.dci">dci_heart.dci</file>
</qresource>
</RCC>

View File

@ -1,32 +1,31 @@
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt5 REQUIRED COMPONENTS Widgets)
set(BIN1 dnd-test-client)
set(BIN2 dnd-test-server)
set(TARGET1 ${BIN1}${DTK_VERSION_MAJOR})
set(TARGET2 ${BIN2}${DTK_VERSION_MAJOR})
add_executable(${TARGET1}
add_executable(${BIN1}
dnd-test-client.cpp
)
target_link_libraries(${TARGET1} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::DBus
target_link_libraries(${BIN1} PRIVATE
Qt5::Widgets
Qt5::DBus
${LIB_NAME}
Dtk::Core
)
add_executable(${TARGET2}
install(TARGETS ${BIN1} DESTINATION "${TOOL_INSTALL_DIR}")
set(BIN2 dnd-test-server)
add_executable(${BIN2}
dnd-test-server.cpp
)
target_link_libraries(${TARGET2} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::DBus
target_link_libraries(${BIN2} PRIVATE
Qt5::Widgets
Qt5::DBus
${LIB_NAME}
Dtk::Core
)
set_target_properties(${TARGET1} PROPERTIES OUTPUT_NAME ${BIN1})
set_target_properties(${TARGET2} PROPERTIES OUTPUT_NAME ${BIN2})
install(TARGETS ${TARGET1} DESTINATION "${TOOL_INSTALL_DIR}")
install(TARGETS ${TARGET2} DESTINATION "${TOOL_INSTALL_DIR}")
install(TARGETS ${BIN2} DESTINATION "${TOOL_INSTALL_DIR}")

View File

@ -0,0 +1,2 @@
TEMPLATE = subdirs
SUBDIRS = dnd-test-server.pro dnd-test-client.pro

View File

@ -0,0 +1,24 @@
TEMPLATE = app
QT += dtkcore widgets
SOURCES += \
$$PWD/dnd-test-client.cpp
DESTDIR = $$_PRO_FILE_PWD_/../../bin
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../src/release -ldtkgui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../src/debug -ldtkgui
else:unix: LIBS += -L$$OUT_PWD/../../src -ldtkgui
INCLUDEPATH += $$PWD/../../src \
$$PWD/../../src/filedrag
CONFIG(debug, debug|release) {
unix:QMAKE_RPATHDIR += $$OUT_PWD/../../src
}
DTK_MODULE_NAME=dtkgui
load(dtk_build_config)
target.path = $$TOOL_INSTALL_DIR
INSTALLS += target

View File

@ -14,7 +14,6 @@
#include <QVBoxLayout>
#include <QProgressBar>
#include <QDebug>
#include <QRandomGenerator>
DGUI_USE_NAMESPACE
@ -98,7 +97,7 @@ int main(int argc, char **argv)
});
QObject::connect(&t, &QTimer::timeout, [&t, &pg] {
if (QRandomGenerator::global()->generate() & 1) {
if (qrand() & 1) {
s->setProgress(++p);
pg.setValue(p);
if(p == 100) {

View File

@ -0,0 +1,24 @@
TEMPLATE = app
QT += dtkcore widgets
SOURCES += \
$$PWD/dnd-test-server.cpp
DESTDIR = $$_PRO_FILE_PWD_/../../bin
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../src/release -ldtkgui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../src/debug -ldtkgui
else:unix: LIBS += -L$$OUT_PWD/../../src -ldtkgui
INCLUDEPATH += $$PWD/../../src \
$$PWD/../../src/filedrag
CONFIG(debug, debug|release) {
unix:QMAKE_RPATHDIR += $$OUT_PWD/../../src
}
DTK_MODULE_NAME=dtkgui
load(dtk_build_config)
target.path = $$TOOL_INSTALL_DIR
INSTALLS += target

3
examples/examples.pro Normal file
View File

@ -0,0 +1,3 @@
TEMPLATE = subdirs
SUBDIRS += dnd-example
#SUBDIRS += test-taskbar

View File

@ -1,4 +1,4 @@
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS X11Extras)
find_package(Qt5 REQUIRED COMPONENTS X11Extras)
pkg_check_modules(XCB IMPORTED_TARGET xcb)
set(BIN_NAME frameless-window)
@ -8,8 +8,8 @@ add_executable(${BIN_NAME}
)
target_link_libraries(${BIN_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::GuiPrivate
Qt${QT_VERSION_MAJOR}::X11Extras
Qt5::Gui
Qt5::GuiPrivate
Qt5::X11Extras
PkgConfig::XCB
)

View File

@ -1,17 +1,16 @@
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt5 REQUIRED COMPONENTS Widgets)
set(BIN taskbar)
set(TARGET_NAME ${BIN}${DTK_VERSION_MAJOR})
add_executable(${TARGET_NAME}
add_executable(${BIN}
testtaskbarwindow.h
testtaskbarwindow.cpp
main.cpp
)
target_link_libraries(${TARGET_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Gui
target_link_libraries(${BIN} PRIVATE
Qt5::Widgets
Qt5::Gui
${LIB_NAME}
Dtk::Core
)
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${BIN})

View File

@ -6,6 +6,7 @@
#include <DFontManager>
#include <QApplication>
#include <QDesktopWidget>
#include "testtaskbarwindow.h"

View File

@ -0,0 +1,34 @@
QT += dtkcore gui widgets
TARGET = taskbar
TEMPLATE = app
CONFIG += c++11
SOURCES += \
main.cpp \
testtaskbarwindow.cpp
HEADERS += \
testtaskbarwindow.h
DESTDIR = $$_PRO_FILE_PWD_/../../bin
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../src/release -ldtkgui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../src/debug -ldtkgui
else:unix: LIBS += -L$$OUT_PWD/../../src -ldtkgui
INCLUDEPATH += \
$$PWD/../../src \
$$PWD/../../src/kernel \
$$PWD/../../src/util
CONFIG(debug, debug|release) {
unix:QMAKE_RPATHDIR += $$OUT_PWD/../../src
}
DTK_MODULE_NAME=dtkgui
load(dtk_build_config)
target.path = $$TOOL_INSTALL_DIR
INSTALLS += target

View File

@ -0,0 +1,3 @@
TEMPLATE = subdirs
SUBDIRS = taskbar.pro

View File

@ -1 +0,0 @@
#include "ddesktopservices.h"

View File

@ -50,7 +50,6 @@ public:
enum Attribute {
UseInactiveColorGroup = 1 << 0,
ColorCompositing = 1 << 1,
DontSaveApplicationTheme = 1 << 2,
/* readonly flag */
ReadOnlyLimit = 1 << 22,
@ -59,18 +58,13 @@ public:
IsXWindowPlatform = ReadOnlyLimit << 2,
IsTableEnvironment = ReadOnlyLimit << 3,
IsDeepinEnvironment = ReadOnlyLimit << 4,
IsSpecialEffectsEnvironment = ReadOnlyLimit << 5,
IsWaylandPlatform = ReadOnlyLimit << 6,
IsTreelandPlatform Q_DECL_ENUMERATOR_DEPRECATED_X("Use DGuiApplicationHelper::IsWaylandPlatform instead") = IsWaylandPlatform,
HasAnimations = ReadOnlyLimit << 7,
IsSpecialEffectsEnvironment = ReadOnlyLimit << 5
};
Q_ENUM(Attribute)
Q_DECLARE_FLAGS(Attributes, Attribute)
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
typedef DGuiApplicationHelper *(*HelperCreator)();
D_DECL_DEPRECATED static void registerInstanceCreator(HelperCreator creator);
#endif
static DGuiApplicationHelper *instance();
~DGuiApplicationHelper();
@ -84,10 +78,8 @@ public:
static void generatePaletteColor(DPalette &base, DPalette::ColorType role, ColorType type);
static void generatePalette(DPalette &base, ColorType type = UnknownType);
static DPalette fetchPalette(const DPlatformTheme *theme);
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
Q_DECL_DEPRECATED_X("Use UseInactiveColorGroup enum with setAttribute.") static void setUseInactiveColorGroup(bool on);
Q_DECL_DEPRECATED_X("Use ColorCompositing enum with setAttribute.") static void setColorCompositingEnabled(bool on);
#endif
static bool isXWindowPlatform();
static bool isTabletEnvironment();
static bool isSpecialEffectsEnvironment();
@ -96,16 +88,11 @@ public:
DPlatformTheme *systemTheme() const;
DPlatformTheme *applicationTheme() const;
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED DPlatformTheme *windowTheme(QWindow *window) const;
#endif
DPalette applicationPalette() const;
DPalette applicationPalette(ColorType paletteType) const;
void setApplicationPalette(const DPalette &palette);
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED DPalette windowPalette(QWindow *window) const;
#endif
const DFontManager *fontManager() const;
@ -116,22 +103,14 @@ public:
static bool setSingleInstance(const QString &key, SingleScope singleScope = UserScope);
static void setSingleInstanceInterval(int interval = 3000);
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED static void setSingelInstanceInterval(int interval = 3000);
#endif
// 获取帮助手册目录
static QStringList userManualPaths(const QString &appName);
bool hasUserManual() const;
static bool loadTranslator(const QString &fileName, const QString &appName, const QList<QLocale> &localeFallback = QList<QLocale>() << QLocale::system());
static bool loadTranslator(const QString &fileName, const QList<QString> &translateDirs, const QList<QLocale> &localeFallback);
static bool loadTranslator(const QList<QLocale> &localeFallback = QList<QLocale>() << QLocale::system());
public Q_SLOTS:
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED_X("Plase use setPaletteType") void setThemeType(ColorType themeType);
#endif
void setPaletteType(ColorType paletteType);
void handleHelpAction();
static void openUrl(const QString &url);

View File

@ -56,9 +56,7 @@ public:
inline const QBrush &brush(ColorType ct) const { return brush(Current, ct); }
inline const QBrush &itemBackground() const { return brush(ItemBackground); }
inline const QBrush &textTitle() const { return brush(TextTitle); }
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED inline const QBrush &textTiele() const { return textTitle();}
#endif
inline const QBrush &textTips() const { return brush(TextTips); }
inline const QBrush &textWarning() const { return brush(TextWarning); }
inline const QBrush &textLively() const { return brush(TextLively); }

View File

@ -19,7 +19,7 @@ class QWindow;
QT_END_NAMESPACE
DGUI_BEGIN_NAMESPACE
// TODO: class DPlatformHandle will be removed in the future
class DPlatformHandle : public QObject
{
Q_OBJECT
@ -30,8 +30,6 @@ class DPlatformHandle : public QObject
Q_PROPERTY(int shadowRadius READ shadowRadius WRITE setShadowRadius NOTIFY shadowRadiusChanged)
Q_PROPERTY(QPoint shadowOffset READ shadowOffset WRITE setShadowOffset NOTIFY shadowOffsetChanged)
Q_PROPERTY(QColor shadowColor READ shadowColor WRITE setShadowColor NOTIFY shadowColorChanged)
Q_PROPERTY(EffectScene windowEffect READ windowEffect WRITE setWindowEffect NOTIFY windowEffectChanged)
Q_PROPERTY(EffectType windowStartUpEffect READ windowStartUpEffect WRITE setWindowStartUpEffect NOTIFY windowStartUpEffectChanged)
Q_PROPERTY(QPainterPath clipPath READ clipPath WRITE setClipPath NOTIFY clipPathChanged)
Q_PROPERTY(QRegion frameMask READ frameMask WRITE setFrameMask NOTIFY frameMaskChanged)
Q_PROPERTY(QMargins frameMargins READ frameMargins NOTIFY frameMarginsChanged)
@ -44,7 +42,6 @@ class DPlatformHandle : public QObject
public:
explicit DPlatformHandle(QWindow *window, QObject *parent = 0);
~DPlatformHandle();
static QString pluginVersion();
static bool isDXcbPlatform();
@ -75,31 +72,6 @@ public:
PreserveAspectFit = 0x00000001
};
enum EffectScene {
EffectNoRadius = 0x01, // 取消窗口圆角
EffectNoShadow = 0x02, // 取消窗口阴影
EffectNoBorder = 0x04, // 取消窗口边框
EffectNoStart = 0x10, // 取消启动场景动效
EffectNoClose = 0x20, // 取消关闭场景动效
EffectNoMaximize = 0x40, // 取消最大化场景动效
EffectNoMinimize = 0x80 // 取消最小化场景动效
};
enum EffectType {
EffectNormal = 0x01, // 标准缩放动效
EffectCursor = 0x02, // 鼠标位置展开动效
EffectTop = 0x04, // 从上往下展开
EffectBottom = 0x08, // 从下往上展开
EffectOut = 0x10 // 由外向内
};
Q_ENUM(EffectScene)
Q_ENUM(EffectType)
Q_DECLARE_FLAGS(EffectScenes, EffectScene)
Q_DECLARE_FLAGS(EffectTypes, EffectType)
Q_ENUM(EffectScenes)
Q_ENUM(EffectTypes)
static bool setWindowBlurAreaByWM(QWindow *window, const QVector<WMBlurArea> &area);
static bool setWindowBlurAreaByWM(QWindow *window, const QList<QPainterPath> &paths);
static bool setWindowWallpaperParaByWM(QWindow *window, const QRect &area, WallpaperScaleMode sMode, WallpaperFillMode fMode);
@ -120,9 +92,6 @@ public:
QPoint shadowOffset() const;
QColor shadowColor() const;
EffectScene windowEffect();
EffectType windowStartUpEffect();
QPainterPath clipPath() const;
QRegion frameMask() const;
QMargins frameMargins() const;
@ -138,12 +107,10 @@ public:
public Q_SLOTS:
void setWindowRadius(int windowRadius);
void setBorderWidth(int borderWidth);
void setBorderColor(const QColor &borderColor);
void setWindowEffect(EffectScenes effectScene);
void setWindowStartUpEffect(EffectTypes effectType);
void setShadowRadius(int shadowRadius);
void setShadowOffset(const QPoint &shadowOffset);
void setShadowColor(const QColor &shadowColor);
@ -165,8 +132,6 @@ Q_SIGNALS:
void shadowRadiusChanged();
void shadowOffsetChanged();
void shadowColorChanged();
void windowEffectChanged();
void windowStartUpEffectChanged();
void clipPathChanged();
void frameMaskChanged();
void translucentBackgroundChanged();
@ -203,12 +168,8 @@ DGUI_USE_NAMESPACE
QDebug operator<<(QDebug deg, const DPlatformHandle::WMBlurArea &area);
QT_END_NAMESPACE
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
Q_DECLARE_METATYPE(QPainterPath)
Q_DECLARE_METATYPE(QMargins)
#endif
Q_DECLARE_METATYPE(QRegion)
Q_DECLARE_OPERATORS_FOR_FLAGS(DPlatformHandle::EffectScenes)
Q_DECLARE_OPERATORS_FOR_FLAGS(DPlatformHandle::EffectTypes)
Q_DECLARE_METATYPE(QMargins)
#endif // DPLATFORMHANDLE_H

View File

@ -13,7 +13,6 @@
DGUI_BEGIN_NAMESPACE
class DPlatformThemePrivate;
// TODO: class DPlatformTheme will be removed in the future
class DPlatformTheme : public DNativeSettings
{
Q_OBJECT
@ -36,8 +35,6 @@ class DPlatformTheme : public DNativeSettings
Q_PROPERTY(QByteArray gtkFontName READ gtkFontName WRITE setGtkFontName NOTIFY gtkFontNameChanged)
Q_PROPERTY(QColor activeColor READ activeColor WRITE setActiveColor NOTIFY activeColorChanged)
Q_PROPERTY(QColor darkActiveColor READ darkActiveColor WRITE setDarkActiveColor NOTIFY darkActiveColorChanged)
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
// QPalette
Q_PROPERTY(QColor window READ window WRITE setWindow NOTIFY windowChanged)
Q_PROPERTY(QColor windowText READ windowText WRITE setWindowText NOTIFY windowTextChanged)
@ -67,7 +64,6 @@ class DPlatformTheme : public DNativeSettings
Q_PROPERTY(QColor lightLively READ lightLively WRITE setLightLively NOTIFY lightLivelyChanged)
Q_PROPERTY(QColor darkLively READ darkLively WRITE setDarkLively NOTIFY darkLivelyChanged)
Q_PROPERTY(QColor frameBorder READ frameBorder WRITE setFrameBorder NOTIFY frameBorderChanged)
#endif
// DSizeMode
Q_PROPERTY(int sizeMode READ sizeMode NOTIFY sizeModeChanged)
Q_PROPERTY(int scrollBarPolicy READ scrollBarPolicy NOTIFY scrollBarPolicyChanged)
@ -103,11 +99,9 @@ public:
QByteArray gtkFontName() const;
QColor activeColor() const;
QColor darkActiveColor() const;
bool isValidPalette() const;
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QColor window() const;
QColor windowText() const;
QColor base() const;
@ -135,7 +129,8 @@ public:
QColor lightLively() const;
QColor darkLively() const;
QColor frameBorder() const;
#endif
int dotsPerInch(const QString &screenName = QString()) const;
int sizeMode() const;
int scrollBarPolicy() const;
@ -155,8 +150,6 @@ public Q_SLOTS:
void setFontPointSize(qreal fontPointSize);
void setGtkFontName(const QByteArray &fontName);
void setActiveColor(const QColor activeColor);
void setDarkActiveColor(const QColor &activeColor);
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void setWindow(const QColor &window);
void setWindowText(const QColor &windowText);
void setBase(const QColor &base);
@ -184,9 +177,7 @@ public Q_SLOTS:
void setLightLively(const QColor &lightLively);
void setDarkLively(const QColor &darkLively);
void setFrameBorder(const QColor &frameBorder);
#endif
int dotsPerInch(const QString &screenName = QString()) const;
void setDotsPerInch(const QString &screenName, int dpi);
void setWindowRadius(int windowRadius);
@ -205,9 +196,7 @@ Q_SIGNALS:
void fontPointSizeChanged(qreal fontPointSize);
void gtkFontNameChanged(QByteArray fontName);
void activeColorChanged(QColor activeColor);
void darkActiveColorChanged(QColor activeColor);
void paletteChanged(DPalette palette);
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void windowChanged(QColor window);
void windowTextChanged(QColor windowText);
void baseChanged(QColor base);
@ -235,7 +224,6 @@ Q_SIGNALS:
void lightLivelyChanged(QColor lightLively);
void darkLivelyChanged(QColor darkLively);
void frameBorderChanged(QColor frameBorder);
#endif
void dotsPerInchChanged(const QString &screen, int dpi);
void windowRadiusChanged(int r);
void sizeModeChanged(int sizeMode);
@ -243,6 +231,9 @@ Q_SIGNALS:
private:
friend class DPlatformThemePrivate;
private:
D_PRIVATE_SLOT(void _q_onThemePropertyChanged(const QByteArray &name, const QVariant &value))
};
DGUI_END_NAMESPACE

View File

@ -8,7 +8,6 @@
#include <dtkgui_global.h>
#include <QPixmap>
#include <QSharedPointer>
DCORE_BEGIN_NAMESPACE
class DDciFile;
@ -77,11 +76,9 @@ public:
Light = 0,
Dark = 1
};
// IconAttibute is deprecated, please use IconAttribute instead.
enum IconAttibute {
HasPalette = 0x001
};
using IconAttribute = DDciIcon::IconAttibute;
enum IconMatchedFlag {
None = 0,
DontFallbackMode = 0x01,
@ -108,8 +105,8 @@ public:
int actualSize(int size, Theme theme, Mode mode = Normal) const;
QList<int> availableSizes(Theme theme, Mode mode = Normal) const;
bool isSupportedAttribute(DDciIconMatchResult result, IconAttribute attr) const;
static bool isSupportedAttribute(const DDciIconImage &image, IconAttribute attr);
bool isSupportedAttribute(DDciIconMatchResult result, IconAttibute attr) const;
static bool isSupportedAttribute(const DDciIconImage &image, IconAttibute attr);
QPixmap pixmap(qreal devicePixelRatio, int iconSize, Theme theme, Mode mode = Normal,
const DDciIconPalette &palette = DDciIconPalette()) const;

View File

@ -106,7 +106,6 @@ public:
QImage currentImage() const;
void play(DDciIcon::Mode mode);
void play(DDciIcon::Mode mode, DDciIconImagePlayer::Flags flags);
void stop();
void abort();

View File

@ -1,70 +0,0 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#pragma once
#include <dtkgui_global.h>
#include <QMetaType>
#include <QUrl>
DGUI_BEGIN_NAMESPACE
class DDesktopServices
{
public:
enum SystemSoundEffect {
SSE_Notifications,
SEE_Screenshot,
SSE_EmptyTrash,
SSE_SendFileComplete,
SSE_BootUp,
SSE_Shutdown,
SSE_Logout,
SSE_WakeUp,
SSE_VolumeChange,
SSE_LowBattery,
SSE_PlugIn,
SSE_PlugOut,
SSE_DeviceAdded,
SSE_DeviceRemoved,
SSE_Error,
};
static bool showFolder(const QString &localFilePath, const QString &startupId = QString());
static bool showFolders(const QList<QString> &localFilePaths, const QString &startupId = QString());
static bool showFolder(const QUrl &url, const QString &startupId = QString());
static bool showFolders(const QList<QUrl> &urls, const QString &startupId = QString());
static bool showFileItemProperty(const QString &localFilePath, const QString &startupId = QString());
static bool showFileItemProperties(const QList<QString> &localFilePaths, const QString &startupId = QString());
static bool showFileItemProperty(const QUrl &url, const QString &startupId = QString());
static bool showFileItemProperties(const QList<QUrl> &urls, const QString &startupId = QString());
static bool showFileItem(const QString &localFilePath, const QString &startupId = QString());
static bool showFileItems(const QList<QString> &localFilePaths, const QString &startupId = QString());
static bool showFileItem(const QUrl &url, const QString &startupId = QString());
static bool showFileItems(const QList<QUrl> &urls, const QString &startupId = QString());
static bool trash(const QString &localFilePath);
static bool trash(const QList<QString> &localFilePaths);
static bool trash(const QUrl &url);
static bool trash(const QList<QUrl> &urls);
static bool playSystemSoundEffect(const SystemSoundEffect &effect);
static bool playSystemSoundEffect(const QString &name);
static bool previewSystemSoundEffect(const SystemSoundEffect &effect);
static bool previewSystemSoundEffect(const QString &name);
static QString getNameByEffectType(const SystemSoundEffect &effect);
static QString errorMessage();
};
DGUI_END_NAMESPACE
#ifdef Q_OS_LINUX
Q_DECLARE_METATYPE(DTK_GUI_NAMESPACE::DDesktopServices::SystemSoundEffect)
#endif

View File

@ -9,7 +9,6 @@
#include <dtkgui_global.h>
#include <QFont>
#include <QObject>
DGUI_BEGIN_NAMESPACE
@ -44,7 +43,6 @@ public:
T8,
T9,
T10,
T11,
NSizeTypes
};
Q_ENUM(SizeType)
@ -111,10 +109,6 @@ public:
{
return get(T10);
}
inline const QFont t11() const
{
return get(T11);
}
Q_SIGNALS:
void fontChanged();

View File

@ -15,8 +15,6 @@ public:
explicit DIcon(const QIcon &other);
virtual ~DIcon();
QPixmap pixmap(const QSize &size, qreal devicePixelRatio, Mode mode = Normal, State state = Off);
static QPixmap loadNxPixmap(const QString &fileName);
};
DGUI_END_NAMESPACE

View File

@ -16,9 +16,7 @@ namespace DIconTheme
{
enum Option {
DontFallbackToQIconFromTheme = 1 << 0,
IgnoreBuiltinIcons = 1 << 1,
IgnoreDciIcons = 1 << 2,
IgnoreIconCache = 1 << 3
IgnoreBuiltinIcons = 1 << 1
};
Q_DECLARE_FLAGS(Options, Option)
@ -39,8 +37,6 @@ namespace DIconTheme
Cached *cached();
QIcon findQIcon(const QString &iconName, Options options = Options());
QIcon findQIcon(const QString &iconName, const QIcon &fallback, Options options = Options());
QIconEngine *createIconEngine(const QString &iconName, Options options = DontFallbackToQIconFromTheme);
QString findDciIconFile(const QString &iconName, const QString &themeName);

View File

@ -1,18 +1,18 @@
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(Dtk@DTK_VERSION_MAJOR@Core)
find_dependency(Qt@QT_VERSION_MAJOR@Network)
find_dependency(Qt@QT_VERSION_MAJOR@Gui)
find_dependency(DtkCore)
find_dependency(Qt5Network)
find_dependency(Qt5Gui)
include(${CMAKE_CURRENT_LIST_DIR}/Dtk@DTK_VERSION_MAJOR@GuiTargets.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/DtkGuiTargets.cmake)
set(DtkGui_LIBRARIES Dtk@DTK_VERSION_MAJOR@::Gui)
get_target_property(DtkGui_INCLUDE_DIRS Dtk@DTK_VERSION_MAJOR@::Gui INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(DtkGui_LIBRARY_DIRS Dtk@DTK_VERSION_MAJOR@::Gui INTERFACE_LINK_DIRECTORIES)
set(DtkGui_LIBRARIES Dtk::Gui)
get_target_property(DtkGui_INCLUDE_DIRS Dtk::Gui INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(DtkGui_LIBRARY_DIRS Dtk::Gui INTERFACE_LINK_DIRECTORIES)
set(DtkGui_TOOL_DIRS "@PACKAGE_TOOL_INSTALL_DIR@")
check_required_components(Dtk@DTK_VERSION_MAJOR@Gui)
check_required_components(DtkGui)
# Keep deprecated variables for compatibility
set(DTKGUI_INCLUDE_DIR ${DtkGui_INCLUDE_DIRS})

View File

@ -2,11 +2,10 @@ prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
libdir=${prefix}/@LIBRARY_INSTALL_DIR@
includedir=${prefix}/@INCLUDE_INSTALL_DIR@
tooldir=${prefix}/@PACKAGE_TOOL_INSTALL_DIR@
Name: dtk@DTK_VERSION_MAJOR@gui
Name: dtkgui
Description: Deepin Tool Kit dtkgui header files
Version: @PROJECT_VERSION@
Libs: -L${libdir} -ldtk@DTK_VERSION_MAJOR@gui
Libs: -L${libdir} -ldtkgui
Cflags: -I${includedir}
Requires: dtk@DTK_VERSION_MAJOR@core
Requires: dtkcore

View File

@ -1,27 +0,0 @@
{
"magic": "dsg.config.meta",
"version": "1.0",
"contents": {
"titlebarHeight": {
"value": -1,
"serial": 0,
"name": "The height of DTitleBar",
"name[zh_CN]": "标题栏高度",
"description": "Configure the height of the DTitleBar",
"description[zh_CN]": "配置标题栏的高度",
"permissions": "readwrite",
"visibility": "public"
},
"themeType": {
"value": 0,
"serial": 0,
"flags": [],
"name": "The application theme type",
"name[zh_CN]": "应用主题的颜色",
"description": "The application theme type, which can be set to follow the system theme (0), light theme (1), dark theme (2)",
"description[zh_CN]": "应用主题的颜色,可以设置为跟随系统(0)、浅色(1)、 深色(2),默认为跟随系统",
"permissions": "readwrite",
"visibility": "public"
}
}
}

View File

@ -3,7 +3,7 @@ QT.dtkgui.MAJOR_VERSION = @PROJECT_VERSION_MAJOR@
QT.dtkgui.MINOR_VERSION = @PROJECT_VERSION_MINOR@
QT.dtkgui.PATCH_VERSION = @PROJECT_VERSION_PATCH@
QT.dtkgui.name = dtkgui
QT.dtkgui.module = dtk@DTK_VERSION_MAJOR@gui
QT.dtkgui.module = dtkgui
QT.dtkgui.tools = @CMAKE_INSTALL_PREFIX@/@TOOL_INSTALL_DIR@
QT.dtkgui.libs = @CMAKE_INSTALL_PREFIX@/@LIBRARY_INSTALL_DIR@
QT.dtkgui.includes = @CMAKE_INSTALL_PREFIX@/@INCLUDE_INSTALL_DIR@

View File

@ -1,5 +1,5 @@
Name: dtkgui
Version: 5.7.25
Version: 5.5.17
Release: 1%{?dist}
Summary: Deepin dtkgui
License: LGPLv3+

View File

@ -1,14 +1,3 @@
if("${QT_VERSION_MAJOR}" STREQUAL "6")
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets WaylandClient)
if (${Qt6Core_VERSION} VERSION_GREATER_EQUAL "6.10.0")
set(QT_NO_PRIVATE_MODULE_WARNING ON)
find_package(Qt6 REQUIRED COMPONENTS CorePrivate GuiPrivate WaylandClientPrivate)
endif()
else()
find_package(Qt5 REQUIRED COMPONENTS WaylandClient XkbCommonSupport)
endif()
add_library(${LIB_NAME} SHARED)
include(dbus/dbus.cmake)
@ -16,7 +5,6 @@ include(filedrag/dfiledrag.cmake)
include(kernel/kernel.cmake)
include(private/private.cmake)
include(util/util.cmake)
include(plugins/plugins.cmake)
target_sources(${LIB_NAME} PRIVATE
${dbus_SRC}
@ -39,30 +27,16 @@ target_include_directories(${LIB_NAME} PUBLIC
target_link_libraries(${LIB_NAME}
PUBLIC
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Network
Dtk${DTK_VERSION_MAJOR}::Core
Qt5::Gui
Qt5::Network
Dtk::Core
PRIVATE
Qt${QT_VERSION_MAJOR}::GuiPrivate
Qt${QT_VERSION_MAJOR}::CorePrivate
Qt${QT_VERSION_MAJOR}::DBus
Qt${QT_VERSION_MAJOR}::WaylandClientPrivate
Qt5::GuiPrivate
Qt5::CorePrivate
Qt5::DBus
PkgConfig::librsvg
)
if("${QT_VERSION_MAJOR}" STREQUAL "5")
target_link_libraries(${LIB_NAME}
PRIVATE
Qt${QT_VERSION_MAJOR}::XkbCommonSupportPrivate
)
endif()
if(DTK_DISABLE_LIBRSVG)
find_package(Qt${QT_VERSION_MAJOR}Svg REQUIRED)
target_link_libraries(${LIB_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Svg)
else()
target_link_libraries(${LIB_NAME} PRIVATE PkgConfig::librsvg)
endif()
if(NOT DTK_DISABLE_EX_IMAGE_FORMAT AND EX_IMAGE_FORMAT_LIBS_FOUND)
target_link_libraries(${LIB_NAME} PRIVATE
${libraw_LIBRARIES}
@ -75,7 +49,7 @@ endif()
if(NOT DTK_DISABLE_LIBXDG)
target_link_libraries(${LIB_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}XdgIconLoader
Qt5XdgIconLoader
)
endif()
@ -93,15 +67,10 @@ target_link_directories(${LIB_NAME} INTERFACE
$<INSTALL_INTERFACE:${LIBRARY_INSTALL_DIR}>
)
install(TARGETS ${LIB_NAME} EXPORT Dtk${DTK_VERSION_MAJOR}GuiTargets DESTINATION "${LIBRARY_INSTALL_DIR}")
install(EXPORT Dtk${DTK_VERSION_MAJOR}GuiTargets NAMESPACE Dtk${DTK_VERSION_MAJOR}:: FILE Dtk${DTK_VERSION_MAJOR}GuiTargets.cmake DESTINATION "${CONFIG_INSTALL_DIR}")
install(TARGETS ${LIB_NAME} EXPORT DtkGuiTargets DESTINATION "${LIBRARY_INSTALL_DIR}")
install(EXPORT DtkGuiTargets NAMESPACE Dtk:: FILE DtkGuiTargets.cmake DESTINATION "${CONFIG_INSTALL_DIR}")
install(DIRECTORY ../include/util/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
install(DIRECTORY ../include/DtkGui/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
install(DIRECTORY ../include/global/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
install(DIRECTORY ../include/kernel/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
install(DIRECTORY ../include/filedrag/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
set(EnableCov CACHE BOOL OFF)
if (EnableCov)
dtk_setup_code_coverage(${LIB_NAME})
endif()

View File

@ -68,7 +68,6 @@ void DDndClientSignalRelay::stateChanged(QString uuid, int state)
void DDndClientSignalRelay::serverDestroyed(QString uuid)
{
if (DFileDragClientPrivate::connectionmap.contains(uuid)) {
Q_EMIT DFileDragClientPrivate::connectionmap[uuid]->serverDestroyed();
DFileDragClientPrivate::connectionmap[uuid]->deleteLater();
DFileDragClientPrivate::connectionmap.remove(uuid);
}

View File

@ -102,7 +102,6 @@ DFileDragServer::DFileDragServer(QObject *parent)
DFileDragServer::~DFileDragServer()
{
D_D(DFileDragServer);
Q_EMIT d->dbusif->serverDestroyed(d->uuid.toString());
DFileDragServerPrivate::servermap.remove(d->uuid.toString());
}
@ -166,6 +165,7 @@ DFileDragServerPrivate::DFileDragServerPrivate(DFileDragServer *q)
DFileDragServerPrivate::~DFileDragServerPrivate()
{
Q_EMIT dbusif->serverDestroyed(uuid.toString());
}
void DFileDragServerPrivate::writeMimeData(QMimeData *dest)

View File

@ -49,14 +49,14 @@ public:
\property DForeignWindow::wmClass
\brief WM_CLASS
\note
\ref {https://tronche.com/gui/x/icccm/sec-4.html#WM_CLASS}{WM_CLASS}
\l {https://tronche.com/gui/x/icccm/sec-4.html#WM_CLASS}{WM_CLASS}
*/
/*!
\property DForeignWindow::pid
\brief pid
\note
\ref {https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html}{_NET_WM_PID}
\l {https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html}{_NET_WM_PID}
*/
/*!

View File

@ -1,14 +1,11 @@
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dguiapplicationhelper.h"
#include "private/dguiapplicationhelper_p.h"
#include "dplatformhandle.h"
#include <DFontManager>
#include <DStandardPaths>
#include <DSGApplication>
#include <QHash>
#include <QColor>
@ -25,8 +22,6 @@
#include <QLockFile>
#include <QDirIterator>
#include <QDesktopServices>
#include <QLibraryInfo>
#include <QTimer>
#ifdef Q_OS_UNIX
#include <QDBusError>
@ -41,6 +36,7 @@
#include <QLockFile>
#include <QDirIterator>
#include <QDesktopServices>
#include <DStandardPaths>
#ifdef Q_OS_UNIX
#include <QDBusError>
@ -59,13 +55,9 @@
#include <qpa/qplatformtheme.h>
#ifdef Q_OS_LINUX
#include <pwd.h>
#include <sys/stat.h>
#include <unistd.h>
#endif
#include "orgdeepindtkpreference.hpp"
#ifdef Q_OS_UNIX
class EnvReplaceGuard
{
@ -101,12 +93,6 @@ EnvReplaceGuard::~EnvReplaceGuard()
DGUI_BEGIN_NAMESPACE
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
using HelperCreator = DGuiApplicationHelper::HelperCreator;
#else
using HelperCreator = DGuiApplicationHelper *(*)();
#endif
#ifdef QT_DEBUG
Q_LOGGING_CATEGORY(dgAppHelper, "dtk.dguihelper")
#else
@ -120,10 +106,6 @@ Q_GLOBAL_STATIC(DFontManager, _globalFM)
#define WINDOW_THEME_KEY "_d_platform_theme"
#define DTK_ANIMATIONS_ENV "D_DTK_DISABLE_ANIMATIONS"
Q_GLOBAL_STATIC_WITH_ARGS(OrgDeepinDTKPreference, _d_dconfig, (DTK_CORE_NAMESPACE::DConfig::globalThread(), nullptr,
"org.deepin.dtk.preference", DTK_CORE_NAMESPACE::DSGApplication::id(), {}, false, nullptr))
/*!
@private
*/
@ -135,17 +117,11 @@ public:
{
// 临时存储一个无效的指针值, 用于此处条件变量的竞争
if (m_helper.testAndSetRelaxed(nullptr, INVALID_HELPER)) {
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
m_helper.storeRelaxed(creator());
m_helper.loadRelaxed()->initialize();
}
return m_helper.loadRelaxed();
#else
m_helper.store(creator());
m_helper.load()->initialize();
}
return m_helper.load();
#endif
}
inline void clear()
@ -160,7 +136,7 @@ public:
}
QAtomicPointer<DGuiApplicationHelper> m_helper;
static HelperCreator creator;
static DGuiApplicationHelper::HelperCreator creator;
};
class LoadManualServiceWorker : public QThread
@ -200,41 +176,7 @@ void LoadManualServiceWorker::checkManualServiceWakeUp()
start();
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
class Q_DECL_HIDDEN GuiApplicationEventFilter : public QObject
{
public:
explicit GuiApplicationEventFilter(DGuiApplicationHelperPrivate *transmitter,
QObject *parent = nullptr)
: QObject(parent)
, m_transmitter(transmitter)
{
}
virtual bool eventFilter(QObject *watched, QEvent *event) override
{
if (watched != qApp)
return QObject::eventFilter(watched, event);
switch(event->type()) {
case QEvent::ApplicationFontChange: {
const QFont font(qGuiApp->font());
m_transmitter->q_func()->fontChanged(font);
} break;
case QEvent::ApplicationPaletteChange: {
m_transmitter->onApplicationPaletteChanged();
break;
}
default:
break;
}
return QObject::eventFilter(watched, event);
}
private:
DGuiApplicationHelperPrivate *m_transmitter = nullptr;
};
#endif
HelperCreator _DGuiApplicationHelper::creator = _DGuiApplicationHelper::defaultCreator;
DGuiApplicationHelper::HelperCreator _DGuiApplicationHelper::creator = _DGuiApplicationHelper::defaultCreator;
Q_GLOBAL_STATIC(_DGuiApplicationHelper, _globalHelper)
int DGuiApplicationHelperPrivate::waitTime = 3000;
@ -275,15 +217,18 @@ void DGuiApplicationHelperPrivate::initApplication(QGuiApplication *app)
// 跟随application销毁
qAddPostRoutine(staticCleanApplication);
// 转发程序自己变化的信号
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
app->installEventFilter(new GuiApplicationEventFilter(this, app));
#else
q->connect(app, &QGuiApplication::fontChanged, q, &DGuiApplicationHelper::fontChanged);
q->connect(app, &QGuiApplication::paletteChanged, q, [this] {
onApplicationPaletteChanged();
q->connect(app, &QGuiApplication::paletteChanged, q, [q, this, app] {
// 如果用户没有自定义颜色类型, 则应该通知程序的颜色类型发送变化
if (Q_LIKELY(!isCustomPalette())) {
Q_EMIT q->themeTypeChanged(q->toColorType(app->palette()));
Q_EMIT q->applicationPaletteChanged();
} else {
qWarning() << "DGuiApplicationHelper: Don't use QGuiApplication::setPalette on DTK application.";
}
});
#endif
// 转发程序自己变化的信号
q->connect(app, &QGuiApplication::fontChanged, q, &DGuiApplicationHelper::fontChanged);
if (Q_UNLIKELY(!appTheme)) { // 此时说明appTheme可能已经被初始化为了systemtheme
if (QGuiApplicationPrivate::is_app_running) {
@ -306,7 +251,7 @@ void DGuiApplicationHelperPrivate::staticInitApplication()
if (!_globalHelper.exists())
return;
if (DGuiApplicationHelper *helper = _globalHelper->helper())
if (DGuiApplicationHelper *helper = _globalHelper->m_helper.load())
helper->d_func()->initApplication(qGuiApp);
}
@ -322,7 +267,7 @@ DPlatformTheme *DGuiApplicationHelperPrivate::initWindow(QWindow *window) const
window->setProperty(WINDOW_THEME_KEY, QVariant::fromValue(theme));
theme->setParent(window); // 跟随窗口销毁
auto onWindowThemeChanged = [window, this] {
auto onWindowThemeChanged = [window, theme, this] {
// 如果程序自定义了调色板, 则没有必要再关心窗口自身平台主题的变化
// 需要注意的是, 这里的信号和事件可能会与 notifyAppThemeChanged 中的重复
// 但是不能因此而移除这里的通知, 当窗口自身所对应的平台主题发生变化时, 这里
@ -356,19 +301,10 @@ void DGuiApplicationHelperPrivate::_q_initApplicationTheme(bool notifyChange)
// 监听与程序主题相关的改变
QObject::connect(appTheme, &DPlatformTheme::themeNameChanged, app, onAppThemeChanged);
QObject::connect(appTheme, &DPlatformTheme::paletteChanged, app, onAppThemeChanged);
QTimer *timer = new QTimer(app);
timer->setInterval(100);
timer->setSingleShot(true);
QObject::connect(timer, &QTimer::timeout, timer, [this] {
QObject::connect(appTheme, &DPlatformTheme::activeColorChanged, app, [this] {
if (!appPalette)
notifyAppThemeChanged();
});
QObject::connect(appTheme, &DPlatformTheme::activeColorChanged, app, [timer]{
timer->start();
});
QObject::connect(appTheme, &DPlatformTheme::darkActiveColorChanged, app, [timer] {
timer->start();
});
// appTheme在此之前可能由systemTheme所代替被使用此时在创建appTheme
// 并初始化之后,应当发送信号通知程序主题的改变
@ -380,39 +316,16 @@ void DGuiApplicationHelperPrivate::_q_initApplicationTheme(bool notifyChange)
void DGuiApplicationHelperPrivate::notifyAppThemeChanged()
{
D_Q(DGuiApplicationHelper);
notifyAppThemeChangedByEvent();
QMetaObject::invokeMethod(q, [q] () {
QWindowSystemInterfacePrivate::ThemeChangeEvent event(nullptr);
// 此事件会促使QGuiApplication重新从QPlatformTheme中获取系统级别的QPalette.
// 而在deepin平台下, 系统级别的QPalette来源自 \a applicationPalette()
QGuiApplicationPrivate::processThemeChanged(&event);
// 通知主题类型发生变化, 此处可能存在误报的行为, 不过不应该对此做额外的约束
// 此信号的行为应当等价于 applicationPaletteChanged
Q_EMIT q->themeTypeChanged(q->themeType());
// 通知调色板对象的改变
Q_EMIT q->applicationPaletteChanged();
}, Qt::QueuedConnection);
}
void DGuiApplicationHelperPrivate::notifyAppThemeChangedByEvent()
{
// https://github.com/qt/qtbase/commit/68a9c5fe513e147e4cffd29b50a4714813df411e
#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
QWindowSystemInterfacePrivate::ThemeChangeEvent event;
#else
QWindowSystemInterfacePrivate::ThemeChangeEvent event(nullptr);
#endif
// 此事件会促使QGuiApplication重新从QPlatformTheme中获取系统级别的QPalette.
// 而在deepin平台下, 系统级别的QPalette来源自 \a applicationPalette()
QGuiApplicationPrivate::processThemeChanged(&event);
}
void DGuiApplicationHelperPrivate::onApplicationPaletteChanged()
{
D_Q(DGuiApplicationHelper);
// 如果用户没有自定义颜色类型, 则应该通知程序的颜色类型发送变化
if (Q_LIKELY(!isCustomPalette())) {
Q_EMIT q->themeTypeChanged(q->toColorType(qGuiApp->palette()));
Q_EMIT q->applicationPaletteChanged();
} else {
qWarning() << "DGuiApplicationHelper: Don't use QGuiApplication::setPalette on DTK application.";
}
}
bool DGuiApplicationHelperPrivate::isCustomPalette() const
@ -420,57 +333,6 @@ bool DGuiApplicationHelperPrivate::isCustomPalette() const
return appPalette || paletteType != DGuiApplicationHelper::UnknownType;
}
void DGuiApplicationHelperPrivate::setPaletteType(DGuiApplicationHelper::ColorType ct, bool emitSignal)
{
if (paletteType == ct)
return;
if (qGuiApp && qGuiApp->testAttribute(Qt::AA_SetPalette))
qWarning() << "DGuiApplicationHelper: Plase check 'QGuiApplication::setPalette',"
" Don't use it on DTK application.";
paletteType = ct;
if (!emitSignal) {
notifyAppThemeChangedByEvent();
return;
}
// 如果未固定调色板, 则paletteType的变化可能会导致调色板改变, 应当通知程序更新数据
if (!appPalette)
notifyAppThemeChanged();
D_Q(DGuiApplicationHelper);
Q_EMIT q->paletteTypeChanged(paletteType);
}
void DGuiApplicationHelperPrivate::initPaletteType() const
{
DCORE_USE_NAMESPACE
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::DontSaveApplicationTheme))
return;
if (_d_dconfig.exists())
return;
auto applyThemeType = [this](bool emitSignal){
int ct = _d_dconfig->themeType();
if (ct > DGuiApplicationHelper::DarkType || ct < DGuiApplicationHelper::UnknownType)
ct = DGuiApplicationHelper::UnknownType;
const_cast<DGuiApplicationHelperPrivate *>(this)->setPaletteType(DGuiApplicationHelper::ColorType(ct), emitSignal);
};
// 读取配置文件中的主题类型并立即应用
DTK_CORE_NAMESPACE::DConfig dconfig("org.deepin.dtk.preference");
int ct = dconfig.value("themeType", DGuiApplicationHelper::UnknownType).toInt();
const_cast<DGuiApplicationHelperPrivate *>(this)->setPaletteType(DGuiApplicationHelper::ColorType(ct), false);
QObject::connect(_d_dconfig.operator ()(), &OrgDeepinDTKPreference::themeTypeChanged, _d_dconfig, [applyThemeType] {
applyThemeType(true);
});
}
void DGuiApplicationHelperPrivate::_q_sizeModeChanged(int mode)
{
D_Q(DGuiApplicationHelper);
@ -568,7 +430,6 @@ void DGuiApplicationHelper::initialize()
d->init();
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief DGuiApplicationHelper .
@ -586,7 +447,6 @@ void DGuiApplicationHelper::registerInstanceCreator(DGuiApplicationHelper::Helpe
_globalHelper->clear();
}
}
#endif
inline static int adjustColorValue(int base, qint8 increment, int max = 255)
{
@ -742,15 +602,15 @@ QColor DGuiApplicationHelper::blendColor(const QColor &substrate, const QColor &
}
static QColor light_qpalette[QPalette::NColorRoles] {
QColor(0, 0, 0, 0.7 * 255), //WindowText
QColor("#414d68"), //WindowText
QColor("#e5e5e5"), //Button
QColor("#e6e6e6"), //Light
QColor("#e5e5e5"), //Midlight
QColor("#e3e3e3"), //Dark
QColor("#e4e4e4"), //Mid
QColor(0, 0, 0, 0.7 * 255), //Text
QColor("#414d68"), //Text
Qt::black, //BrightText
QColor(0, 0, 0, 0.7 * 255), //ButtonText
QColor("#414d68"), //ButtonText
Qt::white, //Base
QColor("#f8f8f8"), //Window
QColor(0, 0, 0, 0.05 * 255), //Shadow
@ -761,39 +621,39 @@ static QColor light_qpalette[QPalette::NColorRoles] {
QColor(0, 0, 0, 0.03 * 255), //AlternateBase
Qt::white, //NoRole
QColor(255, 255, 255, 0.8 * 255), //ToolTipBase
QColor(0, 0, 0, 0.85 * 255) //ToolTipText
Qt::black //ToolTipText
};
static QColor dark_qpalette[QPalette::NColorRoles] {
QColor(255, 255, 255, 0.7 * 255), //WindowText
QColor("#c0c6d4"), //WindowText
QColor("#444444"), //Button
QColor("#484848"), //Light
QColor("#474747"), //Midlight
QColor("#414141"), //Dark
QColor("#434343"), //Mid
QColor(255, 255, 255, 0.7 * 255), //Text
QColor("#c0c6d4"), //Text
Qt::white, //BrightText
QColor(255, 255, 255, 0.7 * 255), //ButtonText
QColor("#c0c6d4"), //ButtonText
QColor("#282828"), //Base
QColor("#252525"), //Window
QColor(0, 0, 0, 0.05 * 255), //Shadow
QColor("#024CCA"), //Highlight
QColor("#0081ff"), //Highlight
QColor("#F1F6FF"), //HighlightedText
QColor("#0082fa"), //Link
QColor("#ad4579"), //LinkVisited
QColor(0, 0, 0, 0.05 * 255), //AlternateBase
Qt::black, //NoRole
QColor(45, 45, 45, 0.8 * 255), //ToolTipBase
QColor(255, 255, 255, 0.85 * 255) //ToolTipText
QColor("#c0c6d4") //ToolTipText
};
static QColor light_dpalette[DPalette::NColorTypes] {
QColor(), //NoType
QColor(0, 0, 0, 255 * 0.03), //ItemBackground
QColor(0, 0, 0, 0.85 * 255), //TextTitle
QColor(0, 0, 0, 0.6 * 255), //TextTips
QColor("#001A2E"), //TextTitle
QColor("#526A7F"), //TextTips
QColor("#FF5736"), //TextWarning
Qt::black, //TextLively
Qt::white, //TextLively
QColor("#0081FF"), //LightLively
QColor("#0081FF"), //DarkLively
QColor(0, 0, 0, 0.05 * 255), //FrameBorder
@ -805,8 +665,8 @@ static QColor light_dpalette[DPalette::NColorTypes] {
static QColor dark_dpalette[DPalette::NColorTypes] {
QColor(), //NoType
QColor(255, 255, 255, 255 * 0.05), //ItemBackground
QColor(255, 255, 255, 0.85 * 255), //TextTitle
QColor(255, 255, 255, 0.6 * 255), //TextTips
QColor("#C0C6D4"), //TextTitle
QColor("#6D7C88"), //TextTips
QColor("#E43F2E"), //TextWarning
Qt::white, //TextLively
QColor("#0059d2"), //LightLively
@ -884,7 +744,9 @@ DPalette DGuiApplicationHelper::standardPalette(DGuiApplicationHelper::ColorType
#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
if (role == QPalette::PlaceholderText) {
// 5.15新添加此颜色 这里使用5.11的颜色保证效果与5.11对齐
color = dcolor_list[DPalette::PlaceholderText];
continue;
}
#endif
// 处理半透明色
@ -998,7 +860,15 @@ void DGuiApplicationHelper::generatePaletteColor(DPalette &base, QPalette::Color
base.setBrush(QPalette::Disabled, role, window);
base.setBrush(QPalette::Inactive, role, window);
return;
} else if (role == QPalette::Highlight && toColorType(base) == DarkType) {
// 暗色模式下的高亮色亮度要降低10%,避免太突兀
QColor highlight = base.highlight().color();
if (highlight.isValid()) {
base.setColor(QPalette::Highlight, adjustColor(highlight, 0, 0, -20, 0, 0, 0, 0));
}
}
generatePaletteColor_helper(base, role, type);
}
@ -1051,20 +921,6 @@ void DGuiApplicationHelper::generatePalette(DPalette &base, ColorType type)
}
}
static inline QColor getActiveColor(const DPlatformTheme *theme, DGuiApplicationHelper::ColorType type)
{
QColor activeColor;
if (type == DGuiApplicationHelper::DarkType) {
activeColor = theme->darkActiveColor();
if (!activeColor.isValid()) {
activeColor = theme->activeColor();
}
} else {
activeColor = theme->activeColor();
}
return activeColor;
}
/*!
\brief .
@ -1090,7 +946,7 @@ DPalette DGuiApplicationHelper::fetchPalette(const DPlatformTheme *theme)
bool ok = false;
base_palette = theme->fetchPalette(standardPalette(type), &ok);
const QColor &active_color = getActiveColor(theme, type);
const QColor &active_color = theme->activeColor();
if (active_color.isValid()) {
base_palette.setColor(QPalette::Normal, QPalette::Highlight, active_color);
@ -1108,7 +964,6 @@ DPalette DGuiApplicationHelper::fetchPalette(const DPlatformTheme *theme)
return base_palette;
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief .
@ -1129,7 +984,6 @@ void DGuiApplicationHelper::setColorCompositingEnabled(bool on)
{
DGuiApplicationHelper::setAttribute(Attribute::ColorCompositing, on);
}
#endif
bool DGuiApplicationHelper::isXWindowPlatform()
{
@ -1191,7 +1045,6 @@ DPlatformTheme *DGuiApplicationHelper::applicationTheme() const
return d->appTheme;
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief , windowTheme systemTheme.
@ -1213,7 +1066,6 @@ DPlatformTheme *DGuiApplicationHelper::windowTheme(QWindow *window) const
return theme;
}
#endif
/*!
\brief .
@ -1230,7 +1082,7 @@ DPlatformTheme *DGuiApplicationHelper::windowTheme(QWindow *window) const
\warning DTK程序中使用QGuiApplication/QApplication::setPalette
\return
*/
DPalette DGuiApplicationHelper::applicationPalette(ColorType paletteType) const
DPalette DGuiApplicationHelper::applicationPalette() const
{
D_DC(DGuiApplicationHelper);
@ -1238,7 +1090,7 @@ DPalette DGuiApplicationHelper::applicationPalette(ColorType paletteType) const
return *d->appPalette;
}
ColorType type = paletteType;
ColorType type = d->paletteType;
bool aa_setPalette = qGuiApp && qGuiApp->testAttribute(Qt::AA_SetPalette);
// 此时appTheme可能还未初始化, 因此先使用systemTheme, 待appTheme初始化之后会
// 通知程序调色板发生改变
@ -1261,7 +1113,7 @@ DPalette DGuiApplicationHelper::applicationPalette(ColorType paletteType) const
// 覆盖DPalette中的的QPalette数据
pa.QPalette::operator =(qGuiApp->palette());
} else {
const QColor &active_color = getActiveColor(theme, type);
const QColor &active_color = theme->activeColor();
if (active_color.isValid()) {
// 应用Active Color
@ -1273,13 +1125,6 @@ DPalette DGuiApplicationHelper::applicationPalette(ColorType paletteType) const
return pa;
}
DPalette DGuiApplicationHelper::applicationPalette() const
{
D_DC(DGuiApplicationHelper);
return applicationPalette(d->paletteType);
}
/*!
\brief DGuiApplicationHelper::setApplicationPalette.
@ -1301,21 +1146,13 @@ void DGuiApplicationHelper::setApplicationPalette(const DPalette &palette)
qWarning() << "DGuiApplicationHelper: Plase check 'QGuiApplication::setPalette', Don't use it on DTK application.";
}
auto resolve = [](const DPalette &palette) ->bool {
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
return palette.resolveMask();
#else
return palette.resolve();
#endif
};
if (d->appPalette) {
if (resolve(palette)) {
if (palette.resolve()) {
*d->appPalette = palette;
} else {
d->appPalette.reset();
}
} else if (resolve(palette)) {
} else if (palette.resolve()) {
d->appPalette.reset(new DPalette(palette));
} else {
return;
@ -1325,7 +1162,6 @@ void DGuiApplicationHelper::setApplicationPalette(const DPalette &palette)
d->notifyAppThemeChanged();
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief DGuiApplicationHelper::windowPalette.
@ -1343,11 +1179,6 @@ void DGuiApplicationHelper::setApplicationPalette(const DPalette &palette)
*/
DPalette DGuiApplicationHelper::windowPalette(QWindow *window) const
{
#if DTK_VERSION >= DTK_VERSION_CHECK(5, 0, 0, 0)
Q_UNUSED(window);
qCWarning(dgAppHelper) << "DGuiApplicationHelper::windowPalette is deprecated, please use applicationPalette instead.";
return applicationPalette();
#else
D_DC(DGuiApplicationHelper);
// 如果程序自定义了调色版, 则不再关心窗口对应的平台主题上的设置
@ -1362,9 +1193,7 @@ DPalette DGuiApplicationHelper::windowPalette(QWindow *window) const
}
return fetchPalette(theme);
#endif
}
#endif
/*!
\brief DGuiApplicationHelper::fontManager.
@ -1377,8 +1206,6 @@ const DFontManager *DGuiApplicationHelper::fontManager() const
{
// 为对象初始化信号链接
if (!_globalFM.exists()) {
// fontManager's base font is update from qGuiApp.
_globalFM->setBaseFont(qGuiApp->font());
connect(this, &DGuiApplicationHelper::fontChanged, _globalFM, &DFontManager::setBaseFont);
}
@ -1421,7 +1248,7 @@ DGuiApplicationHelper::ColorType DGuiApplicationHelper::toColorType(const QColor
*/
DGuiApplicationHelper::ColorType DGuiApplicationHelper::toColorType(const QPalette &palette)
{
return toColorType(palette.window().color());
return toColorType(palette.background().color());
}
/*!
@ -1439,7 +1266,6 @@ DGuiApplicationHelper::ColorType DGuiApplicationHelper::themeType() const
{
D_DC(DGuiApplicationHelper);
d->initPaletteType();
if (d->paletteType != UnknownType) {
return d->paletteType;
}
@ -1459,8 +1285,6 @@ DGuiApplicationHelper::ColorType DGuiApplicationHelper::themeType() const
DGuiApplicationHelper::ColorType DGuiApplicationHelper::paletteType() const
{
D_DC(DGuiApplicationHelper);
d->initPaletteType();
return d->paletteType;
}
@ -1502,37 +1326,11 @@ bool DGuiApplicationHelper::setSingleInstance(const QString &key, DGuiApplicatio
}
socket_key += key;
#ifdef Q_OS_LINUX
auto info = QFileInfo{"/proc/self/ns/pid"};
// maybe kernel doesn't support namespace
while (info.exists()) {
auto pidns = QFileInfo{info.symLinkTarget()}.fileName();
if (pidns.isEmpty()) {
break;
}
// maybe format has been changed
auto start = pidns.indexOf('[');
auto end = pidns.indexOf(']');
if (start == -1 || end == -1) {
break;
}
auto num = pidns.mid(start + 1, end - start - 1);
// append pid namespace
socket_key += QStringLiteral("_%1").arg(num);
break;
}
#endif
QString lockfile = socket_key;
if (!lockfile.startsWith(QLatin1Char('/'))) {
lockfile = QDir::cleanPath(QDir::tempPath());
lockfile += QLatin1Char('/') + socket_key;
}
lockfile += QStringLiteral(".lock");
static QScopedPointer <QLockFile> lock(new QLockFile(lockfile));
// 同一个进程多次调用本接口使用最后一次设置的 key
@ -1602,8 +1400,8 @@ bool DGuiApplicationHelper::setSingleInstance(const QString &key, DGuiApplicatio
qCInfo(dgAppHelper) << "New instance: pid=" << pid << "arguments=" << arguments;
// 通知新进程的信息
if (_globalHelper.exists() && _globalHelper->helper())
Q_EMIT _globalHelper->helper()->newProcessInstance(pid, arguments);
if (_globalHelper.exists() && _globalHelper->m_helper.load())
Q_EMIT _globalHelper->m_helper.load()->newProcessInstance(pid, arguments);
});
instance->flush(); //发送数据给新的实例
@ -1626,7 +1424,6 @@ void DGuiApplicationHelper::setSingleInstanceInterval(int interval)
DGuiApplicationHelperPrivate::waitTime = interval;
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief QLocalServer获取消息的等待时间.
@ -1636,33 +1433,31 @@ void DGuiApplicationHelper::setSingelInstanceInterval(int interval)
{
DGuiApplicationHelperPrivate::waitTime = interval;
}
#endif
/*!
\brief
\return
*/
QStringList DGuiApplicationHelper::userManualPaths(const QString &appName)
static bool hasLocalManualFile()
{
Q_ASSERT(!appName.isEmpty());
// 获取主目录
DCORE_USE_NAMESPACE
QStringList manualPaths;
const auto &pathlist = DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
if (QStandardPaths::findExecutable(QLatin1String("dman")).isEmpty())
return false;
// 获取所有已存在的帮助手册目录
for (int i = 0; i < pathlist.size(); ++i) {
QString strAssetPath = QStringList{pathlist[i], "deepin-manual/manual-assets"}.join(QDir::separator());
for (const QString &type : QDir(strAssetPath).entryList(QDir::NoDotAndDotDot | QDir::Dirs)) {
QString appDirPath = QStringList{strAssetPath, type, appName}.join(QDir::separator());
if (QDir(appDirPath).exists())
manualPaths.push_back(appDirPath);
// search all subdirectories
const QString xdgDataPath = qgetenv("XDG_DATA_DIRS");
auto dataPath = xdgDataPath.split(":");
// /usr/share /usr/loacal/share ...
const auto &dataDirs = DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
dataPath.append(dataDirs);
for (const auto &path : dataPath) {
QString strManualPath = QStringList {path, "deepin-manual"}.join(QDir::separator());
QDirIterator it(strManualPath, QDir::AllDirs | QDir::NoDotAndDotDot,QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
if (it.fileName().contains(qApp->applicationName(), Qt::CaseInsensitive))
return true;
}
}
return manualPaths;
return false;
}
/*!
@ -1671,29 +1466,43 @@ QStringList DGuiApplicationHelper::userManualPaths(const QString &appName)
*/
bool DGuiApplicationHelper::hasUserManual() const
{
return userManualPaths(qApp->applicationName()).size() > 0;
}
#ifdef Q_OS_LINUX
static qint8 hasManual = -1;
if (hasManual >= 0)
return hasManual;
static inline QStringList translateDirs(const QString &appName)
{
Q_ASSERT(!appName.isEmpty());
QDBusConnection conn = QDBusConnection::sessionBus();
if (!conn.isConnected()) {
static LoadManualServiceWorker *manualWorker = new LoadManualServiceWorker;
manualWorker->checkManualServiceWakeUp();
QStringList dirs;
DCORE_USE_NAMESPACE
//("/home/user/.local/share", "/usr/local/share", "/usr/share")
auto dataDirs = DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
for (const auto &path : dataDirs) {
DPathBuf pathBuf(path);
dirs << (pathBuf / appName / "translations").toString();
// 可能存在 dbus 服务有问题,但是文件存在,这时不更新缓存
return /*hasManual = */hasLocalManualFile();
}
return dirs;
}
QDBusInterface manualSearch("com.deepin.Manual.Search",
"/com/deepin/Manual/Search",
"com.deepin.Manual.Search");
if (!manualSearch.isValid())
return hasManual = hasLocalManualFile();
bool DGuiApplicationHelper::loadTranslator(const QString &fileName, const QString &appName, const QList<QLocale> &localeFallback)
{
return loadTranslator(fileName, translateDirs(appName), localeFallback);
QDBusPendingCall call = manualSearch.asyncCall("ManualExists", qApp->applicationName());
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, const_cast<DGuiApplicationHelper *>(this));
QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [](QDBusPendingCallWatcher *pWatcher) {
QDBusPendingReply<bool> reply = *pWatcher;
if (reply.isError()) {
qWarning() << reply.error();
} else {
hasManual = reply.value();
}
pWatcher->deleteLater();
});
return hasManual >= 0 ? hasManual : false;
#else
return false;
#endif
}
bool DGuiApplicationHelper::loadTranslator(const QString &fileName, const QList<QString> &translateDirs, const QList<QLocale> &localeFallback)
@ -1708,55 +1517,39 @@ bool DGuiApplicationHelper::loadTranslator(const QString &fileName, const QList<
for (auto item : defaultDirPrefix)
dirs << item.join("translations").toString();
QStringList missingQmfiles;
for (const auto &locale : localeFallback) {
QStringList translateFilenames {QString("%1_%2").arg(fileName).arg(locale.name())};
const QStringList parseLocalNameList = locale.name().split("_", QString::SkipEmptyParts);
if (parseLocalNameList.length() > 0)
translateFilenames << QString("%1_%2").arg(fileName).arg(parseLocalNameList.at(0));
for (const auto &translateFilename : translateFilenames) {
for (const auto &dir : dirs) {
DPathBuf path(dir);
QString translatePath = (path / translateFilename).toString();
if (QFile::exists(translatePath + ".qm")) {
qDebug() << "load translate" << translatePath;
auto translator = new QTranslator(qApp);
// QTranslator::load(locale, filename, prefix, directory, suffix) automatically handles
// locale fallback (e.g., zh_CN -> zh -> C) and file existence checking
if (translator->load(locale, fileName, QString('_'), dir)) {
qCDebug(dgAppHelper) << "load translate" << fileName << "for locale" << locale.name() << "from" << dir;
translator->load(translatePath);
qApp->installTranslator(translator);
qApp->setProperty("dapp_locale", locale.name());
return true;
}
delete translator; // Clean up if loading failed
}
// fix english does not need to translation.
if (locale.language() != QLocale::English)
missingQmfiles << translateFilename + ".qm";
}
}
// Collect locale names for warning message
QStringList localeNames;
for (const auto &locale : localeFallback) {
if (locale.language() != QLocale::English) // English does not need translation
localeNames << locale.name();
}
if (!localeNames.isEmpty()) {
qWarning() << fileName << "can not find qm files for locales" << localeNames;
if (missingQmfiles.size() > 0) {
qWarning() << fileName << "can not find qm files" << missingQmfiles;
}
return false;
}
bool DGuiApplicationHelper::loadTranslator(const QList<QLocale> &localeFallback)
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
auto qTranslationsPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
#else
auto qTranslationsPath = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
#endif
DCORE_USE_NAMESPACE
//("/home/user/.local/share", "/usr/local/share", "/usr/share")
auto qtranslateDirs = translateDirs("qt" QT_STRINGIFY(QT_VERSION_MAJOR));
qtranslateDirs.prepend(qTranslationsPath);
loadTranslator("qt", qtranslateDirs, localeFallback);
loadTranslator("qtbase", qtranslateDirs, localeFallback);
auto appName = qApp->applicationName();
return loadTranslator(appName, appName, localeFallback);
}
DGuiApplicationHelper::SizeMode DGuiApplicationHelper::sizeMode() const
{
D_DC(DGuiApplicationHelper);
@ -1808,30 +1601,16 @@ bool DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::Attribute attri
return false;
}
return QString(typeid(*QGuiApplicationPrivate::platform_theme).name()).contains("QDeepinTheme");
case IsDeepinEnvironment: {
const auto &de = QGuiApplicationPrivate::instance()->platformIntegration()->services()->desktopEnvironment();
return de.toLower().contains("deepin") || de == "DDE";
}
case IsDeepinEnvironment:
return QGuiApplicationPrivate::instance()->platformIntegration()->services()->desktopEnvironment().toLower().contains("deepin");
case IsSpecialEffectsEnvironment: {
return qgetenv("DTK_DISABLED_SPECIAL_EFFECTS").toInt() != 1;
}
case IsWaylandPlatform: {
static bool isTreeland = qApp->platformName() == QByteArrayLiteral("wayland");
return isTreeland;
}
case HasAnimations: {
static bool isDisable = qEnvironmentVariableIsSet(DTK_ANIMATIONS_ENV);
if (isDisable)
return false;
return _d_dconfig->enableDtkAnimations();
}
default:
return DGuiApplicationHelperPrivate::attributes.testFlag(attribute);
}
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
\brief DGuiApplicationHelper::setThemeType.
\deprecated setPaletteType 使
@ -1841,7 +1620,6 @@ void DGuiApplicationHelper::setThemeType(DGuiApplicationHelper::ColorType themeT
{
setPaletteType(themeType);
}
#endif
/*!
\brief .
@ -1856,17 +1634,21 @@ void DGuiApplicationHelper::setThemeType(DGuiApplicationHelper::ColorType themeT
*/
void DGuiApplicationHelper::setPaletteType(DGuiApplicationHelper::ColorType paletteType)
{
if (!qApp) {
qWarning() << "Can't call `DGuiApplicationHelper::setPaletteType` before QCoreApplication constructed.";
return;
}
D_D(DGuiApplicationHelper);
d->initPaletteType();
d->setPaletteType(paletteType, true);
if (!DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::DontSaveApplicationTheme))
_d_dconfig->setThemeType(static_cast<int>(paletteType));
if (d->paletteType == paletteType)
return;
if (qGuiApp && qGuiApp->testAttribute(Qt::AA_SetPalette)) {
qWarning() << "DGuiApplicationHelper: Plase check 'QGuiApplication::setPalette', Don't use it on DTK application.";
}
d->paletteType = paletteType;
// 如果未固定调色板, 则paletteType的变化可能会导致调色板改变, 应当通知程序更新数据
if (!d->appPalette)
d->notifyAppThemeChanged();
Q_EMIT paletteTypeChanged(paletteType);
}
/*!

View File

@ -128,12 +128,7 @@ QDebug operator<<(QDebug debug, const DTK_GUI_NAMESPACE::DNativeSettings &settin
const QByteArrayList &keys = settings.allKeys();
for (const QByteArray &key : keys) {
debug << key << settings.getSetting(key) <<
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
Qt::endl;
#else
endl;
#endif
debug << key << settings.getSetting(key) << endl;
}
return debug;

View File

@ -1,24 +1,96 @@
// SPDX-FileCopyrightText: 2022-2024 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dplatformhandle.h"
#include "dplatformwindowinterface_p.h"
#include "dguiapplicationhelper.h"
#ifndef DTK_DISABLE_XCB
#include "plugins/platform/xcb/dxcbplatformwindowinterface.h"
#endif
#ifndef DTK_DISABLE_TREELAND
#include "plugins/platform/treeland/dtreelandplatformwindowinterface.h"
#endif
#include "dplatformhandle.h"
#include "dplatformtheme.h"
#include "dwindowmanagerhelper.h"
#include <QWindow>
#include <QGuiApplication>
#include <QDebug>
#include <QPlatformSurfaceEvent>
DGUI_BEGIN_NAMESPACE
static QHash<const DPlatformHandle*, DPlatformWindowInterface*> g_platformWindowImpls;
#define DXCB_PLUGIN_KEY "dxcb"
#define DXCB_PLUGIN_SYMBOLIC_PROPERTY "_d_isDxcb"
static DPlatformWindowInterface *platformWindowImpl(const DPlatformHandle *platformHandle)
#define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
DEFINE_CONST_CHAR(useDxcb);
DEFINE_CONST_CHAR(redirectContent);
DEFINE_CONST_CHAR(netWmStates);
DEFINE_CONST_CHAR(windowRadius);
DEFINE_CONST_CHAR(borderWidth);
DEFINE_CONST_CHAR(borderColor);
DEFINE_CONST_CHAR(shadowRadius);
DEFINE_CONST_CHAR(shadowOffset);
DEFINE_CONST_CHAR(shadowColor);
DEFINE_CONST_CHAR(clipPath);
DEFINE_CONST_CHAR(frameMask);
DEFINE_CONST_CHAR(frameMargins);
DEFINE_CONST_CHAR(translucentBackground);
DEFINE_CONST_CHAR(enableSystemResize);
DEFINE_CONST_CHAR(enableSystemMove);
DEFINE_CONST_CHAR(enableBlurWindow);
DEFINE_CONST_CHAR(windowBlurAreas);
DEFINE_CONST_CHAR(windowBlurPaths);
DEFINE_CONST_CHAR(windowWallpaperParas);
DEFINE_CONST_CHAR(autoInputMaskByClipPath);
DEFINE_CONST_CHAR(resolve_mask);
enum PropRole {
WindowRadius,
// TO BE CONTINUE
};
// functions
DEFINE_CONST_CHAR(setWmBlurWindowBackgroundArea);
DEFINE_CONST_CHAR(setWmBlurWindowBackgroundPathList);
DEFINE_CONST_CHAR(setWmBlurWindowBackgroundMaskImage);
DEFINE_CONST_CHAR(setWmWallpaperParameter);
DEFINE_CONST_CHAR(setWindowProperty);
DEFINE_CONST_CHAR(pluginVersion);
DEFINE_CONST_CHAR(disableOverrideCursor);
DEFINE_CONST_CHAR(enableDxcb);
DEFINE_CONST_CHAR(isEnableDxcb);
DEFINE_CONST_CHAR(setEnableNoTitlebar);
DEFINE_CONST_CHAR(isEnableNoTitlebar);
DEFINE_CONST_CHAR(clientLeader);
static void resolve(QObject *obj, PropRole role)
{
return g_platformWindowImpls.value(platformHandle);
int mask = obj->property(_resolve_mask).toInt();
obj->setProperty(_resolve_mask, (mask |= 1 << role));
}
static bool resolved(QObject *obj, PropRole role)
{
int mask = obj->property(_resolve_mask).toInt();
return mask & (1 << role);
}
static void setWindowProperty(QWindow *window, const char *name, const QVariant &value)
{
if (!window)
return;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
static QFunctionPointer setWindowProperty = qApp->platformFunction(_setWindowProperty);
#else
constexpr QFunctionPointer setWindowProperty = nullptr;
#endif
if (!setWindowProperty) {
window->setProperty(name, value);
return;
}
reinterpret_cast<void(*)(QWindow *, const char *, const QVariant &)>(setWindowProperty)(window, name, value);
}
/*!
@ -50,8 +122,8 @@ static DPlatformWindowInterface *platformWindowImpl(const DPlatformHandle *platf
</pre>
\endraw
\ref {http://doc.qt.io/qt-5/qpa.html}{QPA}
\ref {https://github.com/linuxdeepin/qt5dxcb-plugin/}{dxcb插件}
\l {http://doc.qt.io/qt-5/qpa.html}{QPA}
\l {https://github.com/linuxdeepin/qt5dxcb-plugin/}{dxcb插件}
\sa Dtk::Gui::DPlatformHandle::isDXcbPlatform
\sa QGuiApplication::platformNativeInterface
\sa Dtk::Widget::DMainWindow
@ -283,50 +355,20 @@ static DPlatformWindowInterface *platformWindowImpl(const DPlatformHandle *platf
\brief .
\var x
\value x
\var y
\value y
\var width
\value width
\var height
\value height
\var xRadius
\value xRadius
\var yRaduis
\value yRaduis
*/
static DPlatformWindowInterfaceFactory::Creator OutsideWindowInterfaceCreator = nullptr;
void DPlatformWindowInterfaceFactory::registerInterface(Creator creator)
{
OutsideWindowInterfaceCreator = creator;
}
static DPlatformWindowInterface *createWindowInterface(QWindow *window, DPlatformHandle *platformHandle)
{
DPlatformWindowInterface *impl = nullptr;
if (OutsideWindowInterfaceCreator) {
impl = OutsideWindowInterfaceCreator(window, platformHandle);
}
if (!impl) {
#ifndef DTK_DISABLE_XCB
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsXWindowPlatform)) {
impl = new DXCBPlatformWindowInterface(window, platformHandle);
}
#endif
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
impl = new DTreeLandPlatformWindowInterface(window, platformHandle);
}
#endif
}
return impl;
}
/*!
\brief DPlatformHandle::DPlatformHandle
\a window enableDXcbForWindow
@ -338,21 +380,9 @@ DPlatformHandle::DPlatformHandle(QWindow *window, QObject *parent)
: QObject(parent)
, m_window(window)
{
auto impl = createWindowInterface(window, this);
if (!impl) {
qDebug() << "Use default DPlatformWindowInterface for the window" << window->winId();
impl = new DPlatformWindowInterface(window, this);
}
g_platformWindowImpls.insert(this, impl);
enableDXcbForWindow(window);
impl->setEnabled(true);
}
DPlatformHandle::~DPlatformHandle()
{
if (auto item = g_platformWindowImpls.take(this)) {
delete item;
}
window->installEventFilter(this);
}
/*!
@ -362,11 +392,16 @@ DPlatformHandle::~DPlatformHandle()
*/
QString DPlatformHandle::pluginVersion()
{
#ifndef DTK_DISABLE_XCB
return DXCBPlatformWindowInterface::pluginVersion();
#else
return {};
QFunctionPointer pv = 0;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
pv = qApp->platformFunction(_pluginVersion);
#endif
if (Q_UNLIKELY(!pv))
return QString();
return reinterpret_cast<QString(*)()>(pv)();
}
/*!
@ -375,11 +410,12 @@ QString DPlatformHandle::pluginVersion()
*/
bool DPlatformHandle::isDXcbPlatform()
{
#ifndef DTK_DISABLE_XCB
return DXCBPlatformWindowInterface::isDXcbPlatform();
#else
if (!qApp)
return false;
#endif
static bool _is_dxcb = qApp->platformName() == DXCB_PLUGIN_KEY || qApp->property(DXCB_PLUGIN_SYMBOLIC_PROPERTY).toBool();
return _is_dxcb;
}
/*!
@ -475,9 +511,28 @@ bool DPlatformHandle::isDXcbPlatform()
*/
void DPlatformHandle::enableDXcbForWindow(QWindow *window)
{
DPlatformHandle handle(window);
auto impl = platformWindowImpl(&handle);
impl->setEnabled(true);
// 优先使用窗口管理器中实现的no titlebar接口实现自定义窗口修饰器的效果
if (setEnabledNoTitlebarForWindow(window, true)) {
return;
}
if (!isDXcbPlatform())
return;
QFunctionPointer enable_dxcb = nullptr;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
enable_dxcb = qApp->platformFunction(_enableDxcb);
#endif
if (enable_dxcb) {
(*reinterpret_cast<bool(*)(QWindow*)>(enable_dxcb))(window);
} else if (window->handle()) {
Q_ASSERT_X(window->property(_useDxcb).toBool(), "DPlatformHandler:",
"Must be called before window handle has been created. See also QWindow::handle()");
} else {
window->setProperty(_useDxcb, true);
}
}
/*!
@ -494,16 +549,13 @@ void DPlatformHandle::enableDXcbForWindow(QWindow *window)
dxcb插件的控制 Sub Window
使 redirectContent true
\ref {https://www.x.org/releases/X11R7.5/doc/damageproto/damageproto.txt}{X11 Damage}
\l {https://www.x.org/releases/X11R7.5/doc/damageproto/damageproto.txt}{X11 Damage}
*/
void DPlatformHandle::enableDXcbForWindow(QWindow *window, bool redirectContent)
{
DPlatformHandle handle(window);
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(&handle))) {
impl->enableDXcb(redirectContent);
}
#endif
window->setProperty(_redirectContent, redirectContent);
enableDXcbForWindow(window);
}
/*!
@ -514,11 +566,55 @@ void DPlatformHandle::enableDXcbForWindow(QWindow *window, bool redirectContent)
*/
bool DPlatformHandle::isEnabledDXcb(const QWindow *window)
{
DPlatformHandle handle(const_cast<QWindow *>(window));
auto impl = platformWindowImpl(&handle);
return impl->isEnabled();
if (isEnabledNoTitlebar(window))
return true;
QFunctionPointer is_enable_dxcb = nullptr;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
is_enable_dxcb = qApp->platformFunction(_isEnableDxcb);
#endif
if (is_enable_dxcb) {
return (*reinterpret_cast<bool(*)(const QWindow*)>(is_enable_dxcb))(window);
}
return window->property(_useDxcb).toBool();
}
static void initWindowRadius(QWindow *window)
{
if (window->property(_windowRadius).isValid())
return;
auto theme = DGuiApplicationHelper::instance()->windowTheme(window);
int radius = theme->windowRadius(18); //###(zccrs): 暂时在此处给窗口默认设置为18px的圆角
setWindowProperty(window, _windowRadius, radius);
window->connect(theme, &DPlatformTheme::windowRadiusChanged, window, [=] (int radius) {
if (!resolved(window, PropRole::WindowRadius))
setWindowProperty(window, _windowRadius, radius);
}, Qt::UniqueConnection);
}
class Q_DECL_HIDDEN CreatorWindowEventFile : public QObject {
public:
CreatorWindowEventFile(QObject *par= nullptr): QObject(par){}
public:
bool eventFilter(QObject *watched, QEvent *event) override {
if (event->type() == QEvent::PlatformSurface) {
QPlatformSurfaceEvent *se = static_cast<QPlatformSurfaceEvent*>(event);
if (se->surfaceEventType() == QPlatformSurfaceEvent::SurfaceCreated) { // 若收到此信号, 则 WinID 已被创建
initWindowRadius(qobject_cast<QWindow *>(watched));
deleteLater();
}
}
return QObject::eventFilter(watched, event);
}
};
/*!
\brief DPlatformHandle::setEnabledNoTitlebarForWindow.
@ -533,9 +629,35 @@ bool DPlatformHandle::isEnabledDXcb(const QWindow *window)
*/
bool DPlatformHandle::setEnabledNoTitlebarForWindow(QWindow *window, bool enable)
{
DPlatformHandle handle(window);
auto impl = platformWindowImpl(&handle);
return impl->setEnabledNoTitlebar(enable);
auto isDWaylandPlatform = [] {
return qApp->platformName() == "dwayland" || qApp->property("_d_isDwayland").toBool();
};
if (!(isDXcbPlatform() || isDWaylandPlatform()))
return false;
if (isEnabledNoTitlebar(window) == enable)
return true;
QFunctionPointer enable_no_titlear = nullptr;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
enable_no_titlear = qApp->platformFunction(_setEnableNoTitlebar);
#endif
if (enable_no_titlear) {
bool ok = (*reinterpret_cast<bool(*)(QWindow*, bool)>(enable_no_titlear))(window, enable);
if (ok && enable) {
if (window->handle()) {
initWindowRadius(window);
} else {
window->installEventFilter(new CreatorWindowEventFile(window));
}
}
return ok;
}
return false;
}
/*!
@ -546,9 +668,34 @@ bool DPlatformHandle::setEnabledNoTitlebarForWindow(QWindow *window, bool enable
*/
bool DPlatformHandle::isEnabledNoTitlebar(const QWindow *window)
{
DPlatformHandle handle(const_cast<QWindow *>(window));
auto impl = platformWindowImpl(&handle);
return impl->isEnabledNoTitlebar();
QFunctionPointer is_enable_no_titlebar = nullptr;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
is_enable_no_titlebar = qApp->platformFunction(_isEnableNoTitlebar);
#endif
if (is_enable_no_titlebar) {
return (*reinterpret_cast<bool(*)(const QWindow*)>(is_enable_no_titlebar))(window);
}
return false;
}
inline DPlatformHandle::WMBlurArea operator *(const DPlatformHandle::WMBlurArea &area, qreal scale)
{
if (qFuzzyCompare(scale, 1.0))
return area;
DPlatformHandle::WMBlurArea new_area;
new_area.x = qRound64(area.x * scale);
new_area.y = qRound64(area.y * scale);
new_area.width = qRound64(area.width * scale);
new_area.height = qRound64(area.height * scale);
new_area.xRadius = qRound64(area.xRadius * scale);
new_area.yRaduis = qRound64(area.yRaduis * scale);
return new_area;
}
/*!
@ -595,14 +742,64 @@ bool DPlatformHandle::isEnabledNoTitlebar(const QWindow *window)
*/
bool DPlatformHandle::setWindowBlurAreaByWM(QWindow *window, const QVector<DPlatformHandle::WMBlurArea> &area)
{
DPlatformHandle handle(const_cast<QWindow *>(window));
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(&handle))) {
return impl->setWindowBlurArea(area);
if (!window) {
return false;
}
#endif
handle.setEnableBlurWindow(true);
if (isEnabledDXcb(window)) {
setWindowProperty(window, _windowBlurAreas, QVariant::fromValue(*(reinterpret_cast<const QVector<quint32>*>(&area))));
return true;
}
QFunctionPointer setWmBlurWindowBackgroundArea = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
setWmBlurWindowBackgroundArea = qApp->platformFunction(_setWmBlurWindowBackgroundArea);
#endif
if (!setWmBlurWindowBackgroundArea) {
qWarning("setWindowBlurAreaByWM is not support");
return false;
}
QSurfaceFormat format = window->format();
format.setAlphaBufferSize(8);
window->setFormat(format);
const qreal device_ratio = window->devicePixelRatio();
if (qFuzzyCompare(device_ratio, 1.0)) {
return reinterpret_cast<bool(*)(const quint32, const QVector<WMBlurArea>&)>(setWmBlurWindowBackgroundArea)(window->winId(), area);
}
QVector<WMBlurArea> new_areas;
new_areas.reserve(area.size());
for (const WMBlurArea &a : area) {
new_areas.append(a * device_ratio);
}
return reinterpret_cast<bool(*)(const quint32, const QVector<WMBlurArea>&)>(setWmBlurWindowBackgroundArea)(window->winId(), new_areas);
}
inline QPainterPath operator *(const QPainterPath &path, qreal scale)
{
if (qFuzzyCompare(1.0, scale))
return path;
QPainterPath new_path = path;
for (int i = 0; i < path.elementCount(); ++i) {
const QPainterPath::Element &e = path.elementAt(i);
new_path.setElementPositionAt(i, qRound(e.x * scale), qRound(e.y * scale));
}
return new_path;
}
/*!
@ -651,14 +848,48 @@ bool DPlatformHandle::setWindowBlurAreaByWM(QWindow *window, const QVector<DPlat
*/
bool DPlatformHandle::setWindowBlurAreaByWM(QWindow *window, const QList<QPainterPath> &paths)
{
DPlatformHandle handle(const_cast<QWindow *>(window));
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(&handle))) {
return impl->setWindowBlurArea(paths);
if (!window) {
return false;
}
#endif
handle.setEnableBlurWindow(true);
if (isEnabledDXcb(window)) {
setWindowProperty(window, _windowBlurPaths, QVariant::fromValue(paths));
return true;
}
QFunctionPointer setWmBlurWindowBackgroundPathList = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
setWmBlurWindowBackgroundPathList = qApp->platformFunction(_setWmBlurWindowBackgroundPathList);
#endif
if (!setWmBlurWindowBackgroundPathList) {
qWarning("setWindowBlurAreaByWM is not support");
return false;
}
QSurfaceFormat format = window->format();
format.setAlphaBufferSize(8);
window->setFormat(format);
const qreal device_ratio = window->devicePixelRatio();
if (qFuzzyCompare(device_ratio, 1.0)) {
return reinterpret_cast<bool(*)(const quint32, const QList<QPainterPath>&)>(setWmBlurWindowBackgroundPathList)(window->winId(), paths);
}
QList<QPainterPath> new_paths;
new_paths.reserve(paths.size());
for (const QPainterPath &p : paths) {
new_paths.append(p * device_ratio);
}
return reinterpret_cast<bool(*)(const quint32, const QList<QPainterPath>&)>(setWmBlurWindowBackgroundPathList)(window->winId(), new_paths);
}
/*!
@ -700,13 +931,49 @@ bool DPlatformHandle::setWindowBlurAreaByWM(QWindow *window, const QList<QPainte
*/
bool DPlatformHandle::setWindowWallpaperParaByWM(QWindow *window, const QRect &area, WallpaperScaleMode sMode, WallpaperFillMode fMode)
{
DPlatformHandle handle(window);
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(&handle))) {
return impl->setWindowWallpaperPara(area, sMode, fMode);
}
#endif
if (!window) {
return false;
}
QFunctionPointer setWmWallpaperParameter = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
setWmWallpaperParameter = qApp->platformFunction(_setWmWallpaperParameter);
#endif
if (!setWmWallpaperParameter) {
qWarning("setWindowWallpaperParaByWM is not support");
return false;
}
QSurfaceFormat format = window->format();
format.setAlphaBufferSize(8);
window->setFormat(format);
quint32 bMode = sMode | fMode;
// 激活 backing store
window->setProperty("_d_dxcb_wallpaper", QVariant::fromValue(QPair<QRect, int>(area, bMode)));
if (!window->handle()) {
return true;
} else {
qWarning() << "because the window handle has been created, so 2D mode will have no effect";
}
const qreal device_ratio = window->devicePixelRatio();
if (qFuzzyCompare(device_ratio, 1.0) || !area.isValid()) {
return reinterpret_cast<bool(*)(const quint32, const QRect&, const quint32)>(setWmWallpaperParameter)(window->winId(), area, bMode);
}
QRect new_area(area.x() * device_ratio,
area.y() * device_ratio,
area.width() * device_ratio,
area.height() * device_ratio);
return reinterpret_cast<bool(*)(const quint32, const QRect&, const quint32)>(setWmWallpaperParameter)(window->winId(), new_area, bMode);
}
/*!
@ -719,10 +986,11 @@ bool DPlatformHandle::setWindowWallpaperParaByWM(QWindow *window, const QRect &a
*/
bool DPlatformHandle::connectWindowManagerChangedSignal(QObject *object, std::function<void ()> slot)
{
#ifndef DTK_DISABLE_XCB
return DXCBPlatformWindowInterface::connectWindowManagerChangedSignal(object, slot);
#endif
return false;
if (object) {
return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::windowManagerChanged, object, slot);
}
return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::windowManagerChanged, slot);
}
/*!
@ -736,10 +1004,11 @@ bool DPlatformHandle::connectWindowManagerChangedSignal(QObject *object, std::fu
*/
bool DPlatformHandle::connectHasBlurWindowChanged(QObject *object, std::function<void ()> slot)
{
#ifndef DTK_DISABLE_XCB
return DXCBPlatformWindowInterface::connectHasBlurWindowChanged(object, slot);
#endif
return false;
if (object) {
return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasBlurWindowChanged, object, slot);
}
return QObject::connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasBlurWindowChanged, slot);
}
/*!
@ -777,228 +1046,204 @@ bool DPlatformHandle::setWindowBlurAreaByWM(const QList<QPainterPath> &paths)
*/
void DPlatformHandle::setDisableWindowOverrideCursor(QWindow *window, bool disable)
{
DPlatformHandle handler(window);
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(&handler))) {
impl->setDisableWindowOverrideCursor(disable);
}
#endif
window->setProperty(_disableOverrideCursor, disable);
}
int DPlatformHandle::windowRadius() const
{
auto impl = platformWindowImpl(this);
return impl->windowRadius();
return m_window->property(_windowRadius).toInt();
}
int DPlatformHandle::borderWidth() const
{
auto impl = platformWindowImpl(this);
return impl->borderWidth();
return m_window->property(_borderWidth).toInt();
}
QColor DPlatformHandle::borderColor() const
{
auto impl = platformWindowImpl(this);
return impl->borderColor();
return qvariant_cast<QColor>(m_window->property(_borderColor));
}
int DPlatformHandle::shadowRadius() const
{
auto impl = platformWindowImpl(this);
return impl->shadowRadius();
return m_window->property(_shadowRadius).toInt();
}
QPoint DPlatformHandle::shadowOffset() const
{
auto impl = platformWindowImpl(this);
return impl->shadowOffset();
return m_window->property(_shadowOffset).toPoint();
}
QColor DPlatformHandle::shadowColor() const
{
auto impl = platformWindowImpl(this);
return impl->shadowColor();
}
DPlatformHandle::EffectScene DPlatformHandle::windowEffect()
{
auto impl = platformWindowImpl(this);
return impl->windowEffect();
}
DPlatformHandle::EffectType DPlatformHandle::windowStartUpEffect()
{
auto impl = platformWindowImpl(this);
return impl->windowStartUpEffect();
return qvariant_cast<QColor>(m_window->property(_shadowColor));
}
QPainterPath DPlatformHandle::clipPath() const
{
auto impl = platformWindowImpl(this);
return impl->clipPath();
return qvariant_cast<QPainterPath>(m_window->property(_clipPath));
}
QRegion DPlatformHandle::frameMask() const
{
auto impl = platformWindowImpl(this);
return impl->frameMask();
return qvariant_cast<QRegion>(m_window->property(_frameMask));
}
QMargins DPlatformHandle::frameMargins() const
{
auto impl = platformWindowImpl(this);
return impl->frameMargins();
return qvariant_cast<QMargins>(m_window->property(_frameMargins));
}
bool DPlatformHandle::translucentBackground() const
{
auto impl = platformWindowImpl(this);
return impl->translucentBackground();
return m_window->property(_translucentBackground).toBool();
}
bool DPlatformHandle::enableSystemResize() const
{
auto impl = platformWindowImpl(this);
return impl->enableSystemResize();
return m_window->property(_enableSystemResize).toBool();
}
bool DPlatformHandle::enableSystemMove() const
{
auto impl = platformWindowImpl(this);
return impl->enableSystemMove();
return m_window->property(_enableSystemMove).toBool();
}
bool DPlatformHandle::enableBlurWindow() const
{
auto impl = platformWindowImpl(this);
return impl->enableBlurWindow();
return m_window->property(_enableBlurWindow).toBool();
}
bool DPlatformHandle::autoInputMaskByClipPath() const
{
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(this))) {
return impl->autoInputMaskByClipPath();
}
#endif
return false;
return m_window->property(_autoInputMaskByClipPath).toBool();
}
WId DPlatformHandle::realWindowId() const
{
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(this))) {
return impl->realWindowId();
}
#endif
return 0;
return qvariant_cast<WId>(m_window->property("_d_real_content_window"));
}
WId DPlatformHandle::windowLeader()
{
#ifndef DTK_DISABLE_XCB
return DXCBPlatformWindowInterface::windowLeader();
QFunctionPointer clientLeader = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
clientLeader = qApp->platformFunction(_clientLeader);
#endif
if (!clientLeader) {
return 0;
}
return reinterpret_cast<quint32(*)()>(clientLeader)();
}
void DPlatformHandle::setWindowRadius(int windowRadius)
{
auto impl = platformWindowImpl(this);
impl->setWindowRadius(windowRadius);
setWindowProperty(m_window, _windowRadius, windowRadius);
resolve(m_window, PropRole::WindowRadius);
}
void DPlatformHandle::setBorderWidth(int borderWidth)
{
auto impl = platformWindowImpl(this);
impl->setBorderWidth(borderWidth);
setWindowProperty(m_window, _borderWidth, borderWidth);
}
void DPlatformHandle::setBorderColor(const QColor &borderColor)
{
auto impl = platformWindowImpl(this);
impl->setBorderColor(borderColor);
}
void DPlatformHandle::setWindowEffect(DPlatformHandle::EffectScenes effectScene)
{
auto impl = platformWindowImpl(this);
impl->setWindowEffect(effectScene);
}
void DPlatformHandle::setWindowStartUpEffect(DPlatformHandle::EffectTypes effectType)
{
auto impl = platformWindowImpl(this);
impl->setWindowStartUpEffect(effectType);
setWindowProperty(m_window, _borderColor, QVariant::fromValue(borderColor));
}
void DPlatformHandle::setShadowRadius(int shadowRadius)
{
auto impl = platformWindowImpl(this);
impl->setShadowRadius(shadowRadius);
setWindowProperty(m_window, _shadowRadius, shadowRadius);
}
void DPlatformHandle::setShadowOffset(const QPoint &shadowOffset)
{
auto impl = platformWindowImpl(this);
impl->setShadowOffset(shadowOffset);
setWindowProperty(m_window, _shadowOffset, shadowOffset);
}
void DPlatformHandle::setShadowColor(const QColor &shadowColor)
{
auto impl = platformWindowImpl(this);
impl->setShadowColor(shadowColor);
setWindowProperty(m_window, _shadowColor, QVariant::fromValue(shadowColor));
}
void DPlatformHandle::setClipPath(const QPainterPath &clipPath)
{
auto impl = platformWindowImpl(this);
impl->setClipPath(clipPath);
setWindowProperty(m_window, _clipPath, QVariant::fromValue(clipPath));
}
void DPlatformHandle::setFrameMask(const QRegion &frameMask)
{
auto impl = platformWindowImpl(this);
impl->setFrameMask(frameMask);
setWindowProperty(m_window, _frameMask, QVariant::fromValue(frameMask));
}
void DPlatformHandle::setTranslucentBackground(bool translucentBackground)
{
auto impl = platformWindowImpl(this);
impl->setTranslucentBackground(translucentBackground);
setWindowProperty(m_window, _translucentBackground, translucentBackground);
}
void DPlatformHandle::setEnableSystemResize(bool enableSystemResize)
{
auto impl = platformWindowImpl(this);
impl->setEnableSystemResize(enableSystemResize);
setWindowProperty(m_window, _enableSystemResize, enableSystemResize);
}
void DPlatformHandle::setEnableSystemMove(bool enableSystemMove)
{
auto impl = platformWindowImpl(this);
impl->setEnableSystemMove(enableSystemMove);
setWindowProperty(m_window, _enableSystemMove, enableSystemMove);
}
void DPlatformHandle::setEnableBlurWindow(bool enableBlurWindow)
{
auto impl = platformWindowImpl(this);
impl->setEnableBlurWindow(enableBlurWindow);
setWindowProperty(m_window, _enableBlurWindow, enableBlurWindow);
}
void DPlatformHandle::setAutoInputMaskByClipPath(bool autoInputMaskByClipPath)
{
#ifndef DTK_DISABLE_XCB
if (auto impl = dynamic_cast<DXCBPlatformWindowInterface *>(platformWindowImpl(this))) {
impl->setAutoInputMaskByClipPath(autoInputMaskByClipPath);
}
#endif
setWindowProperty(m_window, _autoInputMaskByClipPath, autoInputMaskByClipPath);
}
bool DPlatformHandle::eventFilter(QObject *obj, QEvent *event)
{
return QObject::eventFilter(obj, event);
if (obj == m_window) {
if (event->type() == QEvent::DynamicPropertyChange) {
QDynamicPropertyChangeEvent *e = static_cast<QDynamicPropertyChangeEvent *>(event);
if (e->propertyName() == _windowRadius) {
Q_EMIT windowRadiusChanged();
} else if (e->propertyName() == _borderWidth) {
Q_EMIT borderWidthChanged();
} else if (e->propertyName() == _borderColor) {
Q_EMIT borderColorChanged();
} else if (e->propertyName() == _shadowRadius) {
Q_EMIT shadowRadiusChanged();
} else if (e->propertyName() == _shadowOffset) {
Q_EMIT shadowOffsetChanged();
} else if (e->propertyName() == _shadowColor) {
Q_EMIT shadowColorChanged();
} else if (e->propertyName() == _clipPath) {
Q_EMIT clipPathChanged();
} else if (e->propertyName() == _frameMask) {
Q_EMIT frameMaskChanged();
} else if (e->propertyName() == _frameMargins) {
Q_EMIT frameMarginsChanged();
} else if (e->propertyName() == _translucentBackground) {
Q_EMIT translucentBackgroundChanged();
} else if (e->propertyName() == _enableSystemResize) {
Q_EMIT enableSystemResizeChanged();
} else if (e->propertyName() == _enableSystemMove) {
Q_EMIT enableSystemMoveChanged();
} else if (e->propertyName() == _enableBlurWindow) {
Q_EMIT enableBlurWindowChanged();
} else if (e->propertyName() == _autoInputMaskByClipPath) {
Q_EMIT autoInputMaskByClipPathChanged();
}
}
}
return false;
}
DGUI_END_NAMESPACE

View File

@ -3,33 +3,17 @@
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dplatformtheme.h"
#include "dguiapplicationhelper.h"
#include "private/dplatformtheme_p.h"
#ifndef DTK_DISABLE_XCB
#include "plugins/platform/xcb/dxcbplatforminterface.h"
#endif
#ifndef DTK_DISABLE_TREELAND
#include "plugins/platform/treeland/dtreelandplatforminterface.h"
#endif
#include "private/dplatforminterface_p.h"
#include "orgdeepindtkpreference.hpp"
#include <QVariant>
#include <QTimer>
#include <QMetaProperty>
#include <QDebug>
#include <DGuiApplicationHelper>
#include <functional>
DGUI_BEGIN_NAMESPACE
static DPlatformInterfaceFactory::HelperCreator OutsideInterfaceCreator = nullptr;
void DPlatformInterfaceFactory::registerInterface(HelperCreator creator)
{
OutsideInterfaceCreator = creator;
}
// "/deepin/palette" 为调色板属性的存储位置
// 在x11平台下将使用_DEEPIN_PALETTE作为存储调色板数据的窗口属性
DPlatformThemePrivate::DPlatformThemePrivate(Dtk::Gui::DPlatformTheme *qq)
@ -38,6 +22,76 @@ DPlatformThemePrivate::DPlatformThemePrivate(Dtk::Gui::DPlatformTheme *qq)
}
void DPlatformThemePrivate::_q_onThemePropertyChanged(const QByteArray &name, const QVariant &value)
{
D_Q(DPlatformTheme);
// 转发属性变化的信号此信号来源可能为parent theme或“非调色板”的属性变化。
// 使用队列的形式转发,避免多次发出同样的信号
q->staticMetaObject.invokeMethod(q, "propertyChanged", Qt::QueuedConnection,
Q_ARG(const QByteArray&, name), Q_ARG(const QVariant&, value));
if (QByteArrayLiteral("Gtk/FontName") == name) {
Q_EMIT q->gtkFontNameChanged(value.toByteArray());
return;
}
if (name.startsWith("Qt/DPI/")) {
const QString &screen_name = QString::fromLocal8Bit(name.mid(7));
if (!screen_name.isEmpty()) {
bool ok = false;
int dpi = value.toInt(&ok);
Q_EMIT q->dotsPerInchChanged(screen_name, ok ? dpi : -1);
}
return;
}
if (QByteArrayLiteral("Xft/DPI") == name) {
bool ok = false;
int dpi = value.toInt(&ok);
Q_EMIT q->dotsPerInchChanged(QString(), ok ? dpi : -1);
}
const QByteArrayList &list = name.split('/');
if (list.count() != 2)
return;
QByteArray pn = list.last();
if (pn.isEmpty())
return;
// 转换首字母为小写
pn[0] = QChar(pn.at(0)).toLower().toLatin1();
// 直接使用静态的meta object防止通过metaObject函数调用到dynamic metaobject
const QMetaObject *mo = &DPlatformTheme::staticMetaObject;
int index = mo->indexOfProperty(pn.constData());
if (index < 0)
return;
const QMetaProperty &p = mo->property(index);
bool is_parent_signal = q->sender() != theme;
// 当自己的属性有效时应该忽略父主题的属性变化信号,优先以自身的属性值为准。
if (is_parent_signal && p.read(q).isValid()) {
return;
}
if (p.hasNotifySignal()) {
// invoke会做Q_ASSERT(mobj->cast(object))判断, DPlatformTheme的dynamic metaObject为
// qt5platform-plugin插件的DNativeSettings. 导致崩溃.
// invokeOnGadget与invoke代码逻辑一致, 只是少了异步支持.
if (!p.notifySignal().invokeOnGadget(q, QGenericArgument(value.typeName(), value.constData())))
qWarning() << "_q_onThemePropertyChanged() error when notify signal" << p.notifySignal().name();
}
}
void DPlatformThemePrivate::onQtColorChanged(QPalette::ColorRole role, const QColor &color)
{
if (!palette) {
@ -88,43 +142,8 @@ DPlatformTheme::DPlatformTheme(quint32 window, QObject *parent)
{
D_D(DPlatformTheme);
if (OutsideInterfaceCreator) {
d->platformInterface = OutsideInterfaceCreator(this);
} else {
#ifndef DTK_DISABLE_XCB
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsXWindowPlatform)) {
d->platformInterface = new DXCBPlatformInterface(0, this);
}
#endif
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
d->platformInterface = new DTreelandPlatformInterface(this);
}
#endif
}
if (!d->platformInterface) {
d->platformInterface = new DPlatformInterface(this);
}
d->theme = new DNativeSettings(window, QByteArray(), this);
d->dtkPreferenceConfig = OrgDeepinDTKPreference::createGeneric("", this);
d->sizeMode = static_cast<DGuiApplicationHelper::SizeMode>(d->dtkPreferenceConfig->sizeMode());
d->scrollBarPolicy = static_cast<Qt::ScrollBarPolicy>(d->dtkPreferenceConfig->scrollBarPolicy());
connect(d->dtkPreferenceConfig, &OrgDeepinDTKPreference::sizeModeChanged, this, [this] {
D_D(DPlatformTheme);
d->sizeMode = static_cast<DGuiApplicationHelper::SizeMode>(d->dtkPreferenceConfig->sizeMode());
Q_EMIT sizeModeChanged(d->sizeMode);
});
connect(d->dtkPreferenceConfig, &OrgDeepinDTKPreference::scrollBarPolicyChanged, this, [this] {
D_D(DPlatformTheme);
d->scrollBarPolicy = static_cast<Qt::ScrollBarPolicy>(d->dtkPreferenceConfig->scrollBarPolicy());
Q_EMIT scrollBarPolicyChanged(d->scrollBarPolicy);
});
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
connect(this, &DPlatformTheme::windowChanged, std::bind(&DPlatformThemePrivate::onQtColorChanged, d, QPalette::Window, std::placeholders::_1));
connect(this, &DPlatformTheme::windowTextChanged, std::bind(&DPlatformThemePrivate::onQtColorChanged, d, QPalette::WindowText, std::placeholders::_1));
connect(this, &DPlatformTheme::baseChanged, std::bind(&DPlatformThemePrivate::onQtColorChanged, d, QPalette::Base, std::placeholders::_1));
@ -152,7 +171,8 @@ DPlatformTheme::DPlatformTheme(quint32 window, QObject *parent)
connect(this, &DPlatformTheme::lightLivelyChanged, std::bind(&DPlatformThemePrivate::onDtkColorChanged, d, DPalette::LightLively, std::placeholders::_1));
connect(this, &DPlatformTheme::darkLivelyChanged, std::bind(&DPlatformThemePrivate::onDtkColorChanged, d, DPalette::DarkLively, std::placeholders::_1));
connect(this, &DPlatformTheme::frameBorderChanged, std::bind(&DPlatformThemePrivate::onDtkColorChanged, d, DPalette::FrameBorder, std::placeholders::_1));
#endif
connect(d->theme, SIGNAL(propertyChanged(const QByteArray &, const QVariant &)),
this, SLOT(_q_onThemePropertyChanged(const QByteArray &, const QVariant &)));
}
DPlatformTheme::DPlatformTheme(quint32 window, DPlatformTheme *parent)
@ -173,9 +193,6 @@ DPlatformTheme::~DPlatformTheme()
if (d->palette) {
delete d->palette;
}
if (d->platformInterface) {
delete d->platformInterface;
}
}
bool DPlatformTheme::isValid() const
@ -249,7 +266,7 @@ DPalette DPlatformTheme::fetchPalette(const DPalette &base, bool *ok) const
DPalette palette = base;
if (isValidPalette() && d->palette) {
if (isValidPalette()) {
if (ok) {
*ok = true;
}
@ -280,10 +297,9 @@ DPalette DPlatformTheme::fetchPalette(const DPalette &base, bool *ok) const
void DPlatformTheme::setPalette(const DPalette &palette)
{
Q_UNUSED(palette);
#define SET_PALETTE(Role) \
set##Role(palette.color(QPalette::Normal, DPalette::Role))
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
SET_PALETTE(Window);
SET_PALETTE(WindowText);
SET_PALETTE(Base);
@ -311,109 +327,136 @@ void DPlatformTheme::setPalette(const DPalette &palette)
SET_PALETTE(LightLively);
SET_PALETTE(DarkLively);
SET_PALETTE(FrameBorder);
#endif
}
#define FETCH_PROPERTY(Name, Function) \
D_DC(DPlatformTheme); \
QVariant value = d->theme->getSetting(QByteArrayLiteral(Name)); \
if (d->fallbackProperty && !value.isValid() && d->parent) \
return d->parent->Function(); \
#define FETCH_PROPERTY_WITH_ARGS(Name, Function, Args) \
D_DC(DPlatformTheme); \
QVariant value = d->theme->getSetting(Name); \
if (d->fallbackProperty && !value.isValid() && d->parent) \
return d->parent->Function(Args); \
int DPlatformTheme::cursorBlinkTime() const
{
D_DC(DPlatformTheme);
return d->platformInterface->cursorBlinkTime();
FETCH_PROPERTY("Net/CursorBlinkTime", cursorBlinkTime)
return value.toInt();
}
int DPlatformTheme::cursorBlinkTimeout() const
{
D_DC(DPlatformTheme);
return d->platformInterface->cursorBlinkTimeout();
FETCH_PROPERTY("Net/CursorBlinkTimeout", cursorBlinkTimeout)
return value.toInt();
}
bool DPlatformTheme::cursorBlink() const
{
D_DC(DPlatformTheme);
return d->platformInterface->cursorBlink();
FETCH_PROPERTY("Net/CursorBlink", cursorBlink)
return value.toInt();
}
int DPlatformTheme::doubleClickDistance() const
{
D_DC(DPlatformTheme);
return d->platformInterface->doubleClickDistance();
FETCH_PROPERTY("Net/DoubleClickDistance", doubleClickDistance)
return value.toInt();
}
int DPlatformTheme::doubleClickTime() const
{
D_DC(DPlatformTheme);
return d->platformInterface->doubleClickTime();
FETCH_PROPERTY("Net/DoubleClickTime", doubleClickTime)
return value.toInt();
}
int DPlatformTheme::dndDragThreshold() const
{
D_DC(DPlatformTheme);
return d->platformInterface->dndDragThreshold();
FETCH_PROPERTY("Net/DndDragThreshold", dndDragThreshold)
return value.toInt();
}
int DPlatformTheme::windowRadius() const
{
D_DC(DPlatformTheme);
return d->platformInterface->windowRadius();
return windowRadius(-1);
}
int DPlatformTheme::windowRadius(int defaultValue) const
{
D_DC(DPlatformTheme);
return d->platformInterface->windowRadius(defaultValue);
Q_D(const DPlatformTheme);
QVariant value = d->theme->getSetting(QByteArrayLiteral("DTK/WindowRadius"));
bool ok = false;
if (d->fallbackProperty && !value.isValid() && d->parent)
return d->parent->windowRadius(defaultValue);
int radius = value.toInt(&ok);
return ok ? radius : defaultValue;
}
QByteArray DPlatformTheme::themeName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->themeName();
FETCH_PROPERTY("Net/ThemeName", themeName)
return value.toByteArray();
}
QByteArray DPlatformTheme::iconThemeName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->iconThemeName();
FETCH_PROPERTY("Net/IconThemeName", iconThemeName)
return value.toByteArray();
}
QByteArray DPlatformTheme::soundThemeName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->soundThemeName();
FETCH_PROPERTY("Net/SoundThemeName", soundThemeName)
return value.toByteArray();
}
QByteArray DPlatformTheme::fontName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->fontName();
FETCH_PROPERTY("Qt/FontName", fontName)
return value.toByteArray();
}
QByteArray DPlatformTheme::monoFontName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->monoFontName();
FETCH_PROPERTY("Qt/MonoFontName", monoFontName)
return value.toByteArray();
}
qreal DPlatformTheme::fontPointSize() const
{
D_DC(DPlatformTheme);
return d->platformInterface->fontPointSize();
FETCH_PROPERTY("Qt/FontPointSize", fontPointSize)
return value.toDouble();
}
QByteArray DPlatformTheme::gtkFontName() const
{
D_DC(DPlatformTheme);
return d->platformInterface->gtkFontName();
FETCH_PROPERTY("Gtk/FontName", gtkFontName)
return value.toByteArray();
}
QColor DPlatformTheme::activeColor() const
{
D_DC(DPlatformTheme);
return d->platformInterface->activeColor();
}
FETCH_PROPERTY("Qt/ActiveColor", activeColor)
QColor DPlatformTheme::darkActiveColor() const
{
D_DC(DPlatformTheme);
return d->platformInterface->darkActiveColor();
return qvariant_cast<QColor>(value);
}
bool DPlatformTheme::isValidPalette() const
@ -422,174 +465,157 @@ bool DPlatformTheme::isValidPalette() const
}
#define GET_COLOR(Role) qvariant_cast<QColor>(getSetting(QByteArrayLiteral(#Role)))
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QColor DPlatformTheme::window() const
{
D_DC(DPlatformTheme);
return d->platformInterface->window();
return GET_COLOR(window);
}
QColor DPlatformTheme::windowText() const
{
D_DC(DPlatformTheme);
return d->platformInterface->windowText();
return GET_COLOR(windowText);
}
QColor DPlatformTheme::base() const
{
D_DC(DPlatformTheme);
return d->platformInterface->base();
return GET_COLOR(base);
}
QColor DPlatformTheme::alternateBase() const
{
D_DC(DPlatformTheme);
return d->platformInterface->alternateBase();
return GET_COLOR(alternateBase);
}
QColor DPlatformTheme::toolTipBase() const
{
D_DC(DPlatformTheme);
return d->platformInterface->toolTipBase();
return GET_COLOR(toolTipBase);
}
QColor DPlatformTheme::toolTipText() const
{
D_DC(DPlatformTheme);
return d->platformInterface->toolTipText();
return GET_COLOR(toolTipText);
}
QColor DPlatformTheme::text() const
{
D_DC(DPlatformTheme);
return d->platformInterface->text();
return GET_COLOR(text);
}
QColor DPlatformTheme::button() const
{
D_DC(DPlatformTheme);
return d->platformInterface->button();
return GET_COLOR(button);
}
QColor DPlatformTheme::buttonText() const
{
D_DC(DPlatformTheme);
return d->platformInterface->buttonText();
return GET_COLOR(buttonText);
}
QColor DPlatformTheme::brightText() const
{
D_DC(DPlatformTheme);
return d->platformInterface->brightText();
return GET_COLOR(brightText);
}
QColor DPlatformTheme::light() const
{
D_DC(DPlatformTheme);
return d->platformInterface->light();
return GET_COLOR(light);
}
QColor DPlatformTheme::midlight() const
{
D_DC(DPlatformTheme);
return d->platformInterface->midlight();
return GET_COLOR(midlight);
}
QColor DPlatformTheme::dark() const
{
D_DC(DPlatformTheme);
return d->platformInterface->dark();
return GET_COLOR(dark);
}
QColor DPlatformTheme::mid() const
{
D_DC(DPlatformTheme);
return d->platformInterface->mid();
return GET_COLOR(mid);
}
QColor DPlatformTheme::shadow() const
{
D_DC(DPlatformTheme);
return d->platformInterface->shadow();
return GET_COLOR(shadow);
}
QColor DPlatformTheme::highlight() const
{
D_DC(DPlatformTheme);
return d->platformInterface->highlight();
return GET_COLOR(highlight);
}
QColor DPlatformTheme::highlightedText() const
{
D_DC(DPlatformTheme);
return d->platformInterface->highlightedText();
return GET_COLOR(highlightedText);
}
QColor DPlatformTheme::link() const
{
D_DC(DPlatformTheme);
return d->platformInterface->link();
return GET_COLOR(link);
}
QColor DPlatformTheme::linkVisited() const
{
D_DC(DPlatformTheme);
return d->platformInterface->linkVisited();
return GET_COLOR(linkVisited);
}
QColor DPlatformTheme::itemBackground() const
{
D_DC(DPlatformTheme);
return d->platformInterface->itemBackground();
return GET_COLOR(itemBackground);
}
QColor DPlatformTheme::textTitle() const
{
D_DC(DPlatformTheme);
return d->platformInterface->textTitle();
return GET_COLOR(textTitle);
}
QColor DPlatformTheme::textTips() const
{
D_DC(DPlatformTheme);
return d->platformInterface->textTips();
return GET_COLOR(textTips);
}
QColor DPlatformTheme::textWarning() const
{
D_DC(DPlatformTheme);
return d->platformInterface->textWarning();
return GET_COLOR(textWarning);
}
QColor DPlatformTheme::textLively() const
{
D_DC(DPlatformTheme);
return d->platformInterface->textLively();
return GET_COLOR(textLively);
}
QColor DPlatformTheme::lightLively() const
{
D_DC(DPlatformTheme);
return d->platformInterface->lightLively();
return GET_COLOR(lightLively);
}
QColor DPlatformTheme::darkLively() const
{
D_DC(DPlatformTheme);
return d->platformInterface->darkLively();
return GET_COLOR(darkLively);
}
QColor DPlatformTheme::frameBorder() const
{
D_DC(DPlatformTheme);
return d->platformInterface->frameBorder();
return GET_COLOR(frameBorder);
}
#endif
int DPlatformTheme::dotsPerInch(const QString &screenName) const
{
D_DC(DPlatformTheme);
return d->platformInterface->dotsPerInch(screenName);
bool ok = false;
if (!screenName.isEmpty()) {
FETCH_PROPERTY_WITH_ARGS("Qt/DPI/" + screenName.toLocal8Bit(), dotsPerInch, screenName);
int dpi = value.toInt(&ok);
if (ok)
return dpi;
}
FETCH_PROPERTY_WITH_ARGS("Xft/DPI", dotsPerInch, screenName);
int dpi = value.toInt(&ok);
return ok ? dpi : -1;
}
/*!
@ -599,7 +625,8 @@ int DPlatformTheme::dotsPerInch(const QString &screenName) const
int DPlatformTheme::sizeMode() const
{
D_DC(DPlatformTheme);
return d->sizeMode;
QVariant value = d->theme->getSetting(QByteArrayLiteral("DTK/SizeMode"));
return value.toInt();
}
/*!
@ -611,275 +638,262 @@ int DPlatformTheme::sizeMode() const
*/
int DPlatformTheme::scrollBarPolicy() const
{
D_DC(DPlatformTheme);
return d->scrollBarPolicy;
FETCH_PROPERTY("Qt/ScrollBarPolicy", scrollBarPolicy)
return qvariant_cast<int>(value);
}
void DPlatformTheme::setCursorBlinkTime(int cursorBlinkTime)
{
D_DC(DPlatformTheme);
return d->platformInterface->setCursorBlinkTime(cursorBlinkTime);
D_D(DPlatformTheme);
d->theme->setSetting("Net/CursorBlinkTime", cursorBlinkTime);
}
void DPlatformTheme::setCursorBlinkTimeout(int cursorBlinkTimeout)
{
D_DC(DPlatformTheme);
return d->platformInterface->setCursorBlinkTimeout(cursorBlinkTimeout);
D_D(DPlatformTheme);
d->theme->setSetting("Net/CursorBlinkTimeout", cursorBlinkTimeout);
}
void DPlatformTheme::setCursorBlink(bool cursorBlink)
{
D_DC(DPlatformTheme);
return d->platformInterface->setCursorBlink(cursorBlink);
D_D(DPlatformTheme);
d->theme->setSetting("Net/CursorBlink", cursorBlink);
}
void DPlatformTheme::setDoubleClickDistance(int doubleClickDistance)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDoubleClickDistance(doubleClickDistance);
D_D(DPlatformTheme);
d->theme->setSetting("Net/DoubleClickDistance", doubleClickDistance);
}
void DPlatformTheme::setDoubleClickTime(int doubleClickTime)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDoubleClickTime(doubleClickTime);
D_D(DPlatformTheme);
d->theme->setSetting("Net/DoubleClickTime", doubleClickTime);
}
void DPlatformTheme::setDndDragThreshold(int dndDragThreshold)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDndDragThreshold(dndDragThreshold);
D_D(DPlatformTheme);
d->theme->setSetting("Net/DndDragThreshold", dndDragThreshold);
}
void DPlatformTheme::setThemeName(const QByteArray &themeName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setThemeName(themeName);
D_D(DPlatformTheme);
d->theme->setSetting("Net/ThemeName", themeName);
}
void DPlatformTheme::setIconThemeName(const QByteArray &iconThemeName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setIconThemeName(iconThemeName);
D_D(DPlatformTheme);
d->theme->setSetting("Net/IconThemeName", iconThemeName);
}
void DPlatformTheme::setSoundThemeName(const QByteArray &soundThemeName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setSoundThemeName(soundThemeName);
D_D(DPlatformTheme);
d->theme->setSetting("Net/SoundThemeName", soundThemeName);
}
void DPlatformTheme::setFontName(const QByteArray &fontName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setFontName(fontName);
D_D(DPlatformTheme);
d->theme->setSetting("Qt/FontName", fontName);
}
void DPlatformTheme::setMonoFontName(const QByteArray &monoFontName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setMonoFontName(monoFontName);
D_D(DPlatformTheme);
d->theme->setSetting("Qt/MonoFontName", monoFontName);
}
void DPlatformTheme::setFontPointSize(qreal fontPointSize)
{
D_DC(DPlatformTheme);
return d->platformInterface->setFontPointSize(fontPointSize);
D_D(DPlatformTheme);
d->theme->setSetting("Qt/FontPointSize", fontPointSize);
}
void DPlatformTheme::setGtkFontName(const QByteArray &fontName)
{
D_DC(DPlatformTheme);
return d->platformInterface->setGtkFontName(fontName);
D_D(DPlatformTheme);
d->theme->setSetting("Gtk/FontName", fontName);
}
void DPlatformTheme::setActiveColor(const QColor activeColor)
{
D_DC(DPlatformTheme);
return d->platformInterface->setActiveColor(activeColor);
}
D_D(DPlatformTheme);
void DPlatformTheme::setDarkActiveColor(const QColor &activeColor)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDarkActiveColor(activeColor);
d->theme->setSetting("Qt/ActiveColor", activeColor);
}
#define SET_COLOR(Role) setSetting(QByteArrayLiteral(#Role), Role)
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void DPlatformTheme::setWindow(const QColor &window)
{
D_DC(DPlatformTheme);
return d->platformInterface->setWindow(window);
SET_COLOR(window);
}
void DPlatformTheme::setWindowText(const QColor &windowText)
{
D_DC(DPlatformTheme);
return d->platformInterface->setWindowText(windowText);
SET_COLOR(windowText);
}
void DPlatformTheme::setBase(const QColor &base)
{
D_DC(DPlatformTheme);
return d->platformInterface->setBase(base);
SET_COLOR(base);
}
void DPlatformTheme::setAlternateBase(const QColor &alternateBase)
{
D_DC(DPlatformTheme);
return d->platformInterface->setAlternateBase(alternateBase);
SET_COLOR(alternateBase);
}
void DPlatformTheme::setToolTipBase(const QColor &toolTipBase)
{
D_DC(DPlatformTheme);
return d->platformInterface->setToolTipBase(toolTipBase);
SET_COLOR(toolTipBase);
}
void DPlatformTheme::setToolTipText(const QColor &toolTipText)
{
D_DC(DPlatformTheme);
return d->platformInterface->setToolTipText(toolTipText);
SET_COLOR(toolTipText);
}
void DPlatformTheme::setText(const QColor &text)
{
D_DC(DPlatformTheme);
return d->platformInterface->setText(text);
SET_COLOR(text);
}
void DPlatformTheme::setButton(const QColor &button)
{
D_DC(DPlatformTheme);
return d->platformInterface->setButton(button);
SET_COLOR(button);
}
void DPlatformTheme::setButtonText(const QColor &buttonText)
{
D_DC(DPlatformTheme);
return d->platformInterface->setButtonText(buttonText);
SET_COLOR(buttonText);
}
void DPlatformTheme::setBrightText(const QColor &brightText)
{
D_DC(DPlatformTheme);
return d->platformInterface->setBrightText(brightText);
SET_COLOR(brightText);
}
void DPlatformTheme::setLight(const QColor &light)
{
D_DC(DPlatformTheme);
return d->platformInterface->setLight(light);
SET_COLOR(light);
}
void DPlatformTheme::setMidlight(const QColor &midlight)
{
D_DC(DPlatformTheme);
return d->platformInterface->setMidlight(midlight);
SET_COLOR(midlight);
}
void DPlatformTheme::setDark(const QColor &dark)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDark(dark);
SET_COLOR(dark);
}
void DPlatformTheme::setMid(const QColor &mid)
{
D_DC(DPlatformTheme);
return d->platformInterface->setMid(mid);
SET_COLOR(mid);
}
void DPlatformTheme::setShadow(const QColor &shadow)
{
D_DC(DPlatformTheme);
return d->platformInterface->setShadow(shadow);
SET_COLOR(shadow);
}
void DPlatformTheme::setHighlight(const QColor &highlight)
{
D_DC(DPlatformTheme);
return d->platformInterface->setHighlight(highlight);
SET_COLOR(highlight);
}
void DPlatformTheme::setHighlightedText(const QColor &highlightText)
{
D_DC(DPlatformTheme);
return d->platformInterface->setHighlightedText(highlightText);
SET_COLOR(highlightText);
}
void DPlatformTheme::setLink(const QColor &link)
{
D_DC(DPlatformTheme);
return d->platformInterface->setLink(link);
SET_COLOR(link);
}
void DPlatformTheme::setLinkVisited(const QColor &linkVisited)
{
D_DC(DPlatformTheme);
return d->platformInterface->setLinkVisited(linkVisited);
SET_COLOR(linkVisited);
}
void DPlatformTheme::setItemBackground(const QColor &itemBackground)
{
D_DC(DPlatformTheme);
return d->platformInterface->setItemBackground(itemBackground);
SET_COLOR(itemBackground);
}
void DPlatformTheme::setTextTitle(const QColor &textTitle)
{
D_DC(DPlatformTheme);
return d->platformInterface->setTextTitle(textTitle);
SET_COLOR(textTitle);
}
void DPlatformTheme::setTextTips(const QColor &textTips)
{
D_DC(DPlatformTheme);
return d->platformInterface->setTextTips(textTips);
SET_COLOR(textTips);
}
void DPlatformTheme::setTextWarning(const QColor &textWarning)
{
D_DC(DPlatformTheme);
return d->platformInterface->setTextWarning(textWarning);
SET_COLOR(textWarning);
}
void DPlatformTheme::setTextLively(const QColor &textLively)
{
D_DC(DPlatformTheme);
return d->platformInterface->setTextLively(textLively);
SET_COLOR(textLively);
}
void DPlatformTheme::setLightLively(const QColor &lightLively)
{
D_DC(DPlatformTheme);
return d->platformInterface->setLightLively(lightLively);
SET_COLOR(lightLively);
}
void DPlatformTheme::setDarkLively(const QColor &darkLively)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDarkLively(darkLively);
SET_COLOR(darkLively);
}
void DPlatformTheme::setFrameBorder(const QColor &frameBorder)
{
D_DC(DPlatformTheme);
return d->platformInterface->setFrameBorder(frameBorder);
SET_COLOR(frameBorder);
}
#endif
void DPlatformTheme::setDotsPerInch(const QString &screenName, int dpi)
{
D_DC(DPlatformTheme);
return d->platformInterface->setDotsPerInch(screenName, dpi);
D_D(DPlatformTheme);
if (screenName.isEmpty()) {
d->theme->setSetting("Xft/DPI", dpi);
} else {
d->theme->setSetting("Qt/DPI/" + screenName.toLocal8Bit(), dpi);
}
}
void DPlatformTheme::setWindowRadius(int windowRadius)
{
D_DC(DPlatformTheme);
return d->platformInterface->setWindowRadius(windowRadius);
D_D(DPlatformTheme);
d->theme->setSetting("DTK/WindowRadius", windowRadius);
}
DGUI_END_NAMESPACE

View File

@ -22,13 +22,13 @@ DGUI_BEGIN_NAMESPACE
\enum DRegionMonitor::RegisterdFlag
DRegionMonitor::RegisterdFlag DRegionMonitor
\var Motion
\value Motion
\var Button
\value Button
\var Key
\value Key
*/

View File

@ -102,7 +102,7 @@ bool DWindowGroupLeaderPrivate::setWindowGroupLeader(quint32 window, quint32 gro
\image wa_wb_topWindow.gif
QWindow::setTransientParent Qt::Dialog WM_TRANSIENT_FOR
X11 ICCCM
\ref {https://tronche.com/gui/x/icccm/sec-4.html#WM_TRANSIENT_FOR}
\l {https://tronche.com/gui/x/icccm/sec-4.html#WM_TRANSIENT_FOR}
\sa DWindowGroupLeader::clientLeaderId
\sa Dtk::Widget::DApplication::loadDXcbPlugin
*/

View File

@ -9,25 +9,12 @@
#include <DGuiApplicationHelper>
#include <QGuiApplication>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <qpa/qplatformwindow_p.h>
#define D_XCB_WINDOW_TYPE QNativeInterface::Private::QXcbWindow::WindowType
#else
#include <QtPlatformHeaders/QXcbWindowFunctions>
#define D_XCB_WINDOW_TYPE QXcbWindowFunctions::WmWindowType
#endif
#include <QtPlatformHeaders/QXcbWindowFunctions>
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformnativeinterface.h>
#include <functional>
#ifndef DTK_DISABLE_TREELAND
#include "plugins/platform/treeland/dtreelandwindowmanagerhelper.h"
#endif
DGUI_BEGIN_NAMESPACE
#define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
@ -57,53 +44,81 @@ DEFINE_CONST_CHAR(connectWindowMotifWMHintsChanged);
DEFINE_CONST_CHAR(popupSystemWindowMenu);
DEFINE_CONST_CHAR(setWMClassName);
template<typename ReturnT, typename FunctionT, typename... Args>
static inline ReturnT callPlatformFunction(const QByteArray &funcName, Args... args)
{
QFunctionPointer func = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
func = qApp->platformFunction(funcName);
#endif
return func ? reinterpret_cast<FunctionT>(func)(args...) : ReturnT();
}
typedef bool(*func_t)(QObject *object, std::function<void ()>);
static bool connectWindowManagerChangedSignal(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectWindowManagerChangedSignal, object, slot);
QFunctionPointer connectWindowManagerChangedSignal = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectWindowManagerChangedSignal = qApp->platformFunction(_connectWindowManagerChangedSignal);
#endif
return connectWindowManagerChangedSignal && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectWindowManagerChangedSignal)(object, slot);
}
static bool connectHasBlurWindowChanged(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectHasBlurWindowChanged, object, slot);
QFunctionPointer connectHasBlurWindowChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectHasBlurWindowChanged = qApp->platformFunction(_connectHasBlurWindowChanged);
#endif
return connectHasBlurWindowChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasBlurWindowChanged)(object, slot);
}
static bool connectHasCompositeChanged(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectHasCompositeChanged, object, slot);
QFunctionPointer connectHasCompositeChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectHasCompositeChanged = qApp->platformFunction(_connectHasCompositeChanged);
#endif
return connectHasCompositeChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasCompositeChanged)(object, slot);
}
static bool connectHasNoTitlebarChanged(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectHasNoTitlebarChanged, object, slot);
QFunctionPointer connectHasNoTitlebarChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectHasNoTitlebarChanged = qApp->platformFunction(_connectHasNoTitlebarChanged);
#endif
return connectHasNoTitlebarChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasNoTitlebarChanged)(object, slot);
}
static bool connectHasWallpaperEffectChanged(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectHasWallpaperEffectChanged, object, slot);
QFunctionPointer connectHasWallpaperEffectChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectHasWallpaperEffectChanged = qApp->platformFunction(_connectHasWallpaperEffectChanged);
#endif
return connectHasWallpaperEffectChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectHasWallpaperEffectChanged)(object, slot);
}
static bool connectWindowListChanged(QObject *object, std::function<void ()> slot)
{
return callPlatformFunction<bool, func_t>(_connectWindowListChanged, object, slot);
QFunctionPointer connectWindowListChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectWindowListChanged = qApp->platformFunction(_connectWindowListChanged);
#endif
return connectWindowListChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void ()>)>(connectWindowListChanged)(object, slot);
}
static bool connectWindowMotifWMHintsChanged(QObject *object, std::function<void (quint32)> slot)
{
typedef bool(*quint32_func_t)(QObject *object, std::function<void (quint32)>);
return callPlatformFunction<bool, quint32_func_t>(_connectWindowMotifWMHintsChanged, object, slot);
QFunctionPointer connectWindowMotifWMHintsChanged = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
connectWindowMotifWMHintsChanged = qApp->platformFunction(_connectWindowMotifWMHintsChanged);
#endif
return connectWindowMotifWMHintsChanged && reinterpret_cast<bool(*)(QObject *object, std::function<void (quint32)>)>(connectWindowMotifWMHintsChanged)(object, slot);
}
class DWindowManagerHelperPrivate : public DTK_CORE_NAMESPACE::DObjectPrivate
@ -115,11 +130,6 @@ public:
mutable QList<DForeignWindow *> windowList;
};
// TODO abstract an interface to adapt to various WM.
#ifndef DTK_DISABLE_TREELAND
Q_GLOBAL_STATIC(TreelandWindowManagerHelper, treelandWMHGlobal)
#endif
class DWindowManagerHelper_ : public DWindowManagerHelper {};
Q_GLOBAL_STATIC(DWindowManagerHelper_, wmhGlobal)
@ -332,11 +342,6 @@ DWindowManagerHelper::~DWindowManagerHelper()
*/
DWindowManagerHelper *DWindowManagerHelper::instance()
{
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
return treelandWMHGlobal;
}
#endif
return wmhGlobal;
}
@ -489,17 +494,7 @@ DWindowManagerHelper::MotifDecorations DWindowManagerHelper::getMotifDecorations
void DWindowManagerHelper::setWmWindowTypes(QWindow *window, WmWindowTypes types)
{
const int _types = static_cast<int>(types);
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
typedef QNativeInterface::Private::QXcbWindow QXcbWindow_P;
if (auto w = dynamic_cast<QXcbWindow_P *>(window->handle())) {
w->setWindowType(static_cast<D_XCB_WINDOW_TYPE>(_types));
} else {
qWarning() << "cast" << window << "to platform window failed";
}
#else
QXcbWindowFunctions::setWmWindowType(window, static_cast<D_XCB_WINDOW_TYPE>(_types));
#endif
QXcbWindowFunctions::setWmWindowType(window, static_cast<QXcbWindowFunctions::WmWindowType>(_types));
}
/*!
@ -512,7 +507,7 @@ void DWindowManagerHelper::setWmWindowTypes(QWindow *window, WmWindowTypes types
void DWindowManagerHelper::setWmClassName(const QByteArray &name)
{
typedef void (*SetWmNameType)(const QByteArray&);
return callPlatformFunction<void, SetWmNameType>(_setWMClassName, name);
return QPlatformHeaderHelper::callPlatformFunction<void, SetWmNameType>(_setWMClassName, name);
}
/*!
@ -524,7 +519,15 @@ void DWindowManagerHelper::setWmClassName(const QByteArray &name)
*/
void DWindowManagerHelper::popupSystemWindowMenu(const QWindow *window)
{
return callPlatformFunction<void, void(*)(quint32)>(_popupSystemWindowMenu, quint32(window->handle()->winId()));
QFunctionPointer popupSystemWindowMenu = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
popupSystemWindowMenu = qApp->platformFunction(_popupSystemWindowMenu);
#endif
if (popupSystemWindowMenu && window->handle()) {
reinterpret_cast<void(*)(quint32)>(popupSystemWindowMenu)(window->handle()->winId());
}
}
/*!
@ -533,12 +536,13 @@ void DWindowManagerHelper::popupSystemWindowMenu(const QWindow *window)
*/
bool DWindowManagerHelper::hasBlurWindow() const
{
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
return treelandWMHGlobal->hasBlurWindow();
}
QFunctionPointer wmHasBlurWindow = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
wmHasBlurWindow = qApp->platformFunction(_hasBlurWindow);
#endif
return callPlatformFunction<bool, bool(*)()>(_hasBlurWindow);
return wmHasBlurWindow && reinterpret_cast<bool(*)()>(wmHasBlurWindow)();
}
/*!
@ -547,12 +551,6 @@ bool DWindowManagerHelper::hasBlurWindow() const
*/
bool DWindowManagerHelper::hasComposite() const
{
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
return treelandWMHGlobal->hasComposite();
}
#endif
QFunctionPointer hasComposite = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
@ -573,7 +571,7 @@ bool DWindowManagerHelper::hasComposite() const
return true;
}
return callPlatformFunction<bool, bool(*)()>(_hasComposite);
return reinterpret_cast<bool(*)()>(hasComposite)();
}
/*!
@ -582,12 +580,13 @@ bool DWindowManagerHelper::hasComposite() const
*/
bool DWindowManagerHelper::hasNoTitlebar() const
{
#ifndef DTK_DISABLE_TREELAND
if (DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) {
return treelandWMHGlobal->hasNoTitlebar();
}
QFunctionPointer hasNoTitlebar = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
hasNoTitlebar = qApp->platformFunction(_hasNoTitlebar);
#endif
return callPlatformFunction<bool, bool(*)()>(_hasNoTitlebar);
return hasNoTitlebar && reinterpret_cast<bool(*)()>(hasNoTitlebar)();
}
/*!
@ -596,19 +595,31 @@ bool DWindowManagerHelper::hasNoTitlebar() const
*/
bool DWindowManagerHelper::hasWallpaperEffect() const
{
return callPlatformFunction<bool, bool(*)()>(_hasWallpaperEffect);
QFunctionPointer hasWallpaperEffect = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
hasWallpaperEffect = qApp->platformFunction(_hasWallpaperEffect);
#endif
return hasWallpaperEffect && reinterpret_cast<bool(*)()>(hasWallpaperEffect)();
}
/*!
\brief DWindowManagerHelper::windowManagerNameString
\return X11平台上 _NET_WM_NAME
\ref {https://specifications.freedesktop.org/wm-spec/1.3/ar01s03.html}{_NET_SUPPORTING_WM_CHECK}
\ref {https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html}{_NET_WM_NAME}
\l {https://specifications.freedesktop.org/wm-spec/1.3/ar01s03.html}{_NET_SUPPORTING_WM_CHECK}
\l {https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html}{_NET_WM_NAME}
*/
QString DWindowManagerHelper::windowManagerNameString() const
{
return callPlatformFunction<QString, QString(*)()>(_windowManagerName);
QFunctionPointer windowManagerName = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
windowManagerName = qApp->platformFunction(_windowManagerName);
#endif
return windowManagerName ? reinterpret_cast<QString(*)()>(windowManagerName)() : QString();
}
/*!
@ -639,7 +650,15 @@ DWindowManagerHelper::WMName DWindowManagerHelper::windowManagerName() const
*/
QVector<quint32> DWindowManagerHelper::allWindowIdList() const
{
return callPlatformFunction<QVector<quint32>, QVector<quint32>(*)()>(_getWindows);
QFunctionPointer wmClientList = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
wmClientList = qApp->platformFunction(_getWindows);
#endif
if (!wmClientList) return QVector<quint32>();
return reinterpret_cast<QVector<quint32>(*)()>(wmClientList)();
}
/*!
@ -650,7 +669,15 @@ QVector<quint32> DWindowManagerHelper::allWindowIdList() const
*/
QVector<quint32> DWindowManagerHelper::currentWorkspaceWindowIdList() const
{
return callPlatformFunction<QVector<quint32>, QVector<quint32>(*)()>(_getCurrentWorkspaceWindows);
QFunctionPointer wmClientList = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
wmClientList = qApp->platformFunction(_getCurrentWorkspaceWindows);
#endif
if (!wmClientList) return QVector<quint32>();
return reinterpret_cast<QVector<quint32>(*)()>(wmClientList)();
}
/*!
@ -705,7 +732,16 @@ QList<DForeignWindow *> DWindowManagerHelper::currentWorkspaceWindows() const
*/
quint32 DWindowManagerHelper::windowFromPoint(const QPoint &p)
{
return callPlatformFunction<quint32, quint32 (*)(const QPoint &)>(_windowFromPoint, p);
QFunctionPointer winFromPoint = Q_NULLPTR;
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
winFromPoint = qApp->platformFunction(_windowFromPoint);
#endif
if (!winFromPoint)
return 0;
return reinterpret_cast<quint32 (*)(const QPoint &)>(winFromPoint)(p);
}
/*!

View File

@ -7,5 +7,4 @@ file(GLOB KERNEL_SOURCE
set(kernel_SRC
${KERNEL_HEADER}
${KERNEL_SOURCE}
${CMAKE_CURRENT_LIST_DIR}/orgdeepindtkpreference.hpp
)

View File

@ -1,751 +0,0 @@
/**
* This file is generated by dconfig2cpp.
* Command line arguments: ./build5/tools/dconfig2cpp/dconfig2cpp -c OrgDeepinDTKPreference /usr/share/dsg/configs/org.deepin.dtk.preference.json
* Generation time: 2025-05-08T17:31:56
* JSON file version: 1.0
*
* WARNING: DO NOT MODIFY THIS FILE MANUALLY.
* If you need to change the content, please modify the dconfig2cpp tool.
*/
#ifndef ORGDEEPINDTKPREFERENCE_H
#define ORGDEEPINDTKPREFERENCE_H
#include <QThread>
#include <QVariant>
#include <QPointer>
#include <QDebug>
#include <QAtomicPointer>
#include <QAtomicInteger>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <QProperty>
#endif
#include <DSGApplication>
#include <DConfig>
class OrgDeepinDTKPreference : public QObject {
Q_OBJECT
Q_PROPERTY(bool autoDisplayFeature READ autoDisplayFeature WRITE setAutoDisplayFeature NOTIFY autoDisplayFeatureChanged RESET resetAutoDisplayFeature)
Q_PROPERTY(bool enableDtkAnimations READ enableDtkAnimations WRITE setEnableDtkAnimations NOTIFY enableDtkAnimationsChanged RESET resetEnableDtkAnimations)
Q_PROPERTY(bool featureUpdated READ featureUpdated WRITE setFeatureUpdated NOTIFY featureUpdatedChanged RESET resetFeatureUpdated)
Q_PROPERTY(bool keyboardsearchDisabled READ keyboardsearchDisabled WRITE setKeyboardsearchDisabled NOTIFY keyboardsearchDisabledChanged RESET resetKeyboardsearchDisabled)
Q_PROPERTY(QString rules READ rules WRITE setRules NOTIFY rulesChanged RESET resetRules)
Q_PROPERTY(qlonglong scrollBarPolicy READ scrollBarPolicy WRITE setScrollBarPolicy NOTIFY scrollBarPolicyChanged RESET resetScrollBarPolicy)
Q_PROPERTY(qlonglong sizeMode READ sizeMode WRITE setSizeMode NOTIFY sizeModeChanged RESET resetSizeMode)
Q_PROPERTY(qlonglong themeType READ themeType WRITE setThemeType NOTIFY themeTypeChanged RESET resetThemeType)
Q_PROPERTY(qlonglong titlebarHeight READ titlebarHeight WRITE setTitlebarHeight NOTIFY titlebarHeightChanged RESET resetTitlebarHeight)
Q_PROPERTY(bool underlineShortcut READ underlineShortcut WRITE setUnderlineShortcut NOTIFY underlineShortcutChanged RESET resetUnderlineShortcut)
Q_CLASSINFO("DConfigKeyList", "autoDisplayFeature;enableDtkAnimations;featureUpdated;keyboardsearchDisabled;rules;scrollBarPolicy;sizeMode;themeType;titlebarHeight;underlineShortcut")
Q_CLASSINFO("DConfigFileName", "org.deepin.dtk.preference")
Q_CLASSINFO("DConfigFileVersion", "1.0")
public:
explicit OrgDeepinDTKPreference(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend,
const QString &name, const QString &appId, const QString &subpath,
bool isGeneric, QObject *parent)
: QObject(nullptr) {
if (!thread->isRunning()) {
qWarning() << QLatin1String("Warning: The provided thread is not running.");
}
Q_ASSERT(QThread::currentThread() != thread);
auto worker = new QObject();
worker->moveToThread(thread);
QPointer<QObject> watcher(parent);
QMetaObject::invokeMethod(worker, [=, this]() {
DTK_CORE_NAMESPACE::DConfig *config = nullptr;
if (isGeneric) {
if (backend) {
config = DTK_CORE_NAMESPACE::DConfig::createGeneric(backend, name, subpath, nullptr);
} else {
config = DTK_CORE_NAMESPACE::DConfig::createGeneric(name, subpath, nullptr);
}
} else {
if (backend) {
if (appId.isNull()) {
config = DTK_CORE_NAMESPACE::DConfig::create(backend, DTK_CORE_NAMESPACE::DSGApplication::id(),
name, subpath, nullptr);
} else {
config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr);
}
} else {
if (appId.isNull()) {
config = DTK_CORE_NAMESPACE::DConfig::create(DTK_CORE_NAMESPACE::DSGApplication::id(),
name, subpath, nullptr);
} else {
config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr);
}
}
}
if (!config) {
qWarning() << QLatin1String("Failed to create DConfig instance.");
worker->deleteLater();
return;
}
config->moveToThread(QThread::currentThread());
initializeInConfigThread(config);
if (watcher != parent) {
// delete this if watcher is changed to nullptr.
deleteLater();
} else if (!this->parent() && parent) {
// !parent() means that parent is not changed.
this->setParent(watcher);
}
worker->deleteLater();
});
}
static OrgDeepinDTKPreference* create(const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, nullptr, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0074\u006b\u002e\u0070\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065"), appId, subpath, false, parent); }
static OrgDeepinDTKPreference* create(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, backend, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0074\u006b\u002e\u0070\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065"), appId, subpath, false, parent); }
static OrgDeepinDTKPreference* createByName(const QString &name, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, nullptr, name, appId, subpath, false, parent); }
static OrgDeepinDTKPreference* createByName(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, backend, name, appId, subpath, false, parent); }
static OrgDeepinDTKPreference* createGeneric(const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, nullptr, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0074\u006b\u002e\u0070\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065"), {}, subpath, true, parent); }
static OrgDeepinDTKPreference* create(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, backend, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0074\u006b\u002e\u0070\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065"), {}, subpath, true, parent); }
static OrgDeepinDTKPreference* createGenericByName(const QString &name, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, nullptr, name, {}, subpath, true, parent); }
static OrgDeepinDTKPreference* createGenericByName(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread())
{ return new OrgDeepinDTKPreference(thread, backend, name, {}, subpath, true, parent); }
~OrgDeepinDTKPreference() {
if (m_config.loadRelaxed()) {
m_config.loadRelaxed()->deleteLater();
}
}
Q_INVOKABLE DTK_CORE_NAMESPACE::DConfig *config() const {
return m_config.loadRelaxed();
}
Q_INVOKABLE bool isInitializeSucceed() const {
return m_status.loadRelaxed() == static_cast<int>(Status::Succeed);
}
Q_INVOKABLE bool isInitializeFailed() const {
return m_status.loadRelaxed() == static_cast<int>(Status::Failed);
}
Q_INVOKABLE bool isInitializing() const {
return m_status.loadRelaxed() == static_cast<int>(Status::Invalid);
}
Q_INVOKABLE QStringList keyList() const {
return { QStringLiteral("autoDisplayFeature"),
QStringLiteral("enableDtkAnimations"),
QStringLiteral("featureUpdated"),
QStringLiteral("keyboardsearchDisabled"),
QStringLiteral("rules"),
QStringLiteral("scrollBarPolicy"),
QStringLiteral("sizeMode"),
QStringLiteral("themeType"),
QStringLiteral("titlebarHeight"),
QStringLiteral("underlineShortcut")};
}
Q_INVOKABLE bool isDefaultValue(const QString &key) const {
if (key == QStringLiteral("autoDisplayFeature"))
return autoDisplayFeatureIsDefaultValue();
if (key == QStringLiteral("enableDtkAnimations"))
return enableDtkAnimationsIsDefaultValue();
if (key == QStringLiteral("featureUpdated"))
return featureUpdatedIsDefaultValue();
if (key == QStringLiteral("keyboardsearchDisabled"))
return keyboardsearchDisabledIsDefaultValue();
if (key == QStringLiteral("rules"))
return rulesIsDefaultValue();
if (key == QStringLiteral("scrollBarPolicy"))
return scrollBarPolicyIsDefaultValue();
if (key == QStringLiteral("sizeMode"))
return sizeModeIsDefaultValue();
if (key == QStringLiteral("themeType"))
return themeTypeIsDefaultValue();
if (key == QStringLiteral("titlebarHeight"))
return titlebarHeightIsDefaultValue();
if (key == QStringLiteral("underlineShortcut"))
return underlineShortcutIsDefaultValue();
return false;
}
bool autoDisplayFeature() const {
return p_autoDisplayFeature;
}
void setAutoDisplayFeature(const bool &value) {
auto oldValue = p_autoDisplayFeature;
p_autoDisplayFeature = value;
markPropertySet(0);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("autoDisplayFeature"), value);
});
}
if (p_autoDisplayFeature != oldValue) {
Q_EMIT autoDisplayFeatureChanged();
Q_EMIT valueChanged(QStringLiteral("autoDisplayFeature"), value);
}
}
void resetAutoDisplayFeature() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("autoDisplayFeature"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<bool> bindableAutoDisplayFeature() {
return QBindable<bool>(this, "autoDisplayFeature");
}
#endif
Q_INVOKABLE bool autoDisplayFeatureIsDefaultValue() const {
return !testPropertySet(0);
}
bool enableDtkAnimations() const {
return p_enableDtkAnimations;
}
void setEnableDtkAnimations(const bool &value) {
auto oldValue = p_enableDtkAnimations;
p_enableDtkAnimations = value;
markPropertySet(1);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("enableDtkAnimations"), value);
});
}
if (p_enableDtkAnimations != oldValue) {
Q_EMIT enableDtkAnimationsChanged();
Q_EMIT valueChanged(QStringLiteral("enableDtkAnimations"), value);
}
}
void resetEnableDtkAnimations() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("enableDtkAnimations"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<bool> bindableEnableDtkAnimations() {
return QBindable<bool>(this, "enableDtkAnimations");
}
#endif
Q_INVOKABLE bool enableDtkAnimationsIsDefaultValue() const {
return !testPropertySet(1);
}
bool featureUpdated() const {
return p_featureUpdated;
}
void setFeatureUpdated(const bool &value) {
auto oldValue = p_featureUpdated;
p_featureUpdated = value;
markPropertySet(2);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("featureUpdated"), value);
});
}
if (p_featureUpdated != oldValue) {
Q_EMIT featureUpdatedChanged();
Q_EMIT valueChanged(QStringLiteral("featureUpdated"), value);
}
}
void resetFeatureUpdated() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("featureUpdated"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<bool> bindableFeatureUpdated() {
return QBindable<bool>(this, "featureUpdated");
}
#endif
Q_INVOKABLE bool featureUpdatedIsDefaultValue() const {
return !testPropertySet(2);
}
bool keyboardsearchDisabled() const {
return p_keyboardsearchDisabled;
}
void setKeyboardsearchDisabled(const bool &value) {
auto oldValue = p_keyboardsearchDisabled;
p_keyboardsearchDisabled = value;
markPropertySet(3);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("keyboardsearchDisabled"), value);
});
}
if (p_keyboardsearchDisabled != oldValue) {
Q_EMIT keyboardsearchDisabledChanged();
Q_EMIT valueChanged(QStringLiteral("keyboardsearchDisabled"), value);
}
}
void resetKeyboardsearchDisabled() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("keyboardsearchDisabled"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<bool> bindableKeyboardsearchDisabled() {
return QBindable<bool>(this, "keyboardsearchDisabled");
}
#endif
Q_INVOKABLE bool keyboardsearchDisabledIsDefaultValue() const {
return !testPropertySet(3);
}
QString rules() const {
return p_rules;
}
void setRules(const QString &value) {
auto oldValue = p_rules;
p_rules = value;
markPropertySet(4);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("rules"), value);
});
}
if (p_rules != oldValue) {
Q_EMIT rulesChanged();
Q_EMIT valueChanged(QStringLiteral("rules"), value);
}
}
void resetRules() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("rules"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<QString> bindableRules() {
return QBindable<QString>(this, "rules");
}
#endif
Q_INVOKABLE bool rulesIsDefaultValue() const {
return !testPropertySet(4);
}
qlonglong scrollBarPolicy() const {
return p_scrollBarPolicy;
}
void setScrollBarPolicy(const qlonglong &value) {
auto oldValue = p_scrollBarPolicy;
p_scrollBarPolicy = value;
markPropertySet(5);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("scrollBarPolicy"), value);
});
}
if (p_scrollBarPolicy != oldValue) {
Q_EMIT scrollBarPolicyChanged();
Q_EMIT valueChanged(QStringLiteral("scrollBarPolicy"), value);
}
}
void resetScrollBarPolicy() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("scrollBarPolicy"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<qlonglong> bindableScrollBarPolicy() {
return QBindable<qlonglong>(this, "scrollBarPolicy");
}
#endif
Q_INVOKABLE bool scrollBarPolicyIsDefaultValue() const {
return !testPropertySet(5);
}
qlonglong sizeMode() const {
return p_sizeMode;
}
void setSizeMode(const qlonglong &value) {
auto oldValue = p_sizeMode;
p_sizeMode = value;
markPropertySet(6);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("sizeMode"), value);
});
}
if (p_sizeMode != oldValue) {
Q_EMIT sizeModeChanged();
Q_EMIT valueChanged(QStringLiteral("sizeMode"), value);
}
}
void resetSizeMode() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("sizeMode"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<qlonglong> bindableSizeMode() {
return QBindable<qlonglong>(this, "sizeMode");
}
#endif
Q_INVOKABLE bool sizeModeIsDefaultValue() const {
return !testPropertySet(6);
}
qlonglong themeType() const {
return p_themeType;
}
void setThemeType(const qlonglong &value) {
auto oldValue = p_themeType;
p_themeType = value;
markPropertySet(7);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("themeType"), value);
});
}
if (p_themeType != oldValue) {
Q_EMIT themeTypeChanged();
Q_EMIT valueChanged(QStringLiteral("themeType"), value);
}
}
void resetThemeType() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("themeType"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<qlonglong> bindableThemeType() {
return QBindable<qlonglong>(this, "themeType");
}
#endif
Q_INVOKABLE bool themeTypeIsDefaultValue() const {
return !testPropertySet(7);
}
qlonglong titlebarHeight() const {
return p_titlebarHeight;
}
void setTitlebarHeight(const qlonglong &value) {
auto oldValue = p_titlebarHeight;
p_titlebarHeight = value;
markPropertySet(8);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("titlebarHeight"), value);
});
}
if (p_titlebarHeight != oldValue) {
Q_EMIT titlebarHeightChanged();
Q_EMIT valueChanged(QStringLiteral("titlebarHeight"), value);
}
}
void resetTitlebarHeight() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("titlebarHeight"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<qlonglong> bindableTitlebarHeight() {
return QBindable<qlonglong>(this, "titlebarHeight");
}
#endif
Q_INVOKABLE bool titlebarHeightIsDefaultValue() const {
return !testPropertySet(8);
}
bool underlineShortcut() const {
return p_underlineShortcut;
}
void setUnderlineShortcut(const bool &value) {
auto oldValue = p_underlineShortcut;
p_underlineShortcut = value;
markPropertySet(9);
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this, value]() {
m_config.loadRelaxed()->setValue(QStringLiteral("underlineShortcut"), value);
});
}
if (p_underlineShortcut != oldValue) {
Q_EMIT underlineShortcutChanged();
Q_EMIT valueChanged(QStringLiteral("underlineShortcut"), value);
}
}
void resetUnderlineShortcut() {
if (auto config = m_config.loadRelaxed()) {
QMetaObject::invokeMethod(config, [this]() {
m_config.loadRelaxed()->reset(QStringLiteral("underlineShortcut"));
});
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QBindable<bool> bindableUnderlineShortcut() {
return QBindable<bool>(this, "underlineShortcut");
}
#endif
Q_INVOKABLE bool underlineShortcutIsDefaultValue() const {
return !testPropertySet(9);
}
Q_SIGNALS:
void configInitializeFailed(DTK_CORE_NAMESPACE::DConfig *config);
void configInitializeSucceed(DTK_CORE_NAMESPACE::DConfig *config);
void valueChanged(const QString &key, const QVariant &value);
void autoDisplayFeatureChanged();
void enableDtkAnimationsChanged();
void featureUpdatedChanged();
void keyboardsearchDisabledChanged();
void rulesChanged();
void scrollBarPolicyChanged();
void sizeModeChanged();
void themeTypeChanged();
void titlebarHeightChanged();
void underlineShortcutChanged();
private:
void initializeInConfigThread(DTK_CORE_NAMESPACE::DConfig *config) {
Q_ASSERT(!m_config.loadRelaxed());
m_config.storeRelaxed(config);
if (!config->isValid()) {
m_status.storeRelaxed(static_cast<int>(Status::Failed));
Q_EMIT configInitializeFailed(config);
return;
}
if (testPropertySet(0)) {
config->setValue(QStringLiteral("autoDisplayFeature"), QVariant::fromValue(p_autoDisplayFeature));
} else {
updateValue(QStringLiteral("autoDisplayFeature"), QVariant::fromValue(p_autoDisplayFeature));
}
if (testPropertySet(1)) {
config->setValue(QStringLiteral("enableDtkAnimations"), QVariant::fromValue(p_enableDtkAnimations));
} else {
updateValue(QStringLiteral("enableDtkAnimations"), QVariant::fromValue(p_enableDtkAnimations));
}
if (testPropertySet(2)) {
config->setValue(QStringLiteral("featureUpdated"), QVariant::fromValue(p_featureUpdated));
} else {
updateValue(QStringLiteral("featureUpdated"), QVariant::fromValue(p_featureUpdated));
}
if (testPropertySet(3)) {
config->setValue(QStringLiteral("keyboardsearchDisabled"), QVariant::fromValue(p_keyboardsearchDisabled));
} else {
updateValue(QStringLiteral("keyboardsearchDisabled"), QVariant::fromValue(p_keyboardsearchDisabled));
}
if (testPropertySet(4)) {
config->setValue(QStringLiteral("rules"), QVariant::fromValue(p_rules));
} else {
updateValue(QStringLiteral("rules"), QVariant::fromValue(p_rules));
}
if (testPropertySet(5)) {
config->setValue(QStringLiteral("scrollBarPolicy"), QVariant::fromValue(p_scrollBarPolicy));
} else {
updateValue(QStringLiteral("scrollBarPolicy"), QVariant::fromValue(p_scrollBarPolicy));
}
if (testPropertySet(6)) {
config->setValue(QStringLiteral("sizeMode"), QVariant::fromValue(p_sizeMode));
} else {
updateValue(QStringLiteral("sizeMode"), QVariant::fromValue(p_sizeMode));
}
if (testPropertySet(7)) {
config->setValue(QStringLiteral("themeType"), QVariant::fromValue(p_themeType));
} else {
updateValue(QStringLiteral("themeType"), QVariant::fromValue(p_themeType));
}
if (testPropertySet(8)) {
config->setValue(QStringLiteral("titlebarHeight"), QVariant::fromValue(p_titlebarHeight));
} else {
updateValue(QStringLiteral("titlebarHeight"), QVariant::fromValue(p_titlebarHeight));
}
if (testPropertySet(9)) {
config->setValue(QStringLiteral("underlineShortcut"), QVariant::fromValue(p_underlineShortcut));
} else {
updateValue(QStringLiteral("underlineShortcut"), QVariant::fromValue(p_underlineShortcut));
}
connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) {
updateValue(key);
}, Qt::DirectConnection);
m_status.storeRelaxed(static_cast<int>(Status::Succeed));
Q_EMIT configInitializeSucceed(config);
}
void updateValue(const QString &key, const QVariant &fallback = QVariant()) {
Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread());
const QVariant &value = m_config.loadRelaxed()->value(key, fallback);
if (key == QStringLiteral("autoDisplayFeature")) {
markPropertySet(0, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<bool>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_autoDisplayFeature != newValue) {
p_autoDisplayFeature = newValue;
Q_EMIT autoDisplayFeatureChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("enableDtkAnimations")) {
markPropertySet(1, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<bool>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_enableDtkAnimations != newValue) {
p_enableDtkAnimations = newValue;
Q_EMIT enableDtkAnimationsChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("featureUpdated")) {
markPropertySet(2, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<bool>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_featureUpdated != newValue) {
p_featureUpdated = newValue;
Q_EMIT featureUpdatedChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("keyboardsearchDisabled")) {
markPropertySet(3, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<bool>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_keyboardsearchDisabled != newValue) {
p_keyboardsearchDisabled = newValue;
Q_EMIT keyboardsearchDisabledChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("rules")) {
markPropertySet(4, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<QString>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_rules != newValue) {
p_rules = newValue;
Q_EMIT rulesChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("scrollBarPolicy")) {
markPropertySet(5, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<qlonglong>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_scrollBarPolicy != newValue) {
p_scrollBarPolicy = newValue;
Q_EMIT scrollBarPolicyChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("sizeMode")) {
markPropertySet(6, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<qlonglong>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_sizeMode != newValue) {
p_sizeMode = newValue;
Q_EMIT sizeModeChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("themeType")) {
markPropertySet(7, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<qlonglong>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_themeType != newValue) {
p_themeType = newValue;
Q_EMIT themeTypeChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("titlebarHeight")) {
markPropertySet(8, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<qlonglong>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_titlebarHeight != newValue) {
p_titlebarHeight = newValue;
Q_EMIT titlebarHeightChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
if (key == QStringLiteral("underlineShortcut")) {
markPropertySet(9, !m_config.loadRelaxed()->isDefaultValue(key));
auto newValue = qvariant_cast<bool>(value);
QMetaObject::invokeMethod(this, [this, newValue, key, value]() {
Q_ASSERT(QThread::currentThread() == this->thread());
if (p_underlineShortcut != newValue) {
p_underlineShortcut = newValue;
Q_EMIT underlineShortcutChanged();
Q_EMIT valueChanged(key, value);
}
});
return;
}
}
inline void markPropertySet(const int index, bool on = true) {
if (index < 32) {
if (on)
m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0));
else
m_propertySetStatus0.fetchAndAndOrdered(~(1 << (index - 0)));
return;
}
Q_UNREACHABLE();
}
inline bool testPropertySet(const int index) const {
if (index < 32) {
return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0)));
}
Q_UNREACHABLE();
}
QAtomicPointer<DTK_CORE_NAMESPACE::DConfig> m_config = nullptr;
public:
enum class Status {
Invalid = 0,
Succeed = 1,
Failed = 2
};
private:
QAtomicInteger<int> m_status = static_cast<int>(Status::Invalid);
bool p_autoDisplayFeature { false };
bool p_enableDtkAnimations { false };
bool p_featureUpdated { false };
bool p_keyboardsearchDisabled { false };
// Default value: ""
QString p_rules { QLatin1String("") };
qlonglong p_scrollBarPolicy { 0 };
qlonglong p_sizeMode { 0 };
qlonglong p_themeType { 0 };
qlonglong p_titlebarHeight { -1 };
bool p_underlineShortcut { false };
QAtomicInteger<quint32> m_propertySetStatus0 = 0;
};
#endif // ORGDEEPINDTKPREFERENCE_H

View File

@ -1,480 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dplatformtheme.h"
#include "private/dplatforminterface_p.h"
DGUI_BEGIN_NAMESPACE
DPlatformInterface::DPlatformInterface(DPlatformTheme *platformTheme)
: m_platformTheme(platformTheme)
{
}
DPlatformInterface::~DPlatformInterface()
{
}
int DPlatformInterface::cursorBlinkTime() const
{
return {};
}
int DPlatformInterface::cursorBlinkTimeout() const
{
return {};
}
bool DPlatformInterface::cursorBlink() const
{
return {};
}
int DPlatformInterface::doubleClickDistance() const
{
return {};
}
int DPlatformInterface::doubleClickTime() const
{
return {};
}
int DPlatformInterface::dndDragThreshold() const
{
return {};
}
int DPlatformInterface::windowRadius() const
{
return -1;
}
int DPlatformInterface::windowRadius(int defaultValue) const
{
return defaultValue;
}
QByteArray DPlatformInterface::themeName() const
{
return {};
}
QByteArray DPlatformInterface::iconThemeName() const
{
return {};
}
QByteArray DPlatformInterface::soundThemeName() const
{
return {};
}
QByteArray DPlatformInterface::fontName() const
{
return {};
}
QByteArray DPlatformInterface::monoFontName() const
{
return {};
}
qreal DPlatformInterface::fontPointSize() const
{
return {};
}
QByteArray DPlatformInterface::gtkFontName() const
{
return {};
}
QColor DPlatformInterface::activeColor() const
{
return {};
}
QColor DPlatformInterface::darkActiveColor() const
{
return {};
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QColor DPlatformInterface::window() const
{
return {};
}
QColor DPlatformInterface::windowText() const
{
return {};
}
QColor DPlatformInterface::base() const
{
return {};
}
QColor DPlatformInterface::alternateBase() const
{
return {};
}
QColor DPlatformInterface::toolTipBase() const
{
return {};
}
QColor DPlatformInterface::toolTipText() const
{
return {};
}
QColor DPlatformInterface::text() const
{
return {};
}
QColor DPlatformInterface::button() const
{
return {};
}
QColor DPlatformInterface::buttonText() const
{
return {};
}
QColor DPlatformInterface::brightText() const
{
return {};
}
QColor DPlatformInterface::light() const
{
return {};
}
QColor DPlatformInterface::midlight() const
{
return {};
}
QColor DPlatformInterface::dark() const
{
return {};
}
QColor DPlatformInterface::mid() const
{
return {};
}
QColor DPlatformInterface::shadow() const
{
return {};
}
QColor DPlatformInterface::highlight() const
{
return {};
}
QColor DPlatformInterface::highlightedText() const
{
return {};
}
QColor DPlatformInterface::link() const
{
return {};
}
QColor DPlatformInterface::linkVisited() const
{
return {};
}
QColor DPlatformInterface::itemBackground() const
{
return {};
}
QColor DPlatformInterface::textTitle() const
{
return {};
}
QColor DPlatformInterface::textTips() const
{
return {};
}
QColor DPlatformInterface::textWarning() const
{
return {};
}
QColor DPlatformInterface::textLively() const
{
return {};
}
QColor DPlatformInterface::lightLively() const
{
return {};
}
QColor DPlatformInterface::darkLively() const
{
return {};
}
QColor DPlatformInterface::frameBorder() const
{
return {};
}
#endif
int DPlatformInterface::dotsPerInch(const QString &) const
{
return {};
}
int DPlatformInterface::sizeMode() const
{
return {};
}
int DPlatformInterface::scrollBarPolicy() const
{
return {};
}
void DPlatformInterface::setCursorBlinkTime(int)
{
}
void DPlatformInterface::setCursorBlinkTimeout(int)
{
}
void DPlatformInterface::setCursorBlink(bool)
{
}
void DPlatformInterface::setDoubleClickDistance(int)
{
}
void DPlatformInterface::setDoubleClickTime(int)
{
}
void DPlatformInterface::setDndDragThreshold(int)
{
}
void DPlatformInterface::setThemeName(const QByteArray &)
{
}
void DPlatformInterface::setIconThemeName(const QByteArray &)
{
}
void DPlatformInterface::setSoundThemeName(const QByteArray &)
{
}
void DPlatformInterface::setFontName(const QByteArray &)
{
}
void DPlatformInterface::setMonoFontName(const QByteArray &)
{
}
void DPlatformInterface::setFontPointSize(qreal)
{
}
void DPlatformInterface::setGtkFontName(const QByteArray &)
{
}
void DPlatformInterface::setActiveColor(const QColor)
{
}
void DPlatformInterface::setDarkActiveColor(const QColor &)
{
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void DPlatformInterface::setWindow(const QColor &)
{
}
void DPlatformInterface::setWindowText(const QColor &)
{
}
void DPlatformInterface::setBase(const QColor &)
{
}
void DPlatformInterface::setAlternateBase(const QColor &)
{
}
void DPlatformInterface::setToolTipBase(const QColor &)
{
}
void DPlatformInterface::setToolTipText(const QColor &)
{
}
void DPlatformInterface::setText(const QColor &)
{
}
void DPlatformInterface::setButton(const QColor &)
{
}
void DPlatformInterface::setButtonText(const QColor &)
{
}
void DPlatformInterface::setBrightText(const QColor &)
{
}
void DPlatformInterface::setLight(const QColor &)
{
}
void DPlatformInterface::setMidlight(const QColor &)
{
}
void DPlatformInterface::setDark(const QColor &)
{
}
void DPlatformInterface::setMid(const QColor &)
{
}
void DPlatformInterface::setShadow(const QColor &)
{
}
void DPlatformInterface::setHighlight(const QColor &)
{
}
void DPlatformInterface::setHighlightedText(const QColor &)
{
}
void DPlatformInterface::setLink(const QColor &)
{
}
void DPlatformInterface::setLinkVisited(const QColor &)
{
}
void DPlatformInterface::setItemBackground(const QColor &)
{
}
void DPlatformInterface::setTextTitle(const QColor &)
{
}
void DPlatformInterface::setTextTips(const QColor &)
{
}
void DPlatformInterface::setTextWarning(const QColor &)
{
}
void DPlatformInterface::setTextLively(const QColor &)
{
}
void DPlatformInterface::setLightLively(const QColor &)
{
}
void DPlatformInterface::setDarkLively(const QColor &)
{
}
void DPlatformInterface::setFrameBorder(const QColor &)
{
}
#endif
void DPlatformInterface::setDotsPerInch(const QString &, int)
{
}
void DPlatformInterface::setWindowRadius(int)
{
}
DGUI_END_NAMESPACE

View File

@ -1,196 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "private/dplatformwindowinterface_p.h"
DGUI_BEGIN_NAMESPACE
DPlatformWindowInterface::DPlatformWindowInterface(QWindow *window, DPlatformHandle *platformHandle)
: m_window(window)
, m_platformHandle(platformHandle)
{
}
DPlatformWindowInterface::~DPlatformWindowInterface()
{
}
QWindow *DPlatformWindowInterface::window() const
{
return m_window;
}
void DPlatformWindowInterface::setEnabled(bool enabled)
{
Q_UNUSED(enabled)
}
bool DPlatformWindowInterface::isEnabled() const
{
return false;
}
bool DPlatformWindowInterface::isEnabledNoTitlebar() const
{
return {};
}
bool DPlatformWindowInterface::setEnabledNoTitlebar(bool enable)
{
Q_UNUSED(enable)
return {};
}
void DPlatformWindowInterface::setDisableWindowOverrideCursor(bool disable)
{
Q_UNUSED(disable)
}
int DPlatformWindowInterface::windowRadius() const
{
return -1;
}
void DPlatformWindowInterface::setWindowRadius(int windowRadius)
{
Q_UNUSED(windowRadius)
}
int DPlatformWindowInterface::borderWidth() const
{
return -1;
}
void DPlatformWindowInterface::setBorderWidth(int borderWidth)
{
Q_UNUSED(borderWidth)
}
QColor DPlatformWindowInterface::borderColor() const
{
return {};
}
void DPlatformWindowInterface::setBorderColor(const QColor &borderColor)
{
Q_UNUSED(borderColor)
}
int DPlatformWindowInterface::shadowRadius() const
{
return {};
}
void DPlatformWindowInterface::setShadowRadius(int shadowRadius)
{
Q_UNUSED(shadowRadius)
}
QPoint DPlatformWindowInterface::shadowOffset() const
{
return {};
}
void DPlatformWindowInterface::setShadowOffset(const QPoint &shadowOffset)
{
Q_UNUSED(shadowOffset)
}
QColor DPlatformWindowInterface::shadowColor() const
{
return {};
}
void DPlatformWindowInterface::setShadowColor(const QColor &shadowColor)
{
Q_UNUSED(shadowColor)
}
DPlatformHandle::EffectScene DPlatformWindowInterface::windowEffect()
{
return {};
}
void DPlatformWindowInterface::setWindowEffect(DPlatformHandle::EffectScenes effectScene)
{
Q_UNUSED(effectScene)
}
DPlatformHandle::EffectType DPlatformWindowInterface::windowStartUpEffect()
{
return {};
}
void DPlatformWindowInterface::setWindowStartUpEffect(DPlatformHandle::EffectTypes effectType)
{
Q_UNUSED(effectType)
}
QPainterPath DPlatformWindowInterface::clipPath() const
{
return {};
}
void DPlatformWindowInterface::setClipPath(const QPainterPath &clipPath)
{
Q_UNUSED(clipPath)
}
QRegion DPlatformWindowInterface::frameMask() const
{
return {};
}
void DPlatformWindowInterface::setFrameMask(const QRegion &frameMask)
{
Q_UNUSED(frameMask)
}
QMargins DPlatformWindowInterface::frameMargins() const
{
return {};
}
bool DPlatformWindowInterface::translucentBackground() const
{
return {};
}
void DPlatformWindowInterface::setTranslucentBackground(bool translucentBackground)
{
Q_UNUSED(translucentBackground)
}
bool DPlatformWindowInterface::enableSystemResize() const
{
return {};
}
void DPlatformWindowInterface::setEnableSystemResize(bool enableSystemResize)
{
Q_UNUSED(enableSystemResize)
}
bool DPlatformWindowInterface::enableSystemMove() const
{
return {};
}
void DPlatformWindowInterface::setEnableSystemMove(bool enableSystemMove)
{
Q_UNUSED(enableSystemMove)
}
bool DPlatformWindowInterface::enableBlurWindow() const
{
return {};
}
void DPlatformWindowInterface::setEnableBlurWindow(bool enableBlurWindow)
{
Q_UNUSED(enableBlurWindow)
}
DGUI_END_NAMESPACE

View File

@ -1,59 +0,0 @@
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later
cmake_minimum_required(VERSION 3.16)
project(wayland_test)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(AUTOMOC_COMPILER_PREDEFINES ON)
find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Core Gui WaylandClient)
if(${QT_VERSION_MAJOR} STREQUAL "5")
find_package(Qt5 REQUIRED COMPONENTS XkbCommonSupport)
endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(WAYLAND_CLIENT REQUIRED wayland-client)
find_package(TreelandProtocols)
set(TreelandProtocols_FOUND ${TreelandProtocols_FOUND})
add_executable(${PROJECT_NAME} main.cpp)
if("${QT_VERSION_MAJOR}" STREQUAL "6")
qt6_generate_wayland_protocol_client_sources(${PROJECT_NAME} FILES
${TREELAND_PROTOCOLS_DATA_DIR}/treeland-personalization-manager-v1.xml
)
if (${Qt6Core_VERSION} VERSION_GREATER_EQUAL "6.10.0")
set(QT_NO_PRIVATE_MODULE_WARNING ON)
find_package(Qt6 REQUIRED COMPONENTS GuiPrivate CorePrivate WaylandClientPrivate)
endif()
else()
# ECM setup
include(FeatureSummary)
find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${ECM_MODULE_PATH}")
find_package(QtWaylandScanner)
ecm_add_qtwayland_client_protocol(TABLET_SRCS
PROTOCOL ${TREELAND_PROTOCOLS_DATA_DIR}/treeland-personalization-manager-v1.xml
BASENAME treeland-personalization-manager-v1
)
target_sources(${PROJECT_NAME} PRIVATE ${TABLET_SRCS})
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::XkbCommonSupportPrivate
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::GuiPrivate
Qt${QT_VERSION_MAJOR}::CorePrivate
Qt${QT_VERSION_MAJOR}::WaylandClientPrivate
${WAYLAND_CLIENT_LIBRARIES}
)

View File

@ -1,36 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QGuiApplication>
#include <QtWaylandClient/QWaylandClientExtension>
#include <QtWaylandClient/private/qwaylandsurface_p.h>
#include <QtWaylandClient/private/qwaylandwindow_p.h>
#include <wayland-client-core.h>
#include "qwayland-treeland-personalization-manager-v1.h"
#include <qwaylandclientextension.h>
#include <private/qguiapplication_p.h>
#include <private/qwaylandintegration_p.h>
#include <private/qwaylandwindow_p.h>
#include <private/qwaylanddisplay_p.h>
class PersonalizationWindowContext : public QWaylandClientExtensionTemplate<PersonalizationWindowContext>,
public QtWayland::treeland_personalization_window_context_v1
{
public:
PersonalizationWindowContext(struct ::treeland_personalization_window_context_v1 *context)
: QWaylandClientExtensionTemplate<PersonalizationWindowContext>(1)
, QtWayland::treeland_personalization_window_context_v1(context)
{
set_titlebar(enable_mode::enable_mode_disable);
}
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
return 0;
}

View File

@ -1,103 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dtreelandplatforminterface.h"
#include "dplatformtheme.h"
#include "private/dplatforminterface_p.h"
#include "personalizationwaylandclientextension.h"
#include <QtWaylandClient/private/qwaylandwindow_p.h>
#include <QtWaylandClient/private/qwaylandsurface_p.h>
#include <QWindow>
DGUI_BEGIN_NAMESPACE
DTreelandPlatformInterface::DTreelandPlatformInterface(DPlatformTheme *platformTheme)
: DPlatformInterface(platformTheme)
{
m_manager = PersonalizationManager::instance();
connect(m_manager, &PersonalizationManager::activeChanged, this, [this](){
if (m_manager->isActive()) {
initContext();
}
});
}
void DTreelandPlatformInterface::initContext()
{
if (m_appearanceContext.isNull()) {
m_appearanceContext.reset(new PersonalizationAppearanceContext(m_manager->get_appearance_context(), this));
}
if (m_fontContext.isNull()) {
m_fontContext.reset(new PersonalizationFontContext(m_manager->get_font_context(), this));
}
}
QByteArray DTreelandPlatformInterface::iconThemeName() const
{
return m_iconThemeName;
}
QByteArray DTreelandPlatformInterface::fontName() const
{
return m_fontName;
}
QByteArray DTreelandPlatformInterface::monoFontName() const
{
return m_monoFontName;
}
qreal DTreelandPlatformInterface::fontPointSize() const
{
return m_fontPointSize;
}
QColor DTreelandPlatformInterface::activeColor() const
{
return m_activeColor;
}
QByteArray DTreelandPlatformInterface::themeName() const
{
return m_themeName;
}
void DTreelandPlatformInterface::setIconThemeName(const QByteArray &iconThemeName)
{
if (m_appearanceContext) {
m_appearanceContext->set_icon_theme(iconThemeName);
}
}
void DTreelandPlatformInterface::setFontName(const QByteArray &fontName)
{
if (m_fontContext) {
m_fontContext->set_font(fontName);
}
}
void DTreelandPlatformInterface::setMonoFontName(const QByteArray &monoFontName)
{
if (m_fontContext) {
m_fontContext->set_monospace_font(monoFontName);
}
}
void DTreelandPlatformInterface::setFontPointSize(qreal fontPointSize)
{
if (m_fontContext) {
m_fontContext->set_font_size(fontPointSize);
}
}
void DTreelandPlatformInterface::setActiveColor(const QColor activeColor)
{
if (m_appearanceContext) {
m_appearanceContext->set_active_color(activeColor.name());
}
}
DGUI_END_NAMESPACE

View File

@ -1,66 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef DTREELANDPLATFORMINTERFACE_H
#define DTREELANDPLATFORMINTERFACE_H
#include "private/dplatforminterface_p.h"
#include <QHash>
#include <QQueue>
#include <DObject>
DGUI_BEGIN_NAMESPACE
class DTreelandPlatformInterfacePrivate;
class PersonalizationManager;
class PersonalizationFontContext;
class PersonalizationAppearanceContext;
class PersonalizationWindowContext;
class DTreelandPlatformInterface : public QObject, public DPlatformInterface, public DCORE_NAMESPACE::DObject
{
Q_OBJECT
friend PersonalizationFontContext;
friend PersonalizationAppearanceContext;
friend PersonalizationWindowContext;
public:
explicit DTreelandPlatformInterface(DPlatformTheme *platformTheme);
QByteArray iconThemeName() const override;
QByteArray fontName() const override;
QByteArray monoFontName() const override;
qreal fontPointSize() const override;
QColor activeColor() const override;
QByteArray themeName() const override;
void setIconThemeName(const QByteArray &iconThemeName) override;
void setFontName(const QByteArray &fontName) override;
void setMonoFontName(const QByteArray &monoFontName) override;
void setFontPointSize(qreal fontPointSize) override;
void setActiveColor(const QColor activeColor) override;
private:
void initContext();
private:
PersonalizationManager *m_manager;
QScopedPointer<PersonalizationAppearanceContext> m_appearanceContext;
QScopedPointer<PersonalizationFontContext> m_fontContext;
QColor m_activeColor;
int m_titleHeight;
QByteArray m_fontName;
QByteArray m_monoFontName;
QByteArray m_iconThemeName;
QByteArray m_cursorThemeName;
qreal m_fontPointSize;
int m_windowRadius;
int m_scrollBarPolicy;
QByteArray m_themeName;
uint32_t m_blurOpacity;
};
DGUI_END_NAMESPACE
#endif

View File

@ -1,398 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#define protected public
#include <QWindow>
#undef protected
#include "dtreelandplatformwindowinterface.h"
#include <QWaylandClientExtension>
#include <QStyleHints>
#include <private/qwaylandintegration_p.h>
#include <private/qguiapplication_p.h>
#include <private/qwaylandwindow_p.h>
#include <private/qwaylandsurface_p.h>
#include "dvtablehook.h"
#include "personalizationwaylandclientextension.h"
DCORE_USE_NAMESPACE
DGUI_BEGIN_NAMESPACE
class Q_DECL_HIDDEN MoveWindowHelper : public QObject
{
public:
explicit MoveWindowHelper(QWindow *w);
~MoveWindowHelper();
static QHash<const QWindow*, MoveWindowHelper*> mapped;
private:
static bool windowEvent(QWindow *w, QEvent *event);
void updateEnableSystemMoveFromProperty();
QWindow *m_window;
bool m_windowMoving;
bool m_enableSystemMove;
};
QHash<const QWindow*, MoveWindowHelper*> MoveWindowHelper::mapped;
MoveWindowHelper::MoveWindowHelper(QWindow *window)
: QObject(window)
, m_window(window)
{
mapped[window] = this;
updateEnableSystemMoveFromProperty();
}
MoveWindowHelper::~MoveWindowHelper()
{
mapped.remove(static_cast<QWindow*>(parent()));
}
void MoveWindowHelper::updateEnableSystemMoveFromProperty()
{
if (!m_window) {
return;
}
const QVariant &v = m_window->property("_d_enableSystemMove");
m_enableSystemMove = !v.isValid() || v.toBool();
if (m_enableSystemMove) {
DVtableHook::overrideVfptrFun(m_window, &QWindow::event, &MoveWindowHelper::windowEvent);
} else if (DVtableHook::hasVtable(m_window)) {
DVtableHook::resetVfptrFun(m_window, &QWindow::event);
}
}
bool MoveWindowHelper::windowEvent(QWindow *w, QEvent *event)
{
MoveWindowHelper *self = mapped.value(w);
if (!self)
return DVtableHook::callOriginalFun(w, &QWindow::event, event);
// TODO Crashed when delete by Vtable.
if (event->type() == QEvent::DeferredDelete) {
DVtableHook::resetVtable(w);
return w->event(event);
}
// m_window 的 event 被 override 以后,在 windowEvent 里面获取到的 this 就成 m_window 了,
// 而不是 DNoTitlebarWlWindowHelper所以此处 windowEvent 改为 static 并传 self 进来
{
static bool isTouchDown = false;
static QPointF touchBeginPosition;
if (event->type() == QEvent::TouchBegin) {
isTouchDown = true;
}
if (event->type() == QEvent::TouchEnd || event->type() == QEvent::MouseButtonRelease) {
isTouchDown = false;
}
if (isTouchDown && event->type() == QEvent::MouseButtonPress) {
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
touchBeginPosition = static_cast<QMouseEvent*>(event)->globalPosition();
#else
touchBeginPosition = static_cast<QMouseEvent*>(event)->globalPos();
#endif
}
// add some redundancy to distinguish trigger between system menu and system move
if (event->type() == QEvent::MouseMove) {
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QPointF currentPos = static_cast<QMouseEvent*>(event)->globalPosition();
#else
QPointF currentPos = static_cast<QMouseEvent*>(event)->globalPos();
#endif
QPointF delta = touchBeginPosition - currentPos;
if (delta.manhattanLength() < QGuiApplication::styleHints()->startDragDistance()) {
return DVtableHook::callOriginalFun(w, &QWindow::event, event);
}
}
}
bool is_mouse_move = event->type() == QEvent::MouseMove && static_cast<QMouseEvent*>(event)->buttons() == Qt::LeftButton;
if (event->type() == QEvent::MouseButtonRelease) {
self->m_windowMoving = false;
}
if (!DVtableHook::callOriginalFun(w, &QWindow::event, event))
return false;
// workaround for kwin: Qt receives no release event when kwin finishes MOVE operation,
// which makes app hang in windowMoving state. when a press happens, there's no sense of
// keeping the moving state, we can just reset ti back to normal.
if (event->type() == QEvent::MouseButtonPress) {
self->m_windowMoving = false;
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
if (is_mouse_move && !event->isAccepted()
&& w->geometry().contains(static_cast<QMouseEvent*>(event)->globalPosition().toPoint())) {
#else
if (is_mouse_move && !event->isAccepted()
&& w->geometry().contains(static_cast<QMouseEvent*>(event)->globalPos())) {
#endif
if (!self->m_windowMoving && self->m_enableSystemMove) {
self->m_windowMoving = true;
event->accept();
if (w && w->handle()) {
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
static_cast<QPlatformWindow *>(w->handle())->startSystemMove(QCursor::pos());
#else
static_cast<QPlatformWindow *>(w->handle())->startSystemMove();
#endif
}
}
}
return true;
}
QMap<QWindow *, DTreeLandPlatformWindowHelper*> DTreeLandPlatformWindowHelper::windowMap;
DTreeLandPlatformWindowHelper *DTreeLandPlatformWindowHelper::get(QWindow *window)
{
if (!PersonalizationManager::instance()->isSupported()) {
return nullptr;
}
if (!window) {
return nullptr;
}
if (auto helper = windowMap.value(window)) {
return helper;
}
auto helper = new DTreeLandPlatformWindowHelper(window);
windowMap[window] = helper;
return helper;
}
DTreeLandPlatformWindowHelper::DTreeLandPlatformWindowHelper(QWindow *window)
: QObject(window)
{
window->installEventFilter(this);
if (!PersonalizationManager::instance()->isActive()) {
qWarning() << "Personalization is not active" << window;
connect(PersonalizationManager::instance(), &PersonalizationManager::activeChanged, this, &DTreeLandPlatformWindowHelper::onActiveChanged, Qt::QueuedConnection);
}
if (window->handle()) {
initWaylandWindow();
}
}
DTreeLandPlatformWindowHelper::~DTreeLandPlatformWindowHelper()
{
// see tst_qwindow.cpp tst_QWindow::qobject_castOnDestruction()
windowMap.remove(static_cast<QWindow*>(parent()));
}
bool DTreeLandPlatformWindowHelper::eventFilter(QObject *watched, QEvent *event) {
if (event->type() == QEvent::PlatformSurface) {
QPlatformSurfaceEvent *se = static_cast<QPlatformSurfaceEvent*>(event);
if (se->surfaceEventType() == QPlatformSurfaceEvent::SurfaceCreated) {
if (PersonalizationManager::instance()->isActive()) {
initWaylandWindow();
onSurfaceCreated();
}
}
}
return QObject::eventFilter(watched, event);
}
void DTreeLandPlatformWindowHelper::initWaylandWindow()
{
auto waylandWindow = dynamic_cast<QtWaylandClient::QWaylandWindow *>(window()->handle());
if (!waylandWindow) {
qWarning() << "waylandWindow is nullptr!!!";
return;
}
connect(waylandWindow, &QtWaylandClient::QWaylandWindow::wlSurfaceCreated, this, &DTreeLandPlatformWindowHelper::onSurfaceCreated, Qt::UniqueConnection);
connect(waylandWindow, &QtWaylandClient::QWaylandWindow::wlSurfaceDestroyed, this, &DTreeLandPlatformWindowHelper::onSurfaceDestroyed, Qt::UniqueConnection);
}
void DTreeLandPlatformWindowHelper::onActiveChanged()
{
if (PersonalizationManager::instance()->isActive()) {
qDebug() << "Personalization is actived, window" << window();
if (window()->handle()) {
onSurfaceCreated();
}
}
}
void DTreeLandPlatformWindowHelper::onSurfaceCreated()
{
if (m_isNoTitlebar) {
doSetEnabledNoTitlebar();
}
if (m_radius > 0) {
doSetWindowRadius();
}
if (m_isWindowBlur) {
doSetEnabledBlurWindow();
}
}
void DTreeLandPlatformWindowHelper::onSurfaceDestroyed()
{
if (m_windowContext) {
m_windowContext->deleteLater();
m_windowContext = nullptr;
}
}
PersonalizationWindowContext *DTreeLandPlatformWindowHelper::windowContext() const
{
if (m_windowContext) {
return m_windowContext;
}
auto waylandWindow = dynamic_cast<QtWaylandClient::QWaylandWindow *>(window()->handle());
if (!waylandWindow)
return nullptr;
if (!waylandWindow->waylandSurface()) {
qWarning() << "waylandSurface is nullptr!!!";
return nullptr;
}
auto surface = waylandWindow->waylandSurface()->object();
if (!surface) {
qWarning() << "wl_surface is nullptr!!!";
return nullptr;
}
if (!m_windowContext) {
const_cast<DTreeLandPlatformWindowHelper *>(this)->m_windowContext = new PersonalizationWindowContext(PersonalizationManager::instance()->get_window_context(surface));
}
return m_windowContext;
}
void DTreeLandPlatformWindowHelper::setEnabledNoTitlebar(bool enable)
{
m_isNoTitlebar = enable;
doSetEnabledNoTitlebar();
}
void DTreeLandPlatformWindowHelper::setWindowRadius(int windowRadius)
{
m_radius = windowRadius;
doSetWindowRadius();
}
void DTreeLandPlatformWindowHelper::setEnableBlurWindow(bool enableBlurWindow)
{
m_isWindowBlur = enableBlurWindow;
doSetEnabledBlurWindow();
}
void DTreeLandPlatformWindowHelper::doSetEnabledNoTitlebar()
{
if (auto context = windowContext()) {
context->set_titlebar(m_isNoTitlebar ? PersonalizationWindowContext::enable_mode_disable : PersonalizationWindowContext::enable_mode_enable);
}
}
void DTreeLandPlatformWindowHelper::doSetWindowRadius()
{
if (auto context = windowContext()) {
context->set_round_corner_radius(m_radius);
}
}
void DTreeLandPlatformWindowHelper::doSetEnabledBlurWindow()
{
if (auto context = windowContext()) {
context->set_blend_mode(m_isWindowBlur ? PersonalizationWindowContext::blend_mode_blur : PersonalizationWindowContext::blend_mode_transparent);
}
}
DTreeLandPlatformWindowInterface::DTreeLandPlatformWindowInterface(QWindow *window, DPlatformHandle *platformHandle, QObject *parent)
: QObject(parent)
, DPlatformWindowInterface(window, platformHandle)
{
if (!MoveWindowHelper::mapped.value(window)) {
Q_UNUSED(new MoveWindowHelper(window))
}
}
DTreeLandPlatformWindowInterface::~DTreeLandPlatformWindowInterface()
{
}
void DTreeLandPlatformWindowInterface::setEnabled(bool enabled)
{
if (setEnabledNoTitlebar(enabled)) {
return;
}
}
bool DTreeLandPlatformWindowInterface::isEnabled() const
{
return isEnabledNoTitlebar();
}
bool DTreeLandPlatformWindowInterface::isEnabledNoTitlebar() const
{
return m_isNoTitlebar;
}
bool DTreeLandPlatformWindowInterface::setEnabledNoTitlebar(bool enable)
{
if (m_isNoTitlebar == enable) {
return true;
}
m_isNoTitlebar = enable;
if (auto helper = DTreeLandPlatformWindowHelper::get(m_window)) {
helper->setEnabledNoTitlebar(enable);
}
return true;
}
int DTreeLandPlatformWindowInterface::windowRadius() const
{
return m_radius;
}
void DTreeLandPlatformWindowInterface::setWindowRadius(int windowRadius)
{
if (m_radius == windowRadius) {
return;
}
m_radius = windowRadius;
if (auto helper = DTreeLandPlatformWindowHelper::get(m_window)) {
helper->setWindowRadius(m_radius);
}
if (m_platformHandle) {
Q_EMIT m_platformHandle->windowRadiusChanged();
}
}
bool DTreeLandPlatformWindowInterface::enableBlurWindow() const
{
return m_isWindowBlur;
}
void DTreeLandPlatformWindowInterface::setEnableBlurWindow(bool enable)
{
if (m_isWindowBlur == enable) {
return;
}
m_isWindowBlur = enable;
if (auto helper = DTreeLandPlatformWindowHelper::get(m_window)) {
helper->setEnableBlurWindow(enable);
}
if (m_platformHandle) {
Q_EMIT m_platformHandle->enableBlurWindowChanged();
}
}
DGUI_END_NAMESPACE

View File

@ -1,76 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef DTREELANDPLATFORMWINDOWINTERFACE_H
#define DTREELANDPLATFORMWINDOWINTERFACE_H
#include "dtkgui_global.h"
#include "dtreelandplatforminterface.h"
#include <QObject>
#include <QtWaylandClient/private/qwaylandwindow_p.h>
#include "private/dplatformwindowinterface_p.h"
DGUI_BEGIN_NAMESPACE
class PersonalizationWindowContext;
class DTreeLandPlatformWindowHelper : public QObject {
Q_OBJECT
public:
static DTreeLandPlatformWindowHelper *get(QWindow *window);
~DTreeLandPlatformWindowHelper() override;
QWindow *window() const { return qobject_cast<QWindow *>(parent()); }
PersonalizationWindowContext *windowContext() const;
void setEnabledNoTitlebar(bool enable);
void setWindowRadius(int windowRadius);
void setEnableBlurWindow(bool enableBlurWindow);
private slots:
void onActiveChanged();
void onSurfaceCreated();
void onSurfaceDestroyed();
private:
explicit DTreeLandPlatformWindowHelper(QWindow *window);
bool eventFilter(QObject *watched, QEvent *event) override;
void initWaylandWindow();
void doSetEnabledNoTitlebar();
void doSetWindowRadius();
void doSetEnabledBlurWindow();
private:
PersonalizationWindowContext *m_windowContext = nullptr;
static QMap<QWindow *, DTreeLandPlatformWindowHelper*> windowMap;
bool m_isNoTitlebar = false;
bool m_isWindowBlur = false;
int m_radius = 0;
};
class DTreeLandPlatformWindowInterface : public QObject, public DPlatformWindowInterface
{
Q_OBJECT
public:
DTreeLandPlatformWindowInterface(QWindow *window, DPlatformHandle *platformHandle, QObject *parent = nullptr);
~DTreeLandPlatformWindowInterface() override;
void setEnabled(bool enabled) override;
bool isEnabled() const override;
bool isEnabledNoTitlebar() const override;
bool setEnabledNoTitlebar(bool enable) override;
int windowRadius() const override;
void setWindowRadius(int windowRadius) override;
bool enableBlurWindow() const override;
void setEnableBlurWindow(bool enableBlurWindow) override;
private:
bool m_isNoTitlebar = false;
bool m_isWindowBlur = false;
int m_radius = 0;
};
DGUI_END_NAMESPACE
#endif // DTREELANDPLATFORMWINDOWINTERFACE_H

View File

@ -1,34 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dtreelandwindowmanagerhelper.h"
#include "personalizationwaylandclientextension.h"
DGUI_BEGIN_NAMESPACE
TreelandWindowManagerHelper::TreelandWindowManagerHelper(QObject *parent)
: DWindowManagerHelper(parent)
{
connect(PersonalizationManager::instance(), &PersonalizationManager::activeChanged, this, [this](){
Q_EMIT hasBlurWindowChanged();
Q_EMIT hasNoTitlebarChanged();
});
}
bool TreelandWindowManagerHelper::hasBlurWindow() const
{
return PersonalizationManager::instance()->isSupported();
}
bool TreelandWindowManagerHelper::hasComposite() const
{
return true;
}
bool TreelandWindowManagerHelper::hasNoTitlebar() const
{
return PersonalizationManager::instance()->isSupported();
}
DGUI_END_NAMESPACE

View File

@ -1,25 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef DTREELANDWINDOWMANAGERHELPER_H
#define DTREELANDWINDOWMANAGERHELPER_H
#include "dtkgui_global.h"
#include "dwindowmanagerhelper.h"
#include <QObject>
DGUI_BEGIN_NAMESPACE
class TreelandWindowManagerHelper : public DWindowManagerHelper
{
public:
explicit TreelandWindowManagerHelper(QObject *parent = 0);
bool hasBlurWindow() const;
bool hasComposite() const;
bool hasNoTitlebar() const;
};
DGUI_END_NAMESPACE
#endif // DTREELANDWINDOWMANAGERHELPER_H

View File

@ -1,152 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "personalizationwaylandclientextension.h"
#include <private/qguiapplication_p.h>
#include <private/qwaylandintegration_p.h>
#include <private/qwaylandwindow_p.h>
#include <qwaylandclientextension.h>
#include "dplatformtheme.h"
#include <QtWaylandClient/private/qwaylandsurface_p.h>
#include <QtWaylandClient/private/qwaylandwindow_p.h>
#include <QGuiApplication>
DGUI_BEGIN_NAMESPACE
PersonalizationManager::PersonalizationManager()
: QWaylandClientExtensionTemplate<PersonalizationManager>(treeland_personalization_manager_v1_interface.version)
, m_isSupported(false)
{
QtWaylandClient::QWaylandIntegration *waylandIntegration = static_cast<QtWaylandClient::QWaylandIntegration *>(QGuiApplicationPrivate::platformIntegration());
if (!waylandIntegration) {
qWarning() << "waylandIntegration is nullptr!!!";
return;
}
m_waylandDisplay = waylandIntegration->display();
if (m_waylandDisplay == nullptr) {
qWarning() << "waylandDisplay is nullptr!!!";
return;
}
addListener();
m_isSupported = m_waylandDisplay->hasRegistryGlobal(QString::fromUtf8(treeland_personalization_manager_v1_interface.name));
if (!m_isSupported) {
qWarning() << "PersonalizationManager is not support";
}
}
void PersonalizationManager::addListener()
{
m_waylandDisplay->addRegistryListener(&handleListenerGlobal, this);
}
void PersonalizationManager::removeListener()
{
m_waylandDisplay->removeListener(&handleListenerGlobal, this);
}
void PersonalizationManager::handleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version)
{
if (interface == treeland_personalization_manager_v1_interface.name) {
PersonalizationManager *integration = static_cast<PersonalizationManager *>(data);
if (!integration) {
qWarning() << "integration is nullptr!!!";
return;
}
integration->init(registry, id, version);
}
}
PersonalizationManager *PersonalizationManager::instance()
{
static PersonalizationManager instance;
return &instance;
}
PersonalizationWindowContext::PersonalizationWindowContext(struct ::treeland_personalization_window_context_v1 *context)
: QWaylandClientExtensionTemplate<PersonalizationWindowContext>(treeland_personalization_window_context_v1_interface.version)
, QtWayland::treeland_personalization_window_context_v1(context)
{
}
PersonalizationAppearanceContext::PersonalizationAppearanceContext(struct ::treeland_personalization_appearance_context_v1 *context, DTreelandPlatformInterface *interface)
: QWaylandClientExtensionTemplate<PersonalizationAppearanceContext>(treeland_personalization_appearance_context_v1_interface.version)
, QtWayland::treeland_personalization_appearance_context_v1(context)
, m_interface(interface)
{
get_round_corner_radius();
get_icon_theme();
get_active_color();
get_window_theme_type();
get_window_opacity();
}
void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_round_corner_radius(int32_t radius)
{
m_interface->m_windowRadius = radius;
emit m_interface->m_platformTheme->windowRadiusChanged(radius);
}
void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_icon_theme(const QString &theme_name)
{
m_interface->m_iconThemeName = theme_name.toUtf8();
emit m_interface->m_platformTheme->iconThemeNameChanged(theme_name.toUtf8());
}
void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_active_color(const QString &active_color)
{
m_interface->m_activeColor = active_color;
emit m_interface->m_platformTheme->activeColorChanged(active_color);
}
void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_window_theme_type(uint32_t type)
{
QString theme = QStringLiteral("deepin");
if (type == PersonalizationAppearanceContext::theme_type::theme_type_dark) {
theme = theme + QStringLiteral("-dark");
}
m_interface->m_themeName = theme.toUtf8();
emit m_interface->m_platformTheme->themeNameChanged(theme.toUtf8());
}
void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_window_opacity(uint32_t opacity)
{
m_interface->m_blurOpacity = opacity;
}
PersonalizationFontContext::PersonalizationFontContext(struct ::treeland_personalization_font_context_v1 *context, DTreelandPlatformInterface *interface)
: QWaylandClientExtensionTemplate<PersonalizationFontContext>(treeland_personalization_font_context_v1_interface.version)
, QtWayland::treeland_personalization_font_context_v1(context)
, m_interface(interface)
{
get_font();
get_monospace_font();
get_font_size();
}
void PersonalizationFontContext::treeland_personalization_font_context_v1_font(const QString &font_name)
{
m_interface->m_fontName = font_name.toUtf8();
emit m_interface->m_platformTheme->fontNameChanged(font_name.toUtf8());
}
void PersonalizationFontContext::treeland_personalization_font_context_v1_monospace_font(const QString &font_name)
{
m_interface->m_monoFontName = font_name.toUtf8();
emit m_interface->m_platformTheme->monoFontNameChanged(font_name.toUtf8());
}
void PersonalizationFontContext::treeland_personalization_font_context_v1_font_size(uint32_t font_size)
{
// treeland侧无法存储浮点数约定 font_size 为 10 倍的 pointSize
qreal pointSize = font_size / 10.0;
pointSize = qBound(8.25, pointSize, 15.00);
m_interface->m_fontPointSize = pointSize;
emit m_interface->m_platformTheme->fontPointSizeChanged(pointSize);
}
DGUI_END_NAMESPACE

View File

@ -1,87 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef PERSONALIZATIONWAYLANDCLIENTEXTENSION_H
#define PERSONALIZATIONWAYLANDCLIENTEXTENSION_H
#include "dtreelandplatforminterface.h"
#include "qwayland-treeland-personalization-manager-v1.h"
#include <dtkgui_global.h>
#include <private/qwaylanddisplay_p.h>
#include <QtWaylandClient/QWaylandClientExtension>
#include <QWaylandClientExtensionTemplate>
DGUI_BEGIN_NAMESPACE
class PersonalizationAppearanceContext;
class PersonalizationCursorContext;
class PersonalizationFontContext;
class DTreelandPlatformInterfacePrivate;
class PersonalizationManager: public QWaylandClientExtensionTemplate<PersonalizationManager>,
public QtWayland::treeland_personalization_manager_v1
{
Q_OBJECT
public:
static PersonalizationManager *instance();
[[nodiscard]]inline bool isSupported() const { return m_isSupported; }
private:
void addListener();
void removeListener();
explicit PersonalizationManager();
static void handleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version);
private:
QtWaylandClient::QWaylandDisplay *m_waylandDisplay;
bool m_isSupported;
};
class PersonalizationWindowContext : public QWaylandClientExtensionTemplate<PersonalizationWindowContext>,
public QtWayland::treeland_personalization_window_context_v1
{
Q_OBJECT
public:
explicit PersonalizationWindowContext(struct ::treeland_personalization_window_context_v1 *context);
};
class PersonalizationAppearanceContext : public QWaylandClientExtensionTemplate<PersonalizationAppearanceContext>,
public QtWayland::treeland_personalization_appearance_context_v1
{
Q_OBJECT
public:
explicit PersonalizationAppearanceContext(struct ::treeland_personalization_appearance_context_v1 *context, DTreelandPlatformInterface *interface);
protected:
void treeland_personalization_appearance_context_v1_round_corner_radius(int32_t radius) override;
void treeland_personalization_appearance_context_v1_icon_theme(const QString &theme_name) override;
void treeland_personalization_appearance_context_v1_active_color(const QString &active_color) override;
void treeland_personalization_appearance_context_v1_window_theme_type(uint32_t type) override;
void treeland_personalization_appearance_context_v1_window_opacity(uint32_t opacity) override;
private:
DTreelandPlatformInterface *m_interface;
};
class PersonalizationFontContext : public QWaylandClientExtensionTemplate<PersonalizationFontContext>,
public QtWayland::treeland_personalization_font_context_v1
{
Q_OBJECT
public:
explicit PersonalizationFontContext(struct ::treeland_personalization_font_context_v1 *context, DTreelandPlatformInterface *interface);
protected:
void treeland_personalization_font_context_v1_font(const QString &font_name) override;
void treeland_personalization_font_context_v1_monospace_font(const QString &font_name) override;
void treeland_personalization_font_context_v1_font_size(uint32_t font_size) override;
private:
DTreelandPlatformInterface *m_interface;
};
DGUI_END_NAMESPACE
#endif // PERSONALIZATIONWAYLANDCLIENTEXTENSION_H

View File

@ -1,10 +0,0 @@
file(GLOB TREELAND_HEADER
${CMAKE_CURRENT_LIST_DIR}/*.h
)
file(GLOB TREELAND_SOURCE
${CMAKE_CURRENT_LIST_DIR}/*.cpp
)
set(treeland_SRC
${TREELAND_HEADER}
${TREELAND_SOURCE}
)

View File

@ -1,708 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dxcbplatforminterface.h"
#include "dxcbplatforminterface_p.h"
#include <DNativeSettings>
#include <QPlatformSurfaceEvent>
#include <QGuiApplication>
#include <QMetaObject>
#include <QMetaProperty>
#include "dplatformtheme.h"
#include "dguiapplicationhelper.h"
#include <qpa/qplatformwindow.h>
DGUI_BEGIN_NAMESPACE
#define DEFINE_CONST_CHAR(Name) const char _##Name[] = "_d_" #Name
#define FETCH_PROPERTY(Name, Function) \
D_DC(DXCBPlatformInterface); \
QVariant value = d->theme->getSetting(QByteArrayLiteral(Name)); \
if (d->fallbackProperty && !value.isValid() && d->parent) \
return d->parent->Function(); \
#define FETCH_PROPERTY_WITH_ARGS(Name, Function, Args) \
D_DC(DXCBPlatformInterface); \
QVariant value = d->theme->getSetting(Name); \
if (d->fallbackProperty && !value.isValid() && d->parent) \
return d->parent->Function(Args); \
DXCBPlatformInterfacePrivate::DXCBPlatformInterfacePrivate(DXCBPlatformInterface *qq)
:DCORE_NAMESPACE::DObjectPrivate(qq)
{
}
void DXCBPlatformInterfacePrivate::_q_onThemePropertyChanged(const QByteArray &name, const QVariant &value)
{
D_Q(DXCBPlatformInterface);
// 转发属性变化的信号此信号来源可能为parent theme或“非调色板”的属性变化。
// 使用队列的形式转发,避免多次发出同样的信号
// q->staticMetaObject.invokeMethod(q, "propertyChanged", Qt::QueuedConnection,
// Q_ARG(const QByteArray&, name), Q_ARG(const QVariant&, value));
if (QByteArrayLiteral("Gtk/FontName") == name) {
Q_EMIT q->m_platformTheme->gtkFontNameChanged(value.toByteArray());
return;
}
if (name.startsWith("Qt/DPI/")) {
const QString &screen_name = QString::fromLocal8Bit(name.mid(7));
if (!screen_name.isEmpty()) {
bool ok = false;
int dpi = value.toInt(&ok);
Q_EMIT q->m_platformTheme->dotsPerInchChanged(screen_name, ok ? dpi : -1);
}
return;
}
if (QByteArrayLiteral("Xft/DPI") == name) {
bool ok = false;
int dpi = value.toInt(&ok);
Q_EMIT q->m_platformTheme->dotsPerInchChanged(QString(), ok ? dpi : -1);
}
const QByteArrayList &list = name.split('/');
if (list.count() != 2)
return;
QByteArray pn = list.last();
if (pn.isEmpty())
return;
// 转换首字母为小写
pn[0] = QChar(pn.at(0)).toLower().toLatin1();
// 直接使用静态的meta object防止通过metaObject函数调用到dynamic metaobject
const QMetaObject *mo = &DPlatformTheme::staticMetaObject;
int index = mo->indexOfProperty(pn.constData());
if (index < 0)
return;
const QMetaProperty &p = mo->property(index);
bool is_parent_signal = q->sender() != theme;
// 当自己的属性有效时应该忽略父主题的属性变化信号,优先以自身的属性值为准。
if (is_parent_signal && p.read(q).isValid()) {
return;
}
if (p.hasNotifySignal()) {
// invoke会做Q_ASSERT(mobj->cast(object))判断, DPlatformTheme的dynamic metaObject为
// qt5platform-plugin插件的DNativeSettings. 导致崩溃.
// invokeOnGadget与invoke代码逻辑一致, 只是少了异步支持.
// return;
if (!p.notifySignal().invokeOnGadget(q->m_platformTheme, QGenericArgument(value.typeName(), value.constData())))
qWarning() << "_q_onThemePropertyChanged() error when notify signal" << p.notifySignal().name();
}
}
DXCBPlatformInterface::DXCBPlatformInterface(quint32 window, DPlatformTheme *platformTheme)
: DPlatformInterface(platformTheme)
, Core::DObject(*new DXCBPlatformInterfacePrivate(this))
{
D_D(DXCBPlatformInterface);
d->theme = new DNativeSettings(window, QByteArray(), platformTheme);
connect(d->theme, SIGNAL(propertyChanged(const QByteArray &, const QVariant &)),
this, SLOT(_q_onThemePropertyChanged(const QByteArray &, const QVariant &)));
}
int DXCBPlatformInterface::cursorBlinkTime() const
{
FETCH_PROPERTY("Net/CursorBlinkTime", cursorBlinkTime)
return value.toInt();
}
int DXCBPlatformInterface::cursorBlinkTimeout() const
{
FETCH_PROPERTY("Net/CursorBlinkTimeout", cursorBlinkTimeout)
return value.toInt();
}
bool DXCBPlatformInterface::cursorBlink() const
{
FETCH_PROPERTY("Net/CursorBlink", cursorBlink)
return value.toInt();
}
int DXCBPlatformInterface::doubleClickDistance() const
{
FETCH_PROPERTY("Net/DoubleClickDistance", doubleClickDistance)
return value.toInt();
}
int DXCBPlatformInterface::doubleClickTime() const
{
FETCH_PROPERTY("Net/DoubleClickTime", doubleClickTime)
return value.toInt();
}
int DXCBPlatformInterface::dndDragThreshold() const
{
FETCH_PROPERTY("Net/DndDragThreshold", dndDragThreshold)
return value.toInt();
}
int DXCBPlatformInterface::windowRadius() const
{
return windowRadius(-1);
}
int DXCBPlatformInterface::windowRadius(int defaultValue) const
{
Q_D(const DXCBPlatformInterface);
QVariant value = d->theme->getSetting(QByteArrayLiteral("DTK/WindowRadius"));
bool ok = false;
if (d->fallbackProperty && !value.isValid() && d->parent)
return d->parent->windowRadius(defaultValue);
int radius = value.toInt(&ok);
return ok ? radius : defaultValue;
}
QByteArray DXCBPlatformInterface::themeName() const
{
FETCH_PROPERTY("Net/ThemeName", themeName)
return value.toByteArray();
}
QByteArray DXCBPlatformInterface::iconThemeName() const
{
FETCH_PROPERTY("Net/IconThemeName", iconThemeName)
return value.toByteArray();
}
QByteArray DXCBPlatformInterface::soundThemeName() const
{
FETCH_PROPERTY("Net/SoundThemeName", soundThemeName)
return value.toByteArray();
}
QByteArray DXCBPlatformInterface::fontName() const
{
FETCH_PROPERTY("Qt/FontName", fontName)
return value.toByteArray();
}
QByteArray DXCBPlatformInterface::monoFontName() const
{
FETCH_PROPERTY("Qt/MonoFontName", monoFontName)
return value.toByteArray();
}
qreal DXCBPlatformInterface::fontPointSize() const
{
FETCH_PROPERTY("Qt/FontPointSize", fontPointSize)
return value.toDouble();
}
QByteArray DXCBPlatformInterface::gtkFontName() const
{
FETCH_PROPERTY("Gtk/FontName", gtkFontName)
return value.toByteArray();
}
QColor DXCBPlatformInterface::activeColor() const
{
FETCH_PROPERTY("Qt/ActiveColor", activeColor)
return qvariant_cast<QColor>(value);
}
QColor DXCBPlatformInterface::darkActiveColor() const
{
FETCH_PROPERTY("Qt/DarkActiveColor", darkActiveColor)
return qvariant_cast<QColor>(value);
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
#define GET_COLOR(Role) qvariant_cast<QColor>(getSetting(QByteArrayLiteral(#Role)))
static QColor getSetting(const QByteArray &key)
{
Q_UNUSED(key);
qWarning() << "Not implemented, key:" << key;
return {};
}
QColor DXCBPlatformInterface::window() const
{
return GET_COLOR(window);
}
QColor DXCBPlatformInterface::windowText() const
{
return GET_COLOR(windowText);
}
QColor DXCBPlatformInterface::base() const
{
return GET_COLOR(base);
}
QColor DXCBPlatformInterface::alternateBase() const
{
return GET_COLOR(alternateBase);
}
QColor DXCBPlatformInterface::toolTipBase() const
{
return GET_COLOR(toolTipBase);
}
QColor DXCBPlatformInterface::toolTipText() const
{
return GET_COLOR(toolTipText);
}
QColor DXCBPlatformInterface::text() const
{
return GET_COLOR(text);
}
QColor DXCBPlatformInterface::button() const
{
return GET_COLOR(button);
}
QColor DXCBPlatformInterface::buttonText() const
{
return GET_COLOR(buttonText);
}
QColor DXCBPlatformInterface::brightText() const
{
return GET_COLOR(brightText);
}
QColor DXCBPlatformInterface::light() const
{
return GET_COLOR(light);
}
QColor DXCBPlatformInterface::midlight() const
{
return GET_COLOR(midlight);
}
QColor DXCBPlatformInterface::dark() const
{
return GET_COLOR(dark);
}
QColor DXCBPlatformInterface::mid() const
{
return GET_COLOR(mid);
}
QColor DXCBPlatformInterface::shadow() const
{
return GET_COLOR(shadow);
}
QColor DXCBPlatformInterface::highlight() const
{
return GET_COLOR(highlight);
}
QColor DXCBPlatformInterface::highlightedText() const
{
return GET_COLOR(highlightedText);
}
QColor DXCBPlatformInterface::link() const
{
return GET_COLOR(link);
}
QColor DXCBPlatformInterface::linkVisited() const
{
return GET_COLOR(linkVisited);
}
QColor DXCBPlatformInterface::itemBackground() const
{
return GET_COLOR(itemBackground);
}
QColor DXCBPlatformInterface::textTitle() const
{
return GET_COLOR(textTitle);
}
QColor DXCBPlatformInterface::textTips() const
{
return GET_COLOR(textTips);
}
QColor DXCBPlatformInterface::textWarning() const
{
return GET_COLOR(textWarning);
}
QColor DXCBPlatformInterface::textLively() const
{
return GET_COLOR(textLively);
}
QColor DXCBPlatformInterface::lightLively() const
{
return GET_COLOR(lightLively);
}
QColor DXCBPlatformInterface::darkLively() const
{
return GET_COLOR(darkLively);
}
QColor DXCBPlatformInterface::frameBorder() const
{
return GET_COLOR(frameBorder);
}
#endif
int DXCBPlatformInterface::dotsPerInch(const QString &screenName) const
{
bool ok = false;
if (!screenName.isEmpty()) {
FETCH_PROPERTY_WITH_ARGS("Qt/DPI/" + screenName.toLocal8Bit(), dotsPerInch, screenName);
int dpi = value.toInt(&ok);
if (ok)
return dpi;
}
FETCH_PROPERTY_WITH_ARGS("Xft/DPI", dotsPerInch, screenName);
int dpi = value.toInt(&ok);
return ok ? dpi : -1;
}
/*!
\property DXCBPlatformInterface::sizeMode
\brief This property holds the sizeMode of the system's SizeMode.
*/
int DXCBPlatformInterface::sizeMode() const
{
D_DC(DXCBPlatformInterface);
QVariant value = d->theme->getSetting(QByteArrayLiteral("DTK/SizeMode"));
return value.toInt();
}
/*!
\property DXCBPlatformInterface::scrollBarPolicy
\brief This property holds the scrollBarPolicy of the system. same as Qt::ScrollBarPolicy
\retval 0 show as needed auto hide, default
\retval 1 always off
\retval 2 always on
*/
int DXCBPlatformInterface::scrollBarPolicy() const
{
FETCH_PROPERTY("Qt/ScrollBarPolicy", scrollBarPolicy)
return qvariant_cast<int>(value);
}
void DXCBPlatformInterface::setCursorBlinkTime(int cursorBlinkTime)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/CursorBlinkTime", cursorBlinkTime);
}
void DXCBPlatformInterface::setCursorBlinkTimeout(int cursorBlinkTimeout)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/CursorBlinkTimeout", cursorBlinkTimeout);
}
void DXCBPlatformInterface::setCursorBlink(bool cursorBlink)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/CursorBlink", cursorBlink);
}
void DXCBPlatformInterface::setDoubleClickDistance(int doubleClickDistance)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/DoubleClickDistance", doubleClickDistance);
}
void DXCBPlatformInterface::setDoubleClickTime(int doubleClickTime)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/DoubleClickTime", doubleClickTime);
}
void DXCBPlatformInterface::setDndDragThreshold(int dndDragThreshold)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/DndDragThreshold", dndDragThreshold);
}
void DXCBPlatformInterface::setThemeName(const QByteArray &themeName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/ThemeName", themeName);
}
void DXCBPlatformInterface::setIconThemeName(const QByteArray &iconThemeName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/IconThemeName", iconThemeName);
}
void DXCBPlatformInterface::setSoundThemeName(const QByteArray &soundThemeName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Net/SoundThemeName", soundThemeName);
}
void DXCBPlatformInterface::setFontName(const QByteArray &fontName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Qt/FontName", fontName);
}
void DXCBPlatformInterface::setMonoFontName(const QByteArray &monoFontName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Qt/MonoFontName", monoFontName);
}
void DXCBPlatformInterface::setFontPointSize(qreal fontPointSize)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Qt/FontPointSize", fontPointSize);
}
void DXCBPlatformInterface::setGtkFontName(const QByteArray &fontName)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Gtk/FontName", fontName);
}
void DXCBPlatformInterface::setActiveColor(const QColor activeColor)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Qt/ActiveColor", activeColor);
}
void DXCBPlatformInterface::setDarkActiveColor(const QColor &activeColor)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("Qt/DarkActiveColor", activeColor);
}
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
#define SET_COLOR(Role) setSetting(QByteArrayLiteral(#Role), Role)
static void setSetting(const QByteArray &key, const QColor &color)
{
Q_UNUSED(key);
Q_UNUSED(color);
qWarning() << "Not implemented, key: " << key << "value: " << color;
}
void DXCBPlatformInterface::setWindow(const QColor &window)
{
SET_COLOR(window);
}
void DXCBPlatformInterface::setWindowText(const QColor &windowText)
{
SET_COLOR(windowText);
}
void DXCBPlatformInterface::setBase(const QColor &base)
{
SET_COLOR(base);
}
void DXCBPlatformInterface::setAlternateBase(const QColor &alternateBase)
{
SET_COLOR(alternateBase);
}
void DXCBPlatformInterface::setToolTipBase(const QColor &toolTipBase)
{
SET_COLOR(toolTipBase);
}
void DXCBPlatformInterface::setToolTipText(const QColor &toolTipText)
{
SET_COLOR(toolTipText);
}
void DXCBPlatformInterface::setText(const QColor &text)
{
SET_COLOR(text);
}
void DXCBPlatformInterface::setButton(const QColor &button)
{
SET_COLOR(button);
}
void DXCBPlatformInterface::setButtonText(const QColor &buttonText)
{
SET_COLOR(buttonText);
}
void DXCBPlatformInterface::setBrightText(const QColor &brightText)
{
SET_COLOR(brightText);
}
void DXCBPlatformInterface::setLight(const QColor &light)
{
SET_COLOR(light);
}
void DXCBPlatformInterface::setMidlight(const QColor &midlight)
{
SET_COLOR(midlight);
}
void DXCBPlatformInterface::setDark(const QColor &dark)
{
SET_COLOR(dark);
}
void DXCBPlatformInterface::setMid(const QColor &mid)
{
SET_COLOR(mid);
}
void DXCBPlatformInterface::setShadow(const QColor &shadow)
{
SET_COLOR(shadow);
}
void DXCBPlatformInterface::setHighlight(const QColor &highlight)
{
SET_COLOR(highlight);
}
void DXCBPlatformInterface::setHighlightedText(const QColor &highlightText)
{
SET_COLOR(highlightText);
}
void DXCBPlatformInterface::setLink(const QColor &link)
{
SET_COLOR(link);
}
void DXCBPlatformInterface::setLinkVisited(const QColor &linkVisited)
{
SET_COLOR(linkVisited);
}
void DXCBPlatformInterface::setItemBackground(const QColor &itemBackground)
{
SET_COLOR(itemBackground);
}
void DXCBPlatformInterface::setTextTitle(const QColor &textTitle)
{
SET_COLOR(textTitle);
}
void DXCBPlatformInterface::setTextTips(const QColor &textTips)
{
SET_COLOR(textTips);
}
void DXCBPlatformInterface::setTextWarning(const QColor &textWarning)
{
SET_COLOR(textWarning);
}
void DXCBPlatformInterface::setTextLively(const QColor &textLively)
{
SET_COLOR(textLively);
}
void DXCBPlatformInterface::setLightLively(const QColor &lightLively)
{
SET_COLOR(lightLively);
}
void DXCBPlatformInterface::setDarkLively(const QColor &darkLively)
{
SET_COLOR(darkLively);
}
void DXCBPlatformInterface::setFrameBorder(const QColor &frameBorder)
{
SET_COLOR(frameBorder);
}
#endif
void DXCBPlatformInterface::setDotsPerInch(const QString &screenName, int dpi)
{
D_D(DXCBPlatformInterface);
if (screenName.isEmpty()) {
d->theme->setSetting("Xft/DPI", dpi);
} else {
d->theme->setSetting("Qt/DPI/" + screenName.toLocal8Bit(), dpi);
}
}
void DXCBPlatformInterface::setWindowRadius(int windowRadius)
{
D_D(DXCBPlatformInterface);
d->theme->setSetting("DTK/WindowRadius", windowRadius);
}
DGUI_END_NAMESPACE
#include "moc_dxcbplatforminterface.cpp"

View File

@ -1,131 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef DXCBPLATFORMINTERFACE_H
#define DXCBPLATFORMINTERFACE_H
#include "private/dplatforminterface_p.h"
#include <DObject>
DGUI_BEGIN_NAMESPACE
class DXCBPlatformInterfacePrivate;
class DXCBPlatformInterface : public QObject, public DPlatformInterface, public DCORE_NAMESPACE::DObject
{
Q_OBJECT
D_DECLARE_PRIVATE(DXCBPlatformInterface)
public:
explicit DXCBPlatformInterface(quint32 window, DPlatformTheme *platformTheme);
int cursorBlinkTime() const override;
int cursorBlinkTimeout() const override;
bool cursorBlink() const override;
int doubleClickDistance() const override;
int doubleClickTime() const override;
int dndDragThreshold() const override;
int windowRadius() const override;
int windowRadius(int defaultValue) const override;
QByteArray themeName() const override;
QByteArray iconThemeName() const override;
QByteArray soundThemeName() const override;
QByteArray fontName() const override;
QByteArray monoFontName() const override;
qreal fontPointSize() const override;
QByteArray gtkFontName() const override;
QColor activeColor() const override;
QColor darkActiveColor() const override;
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QColor window() const override;
QColor windowText() const override;
QColor base() const override;
QColor alternateBase() const override;
QColor toolTipText() const override;
QColor toolTipBase() const override;
QColor text() const override;
QColor button() const override;
QColor buttonText() const override;
QColor brightText() const override;
QColor light() const override;
QColor midlight() const override;
QColor dark() const override;
QColor mid() const override;
QColor shadow() const override;
QColor highlight() const override;
QColor highlightedText() const override;
QColor link() const override;
QColor linkVisited() const override;
QColor itemBackground() const override;
QColor textTitle() const override;
QColor textTips() const override;
QColor textWarning() const override;
QColor textLively() const override;
QColor lightLively() const override;
QColor darkLively() const override;
QColor frameBorder() const override;
#endif
int sizeMode() const override;
int scrollBarPolicy() const override;
public Q_SLOTS:
void setCursorBlinkTime(int cursorBlinkTime) override;
void setCursorBlinkTimeout(int cursorBlinkTimeout) override;
void setCursorBlink(bool cursorBlink) override;
void setDoubleClickDistance(int doubleClickDistance) override;
void setDoubleClickTime(int doubleClickTime) override;
void setDndDragThreshold(int dndDragThreshold) override;
void setThemeName(const QByteArray &themeName) override;
void setIconThemeName(const QByteArray &iconThemeName) override;
void setSoundThemeName(const QByteArray &soundThemeName) override;
void setFontName(const QByteArray &fontName) override;
void setMonoFontName(const QByteArray &monoFontName) override;
void setFontPointSize(qreal fontPointSize) override;
void setGtkFontName(const QByteArray &fontName) override;
void setActiveColor(const QColor activeColor) override;
void setDarkActiveColor(const QColor &activeColor) override;
#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void setWindow(const QColor &window) override;
void setWindowText(const QColor &windowText) override;
void setBase(const QColor &base) override;
void setAlternateBase(const QColor &alternateBase) override;
void setToolTipBase(const QColor &toolTipBase) override;
void setToolTipText(const QColor &toolTipText) override;
void setText(const QColor &text) override;
void setButton(const QColor &button) override;
void setButtonText(const QColor &buttonText) override;
void setBrightText(const QColor &brightText) override;
void setLight(const QColor &light) override;
void setMidlight(const QColor &midlight) override;
void setDark(const QColor &dark) override;
void setMid(const QColor &mid) override;
void setShadow(const QColor &shadow) override;
void setHighlight(const QColor &highlight) override;
void setHighlightedText(const QColor &highlightedText) override;
void setLink(const QColor &link) override;
void setLinkVisited(const QColor &linkVisited) override;
void setItemBackground(const QColor &itemBackground) override;
void setTextTitle(const QColor &textTitle) override;
void setTextTips(const QColor &textTips) override;
void setTextWarning(const QColor &textWarning) override;
void setTextLively(const QColor &textLively) override;
void setLightLively(const QColor &lightLively) override;
void setDarkLively(const QColor &darkLively) override;
void setFrameBorder(const QColor &frameBorder) override;
#endif
int dotsPerInch(const QString &screenName = QString()) const override;
void setDotsPerInch(const QString &screenName, int dpi) override;
void setWindowRadius(int windowRadius) override;
private:
friend class DPlatformThemePrivate;
D_PRIVATE_SLOT(void _q_onThemePropertyChanged(const QByteArray &name, const QVariant &value))
};
DGUI_END_NAMESPACE
#endif // DXCBPLATFORMINTERFACE_H

View File

@ -1,36 +0,0 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#ifndef DXCBPLATFORMINTERFACE_P_H
#define DXCBPLATFORMINTERFACE_P_H
#include "dxcbplatforminterface.h"
#include "private/dplatforminterface_p.h"
#include <QHash>
#include <DObjectPrivate>
DGUI_BEGIN_NAMESPACE
class DNativeSettings;
class DPlatformTheme;
class DXCBPlatformInterfacePrivate : public DCORE_NAMESPACE::DObjectPrivate
{
public:
D_DECLARE_PUBLIC(DXCBPlatformInterface)
DXCBPlatformInterfacePrivate(DXCBPlatformInterface *qq);
void _q_onThemePropertyChanged(const QByteArray &name, const QVariant &value);
public:
DPlatformTheme *parent = nullptr;
bool fallbackProperty = true;
DNativeSettings *theme;
QHash<QString, QString> m_properties;
};
DGUI_END_NAMESPACE
#endif // DNATIVESETTINGS_P_H

Some files were not shown because too many files have changed in this diff Show More