feat: make QDeepinTheme follow DConfig settings#1005
Conversation
There was a problem hiding this comment.
Sorry @deepin-wm, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: deepin-wm The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
8aa9c67 to
6e93e07
Compare
| WAYLIB_SERVER_USE_NAMESPACE | ||
| DCORE_USE_NAMESPACE; | ||
|
|
||
| class QDeepinTheme : public QGenericUnixTheme |
There was a problem hiding this comment.
请把它拆到一个单独文件实现,现在的逻辑太长了,不应该再放main.cpp里了
| if (!config) | ||
| return; | ||
|
|
||
| config->disconnect(); |
There was a problem hiding this comment.
这个断开的不对,1是只应该断开QDeepinTheme的connect,不能把别人的给断开了,2是这里的config对象是新的,应该断开的是旧的config。
| return; | ||
|
|
||
| // Notify all top-level windows about the theme change | ||
| for (auto *window : QGuiApplication::topLevelWindows()) { |
There was a problem hiding this comment.
for循环要确保用 std::as_const 让list为const的
| // Force Qt to re-query style hints and fonts | ||
| auto *app = QGuiApplication::instance(); | ||
| QEvent fontEvent(QEvent::ApplicationFontChange); | ||
| QCoreApplication::sendEvent(app, &fontEvent); |
There was a problem hiding this comment.
font仅这样做不会有变化,应该要 setFont 直接设置guiapplication的font,而且应该仅在font相关的配置有变化时才这样做,不相关的配置变化时不要做。
| // Notify all top-level windows about the theme change | ||
| for (auto *window : QGuiApplication::topLevelWindows()) { | ||
| QEvent event(QEvent::ThemeChange); | ||
| QCoreApplication::sendEvent(static_cast<QObject*>(window), &event); |
There was a problem hiding this comment.
这样做意义不大,应该调用 QGuiApplicationPrivate::handleThemeChanged ,而且应该只在theme icon等相关变化时才调用。
| return &palette; | ||
| } | ||
|
|
||
| QVariant themeHint(ThemeHint hint) const override |
There was a problem hiding this comment.
不应该只支持这么点,不还有 KeyboardAutoRepeatRate MouseCursorTheme等内容的吗,要把能支持的都支持上去。
| return QGenericUnixTheme::font(type); | ||
| } | ||
|
|
||
| static void notifyThemeChanged() |
There was a problem hiding this comment.
对于有些属性没有通知手段的,且 qstylehints里有设置入口的,可以用qstylehints的setXXXX方法设置,这样它是有信号的,或者干脆优先使用qstylehints的setXXXX方法。
f9c3c96 to
8aa6adc
Compare
| if (type != QPlatformTheme::SystemPalette) { | ||
| return QGenericUnixTheme::palette(type); | ||
| } | ||
| static QPalette palette; |
There was a problem hiding this comment.
为啥要做成静态的?这里可以直接return guihelper的呀
| return QGenericUnixTheme::palette(type); | ||
| } | ||
| static QPalette palette; | ||
| palette = Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette(); |
There was a problem hiding this comment.
不要写完整的namespace,可以跟DCORE_USE_NAMESPACE一样用 DGUI_USE_NAMESPACE
| @@ -0,0 +1,44 @@ | |||
| // Copyright (C) 2024 JiDe Zhang <zhangjide@deepin.org>. | |||
There was a problem hiding this comment.
现在是2026年了,而且不应该是个人的,应该是 UnionTech 公司
49a5a03 to
cba3420
Compare
Implement QDeepinTheme that reads DConfig settings and applies them to the Qt platform theme, so QPA follows treeland user preferences. - Split QDeepinTheme to separate deepintheme.h/.cpp files - Track connections via QMetaObject::Connection for proper cleanup - Disconnect only own connections from old config on rebind - Use QStyleHints setters for properties that have them: setCursorFlashTime, setMouseDoubleClickInterval, setStartDragDistance, setColorScheme - Set font via QGuiApplication::setFont(), only on font changes - Use QGuiApplicationPrivate::handleThemeChanged() for theme/icon changes - Support: cursorBlink/cursorBlinkTime, doubleClickTime, doubleClickDistance, dndDragThreshold, font/monoFont/fontSize, iconThemeName, themeName, preferDark, cursorThemeName
cba3420 to
ef01bc0
Compare
增强 QDeepinTheme,让 treeland 自身的光标闪动间隔、双击间隔、系统字体、等宽字体跟随 DConfig 设置。
WM-25