Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package union6 for openSUSE:Factory checked in at 2026-06-25 10:51:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/union6 (Old) and /work/SRC/openSUSE:Factory/.union6.new.2088 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "union6" Thu Jun 25 10:51:33 2026 rev:2 rq:1361468 version:6.7.1 Changes: -------- --- /work/SRC/openSUSE:Factory/union6/union6.changes 2026-06-18 21:38:43.183334529 +0200 +++ /work/SRC/openSUSE:Factory/.union6.new.2088/union6.changes 2026-06-25 10:55:41.834251580 +0200 @@ -1,0 +2,20 @@ +Tue Jun 23 11:27:24 UTC 2026 - Fabian Vogt <[email protected]> + +- Update to 6.7.1: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.7.1 +- Changes since 6.7.0: + * Update version for new release 6.7.1 + * Guard data assignment in Color's assignment operator (kde#521578) + * output/quick: Use the proper export macro for event type statics + * Don't use `inline static` for event type defaults (kde#521637) + * input/css: Support loading defaults from a different path than the main style + * output/kirigami: Track window activation in PlatformTheme + * output/quick: Ensure ComboBox uses font height for implicit height even if empty + * output/quick: Ensure we get the right DPR for icons (kde#521331) + * output/quick: Ensure QtQuick relocates the ComboBox popup if outside bounds + * output/quick: Consider padding when determining implicit size of a combobox popup + * qtwidgets: For pressed buttons, check for sunken instead +- Delete unused 0001-Don-t-install-a-.so-link-for-internal-libraries.patch + +------------------------------------------------------------------- Old: ---- union-6.7.0.tar.xz union-6.7.0.tar.xz.sig New: ---- union-6.7.1.tar.xz union-6.7.1.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ union6.spec ++++++ --- /var/tmp/diff_new_pack.V10MqN/_old 2026-06-25 10:55:43.014292273 +0200 +++ /var/tmp/diff_new_pack.V10MqN/_new 2026-06-25 10:55:43.018292411 +0200 @@ -26,14 +26,14 @@ %{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')} %bcond_without released Name: union6 -Version: 6.7.0 +Version: 6.7.1 Release: 0 Summary: Qt style supporting both QtQuick and QtWidgets License: LGPL-2.1-or-later URL: https://www.kde.org/ -Source0: %{rname}-%{version}.tar.xz +Source0: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz %if %{with released} -Source1: %{rname}-%{version}.tar.xz.sig +Source1: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz.sig Source2: plasma.keyring %endif BuildRequires: kf6-extra-cmake-modules >= %{kf6_version} ++++++ union-6.7.0.tar.xz -> union-6.7.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/CMakeLists.txt new/union-6.7.1/CMakeLists.txt --- old/union-6.7.0/CMakeLists.txt 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/CMakeLists.txt 2026-06-23 10:20:05.000000000 +0200 @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.27) -set(PROJECT_VERSION "6.7.0") # handled by release scripts +set(PROJECT_VERSION "6.7.1") # handled by release scripts set(KF6_MIN_VERSION "6.26.0") # handled by release scripts project(Union VERSION ${PROJECT_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/Color.cpp new/union-6.7.1/src/Color.cpp --- old/union-6.7.0/src/Color.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/Color.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -434,7 +434,9 @@ Color &Color::operator=(const Color &other) { - data = other.data; + if (other.data) { + data = other.data; + } return *this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/Element.cpp new/union-6.7.1/src/Element.cpp --- old/union-6.7.0/src/Element.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/Element.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -15,6 +15,7 @@ using namespace Union; using namespace Qt::StringLiterals; +UNION_EXPORT QEvent::Type ElementChangedEvent::s_type = QEvent::None; static EventTypeRegistration<ElementChangedEvent> elementRegistration; class Union::ElementPrivate diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/Element.h new/union-6.7.1/src/Element.h --- old/union-6.7.0/src/Element.h 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/Element.h 2026-06-23 10:20:05.000000000 +0200 @@ -305,7 +305,7 @@ const Element::Changes changes; - inline static QEvent::Type s_type = QEvent::None; + static QEvent::Type s_type; }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/input/css/CssLoader.cpp new/union-6.7.1/src/input/css/CssLoader.cpp --- old/union-6.7.0/src/input/css/CssLoader.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/input/css/CssLoader.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -376,7 +376,9 @@ m_stylePath = cssPath / "styles"s / theme->name().toStdString(); cssparser::StyleSheet styleSheet(m_stylePath / "style.css"s); - styleSheet.import(cssPath / "defaults"s / "default.css"s); + auto defaultsPath = + fs::path(QStandardPaths::locate(QStandardPaths::GenericDataLocation, u"union/css/defaults"_s, QStandardPaths::LocateDirectory).toStdString()); + styleSheet.import(defaultsPath / "default.css"s); styleSheet.parse(); const auto paths = styleSheet.paths(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/kirigami/PlatformTheme.cpp new/union-6.7.1/src/output/kirigami/PlatformTheme.cpp --- old/union-6.7.0/src/output/kirigami/PlatformTheme.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/kirigami/PlatformTheme.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -4,6 +4,8 @@ #include "PlatformTheme.h" #include <QMetaEnum> +#include <QQuickRenderControl> +#include <QQuickWindow> #include <Color.h> #include <Style.h> @@ -33,6 +35,13 @@ if (style) { style->installEventFilter(this); } + + auto parentItem = qobject_cast<QQuickItem *>(parent); + if (parentItem) { + connect(parentItem, &QQuickItem::enabledChanged, this, &PlatformTheme::syncColorSchemeColors); + connect(parentItem, &QQuickItem::visibleChanged, this, &PlatformTheme::syncColorSchemeColors); + connect(parentItem, &QQuickItem::windowChanged, this, &PlatformTheme::syncWindow); + } } PlatformTheme::~PlatformTheme() @@ -130,12 +139,12 @@ if (parentItem) { if (!parentItem->isEnabled()) { group = u"disabled"_s; - // } else if (m_window && !m_window->isActive() && m_window->isExposed()) { - // // Why also checking the window is exposed? - // // in the case of QQuickWidget the window() will never be active - // // and the widgets will always have the inactive palette. - // // better to always show it active than always show it inactive - // group = u"inactive"_s; + } else if (m_window && !m_window->isActive() && m_window->isExposed()) { + // Why also checking the window is exposed? + // in the case of QQuickWidget the window() will never be active + // and the widgets will always have the inactive palette. + // better to always show it active than always show it inactive + group = u"inactive"_s; } } @@ -201,4 +210,29 @@ setFrameContrast(Color::custom(u"kcolorscheme"_s, {group, set, u"decoration"_s, u"framecontrast"_s}).toQColor().alphaF()); } +void PlatformTheme::syncWindow() +{ + if (m_window) { + disconnect(m_window.data(), &QWindow::activeChanged, this, &PlatformTheme::syncColorSchemeColors); + } + + QWindow *window = nullptr; + + auto parentItem = qobject_cast<QQuickItem *>(parent()); + if (parentItem) { + QQuickWindow *qw = parentItem->window(); + + window = QQuickRenderControl::renderWindowFor(qw); + if (!window) { + window = qw; + } + } + m_window = window; + + if (window) { + connect(m_window.data(), &QWindow::activeChanged, this, &PlatformTheme::syncColorSchemeColors); + syncColorSchemeColors(); + } +} + #include "moc_PlatformTheme.cpp" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/kirigami/PlatformTheme.h new/union-6.7.1/src/output/kirigami/PlatformTheme.h --- old/union-6.7.0/src/output/kirigami/PlatformTheme.h 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/kirigami/PlatformTheme.h 2026-06-23 10:20:05.000000000 +0200 @@ -33,7 +33,9 @@ private: void syncColorSchemeColors(); + void syncWindow(); Union::Quick::QuickStyle *m_style = nullptr; Union::Quick::ElementAttribute *m_colorSetAttribute = nullptr; + QPointer<QWindow> m_window = nullptr; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/Icon.cpp new/union-6.7.1/src/output/qtquick/plugin/Icon.cpp --- old/union-6.7.0/src/output/qtquick/plugin/Icon.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/Icon.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -4,6 +4,7 @@ #include "Icon.h" #include <QQmlProperty> +#include <QQuickRenderControl> #include <QSGImageNode> #include <StyleRegistry.h> @@ -180,9 +181,16 @@ imageNode->setOwnsTexture(true); imageNode->setFiltering(QSGTexture::Nearest); - if (m_iconChanged || !imageNode->texture()) { + auto renderWindow = QQuickRenderControl::renderWindowFor(window()); + if (!renderWindow) { + renderWindow = window(); + } + + auto dpr = renderWindow->devicePixelRatio(); + + if (m_iconChanged || !imageNode->texture() || !qFuzzyCompare(m_iconDpr, dpr)) { const auto mode = isEnabled() ? QIcon::Mode::Normal : QIcon::Mode::Disabled; - auto image = m_icon.pixmap(m_iconSize, window()->devicePixelRatio(), mode).toImage(); + auto image = m_icon.pixmap(m_iconSize, dpr, mode).toImage(); imageNode->setTexture(window()->createTextureFromImage(image, QQuickWindow::TextureCanUseAtlas)); m_iconChanged = false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/Icon.h new/union-6.7.1/src/output/qtquick/plugin/Icon.h --- old/union-6.7.0/src/output/qtquick/plugin/Icon.h 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/Icon.h 2026-06-23 10:20:05.000000000 +0200 @@ -86,6 +86,7 @@ QIcon m_icon; bool m_iconChanged = true; QSize m_iconSize; + qreal m_iconDpr = 1.0; QPointer<QQuickItem> m_control; QPointer<QuickStyle> m_style; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/Positioner.cpp new/union-6.7.1/src/output/qtquick/plugin/Positioner.cpp --- old/union-6.7.0/src/output/qtquick/plugin/Positioner.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/Positioner.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -13,7 +13,7 @@ using namespace Union; using namespace Union::Quick; -UNION_EXPORT QEvent::Type PositionedItemChangedEvent::s_type = QEvent::None; +UNIONQUICKIMPL_EXPORT QEvent::Type PositionedItemChangedEvent::s_type = QEvent::None; static EventTypeRegistration<PositionedItemChangedEvent> positionedItemChangedRegistration; Positioner::Positioner(QObject *parent) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/QuickElement.cpp new/union-6.7.1/src/output/qtquick/plugin/QuickElement.cpp --- old/union-6.7.0/src/output/qtquick/plugin/QuickElement.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/QuickElement.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -19,6 +19,7 @@ using namespace Union; using namespace Union::Quick; +UNIONQUICKIMPL_EXPORT QEvent::Type QuickElementUpdatedEvent::s_type = QEvent::None; static EventTypeRegistration<QuickElementUpdatedEvent> quickElementRegistration; template<typename T, QList<T *> QuickElement::*member, void (QuickElement::*changeSignal)()> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/QuickElement.h new/union-6.7.1/src/output/qtquick/plugin/QuickElement.h --- old/union-6.7.0/src/output/qtquick/plugin/QuickElement.h 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/QuickElement.h 2026-06-23 10:20:05.000000000 +0200 @@ -462,7 +462,7 @@ public: QuickElementUpdatedEvent(); - inline static QEvent::Type s_type = QEvent::None; + static QEvent::Type s_type; }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/QuickStyle.cpp new/union-6.7.1/src/output/qtquick/plugin/QuickStyle.cpp --- old/union-6.7.0/src/output/qtquick/plugin/QuickStyle.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/QuickStyle.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -16,9 +16,9 @@ using namespace Union; using namespace Union::Quick; -UNION_EXPORT QEvent::Type QuickStyleUpdatedEvent::s_type = QEvent::None; +UNIONQUICKIMPL_EXPORT QEvent::Type QuickStyleUpdatedEvent::s_type = QEvent::None; static EventTypeRegistration<QuickStyleUpdatedEvent> quickStyleUpdatedRegistration; -UNION_EXPORT QEvent::Type QuickStyleColorsChangedEvent::s_type = QEvent::None; +UNIONQUICKIMPL_EXPORT QEvent::Type QuickStyleColorsChangedEvent::s_type = QEvent::None; static EventTypeRegistration<QuickStyleColorsChangedEvent> quickStyleColorsChangedRegistration; QuickStyle::QuickStyle(QQmlEngine *engine, QObject *parent) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/plugin/StyleHints.cpp new/union-6.7.1/src/output/qtquick/plugin/StyleHints.cpp --- old/union-6.7.0/src/output/qtquick/plugin/StyleHints.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/plugin/StyleHints.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -14,7 +14,7 @@ using namespace Union; using namespace Union::Quick; -QEvent::Type StyleHintsChangedEvent::s_type = QEvent::None; +UNIONQUICKIMPL_EXPORT QEvent::Type StyleHintsChangedEvent::s_type = QEvent::None; static EventTypeRegistration<StyleHintsChangedEvent> styleHintsRegistration; StyleHints::StyleHints(QObject *parent) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtquick/style/ComboBox.qml new/union-6.7.1/src/output/qtquick/style/ComboBox.qml --- old/union-6.7.0/src/output/qtquick/style/ComboBox.qml 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtquick/style/ComboBox.qml 2026-06-23 10:20:05.000000000 +0200 @@ -80,9 +80,11 @@ color: Union.Style.properties.icon.color } - contentItem: TextInput { + contentItem: T.TextField { Union.PositionedItem.source: Union.PositionerSource.Text + implicitWidth: Math.max(contentWidth, 1) + implicitHeight: Math.max(contentHeight, metrics.height) clip: true color: Union.Style.properties.text.color ?? control.palette.text @@ -92,12 +94,23 @@ readOnly: control.down inputMethodHints: control.inputMethodHints validator: control.validator + font: control.font horizontalAlignment: Qt.AlignLeft selectByMouse: control.selectTextByMouse selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText + + // It is possible for the combobox to not have any text. In that case, the + // TextField does not have a height, so we end up with the combobox + // resizing oddly if the text is larger than the default height, so we need + // to account for the text height in the implicit height, even if no text is + // set. + FontMetrics { + id: metrics + font: control.font + } } Union.Icon { @@ -125,9 +138,13 @@ width: Math.max(control.width, implicitWidth) height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height) + // Ensure the popup is moved to be within the window if it goes out of + // bounds. + margins: 0 + contentItem: ScrollView { - implicitWidth: popupContent.implicitWidth - implicitHeight: popupContent.implicitHeight + implicitWidth: popupContent.implicitWidth + leftPadding + rightPadding + implicitHeight: popupContent.implicitHeight + topPadding + bottomPadding ListView { id: popupContent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtwidgets/StyleUtils.cpp new/union-6.7.1/src/output/qtwidgets/StyleUtils.cpp --- old/union-6.7.0/src/output/qtwidgets/StyleUtils.cpp 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtwidgets/StyleUtils.cpp 2026-06-23 10:20:05.000000000 +0200 @@ -23,7 +23,7 @@ if (option->state.testFlag(QStyle::State_On)) { states |= Union::Element::State::Checked; } - if (!option->state.testFlag(QStyle::State_Raised)) { + if (option->state.testFlag(QStyle::State_Sunken)) { states |= Union::Element::State::Pressed; } return states; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/union-6.7.0/src/output/qtwidgets/union.themerc new/union-6.7.1/src/output/qtwidgets/union.themerc --- old/union-6.7.0/src/output/qtwidgets/union.themerc 2026-06-11 11:40:58.000000000 +0200 +++ new/union-6.7.1/src/output/qtwidgets/union.themerc 2026-06-23 10:20:05.000000000 +0200 @@ -10,16 +10,21 @@ Name[es]=Unión (en desarrollo) Name[eu]=Union (garapen fasean) Name[fr]=Union (En développement) +Name[he]=איחוד (בפיתוח) Name[hu]=Union (fejlesztés alatt) +Name[it]=Union (in fase di sviluppo) Name[ka]=Union (მიმდინარეობს შემუშავებ) Name[ko]=Union(개발 중) Name[nl]=Union (in ontwikkeling) +Name[nn]=Union (under utvikling) Name[pt_BR]=Union (Em desenvolvimento) +Name[ro]=Union (în dezvoltare) Name[sk]=Union (vo vývoji) Name[sl]=Union (V razvoju) Name[tr]=Union (Geliştirme Sürecinde) Name[uk]=Union (у розробці) Name[zh_CN]=Union 和合 (开发中) +Name[zh_TW]=Union(開發中) Comment=An in-development style engine intended to unify the various styling systems in KDE. Comment[ar]=محرك أنماط قيد التطوير يهدف إلى توحيد أنظمة الأنماط المختلفة في كيدي. Comment[ca]=Un motor d'estil en desenvolupament destinat a unificar els diversos sistemes d'estils de KDE. @@ -28,15 +33,20 @@ Comment[es]=Un motor de estilos en desarrollo que pretende unificar los distintos sistemas de estilos de KDE. Comment[eu]=KDEko estilo-sistema ezberdinak bateratzeko, garapen fasean dagoen estilo-motor bat. Comment[fr]=Un moteur de style en cours de développement destiné à unifier les différents systèmes de style dans KDE. +Comment[he]=מנוע סגנונות שעדיין נמצא בפיתוח שמיועד לאחד את מערכת יישום העיצוב השונות ב־KDE. Comment[hu]=Egy fejlesztés alatt álló stílusmotor, amelynek célja a KDE különböző stílusrendszereinek egységesítése. +Comment[it]=Un motore di stile in fase di sviluppo, pensato per unificare i vari sistemi di stile presenti in KDE. Comment[ka]=შემუშავების სტადიაში მყოფი სტილების ძრავა, რომელიც მიზნად ისახავს KDE-ის სხვადასხვა დასტილვის სისტემების გაერთიანებას. Comment[ko]=KDE의 다양한 스타일 시스템을 통합할 목적으로 개발하고 있는 스타일 엔진입니다. Comment[nl]=Een stijl-engine in ontwikkeling bedoeld om de verschillende stijlensystemen in KDE samen te voegen. +Comment[nn]=Ein stilmotor som er under utvikling og er meint å sameina dei ulike KDE-stilsystema. Comment[pt_BR]=Um mecanismo de estilo em desenvolvimento, destinado a unificar os vários sistemas de estilo do KDE. +Comment[ro]=Un motor de stiluri aflat în dezvoltare ce are ca scop unificarea diferitelor sisteme de stilizare din KDE. Comment[sk]=Vyvíjaný štýlovací engine určený na zjednotenie rôznych štýlovacích systémov v KDE. Comment[sl]=Slogovni mehanizem v razvoju, namenjen poenotenju različnih slogovnih sistemov v KDE. Comment[tr]=KDE’deki çeşitli stil sistemlerini birleştirmeyi amaçlayan, geliştirme aşamasındaki bir stil işletkesi Comment[uk]=Незавершений рушій стилів, який призначено для уніфікації різноманітних систем стилів у KDE. Comment[zh_CN]=一款旨在统一 KDE 中的各种样式系统的样式引擎 (开发中)。 +Comment[zh_TW]=開發中的樣式引擎,希望統合 KDE 的各種風格樣式化系統。 [KDE] WidgetStyle=Union
