View Issue Details

IDProjectCategoryView StatusLast Update
0017953ScribusUser Interfacepublic2026-08-29 10:48
Reporterqirat Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
PlatformLinuxOSFedora WorkstationOS Version44
Product Version1.7.4.svn 
Summary0017953: [patch] Centralise Scribus Stylesheet Processing
Description`scribus.css` loading and dynamic token replacement were duplicated between `ScribusMainWindow` and `PageSelector`.

* Fix: adds shared `loadScribusStyleSheet()` in `util_gui` to load the stylesheet and resolve all dynamic tokens in one place.
* Both callers now use the same helper instead of maintaining separate replacement logic.
* Removes duplicated icon-path and overlay-colour processing code.

* Benefit: future stylesheet tokens only need to be implemented once, reducing the chance of one consumer being missed.

* Behaviour: no intended visual or UX change; this is a maintainability/refactor patch.
Additional InformationBased on Scribus r27791 with patches 00000010000005 already applied.
Tags#please_test
Attached Files
6_theme-stylesheet-processing-refactor-v1.0.patch (5,084 bytes)   
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp	(revision 27791 + patches 1-5)
+++ scribus/scribus.cpp	(working copy)
@@ -249,6 +249,7 @@
 #include "util.h"
 #include "util_file.h"
 #include "util_formats.h"
+#include "util_gui.h"
 #include "third_party/Qt-Advanced-Docking-System/src/DockAreaWidget.h"
 #include "third_party/Qt-Advanced-Docking-System/src/IconProvider.h"
 
