Clear the application stylesheet when using system colors

QETApp::useSystemPalette(true) installed a one-rule application stylesheet
whose only declaration was invalid CSS:

    QAbstractScrollArea#mdiarea {
        background-color -> setPalette(initial_palette_);
    }

That is not a CSS declaration but a note-to-self, committed in e6c32bc0
("Background set to use System Palette", 2014) when a hardcoded

        background-color:#D5D2D1;

was replaced with a reminder to derive the color from the palette instead.
Qt's CSS parser silently skips invalid declarations, and at the time the
same rule still carried valid background-image/-repeat/-position
properties, so the block kept working and nothing looked wrong. Those
properties were dropped later, leaving a rule with no valid declarations
at all.

The rule has therefore styled nothing for some time. It is not harmless
though: a non-empty application stylesheet wraps every widget in
QStyleSheetStyle, which overrides per-widget QWidget::setStyle(). QET
does not currently call QWidget::setStyle() anywhere, so nothing is
visibly broken today, but it blocks that API for future work — it was
found while prototyping a palette-based dark mode (see #553).

Replace it with an explicit setStyleSheet(QString()). The behavior of the
"use system colors" branch is unchanged: it already dropped whatever
style.css had loaded (by overwriting it with the inert rule), and the
qApp->setPalette(initial_palette_) call on the line above is what actually
supplies the system colors — which is what the 2014 note was asking for.

The style.css path (use == false) is untouched.

Reported by DieterMayerOSS in #553.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ispyisail
2026-07-26 22:28:32 +12:00
parent e9a53dbec2
commit b688baf3b6
+9 -5
View File
@@ -1690,11 +1690,15 @@ void QETApp::invertMainWindowVisibility(QWidget *window) {
void QETApp::useSystemPalette(bool use) {
if (use) {
qApp->setPalette(initial_palette_);
qApp->setStyleSheet(
"QAbstractScrollArea#mdiarea {"
"background-color -> setPalette(initial_palette_);"
"}"
);
// Drop any stylesheet previously loaded from style.css: with system
// colors requested, the palette set just above is what provides them.
//
// This used to install a one-rule stylesheet whose only declaration
// was invalid CSS ("background-color -> setPalette(initial_palette_);",
// a note-to-self committed in e6c32bc0, 2014). It styled nothing, but
// a non-empty application stylesheet still wraps every widget in
// QStyleSheetStyle, which overrides per-widget QWidget::setStyle().
qApp->setStyleSheet(QString());
} else {
QFile file(configDir() + "/style.css");
if (file.open(QFile::ReadOnly)) {