mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 02:49:46 +00:00
Implement ui style selection dialog 12832 attempt 2
This commit is contained in:
parent
5a9ea580e4
commit
d2132751a7
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
* Edit > Paste operation now preserves newlines in text by default.
|
* Edit > Paste operation now preserves newlines in text by default.
|
||||||
|
|
||||||
|
* Dark mode on Windows is possible now by choosing "fusion" user interface style
|
||||||
|
in the user interface preferences dialog, your system style has to be set to dark.
|
||||||
|
|
||||||
|
|
||||||
!!Documents compilation process and images conversion
|
!!Documents compilation process and images conversion
|
||||||
|
|
||||||
|
@ -2004,7 +2004,7 @@ if __name__ == '__main__':
|
|||||||
lyx_check_config = True
|
lyx_check_config = True
|
||||||
lyx_kpsewhich = True
|
lyx_kpsewhich = True
|
||||||
outfile = 'lyxrc.defaults'
|
outfile = 'lyxrc.defaults'
|
||||||
lyxrc_fileformat = 37
|
lyxrc_fileformat = 38
|
||||||
rc_entries = ''
|
rc_entries = ''
|
||||||
lyx_keep_temps = False
|
lyx_keep_temps = False
|
||||||
version_suffix = ''
|
version_suffix = ''
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#LyX 2.4 created this file. For more info see https://www.lyx.org/
|
#LyX 2.4 created this file. For more info see https://www.lyx.org/
|
||||||
\lyxformat 618
|
\lyxformat 620
|
||||||
\begin_document
|
\begin_document
|
||||||
\begin_header
|
\begin_header
|
||||||
\save_transient_properties true
|
\save_transient_properties true
|
||||||
@ -167,6 +167,7 @@ logicalmkup
|
|||||||
\author 5863208 "ab"
|
\author 5863208 "ab"
|
||||||
\author 5863344 "Enrico Forestieri"
|
\author 5863344 "Enrico Forestieri"
|
||||||
\author 244031559 "Yuriy"
|
\author 244031559 "Yuriy"
|
||||||
|
\author 258250489 "eugen"
|
||||||
\author 274215730 "scott"
|
\author 274215730 "scott"
|
||||||
\author 630872221 "Jean-Pierre Chrétien" jeanpierre.chretien@free.fr
|
\author 630872221 "Jean-Pierre Chrétien" jeanpierre.chretien@free.fr
|
||||||
\author 1064312605 "Udi Fogiel"
|
\author 1064312605 "Udi Fogiel"
|
||||||
@ -58115,6 +58116,33 @@ literal "false"
|
|||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
.
|
.
|
||||||
|
\change_inserted 258250489 1697053558
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
|
||||||
|
\change_inserted 258250489 1697054388
|
||||||
|
|
||||||
|
\family sans
|
||||||
|
User
|
||||||
|
\begin_inset space ~
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
interface
|
||||||
|
\begin_inset space ~
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
style
|
||||||
|
\family default
|
||||||
|
allows you to change the look and feel of \SpecialChar LyX
|
||||||
|
's user interface control elements.
|
||||||
|
There may be different choices available on different operating systems.
|
||||||
|
On certain operating systems some styles may support dark mode while others don't.
|
||||||
|
In order to use dark mode in \SpecialChar LyX
|
||||||
|
you may first need to enable it in your system's settings.
|
||||||
|
\change_unchanged
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsubsection
|
\begin_layout Subsubsection
|
||||||
|
@ -168,6 +168,10 @@
|
|||||||
# Add \screen_width
|
# Add \screen_width
|
||||||
# Add \screen_limit
|
# Add \screen_limit
|
||||||
|
|
||||||
|
# Incremented to format 38, by ec
|
||||||
|
# Add option to configure ui style
|
||||||
|
# No conversion necessary.
|
||||||
|
|
||||||
# NOTE: The format should also be updated in LYXRC.cpp and
|
# NOTE: The format should also be updated in LYXRC.cpp and
|
||||||
# in configure.py (search for lyxrc_fileformat).
|
# in configure.py (search for lyxrc_fileformat).
|
||||||
|
|
||||||
@ -555,5 +559,6 @@ conversions = [
|
|||||||
[ 34, [rename_cyrillic_kmap_files]],
|
[ 34, [rename_cyrillic_kmap_files]],
|
||||||
[ 35, [add_dark_color]],
|
[ 35, [add_dark_color]],
|
||||||
[ 36, [add_spellcheck_default]],
|
[ 36, [add_spellcheck_default]],
|
||||||
[ 37, [remove_fullscreen_widthlimit]]
|
[ 37, [remove_fullscreen_widthlimit]],
|
||||||
|
[ 38, []]
|
||||||
]
|
]
|
||||||
|
@ -997,6 +997,7 @@ bool LyX::init()
|
|||||||
// This one is edited through the preferences dialog.
|
// This one is edited through the preferences dialog.
|
||||||
if (!readRcFile("preferences", true))
|
if (!readRcFile("preferences", true))
|
||||||
return false;
|
return false;
|
||||||
|
pimpl_->application_->applyPrefs();
|
||||||
|
|
||||||
// The language may have been set to someting useful through prefs
|
// The language may have been set to someting useful through prefs
|
||||||
setLocale();
|
setLocale();
|
||||||
|
@ -60,7 +60,7 @@ namespace {
|
|||||||
|
|
||||||
// The format should also be updated in configure.py, and conversion code
|
// The format should also be updated in configure.py, and conversion code
|
||||||
// should be added to prefs2prefs_prefs.py.
|
// should be added to prefs2prefs_prefs.py.
|
||||||
static unsigned int const LYXRC_FILEFORMAT = 37; // chillenb: screen_width and screen_limit
|
static unsigned int const LYXRC_FILEFORMAT = 38; // chillenb: screen_width and screen_limit
|
||||||
// when adding something to this array keep it sorted!
|
// when adding something to this array keep it sorted!
|
||||||
LexerKeyword lyxrcTags[] = {
|
LexerKeyword lyxrcTags[] = {
|
||||||
{ "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
|
{ "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
|
||||||
@ -197,6 +197,7 @@ LexerKeyword lyxrcTags[] = {
|
|||||||
{ "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
|
{ "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
|
||||||
{ "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
|
{ "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
|
||||||
{ "\\ui_file", LyXRC::RC_UIFILE },
|
{ "\\ui_file", LyXRC::RC_UIFILE },
|
||||||
|
{ "\\ui_style", LyXRC::RC_UI_STYLE },
|
||||||
{ "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
|
{ "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
|
||||||
{ "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
|
{ "\\use_converter_needauth", LyXRC::RC_USE_CONVERTER_NEEDAUTH },
|
||||||
{ "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
|
{ "\\use_converter_needauth_forbidden", LyXRC::RC_USE_CONVERTER_NEEDAUTH_FORBIDDEN },
|
||||||
@ -603,6 +604,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
|
|||||||
lexrc >> icon_set;
|
lexrc >> icon_set;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RC_UI_STYLE:
|
||||||
|
lexrc >> ui_style;
|
||||||
|
break;
|
||||||
|
|
||||||
case RC_USE_SYSTEM_THEME_ICONS:
|
case RC_USE_SYSTEM_THEME_ICONS:
|
||||||
lexrc >> use_system_theme_icons;
|
lexrc >> use_system_theme_icons;
|
||||||
break;
|
break;
|
||||||
@ -1624,6 +1629,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
|
|||||||
if (tag != RC_LAST)
|
if (tag != RC_LAST)
|
||||||
break;
|
break;
|
||||||
// fall through
|
// 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:
|
case RC_USE_SYSTEM_THEME_ICONS:
|
||||||
if (ignore_system_lyxrc ||
|
if (ignore_system_lyxrc ||
|
||||||
use_system_theme_icons != system_lyxrc.use_system_theme_icons) {
|
use_system_theme_icons != system_lyxrc.use_system_theme_icons) {
|
||||||
@ -2950,6 +2964,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
|
|||||||
case LyXRC::RC_GROUP_LAYOUTS:
|
case LyXRC::RC_GROUP_LAYOUTS:
|
||||||
case LyXRC::RC_HUNSPELLDIR_PATH:
|
case LyXRC::RC_HUNSPELLDIR_PATH:
|
||||||
case LyXRC::RC_ICON_SET:
|
case LyXRC::RC_ICON_SET:
|
||||||
|
case LyXRC::RC_UI_STYLE:
|
||||||
case LyXRC::RC_INDEX_ALTERNATIVES:
|
case LyXRC::RC_INDEX_ALTERNATIVES:
|
||||||
case LyXRC::RC_INDEX_COMMAND:
|
case LyXRC::RC_INDEX_COMMAND:
|
||||||
case LyXRC::RC_JBIBTEX_COMMAND:
|
case LyXRC::RC_JBIBTEX_COMMAND:
|
||||||
|
@ -173,6 +173,7 @@ public:
|
|||||||
RC_TEXINPUTS_PREFIX,
|
RC_TEXINPUTS_PREFIX,
|
||||||
RC_THESAURUSDIRPATH,
|
RC_THESAURUSDIRPATH,
|
||||||
RC_UIFILE,
|
RC_UIFILE,
|
||||||
|
RC_UI_STYLE,
|
||||||
RC_USELASTFILEPOS,
|
RC_USELASTFILEPOS,
|
||||||
RC_USER_EMAIL,
|
RC_USER_EMAIL,
|
||||||
RC_USER_INITIALS,
|
RC_USER_INITIALS,
|
||||||
@ -473,6 +474,8 @@ public:
|
|||||||
std::string user_initials;
|
std::string user_initials;
|
||||||
/// icon set name
|
/// icon set name
|
||||||
std::string icon_set;
|
std::string icon_set;
|
||||||
|
/// ui style name
|
||||||
|
std::string ui_style = "default";
|
||||||
/// whether to use the icons from the theme
|
/// whether to use the icons from the theme
|
||||||
bool use_system_theme_icons = false;
|
bool use_system_theme_icons = false;
|
||||||
/// True if the TeX engine cannot handle posix paths
|
/// True if the TeX engine cannot handle posix paths
|
||||||
|
@ -253,6 +253,8 @@ public:
|
|||||||
|
|
||||||
// Add a buffer to the current view, do not switch to it.
|
// Add a buffer to the current view, do not switch to it.
|
||||||
virtual bool unhide(Buffer * buf) = 0;
|
virtual bool unhide(Buffer * buf) = 0;
|
||||||
|
// Apply preferences at the start
|
||||||
|
static void applyPrefs();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Return the list of loadable formats.
|
/// Return the list of loadable formats.
|
||||||
|
@ -1268,6 +1268,11 @@ docstring Application::mathIcon(docstring const & c)
|
|||||||
return qstring_to_ucs4(findImg(toqstr(c)));
|
return qstring_to_ucs4(findImg(toqstr(c)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::applyPrefs()
|
||||||
|
{
|
||||||
|
if (lyxrc.ui_style != system_lyxrc.ui_style)
|
||||||
|
lyx::frontend::GuiApplication::setStyle(toqstr(lyxrc.ui_style));
|
||||||
|
}
|
||||||
|
|
||||||
FuncStatus GuiApplication::getStatus(FuncRequest const & cmd) const
|
FuncStatus GuiApplication::getStatus(FuncRequest const & cmd) const
|
||||||
{
|
{
|
||||||
|
@ -63,6 +63,7 @@
|
|||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QStyleFactory>
|
||||||
#include <QTreeWidget>
|
#include <QTreeWidget>
|
||||||
#include <QTreeWidgetItem>
|
#include <QTreeWidgetItem>
|
||||||
#include <QValidator>
|
#include <QValidator>
|
||||||
@ -2494,6 +2495,8 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form)
|
|||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
connect(iconSetCO, SIGNAL(activated(int)),
|
connect(iconSetCO, SIGNAL(activated(int)),
|
||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
|
connect(uiStyleCO, SIGNAL(activated(int)),
|
||||||
|
this, SIGNAL(changed()));
|
||||||
connect(useSystemThemeIconsCB, SIGNAL(clicked()),
|
connect(useSystemThemeIconsCB, SIGNAL(clicked()),
|
||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
connect(lastfilesSB, SIGNAL(valueChanged(int)),
|
connect(lastfilesSB, SIGNAL(valueChanged(int)),
|
||||||
@ -2516,6 +2519,12 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form)
|
|||||||
iconSetCO->addItem(qt_("Classic"), "classic");
|
iconSetCO->addItem(qt_("Classic"), "classic");
|
||||||
iconSetCO->addItem(qt_("Oxygen"), "oxygen");
|
iconSetCO->addItem(qt_("Oxygen"), "oxygen");
|
||||||
|
|
||||||
|
uiStyleCO->addItem(toqstr(system_lyxrc.ui_style));
|
||||||
|
for (const auto& style : QStyleFactory::keys())
|
||||||
|
{
|
||||||
|
uiStyleCO->addItem(style.toLower());
|
||||||
|
}
|
||||||
|
|
||||||
if (guiApp->platformName() != "xcb"
|
if (guiApp->platformName() != "xcb"
|
||||||
&& !guiApp->platformName().contains("wayland"))
|
&& !guiApp->platformName().contains("wayland"))
|
||||||
useSystemThemeIconsCB->hide();
|
useSystemThemeIconsCB->hide();
|
||||||
@ -2527,6 +2536,10 @@ void PrefUserInterface::applyRC(LyXRC & rc) const
|
|||||||
rc.icon_set = fromqstr(iconSetCO->itemData(
|
rc.icon_set = fromqstr(iconSetCO->itemData(
|
||||||
iconSetCO->currentIndex()).toString());
|
iconSetCO->currentIndex()).toString());
|
||||||
|
|
||||||
|
rc.ui_style = fromqstr(uiStyleCO->currentText());
|
||||||
|
if (rc.ui_style!=system_lyxrc.ui_style)
|
||||||
|
frontend::GuiApplication::setStyle(uiStyleCO->currentText());
|
||||||
|
|
||||||
rc.ui_file = internal_path(fromqstr(uiFileED->text()));
|
rc.ui_file = internal_path(fromqstr(uiFileED->text()));
|
||||||
rc.use_system_theme_icons = useSystemThemeIconsCB->isChecked();
|
rc.use_system_theme_icons = useSystemThemeIconsCB->isChecked();
|
||||||
rc.num_lastfiles = lastfilesSB->value();
|
rc.num_lastfiles = lastfilesSB->value();
|
||||||
@ -2545,6 +2558,7 @@ void PrefUserInterface::updateRC(LyXRC const & rc)
|
|||||||
if (iconset < 0)
|
if (iconset < 0)
|
||||||
iconset = 0;
|
iconset = 0;
|
||||||
iconSetCO->setCurrentIndex(iconset);
|
iconSetCO->setCurrentIndex(iconset);
|
||||||
|
uiStyleCO->setCurrentIndex(uiStyleCO->findText(toqstr(rc.ui_style)));
|
||||||
useSystemThemeIconsCB->setChecked(rc.use_system_theme_icons);
|
useSystemThemeIconsCB->setChecked(rc.use_system_theme_icons);
|
||||||
uiFileED->setText(toqstr(external_path(rc.ui_file)));
|
uiFileED->setText(toqstr(external_path(rc.ui_file)));
|
||||||
lastfilesSB->setValue(rc.num_lastfiles);
|
lastfilesSB->setValue(rc.num_lastfiles);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>556</width>
|
<width>556</width>
|
||||||
<height>476</height>
|
<height>502</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -42,18 +42,8 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0">
|
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0">
|
||||||
<item row="0" column="0">
|
<item row="1" column="2">
|
||||||
<widget class="QLabel" name="uiFileLA">
|
<layout class="QHBoxLayout" name="horizontalLayout"/>
|
||||||
<property name="text">
|
|
||||||
<string>&User interface file:</string>
|
|
||||||
</property>
|
|
||||||
<property name="buddy">
|
|
||||||
<cstring>uiFileED</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLineEdit" name="uiFileED"/>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
<widget class="QPushButton" name="uiFilePB">
|
<widget class="QPushButton" name="uiFilePB">
|
||||||
@ -62,6 +52,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="iconSetLA">
|
<widget class="QLabel" name="iconSetLA">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -72,15 +69,38 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="0" column="0">
|
||||||
<widget class="QComboBox" name="iconSetCO">
|
<widget class="QLabel" name="uiFileLA">
|
||||||
<property name="toolTip">
|
<property name="text">
|
||||||
<string>The icon set to use. Warning: normal size of icons may be wrong until you save the preferences and restart LyX.</string>
|
<string>&User interface file:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>uiFileED</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="0" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout"/>
|
<widget class="QLineEdit" name="uiFileED"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="uiStyleLA">
|
||||||
|
<property name="text">
|
||||||
|
<string>User interface &style:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>uiStyleCO</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QComboBox" name="uiStyleCO">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Only certain styles may support dark mode, e.g. fusion on Windows</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
Reference in New Issue
Block a user