* Edit > Paste operation now preserves newlines in text by default.
+* Dark mode on Windows is possible now by choosing "fusion" user interface style
+ in user interface preferences dialog, your system style has to be set to dark
+ (bug 12832).
+
!!Documents compilation process and images conversion
return app.exec();
}
+ // This one is edited through the preferences dialog.
+ // need to call this before createApplication
+ // because we need to know the Qt style for creating the Application
+ if (!readRcFile("preferences", true))
+ return EXIT_FAILURE;
+
// Let the frontend parse and remove all arguments that it knows
pimpl_->application_.reset(createApplication(argc, argv));
pimpl_->system_movers_ = pimpl_->movers_;
system_lcolor = lcolor;
- // This one is edited through the preferences dialog.
- if (!readRcFile("preferences", true))
- return false;
-
// The language may have been set to someting useful through prefs
setLocale();
{ "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
{ "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
{ "\\ui_file", LyXRC::RC_UIFILE },
+ { "\\ui_style", LyXRC::RC_UI_STYLE },
{ "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
{ "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
{ "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
lexrc >> icon_set;
break;
+ case RC_UI_STYLE:
+ lexrc >> ui_style;
+ break;
+
case RC_USE_SYSTEM_THEME_ICONS:
lexrc >> use_system_theme_icons;
break;
if (tag != RC_LAST)
break;
// fall through
+ case RC_UI_STYLE:
+ if (ignore_system_lyxrc ||
+ ui_style != system_lyxrc.ui_style) {
+ os << "\\ui_style \"" << ui_style
+ << "\"\n";
+ }
+ if (tag != RC_LAST)
+ break;
+ // fall through
case RC_USE_SYSTEM_THEME_ICONS:
if (ignore_system_lyxrc ||
use_system_theme_icons != system_lyxrc.use_system_theme_icons) {
case LyXRC::RC_GROUP_LAYOUTS:
case LyXRC::RC_HUNSPELLDIR_PATH:
case LyXRC::RC_ICON_SET:
+ case LyXRC::RC_UI_STYLE:
case LyXRC::RC_INDEX_ALTERNATIVES:
case LyXRC::RC_INDEX_COMMAND:
case LyXRC::RC_JBIBTEX_COMMAND:
RC_TEXINPUTS_PREFIX,
RC_THESAURUSDIRPATH,
RC_UIFILE,
+ RC_UI_STYLE,
RC_USELASTFILEPOS,
RC_USER_EMAIL,
RC_USER_INITIALS,
std::string user_initials;
/// icon set name
std::string icon_set;
+ /// ui style name
+ std::string ui_style;
/// whether to use the icons from the theme
bool use_system_theme_icons = false;
/// True if the TeX engine cannot handle posix paths
#endif
#endif
+ if (!lyxrc.ui_style.empty())
+ frontend::GuiApplication::setStyle(toqstr(lyxrc.ui_style));
+
frontend::GuiApplication * guiApp = new frontend::GuiApplication(argc, argv);
// I'd rather do that in the constructor, but I do not think that
// the palette is accessible there.
#include <QPushButton>
#include <QSpinBox>
#include <QString>
+#include <QStyleFactory>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QValidator>
this, SIGNAL(changed()));
connect(iconSetCO, SIGNAL(activated(int)),
this, SIGNAL(changed()));
+ connect(uiStyleCO, SIGNAL(activated(int)),
+ this, SIGNAL(changed()));
connect(useSystemThemeIconsCB, SIGNAL(clicked()),
this, SIGNAL(changed()));
connect(lastfilesSB, SIGNAL(valueChanged(int)),
iconSetCO->addItem(qt_("Classic"), "classic");
iconSetCO->addItem(qt_("Oxygen"), "oxygen");
+ for (const auto& style : QStyleFactory::keys())
+ {
+ uiStyleCO->addItem(style.toLower());
+ }
+
if (guiApp->platformName() != "xcb"
&& !guiApp->platformName().contains("wayland"))
useSystemThemeIconsCB->hide();
rc.icon_set = fromqstr(iconSetCO->itemData(
iconSetCO->currentIndex()).toString());
+ frontend::GuiApplication::setStyle(uiStyleCO->currentText());
+ rc.ui_style = fromqstr(uiStyleCO->currentText());
+
rc.ui_file = internal_path(fromqstr(uiFileED->text()));
rc.use_system_theme_icons = useSystemThemeIconsCB->isChecked();
rc.num_lastfiles = lastfilesSB->value();
if (iconset < 0)
iconset = 0;
iconSetCO->setCurrentIndex(iconset);
+ uiStyleCO->setCurrentIndex(uiStyleCO->findText(
+ frontend::GuiApplication::style()->objectName().toLower()));
useSystemThemeIconsCB->setChecked(rc.use_system_theme_icons);
uiFileED->setText(toqstr(external_path(rc.ui_file)));
lastfilesSB->setValue(rc.num_lastfiles);
<x>0</x>
<y>0</y>
<width>556</width>
- <height>476</height>
+ <height>502</height>
</rect>
</property>
<property name="sizePolicy">
</item>
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0">
+ <item row="1" column="2">
+ <layout class="QHBoxLayout" name="horizontalLayout"/>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="uiFilePB">
+ <property name="text">
+ <string>Bro&wse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="iconSetCO">
+ <property name="toolTip">
+ <string>The icon set to use. Warning: normal size of icons may be wrong until you save the preferences and restart LyX.</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="iconSetLA">
+ <property name="text">
+ <string>&Icon set:</string>
+ </property>
+ <property name="buddy">
+ <cstring>iconSetCO</cstring>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QLabel" name="uiFileLA">
<property name="text">
<item row="0" column="1">
<widget class="QLineEdit" name="uiFileED"/>
</item>
- <item row="0" column="2">
- <widget class="QPushButton" name="uiFilePB">
+ <item row="2" column="0">
+ <widget class="QLabel" name="uiStyleLA">
<property name="text">
- <string>Bro&wse...</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="iconSetLA">
- <property name="text">
- <string>&Icon set:</string>
+ <string>User interface &style:</string>
</property>
<property name="buddy">
- <cstring>iconSetCO</cstring>
+ <cstring>uiStyleCO</cstring>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QComboBox" name="iconSetCO">
+ <item row="2" column="1">
+ <widget class="QComboBox" name="uiStyleCO">
<property name="toolTip">
- <string>The icon set to use. Warning: normal size of icons may be wrong until you save the preferences and restart LyX.</string>
+ <string>Only certain styles may support dark mode, e.g. fusion on Windows</string>
</property>
</widget>
</item>
- <item row="1" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout"/>
+ <item row="2" column="2">
+ <layout class="QHBoxLayout" name="horizontalLayout_2"/>
</item>
</layout>
</item>