[LyX/master] Fix display of disabled page margins (#12887)

Juergen Spitzmueller spitz at lyx.org
Sat Sep 16 07:42:51 UTC 2023


commit c8d4b99559ce8775a65dcc8cebc2f37f59ebbc46
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Sat Sep 16 11:00:10 2023 +0200

    Fix display of disabled page margins (#12887)
    
    while preserving input values on geometry toggle
---
 src/frontends/qt/GuiDocument.cpp |   95 ++++++++++++++++++++++++++++++--------
 src/frontends/qt/GuiDocument.h   |   16 ++++++
 2 files changed, 92 insertions(+), 19 deletions(-)

diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index a452168..96eb0bb 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -2187,10 +2187,8 @@ void GuiDocument::setMargins()
 	if (extern_geometry) {
 		marginsModule->marginCB->setChecked(false);
 		setCustomMargins(true);
-	} else {
+	} else
 		marginsModule->marginCB->setChecked(!bp_.use_geometry);
-		setCustomMargins(!bp_.use_geometry);
-	}
 }
 
 
@@ -2220,6 +2218,61 @@ void GuiDocument::setColSep()
 
 void GuiDocument::setCustomMargins(bool custom)
 {
+	if (custom) {
+		// Cache current settings
+		tmp_leftmargin_ = widgetsToLength(marginsModule->innerLE,
+						  marginsModule->innerUnit);
+		tmp_topmargin_ = widgetsToLength(marginsModule->topLE,
+						 marginsModule->topUnit);
+		tmp_rightmargin_ = widgetsToLength(marginsModule->outerLE,
+						   marginsModule->outerUnit);
+		tmp_bottommargin_ = widgetsToLength(marginsModule->bottomLE,
+						    marginsModule->bottomUnit);
+		tmp_headheight_ = widgetsToLength(marginsModule->headheightLE,
+						  marginsModule->headheightUnit);
+		tmp_headsep_ = widgetsToLength(marginsModule->headsepLE,
+					       marginsModule->headsepUnit);
+		tmp_footskip_ = widgetsToLength(marginsModule->footskipLE,
+						marginsModule->footskipUnit);
+		tmp_columnsep_ = widgetsToLength(marginsModule->columnsepLE,
+						 marginsModule->columnsepUnit);
+		// clear widgets
+		marginsModule->topLE->clear();
+		marginsModule->bottomLE->clear();
+		marginsModule->innerLE->clear();
+		marginsModule->outerLE->clear();
+		marginsModule->headheightLE->clear();
+		marginsModule->headsepLE->clear();
+		marginsModule->footskipLE->clear();
+		marginsModule->columnsepLE->clear();
+	} else {
+		Length::UNIT const default_unit = Length::defaultUnit();
+		// re-fill chached values
+		lengthToWidgets(marginsModule->topLE,
+				marginsModule->topUnit,
+				tmp_topmargin_, default_unit);
+		lengthToWidgets(marginsModule->bottomLE,
+				marginsModule->bottomUnit,
+				tmp_bottommargin_, default_unit);
+		lengthToWidgets(marginsModule->innerLE,
+				marginsModule->innerUnit,
+				tmp_leftmargin_, default_unit);
+		lengthToWidgets(marginsModule->outerLE,
+				marginsModule->outerUnit,
+				tmp_rightmargin_, default_unit);
+		lengthToWidgets(marginsModule->headheightLE,
+				marginsModule->headheightUnit,
+				tmp_headheight_, default_unit);
+		lengthToWidgets(marginsModule->headsepLE,
+				marginsModule->headsepUnit,
+				tmp_headsep_, default_unit);
+		lengthToWidgets(marginsModule->footskipLE,
+				marginsModule->footskipUnit,
+				tmp_footskip_, default_unit);
+		lengthToWidgets(marginsModule->columnsepLE,
+				marginsModule->columnsepUnit,
+				tmp_columnsep_, default_unit);
+	}
 	marginsModule->topL->setEnabled(!custom);
 	marginsModule->topLE->setEnabled(!custom);
 	marginsModule->topUnit->setEnabled(!custom);
@@ -3989,14 +4042,16 @@ void GuiDocument::applyView()
 
 	Ui::MarginsUi const * m = marginsModule;
 
-	bp_.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
-	bp_.topmargin = widgetsToLength(m->topLE, m->topUnit);
-	bp_.rightmargin = widgetsToLength(m->outerLE, m->outerUnit);
-	bp_.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit);
-	bp_.headheight = widgetsToLength(m->headheightLE, m->headheightUnit);
-	bp_.headsep = widgetsToLength(m->headsepLE, m->headsepUnit);
-	bp_.footskip = widgetsToLength(m->footskipLE, m->footskipUnit);
-	bp_.columnsep = widgetsToLength(m->columnsepLE, m->columnsepUnit);
+	if (bp_.use_geometry) {
+		bp_.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
+		bp_.topmargin = widgetsToLength(m->topLE, m->topUnit);
+		bp_.rightmargin = widgetsToLength(m->outerLE, m->outerUnit);
+		bp_.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit);
+		bp_.headheight = widgetsToLength(m->headheightLE, m->headheightUnit);
+		bp_.headsep = widgetsToLength(m->headsepLE, m->headsepUnit);
+		bp_.footskip = widgetsToLength(m->footskipLE, m->footskipUnit);
+		bp_.columnsep = widgetsToLength(m->columnsepLE, m->columnsepUnit);
+	}
 
 	// branches
 	branchesModule->apply(bp_);