@@ -603,25 +604,7 @@
 void ScribusMainWindow::setStyleSheet()
 {
 	QByteArray stylesheet;
-	if (loadRawText(ScPaths::instance().libDir() + "scribus.css", stylesheet))
-	{
-		QString downArrow(IconManager::instance().pathForIcon("stylesheet/go-down.png"));
-		QByteArray da;
-		da.append(downArrow.toUtf8());
-		stylesheet.replace("___downArrow___", da);
-		QString toolbararrow(IconManager::instance().pathForIcon("stylesheet/down_arrow.png"));
-		QByteArray tba;
-		tba.append(toolbararrow.toUtf8());
-		stylesheet.replace("___tb_menu_arrow___", tba);
-
-		const QColor overlayColor = QApplication::palette().color(QPalette::WindowText);
-		const QByteArray overlayRgb = QString("%1, %2, %3")
-			.arg(overlayColor.red())
-			.arg(overlayColor.green())
-			.arg(overlayColor.blue())
-			.toUtf8();
-		stylesheet.replace("___overlayRgb___", overlayRgb);
-	}
+	loadScribusStyleSheet(stylesheet);
 
 	dockManager->setStyleSheet(stylesheet); // style sheet should be enabled when theme manager is implemented to handle color palettes in css file.
 
Index: scribus/ui/pageselector.cpp
===================================================================
--- scribus/ui/pageselector.cpp	(revision 27791 + patches 1-5)
+++ scribus/ui/pageselector.cpp	(working copy)
@@ -6,7 +6,6 @@
 */
 #include "pageselector.h"
 
-#include <QApplication>
 #include <QByteArray>
 #include <QComboBox>
 #include <QDebug>
@@ -14,16 +13,15 @@
 #include <QHBoxLayout>
 #include <QLabel>
 #include <QLineEdit>
-#include <QPalette>
 #include <QPixmap>
 #include <QPushButton>
 #include <QSignalBlocker>
 #include <QToolTip>
 
-#include "scpaths.h"
 #include "scribusapp.h"
 #include "iconmanager.h"
 #include "util.h"
+#include "util_gui.h"
 
 PageSelector::PageSelector( QWidget* parent, int maximumPage ) : QWidget( parent, Qt::WindowFlags() )
 {
@@ -208,22 +206,8 @@
 	lastButton->setIcon(iconManager.loadIcon("go-last"));
 
 	QByteArray stylesheet;
-	if (loadRawText(ScPaths::instance().libDir() + "scribus.css", stylesheet))
-	{
-		QString downArrow(IconManager::instance().pathForIcon("stylesheet/go-down.png"));
-		QByteArray da;
-		da.append(downArrow.toUtf8());
-		stylesheet.replace("___downArrow___", da);
-
-		const QColor overlayColor = QApplication::palette().color(QPalette::WindowText);
-		const QByteArray overlayRgb = QString("%1, %2, %3")
-			.arg(overlayColor.red())
-			.arg(overlayColor.green())
-			.arg(overlayColor.blue())
-			.toUtf8();
-		stylesheet.replace("___overlayRgb___", overlayRgb);
+	if (loadScribusStyleSheet(stylesheet))
 		setStyleSheet(QString(stylesheet));
-	}
 }
 
 void PageSelector::languageChange()
Index: scribus/util_gui.cpp
===================================================================
--- scribus/util_gui.cpp	(revision 27791 + patches 1-5)
+++ scribus/util_gui.cpp	(working copy)
@@ -1,11 +1,35 @@
 #include "util_gui.h"
 
+#include <QApplication>
 #include <QPainterPath>
 #include <QPalette>
+#include "iconmanager.h"
 #include "scpainter.h"
 #include "scpattern.h"
+#include "scpaths.h"
 #include "scribusapp.h"
+#include "util.h"
 #include "vgradient.h"
+
+bool loadScribusStyleSheet(QByteArray& stylesheet)
+{
+	if (!loadRawText(ScPaths::instance().libDir() + "scribus.css", stylesheet))
+		return false;
+
+	IconManager& iconManager = IconManager::instance();
+	stylesheet.replace("___downArrow___", iconManager.pathForIcon("stylesheet/go-down.png").toUtf8());
+	stylesheet.replace("___tb_menu_arrow___", iconManager.pathForIcon("stylesheet/down_arrow.png").toUtf8());
+
+	const QColor overlayColor = QApplication::palette().color(QPalette::WindowText);
+	const QByteArray overlayRgb = QString("%1, %2, %3")
+		.arg(overlayColor.red())
+		.arg(overlayColor.green())
+		.arg(overlayColor.blue())
+		.toUtf8();
+	stylesheet.replace("___overlayRgb___", overlayRgb);
+
+	return true;
+}
 
 void drawCircularHandle(QPainter *painter, QPointF center, qreal width, QBrush background, bool isEnabled)
 {
Index: scribus/util_gui.h
===================================================================
--- scribus/util_gui.h	(revision 27791 + patches 1-5)
+++ scribus/util_gui.h	(working copy)
@@ -1,6 +1,7 @@
 #ifndef _UTIL_GUI_H
 #define _UTIL_GUI_H
 
+#include <QByteArray>
 #include <QPainter>
 #include <QPalette>
 #include "scribusapi.h"
@@ -34,6 +35,7 @@
 bool SCRIBUS_API isDarkColor(QColor color);
 
 // Helper
+bool SCRIBUS_API loadScribusStyleSheet(QByteArray& stylesheet);
 VColorStop SCRIBUS_API computeInBetweenStop(const VColorStop* last, const VColorStop* actual, double t);
 QColor SCRIBUS_API disabledColor(QColor color);
 QColor SCRIBUS_API blendColor(double factor, QColor color1, QColor color2);
PatchYes

Activities

qirat

2026-08-29 10:48

reporter   ~0054370

Correction: Based on Scribus r27791 with patches 1–5 already applied.

See tickets (in order): 0017923, 0017924, 0017925, 0017926, and 0017952.

Issue History

Date Modified Username Field Change
2026-08-29 10:46 qirat New Issue
2026-08-29 10:46 qirat File Added: 6_theme-stylesheet-processing-refactor-v1.0.patch
2026-08-29 10:48 qirat Note Added: 0054370
2026-08-29 10:48 qirat Tag Attached: #please_test