View Issue Details

IDProjectCategoryView StatusLast Update
0017974ScribusUser Interfacepublic2026-10-14 20:25
Reporterbuttar Assigned Tocbradney  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
PlatformLinuxOSFedora WorkstationOS Version44
Product Version1.7.4.svn 
Fixed in Version1.7.4.svn 
Summary0017974: Arrange Pages' binding icon disappears after theme change
Description#Issue:
-- Switching between light and dark themes makes the binding-direction icon in Arrange Pages → Document Pages effectively disappear.
-- The button remains present and functional, but its icon retains the previous theme’s colours and loses contrast.
-- Restarting Scribus restores the correct icon.

#Cause:
-- `PageLayouts` creates the stateful binding-direction icon only during construction.
-- Theme changes rebuilds the `IconManager` cache, but `PageLayouts` routes `iconSetChanged()` through `languageChange()`.
-- That path rebuilds the Scheme and First Page controls but does not reload the binding-direction icon.

#Fix:
-- Adds a dedicated `iconSetChange()` handler for theme-driven icon updates.
-- Centralizes rebuilding of all `PageLayouts` icon-bearing controls in `updateIcons()`.
-- Recreates both checked and unchecked binding-direction pixmaps from the current icon set.
-- Preserves the current Scheme and First Page selections and blocks signals while rebuilding their menus.
-- Keeps translated labels and tooltips in `languageChange()`, then refreshes controls whose menu entries combine translated text and icons.
-- Removes the constructor-only binding-icon initialisation.
Tags#please_test
Attached Files
arrange-pages-binding-icon-theme-refresh-v1.01.patch (3,496 bytes)   
Index: scribus/ui/widgets/pagelayout.cpp
===================================================================
--- scribus/ui/widgets/pagelayout.cpp	(revision 27827)
+++ scribus/ui/widgets/pagelayout.cpp	(working copy)
@@ -61,10 +61,6 @@
 	buttonBindingDirection = new QToolButton(this);
 	buttonBindingDirection->setCheckable(true);
 	buttonBindingDirection->setAutoRaise(true);
-	QIcon pageBindingIcon;
-	pageBindingIcon.addPixmap(IconManager::instance().loadPixmap("page-binding-left"), QIcon::Normal, QIcon::Off);
-	pageBindingIcon.addPixmap(IconManager::instance().loadPixmap("page-binding-right"), QIcon::Normal, QIcon::On);
-	buttonBindingDirection->setIcon(pageBindingIcon);
 
 	labelBinding = new FormWidget();
 	labelBinding->setFont(layFont);
@@ -75,7 +71,7 @@
 	languageChange();
 
 	connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
-	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(languageChange()));
+	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
 	connect(buttonScheme, &DropdownButton::activated, this, &PageLayouts::changeScheme, Qt::UniqueConnection);
 	connect(buttonFirstPage, &DropdownButton::activated, this, &PageLayouts::changeFirstPage, Qt::UniqueConnection);
 	connect(buttonBindingDirection, &QToolButton::toggled, this, &PageLayouts::changeBindingDirection, Qt::UniqueConnection);
@@ -184,26 +180,40 @@
 	labelBinding->setLabelVisibility(visibility);
 }
 
-void PageLayouts::languageChange()
+void PageLayouts::updateIcons()
 {
-
 	reloadScheme();
 	reloadFirstPage(m_scheme);
 
-	labelScheme->setText(tr("Scheme"));
-	labelPages->setText(tr("First Page"));
-	labelBinding->setText(tr("Binding"));
-
 	QSignalBlocker sigButtonScheme(buttonScheme);
 	buttonScheme->setCurrentIndex(buttonScheme->currentIndex());
-	buttonScheme->setToolTip(tr("Number of pages to show side-by-side on the canvas. Often used for allowing items to be placed across page spreads."));
 
 	QSignalBlocker sigFirstPage(buttonFirstPage);
 	buttonFirstPage->setCurrentIndex(buttonFirstPage->currentIndex());
+
+	QIcon pageBindingIcon;
+	pageBindingIcon.addPixmap(IconManager::instance().loadPixmap("page-binding-left"), QIcon::Normal, QIcon::Off);
+	pageBindingIcon.addPixmap(IconManager::instance().loadPixmap("page-binding-right"), QIcon::Normal, QIcon::On);
+	buttonBindingDirection->setIcon(pageBindingIcon);
+}
+
+void PageLayouts::iconSetChange()
+{
+	updateIcons();
+}
+
+void PageLayouts::languageChange()
+{
+	labelScheme->setText(tr("Scheme"));
+	labelPages->setText(tr("First Page"));
+	labelBinding->setText(tr("Binding"));
+
+	buttonScheme->setToolTip(tr("Number of pages to show side-by-side on the canvas. Often used for allowing items to be placed across page spreads."));
 	buttonFirstPage->setToolTip(tr("Location on the canvas where the first page of the document is placed"));
 
-	QSignalBlocker sigBinding(buttonBindingDirection);
 	buttonBindingDirection->setToolTip(tr("Bind the pages on the right (LTR) or left (RTL) side"));
+
+	updateIcons();
 }
 
 void PageLayouts::changeScheme(int index)
Index: scribus/ui/widgets/pagelayout.h
===================================================================
--- scribus/ui/widgets/pagelayout.h	(revision 27827)
+++ scribus/ui/widgets/pagelayout.h	(working copy)
@@ -70,6 +70,10 @@
 
 	void reloadScheme();
 	void reloadFirstPage(int scheme);
+	void updateIcons();
+
+private slots:
+	void iconSetChange();
 
 protected slots:
 	void languageChange();
PatchYes

Activities

Issue History

Date Modified Username Field Change
2026-09-09 13:44 buttar New Issue
2026-09-09 13:44 buttar Tag Attached: #please_test
2026-09-09 13:44 buttar File Added: arrange-pages-binding-icon-theme-refresh-v1.01.patch
2026-09-09 13:45 buttar Note Added: 0054446
2026-09-09 13:45 buttar File Added: bind-direction-icon-issue.mp4
2026-10-14 19:42 cbradney Assigned To => cbradney
2026-10-14 19:42 cbradney Status new => resolved
2026-10-14 19:42 cbradney Resolution open => fixed
2026-10-14 19:42 cbradney Fixed in Version => 1.7.4.svn
2026-10-14 20:25 jghali Summary [patch] Arrange Pages' binding icon disappears after theme change => Arrange Pages' binding icon disappears after theme change