@@ -4586,32 +4641,34 @@ void GuiDocument::paramsToDialog()
 	// margins
 	Ui::MarginsUi * m = marginsModule;
 
-	setMargins();
+	tmp_leftmargin_ = bp_.leftmargin;
+	tmp_topmargin_ = bp_.topmargin;
+	tmp_rightmargin_ = bp_.rightmargin;
+	tmp_bottommargin_ = bp_.bottommargin;
+	tmp_headheight_ = bp_.headheight;
+	tmp_headsep_ = bp_.headsep;
+	tmp_footskip_ = bp_.footskip;
+	tmp_columnsep_ = bp_.columnsep;
 
 	lengthToWidgets(m->topLE, m->topUnit,
 		bp_.topmargin, default_unit);
-
 	lengthToWidgets(m->bottomLE, m->bottomUnit,
 		bp_.bottommargin, default_unit);
-
 	lengthToWidgets(m->innerLE, m->innerUnit,
 		bp_.leftmargin, default_unit);
-
 	lengthToWidgets(m->outerLE, m->outerUnit,
 		bp_.rightmargin, default_unit);
-
 	lengthToWidgets(m->headheightLE, m->headheightUnit,
 		bp_.headheight, default_unit);
-
 	lengthToWidgets(m->headsepLE, m->headsepUnit,
 		bp_.headsep, default_unit);
-
 	lengthToWidgets(m->footskipLE, m->footskipUnit,
 		bp_.footskip, default_unit);
-
 	lengthToWidgets(m->columnsepLE, m->columnsepUnit,
 		bp_.columnsep, default_unit);
 
+	setMargins();
+
 	// branches
 	updateUnknownBranches();
 	branchesModule->update(bp_);
diff --git a/src/frontends/qt/GuiDocument.h b/src/frontends/qt/GuiDocument.h
index c99345c..5b53194 100644
--- a/src/frontends/qt/GuiDocument.h
+++ b/src/frontends/qt/GuiDocument.h
@@ -360,6 +360,22 @@ private:
 	/// Track whether we prompted the user about unapplied
 	/// changes
 	bool prompted_;
+	/// Cache margin values
+	std::string tmp_leftmargin_;
+	///
+	std::string tmp_topmargin_;
+	///
+	std::string tmp_rightmargin_;
+	///
+	std::string tmp_bottommargin_;
+	///
+	std::string tmp_headheight_;
+	///
+	std::string tmp_headsep_;
+	///
+	std::string tmp_footskip_;
+	///
+	std::string tmp_columnsep_;
 	
 	/// LaTeX syntax highlighter
 	LaTeXHighlighter * pdf_options_highlighter_;


More information about the lyx-cvs mailing list