Ticket #9376: Limit text width in the editor window (non-fullscreen mode)

Daniel xracoonx at gmx.de
Sat Aug 1 07:48:30 UTC 2020


I am trying to fix Ticket #9376. My attempt so far is attached. However, 
I have hit a little road block in that the clang compiler does not give 
me useful information (for me at least):

CXXLD    lyx
Undefined symbols for architecture x86_64:
   "std::__1::basic_string<char, std::__1::char_traits<char>, 
std::__1::allocator<char> > lyx::convert<std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> >, 
lyx::Length>(lyx::Length)", referenced from:
       lyx::LyXRC::write(std::__1::basic_ostream<char, 
std::__1::char_traits<char> >&, bool, std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> > const&) const 
in liblyxcore.a(LyXRC.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
make[4]: *** [lyx] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
ERROR: Cannot build and install lyx for x86_64.


Maybe someone knows what I might be doing wrong? My suspicion is that 
the error is at

Length screen_width = Length(7, Length::CM);

But I am not sure.

Daniel
-------------- next part --------------
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index fe02be5019..b29a677c1f 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -345,12 +345,13 @@ int BufferView::rightMargin() const
 {
 	// The value used to be hardcoded to 10
 	int const default_margin = zoomedPixels(10);
+	int const screen_width = inPixels(lyxrc.screen_width);
 	// The additional test for the case the outliner is opened.
-	if (!full_screen_ || !lyxrc.full_screen_limit
-	    || width_ < lyxrc.full_screen_width + 2 * default_margin)
+	if (!lyxrc.screen_limit
+	    || width_ < screen_width + 2 * default_margin)
 		return default_margin;
 
-	return (width_ - lyxrc.full_screen_width) / 2;
+	return (width_ - screen_width) / 2;
 }
 
 
@@ -2129,7 +2130,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 		icp["key"] = from_utf8(arg);
 		if (!opt1.empty())
 			icp["before"] = from_utf8(opt1);
-		icp["literal"] = 
+		icp["literal"] =
 			from_ascii(InsetCitation::last_literal ? "true" : "false");
 		string icstr = InsetCommand::params2string(icp);
 		FuncRequest fr(LFUN_INSET_INSERT, icstr);
diff --git a/src/LyXRC.cpp b/src/LyXRC.cpp
index 42df207154..57d5078b80 100644
--- a/src/LyXRC.cpp
+++ b/src/LyXRC.cpp
@@ -112,13 +112,13 @@ LexerKeyword lyxrcTags[] = {
 	{ "\\format", LyXRC::RC_FILEFORMAT },
 	{ "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
 	{ "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
-	{ "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
+	{ "\\screen_limit", LyXRC::RC_SCREEN_LIMIT },
 	{ "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
 	{ "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
 	{ "\\fullscreen_statusbar", LyXRC::RC_FULL_SCREEN_STATUSBAR },
 	{ "\\fullscreen_tabbar", LyXRC::RC_FULL_SCREEN_TABBAR },
 	{ "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
-	{ "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
+	{ "\\screen_width", LyXRC::RC_SCREEN_WIDTH },
 	{ "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
 	{ "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
 	{ "\\hunspelldir_path", LyXRC::RC_HUNSPELLDIR_PATH },
@@ -1015,8 +1015,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
 		case RC_GROUP_LAYOUTS:
 			lexrc >> group_layouts;
 			break;
-		case RC_FULL_SCREEN_LIMIT:
-			lexrc >> full_screen_limit;
+		case RC_SCREEN_LIMIT:
+			lexrc >> screen_limit;
 			break;
 		case RC_FULL_SCREEN_TOOLBARS:
 			lexrc >> full_screen_toolbars;
@@ -1033,8 +1033,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
 		case RC_FULL_SCREEN_MENUBAR:
 			lexrc >> full_screen_menubar;
 			break;
-		case RC_FULL_SCREEN_WIDTH:
-			lexrc >> full_screen_width;
+		case RC_SCREEN_WIDTH:
+			lexrc >> screen_width;
 			break;
 		case RC_OPEN_BUFFERS_IN_TABS:
 			lexrc >> open_buffers_in_tabs;
@@ -1813,11 +1813,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
 		if (tag != RC_LAST)
 			break;
 		// fall through
-	case RC_FULL_SCREEN_LIMIT:
+	case RC_SCREEN_LIMIT:
 		if (ignore_system_lyxrc ||
-		    full_screen_limit != system_lyxrc.full_screen_limit) {
-			os << "\\fullscreen_limit "
-			   << convert<string>(full_screen_limit)
+		    screen_limit != system_lyxrc.screen_limit) {
+			os << "\\screen_limit "
+			   << convert<string>(screen_limit)
 			   << '\n';
 		}
 		if (tag != RC_LAST)
@@ -1873,11 +1873,11 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
 		if (tag != RC_LAST)
 			break;
 		// fall through
-	case RC_FULL_SCREEN_WIDTH:
+	case RC_SCREEN_WIDTH:
 		if (ignore_system_lyxrc ||
-		    full_screen_width != system_lyxrc.full_screen_width) {
-			os << "\\fullscreen_width "
-			   << convert<string>(full_screen_width)
+		    screen_width != system_lyxrc.screen_width) {
+			os << "\\screen_width "
+			   << convert<string>(screen_width)
 			   << '\n';
 		}
 		if (tag != RC_LAST)
@@ -2929,13 +2929,13 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
 	case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
 	case LyXRC::RC_SINGLE_INSTANCE:
 	case LyXRC::RC_SORT_LAYOUTS:
-	case LyXRC::RC_FULL_SCREEN_LIMIT:
+	case LyXRC::RC_SCREEN_LIMIT:
 	case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
 	case LyXRC::RC_FULL_SCREEN_MENUBAR:
 	case LyXRC::RC_FULL_SCREEN_STATUSBAR:
 	case LyXRC::RC_FULL_SCREEN_TABBAR:
 	case LyXRC::RC_FULL_SCREEN_TOOLBARS:
-	case LyXRC::RC_FULL_SCREEN_WIDTH:
+	case LyXRC::RC_SCREEN_WIDTH:
 	case LyXRC::RC_VISUAL_CURSOR:
 	case LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW:
 	case LyXRC::RC_VIEWER:
diff --git a/src/LyXRC.h b/src/LyXRC.h
index ed7511a6d1..b1de11cc51 100644
--- a/src/LyXRC.h
+++ b/src/LyXRC.h
@@ -86,13 +86,13 @@ public:
 		RC_FILEFORMAT,
 		RC_FORWARD_SEARCH_DVI,
 		RC_FORWARD_SEARCH_PDF,
-		RC_FULL_SCREEN_LIMIT,
+		RC_SCREEN_LIMIT,
 		RC_FULL_SCREEN_SCROLLBAR,
 		RC_FULL_SCREEN_STATUSBAR,
 		RC_FULL_SCREEN_TABBAR,
 		RC_FULL_SCREEN_MENUBAR,
 		RC_FULL_SCREEN_TOOLBARS,
-		RC_FULL_SCREEN_WIDTH,
+		RC_SCREEN_WIDTH,
 		RC_GEOMETRY_SESSION,
 		RC_GROUP_LAYOUTS,
 		RC_GUI_LANGUAGE,
@@ -498,9 +498,9 @@ public:
 	/// Toggle statusbar in fullscreen mode?
 	bool full_screen_statusbar = true;
 	/// Limit the text width?
-	bool full_screen_limit = false;
-	/// Width of limited screen (in pixels) in fullscreen mode
-	int full_screen_width = 700;
+	bool screen_limit = false;
+	/// Width of limited screen in fullscreen mode
+	Length screen_width = Length(7, Length::CM);
 	///
 	bool completion_cursor_text = true;
 	///
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index 98aa0c12b8..c861a97920 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -2756,10 +2756,12 @@ PrefEdit::PrefEdit(GuiPreferences * form)
 		this, SIGNAL(changed()));
 	connect(cursorWidthSB, SIGNAL(valueChanged(int)),
 		this, SIGNAL(changed()));
-	connect(fullscreenLimitGB, SIGNAL(clicked()),
+	connect(screenLimitGB, SIGNAL(clicked()),
 		this, SIGNAL(changed()));
-	connect(fullscreenWidthSB, SIGNAL(valueChanged(int)),
+	connect(screenWidthLE, SIGNAL(textChanged(const QString &)),
 		this, SIGNAL(changed()));
+	connect(screenWidthUnitCO, SIGNAL(activated(int)),
+		this, SLOT(change_adaptor()));
 	connect(toggleTabbarCB, SIGNAL(toggled(bool)),
 		this, SIGNAL(changed()));
 	connect(toggleMenubarCB, SIGNAL(toggled(bool)),
@@ -2792,13 +2794,16 @@ void PrefEdit::applyRC(LyXRC & rc) const
 	rc.full_screen_statusbar = toggleStatusbarCB->isChecked();
 	rc.full_screen_tabbar = toggleTabbarCB->isChecked();
 	rc.full_screen_menubar = toggleMenubarCB->isChecked();
-	rc.full_screen_width = fullscreenWidthSB->value();
-	rc.full_screen_limit = fullscreenLimitGB->isChecked();
+	rc.screen_width = Length(widgetsToLength(screenWidthLE, screenWidthUnitCO));
+	rc.screen_limit = screenLimitGB->isChecked();
 }
 
 
 void PrefEdit::updateRC(LyXRC const & rc)
 {
+	// set the default unit
+	Length::UNIT const default_unit = Length::defaultUnit();
+
 	cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar);
 	scrollBelowCB->setChecked(rc.scroll_below_document);
 	macLikeCursorMovementCB->setChecked(rc.mac_like_cursor_movement);
@@ -2812,8 +2817,8 @@ void PrefEdit::updateRC(LyXRC const & rc)
 	toggleToolbarsCB->setChecked(rc.full_screen_toolbars);
 	toggleTabbarCB->setChecked(rc.full_screen_tabbar);
 	toggleMenubarCB->setChecked(rc.full_screen_menubar);
-	fullscreenWidthSB->setValue(rc.full_screen_width);
-	fullscreenLimitGB->setChecked(rc.full_screen_limit);
+	lengthToWidgets(screenWidthLE, screenWidthUnitCO, rc.screen_width, default_unit);
+	screenLimitGB->setChecked(rc.screen_limit);
 }
 
 
diff --git a/src/frontends/qt/ui/PrefEditUi.ui b/src/frontends/qt/ui/PrefEditUi.ui
index 987dc92d90..c94bbb4da2 100644
--- a/src/frontends/qt/ui/PrefEditUi.ui
+++ b/src/frontends/qt/ui/PrefEditUi.ui
@@ -46,19 +46,6 @@
         </property>
        </widget>
       </item>
-      <item row="1" column="1" colspan="2">
-       <spacer name="horizontalSpacer_3">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>200</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
       <item row="0" column="0">
        <widget class="QCheckBox" name="cursorFollowsCB">
         <property name="text">
@@ -66,39 +53,6 @@
         </property>
        </widget>
       </item>
-      <item row="1" column="0">
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QLabel" name="label_3">
-          <property name="toolTip">
-           <string>Configure the width of the text cursor. Automatic zoom-controlled cursor width used when set to 0.</string>
-          </property>
-          <property name="text">
-           <string>Cursor width (&pixels):</string>
-          </property>
-          <property name="buddy">
-           <cstring>cursorWidthSB</cstring>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSpinBox" name="cursorWidthSB">
-          <property name="minimum">
-           <number>0</number>
-          </property>
-          <property name="maximum">
-           <number>10</number>
-          </property>
-          <property name="singleStep">
-           <number>1</number>
-          </property>
-          <property name="value">
-           <number>1</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
       <item row="7" column="2">
        <spacer name="horizontalSpacer">
         <property name="orientation">
@@ -129,6 +83,16 @@
         </property>
        </widget>
       </item>
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="copyCTMarkupCB">
+        <property name="toolTip">
+         <string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
+        </property>
+        <property name="text">
+         <string>&Keep change tracking markup on copy and paste</string>
+        </property>
+       </widget>
+      </item>
       <item row="7" column="0" colspan="2">
        <widget class="QComboBox" name="macroEditStyleCO">
         <item>
@@ -148,14 +112,78 @@
         </item>
        </widget>
       </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="copyCTMarkupCB">
-        <property name="toolTip">
-         <string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
+      <item row="1" column="0" colspan="2">
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QLabel" name="label_3">
+          <property name="toolTip">
+           <string>Configure the width of the text cursor. Automatic zoom-controlled cursor width used when set to 0.</string>
+          </property>
+          <property name="text">
+           <string>Cursor width (&pixels):</string>
+          </property>
+          <property name="buddy">
+           <cstring>cursorWidthSB</cstring>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="cursorWidthSB">
+          <property name="minimum">
+           <number>0</number>
+          </property>
+          <property name="maximum">
+           <number>10</number>
+          </property>
+          <property name="singleStep">
+           <number>1</number>
+          </property>
+          <property name="value">
+           <number>1</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_4">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+      <item row="8" column="0" colspan="2">
+       <widget class="QGroupBox" name="screenLimitGB">
+        <property name="title">
+         <string>&Limit text width</string>
         </property>
-        <property name="text">
-         <string>&Keep change tracking markup on copy and paste</string>
+        <property name="flat">
+         <bool>true</bool>
         </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_3">
+         <item row="0" column="1">
+          <widget class="QLineEdit" name="screenWidthLE"/>
+         </item>
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_2">
+           <property name="text">
+            <string>Screen used (&pixels):</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2">
+          <widget class="lyx::frontend::LengthCombo" name="screenWidthUnitCO"/>
+         </item>
+        </layout>
        </widget>
       </item>
      </layout>
@@ -214,47 +242,6 @@
         </property>
        </widget>
       </item>
-      <item row="5" column="0">
-       <widget class="QGroupBox" name="fullscreenLimitGB">
-        <property name="title">
-         <string>&Limit text width</string>
-        </property>
-        <property name="flat">
-         <bool>true</bool>
-        </property>
-        <property name="checkable">
-         <bool>true</bool>
-        </property>
-        <layout class="QGridLayout" name="gridLayout_3">
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_2">
-           <property name="text">
-            <string>Screen used (&pixels):</string>
-           </property>
-           <property name="buddy">
-            <cstring>fullscreenWidthSB</cstring>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="QSpinBox" name="fullscreenWidthSB">
-           <property name="minimum">
-            <number>0</number>
-           </property>
-           <property name="maximum">
-            <number>10000</number>
-           </property>
-           <property name="singleStep">
-            <number>10</number>
-           </property>
-           <property name="value">
-            <number>700</number>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
       <item row="4" column="1">
        <spacer name="horizontalSpacer_2">
         <property name="orientation">
@@ -287,6 +274,13 @@
   </layout>
  </widget>
  <layoutdefault spacing="4" margin="9"/>
+ <customwidgets>
+  <customwidget>
+   <class>lyx::frontend::LengthCombo</class>
+   <extends>QComboBox</extends>
+   <header>LengthCombo.h</header>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>cursorFollowsCB</tabstop>
   <tabstop>cursorWidthSB</tabstop>


More information about the lyx-devel mailing list