mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 11:52:25 +00:00
Compare commits
No commits in common. "29c4e4706e18a2346bd4135b1828ed8040b77c90" and "3f6eb9523d9bcdcd344d94589a5cfd457985733c" have entirely different histories.
29c4e4706e
...
3f6eb9523d
8
INSTALL
8
INSTALL
@ -59,10 +59,10 @@ LyX makes great use of the C++ Standard Library. This means that gcc
|
|||||||
users will have to install the relevant libstdc++ library to be able
|
users will have to install the relevant libstdc++ library to be able
|
||||||
to compile this version of LyX.
|
to compile this version of LyX.
|
||||||
|
|
||||||
LyX requires Qt 5.12 and higher. It is also possible to compile
|
For full LyX usability we suggest to use Qt 5.6 and higher, or at the
|
||||||
against Qt 6. The only special point to make is that you must ensure
|
very least Qt 5.4. It is also possible to compile against Qt 6. The
|
||||||
that both LyX and the Qt libraries are compiled with the same C++
|
only special point to make is that you must ensure that both LyX and
|
||||||
compiler.
|
the Qt libraries are compiled with the same C++ compiler.
|
||||||
|
|
||||||
To build LyX with spell checking capabilities included you have to
|
To build LyX with spell checking capabilities included you have to
|
||||||
install at least one of the development packages of the spell checker
|
install at least one of the development packages of the spell checker
|
||||||
|
4
README
4
README
@ -90,8 +90,8 @@ What do I need to compile LyX from the source distribution?
|
|||||||
but clang and MSVC are known to work too. As of LyX 2.5.0, you
|
but clang and MSVC are known to work too. As of LyX 2.5.0, you
|
||||||
need at least gcc 8.0.
|
need at least gcc 8.0.
|
||||||
|
|
||||||
* The Qt library, at least version 5.12. It is also possible to
|
* The Qt library, at least version 5.2 (5.6 recommended). It is
|
||||||
compile with Qt 6.x.
|
also possible to compile with Qt 6.x.
|
||||||
|
|
||||||
Read the file "INSTALL" for more information on compiling.
|
Read the file "INSTALL" for more information on compiling.
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ AC_CHECK_HEADERS(magic.h,
|
|||||||
### setup the qt frontend.
|
### setup the qt frontend.
|
||||||
dnl The code below is not in a macro, because this would cause big
|
dnl The code below is not in a macro, because this would cause big
|
||||||
dnl problems with the AC_REQUIRE contained in QT_DO_IT_ALL.
|
dnl problems with the AC_REQUIRE contained in QT_DO_IT_ALL.
|
||||||
QT_DO_IT_ALL([5.12.0])
|
QT_DO_IT_ALL([5.0.0])
|
||||||
AC_SUBST([FRONTENDS_SUBDIRS], [qt])
|
AC_SUBST([FRONTENDS_SUBDIRS], [qt])
|
||||||
FRONTEND_INFO="${FRONTEND_INFO}\
|
FRONTEND_INFO="${FRONTEND_INFO}\
|
||||||
Qt Frontend:\n\
|
Qt Frontend:\n\
|
||||||
|
@ -28,7 +28,9 @@
|
|||||||
#include <QImage>
|
#include <QImage>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#if (QT_VERSION >= 0x050300)
|
||||||
#include <QPdfWriter>
|
#include <QPdfWriter>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
const char * basename(const char * name)
|
const char * basename(const char * name)
|
||||||
@ -141,6 +143,7 @@ int main(int argc, char **argv)
|
|||||||
std::cerr << myname << ": Conversion of images to format '" << oformat << "' is not supported" << std::endl;
|
std::cerr << myname << ": Conversion of images to format '" << oformat << "' is not supported" << std::endl;
|
||||||
return 4;
|
return 4;
|
||||||
} else if (NULL != oformat && !strcmp(oformat, "pdf")) {
|
} else if (NULL != oformat && !strcmp(oformat, "pdf")) {
|
||||||
|
#if (QT_VERSION >= 0x050300)
|
||||||
QSize size = img.size();
|
QSize size = img.size();
|
||||||
QPdfWriter pdfwriter(QString::fromLocal8Bit(outfile));
|
QPdfWriter pdfwriter(QString::fromLocal8Bit(outfile));
|
||||||
int dpi = pdfwriter.logicalDpiX();
|
int dpi = pdfwriter.logicalDpiX();
|
||||||
@ -151,6 +154,10 @@ int main(int argc, char **argv)
|
|||||||
QPainter painter(&pdfwriter);
|
QPainter painter(&pdfwriter);
|
||||||
painter.drawImage(0, 0, img);
|
painter.drawImage(0, 0, img);
|
||||||
painter.end();
|
painter.end();
|
||||||
|
#else
|
||||||
|
std::cerr << myname << ": Conversion of images to format '" << oformat << "' is not supported" << std::endl;
|
||||||
|
return 4;
|
||||||
|
#endif
|
||||||
} else if (!img.save(QString::fromLocal8Bit(outfile), oformat)) {
|
} else if (!img.save(QString::fromLocal8Bit(outfile), oformat)) {
|
||||||
std::cerr << myname << ": Cannot save converted image to '" << outfile << "'" << std::endl;
|
std::cerr << myname << ": Cannot save converted image to '" << outfile << "'" << std::endl;
|
||||||
return 5;
|
return 5;
|
||||||
|
@ -287,7 +287,11 @@ void CategorizedCombo::Private::setFilter(QString const & s)
|
|||||||
lastSel_ = filterModel_->mapToSource(filterModel_->index(sel, 0)).row();
|
lastSel_ = filterModel_->mapToSource(filterModel_->index(sel, 0)).row();
|
||||||
|
|
||||||
filter_ = s;
|
filter_ = s;
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
|
||||||
|
filterModel_->setFilterRegExp(charFilterRegExp(filter_));
|
||||||
|
#else
|
||||||
filterModel_->setFilterRegularExpression(charFilterRegExp(filter_));
|
filterModel_->setFilterRegularExpression(charFilterRegExp(filter_));
|
||||||
|
#endif
|
||||||
countCategories();
|
countCategories();
|
||||||
|
|
||||||
// restore old selection
|
// restore old selection
|
||||||
|
@ -59,7 +59,7 @@ static QString credits()
|
|||||||
out << qt_("Please install correctly to estimate the great\namount of work other people have done for the LyX project.");
|
out << qt_("Please install correctly to estimate the great\namount of work other people have done for the LyX project.");
|
||||||
} else {
|
} else {
|
||||||
QTextStream ts(&file);
|
QTextStream ts(&file);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
ts.setCodec("UTF-8");
|
ts.setCodec("UTF-8");
|
||||||
#endif
|
#endif
|
||||||
QString line;
|
QString line;
|
||||||
@ -103,7 +103,7 @@ static QString release_notes()
|
|||||||
out << qt_("Please install correctly to see what has changed\nfor this version of LyX.");
|
out << qt_("Please install correctly to see what has changed\nfor this version of LyX.");
|
||||||
} else {
|
} else {
|
||||||
QTextStream ts(&file);
|
QTextStream ts(&file);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
ts.setCodec("UTF-8");
|
ts.setCodec("UTF-8");
|
||||||
#endif
|
#endif
|
||||||
QString line;
|
QString line;
|
||||||
@ -295,12 +295,14 @@ static QString version(bool const plain = false)
|
|||||||
out << '\n';
|
out << '\n';
|
||||||
else
|
else
|
||||||
out << "</p><p>";
|
out << "</p><p>";
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
|
||||||
out << toqstr(bformat(_("OS Version (run-time): %1$s"),
|
out << toqstr(bformat(_("OS Version (run-time): %1$s"),
|
||||||
qstring_to_ucs4(QSysInfo::prettyProductName())));
|
qstring_to_ucs4(QSysInfo::prettyProductName())));
|
||||||
if (plain)
|
if (plain)
|
||||||
out << '\n';
|
out << '\n';
|
||||||
else
|
else
|
||||||
out << "</p><p>";
|
out << "</p><p>";
|
||||||
|
#endif
|
||||||
out << toqstr(bformat(_("Python detected: %1$s"), from_utf8(os::python_info())));
|
out << toqstr(bformat(_("Python detected: %1$s"), from_utf8(os::python_info())));
|
||||||
if (plain)
|
if (plain)
|
||||||
out << '\n';
|
out << '\n';
|
||||||
|
@ -106,7 +106,9 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
|
#endif
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QSessionManager>
|
#include <QSessionManager>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
@ -126,33 +128,35 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (QT_VERSION >= 0x050400)
|
||||||
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
||||||
# if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
#if (QT_VERSION >= 0x060000)
|
||||||
# if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0))
|
#if (QT_VERSION >= 0x060500)
|
||||||
# include <QtGui/QWindowsMimeConverter>
|
#include <QtGui/QWindowsMimeConverter>
|
||||||
# define QWINDOWSMIME QWindowsMimeConverter
|
#define QWINDOWSMIME QWindowsMimeConverter
|
||||||
# define QVARIANTTYPE QMetaType
|
#define QVARIANTTYPE QMetaType
|
||||||
# else
|
#else
|
||||||
# include <QtGui/private/qguiapplication_p.h>
|
#include <QtGui/private/qguiapplication_p.h>
|
||||||
# include <QtGui/private/qwindowsmime_p.h>
|
#include <QtGui/private/qwindowsmime_p.h>
|
||||||
# include <QtGui/qpa/qplatformintegration.h>
|
#include <QtGui/qpa/qplatformintegration.h>
|
||||||
# define QWINDOWSMIME QWindowsMime
|
#define QWINDOWSMIME QWindowsMime
|
||||||
# define QVARIANTTYPE QMetaType
|
#define QVARIANTTYPE QMetaType
|
||||||
using QWindowsMime = QNativeInterface::Private::QWindowsMime;
|
using QWindowsMime = QNativeInterface::Private::QWindowsMime;
|
||||||
using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
|
using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
|
||||||
# endif
|
#endif
|
||||||
# else
|
#else
|
||||||
# include <QWinMime>
|
#include <QWinMime>
|
||||||
# define QWINDOWSMIME QWinMime
|
#define QWINDOWSMIME QWinMime
|
||||||
# define QVARIANTTYPE QVariant::Type
|
#define QVARIANTTYPE QVariant::Type
|
||||||
# endif
|
#endif
|
||||||
# ifdef Q_CC_GNU
|
#ifdef Q_CC_GNU
|
||||||
# include <wtypes.h>
|
#include <wtypes.h>
|
||||||
# endif
|
#endif
|
||||||
# include <objidl.h>
|
#include <objidl.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_MAC) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if defined(Q_OS_MAC) && (QT_VERSION < 0x060000)
|
||||||
#include <QMacPasteboardMime>
|
#include <QMacPasteboardMime>
|
||||||
#endif // Q_OS_MAC
|
#endif // Q_OS_MAC
|
||||||
|
|
||||||
@ -191,10 +195,12 @@ frontend::Application * createApplication(int & argc, char * argv[])
|
|||||||
// Setup high DPI handling. This is a bit complicated, but will be default in Qt6.
|
// Setup high DPI handling. This is a bit complicated, but will be default in Qt6.
|
||||||
// macOS does it by itself.
|
// macOS does it by itself.
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && !defined(Q_OS_MAC)
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && !defined(Q_OS_MAC)
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||||
// Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created
|
// Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created
|
||||||
if (getEnv("QT_ENABLE_HIGHDPI_SCALING").empty()
|
if (getEnv("QT_ENABLE_HIGHDPI_SCALING").empty()
|
||||||
&& getEnv("QT_AUTO_SCREEN_SCALE_FACTOR").empty())
|
&& getEnv("QT_AUTO_SCREEN_SCALE_FACTOR").empty())
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
|
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
||||||
// HighDPI scale factor policy must be set before QGuiApplication is created
|
// HighDPI scale factor policy must be set before QGuiApplication is created
|
||||||
@ -785,7 +791,7 @@ public:
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#if defined(Q_OS_MAC) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if defined(Q_OS_MAC) && (QT_VERSION < 0x060000)
|
||||||
// QMacPasteboardMimeGraphics can only be compiled on Mac.
|
// QMacPasteboardMimeGraphics can only be compiled on Mac.
|
||||||
|
|
||||||
class QMacPasteboardMimeGraphics : public QMacPasteboardMime
|
class QMacPasteboardMimeGraphics : public QMacPasteboardMime
|
||||||
@ -845,6 +851,7 @@ public:
|
|||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// Windows specific stuff goes here...
|
// Windows specific stuff goes here...
|
||||||
|
|
||||||
|
#if (QT_VERSION >= 0x050400)
|
||||||
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
||||||
// QWindowsMimeMetafile can only be compiled on Windows.
|
// QWindowsMimeMetafile can only be compiled on Windows.
|
||||||
|
|
||||||
@ -943,6 +950,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/// Allows to check whether ESC was pressed during a long operation
|
/// Allows to check whether ESC was pressed during a long operation
|
||||||
@ -1006,19 +1014,21 @@ struct GuiApplication::Private
|
|||||||
Private(): language_model_(nullptr), meta_fake_bit(NoModifier),
|
Private(): language_model_(nullptr), meta_fake_bit(NoModifier),
|
||||||
global_menubar_(nullptr), last_state_(Qt::ApplicationInactive)
|
global_menubar_(nullptr), last_state_(Qt::ApplicationInactive)
|
||||||
{
|
{
|
||||||
|
#if (QT_VERSION >= 0x050400)
|
||||||
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
||||||
/// WMF Mime handler for Windows clipboard.
|
/// WMF Mime handler for Windows clipboard.
|
||||||
wmf_mime_ = new QWindowsMimeMetafile;
|
wmf_mime_ = new QWindowsMimeMetafile;
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 5, 0))
|
#if (QT_VERSION >= 0x060000 && QT_VERSION < 0x060500)
|
||||||
win_app_ = dynamic_cast<QWindowsApplication *>
|
win_app_ = dynamic_cast<QWindowsApplication *>
|
||||||
(QGuiApplicationPrivate::platformIntegration());
|
(QGuiApplicationPrivate::platformIntegration());
|
||||||
win_app_->registerMime(wmf_mime_);
|
win_app_->registerMime(wmf_mime_);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
initKeySequences(&theTopLevelKeymap());
|
initKeySequences(&theTopLevelKeymap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 5, 0))
|
#if (QT_VERSION >= 0x060000 && QT_VERSION < 0x060500)
|
||||||
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
||||||
~Private()
|
~Private()
|
||||||
{
|
{
|
||||||
@ -1093,17 +1103,19 @@ struct GuiApplication::Private
|
|||||||
/// Holds previous application state on Mac
|
/// Holds previous application state on Mac
|
||||||
Qt::ApplicationState last_state_;
|
Qt::ApplicationState last_state_;
|
||||||
|
|
||||||
#if defined(Q_OS_MAC) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if defined(Q_OS_MAC) && (QT_VERSION < 0x060000)
|
||||||
/// Linkback mime handler for MacOSX.
|
/// Linkback mime handler for MacOSX.
|
||||||
QMacPasteboardMimeGraphics mac_pasteboard_mime_;
|
QMacPasteboardMimeGraphics mac_pasteboard_mime_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (QT_VERSION >= 0x050400)
|
||||||
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
|
||||||
/// WMF Mime handler for Windows clipboard.
|
/// WMF Mime handler for Windows clipboard.
|
||||||
QWindowsMimeMetafile * wmf_mime_;
|
QWindowsMimeMetafile * wmf_mime_;
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 5, 0))
|
#if (QT_VERSION >= 0x060000 && QT_VERSION < 0x060500)
|
||||||
QWindowsApplication * win_app_;
|
QWindowsApplication * win_app_;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Allows to check whether ESC was pressed during a long operation
|
/// Allows to check whether ESC was pressed during a long operation
|
||||||
@ -1130,12 +1142,19 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
|
|||||||
QCoreApplication::setOrganizationName(app_name);
|
QCoreApplication::setOrganizationName(app_name);
|
||||||
QCoreApplication::setOrganizationDomain("lyx.org");
|
QCoreApplication::setOrganizationDomain("lyx.org");
|
||||||
QCoreApplication::setApplicationName(lyx_package);
|
QCoreApplication::setApplicationName(lyx_package);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050700
|
||||||
setDesktopFileName(lyx_package);
|
setDesktopFileName(lyx_package);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
|
||||||
QRandomGenerator(QDateTime::currentDateTime().toSecsSinceEpoch());
|
QRandomGenerator(QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||||
|
#else
|
||||||
|
qsrand(QDateTime::currentDateTime().toTime_t());
|
||||||
|
#endif
|
||||||
|
|
||||||
// Install LyX translator for missing Qt translations
|
// Install LyX translator for missing Qt translations
|
||||||
installTranslator(&d->gui_trans_);
|
installTranslator(&d->gui_trans_);
|
||||||
@ -2817,7 +2836,7 @@ void GuiApplication::execBatchCommands()
|
|||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
setAttribute(Qt::AA_MacDontSwapCtrlAndMeta,lyxrc.mac_dontswap_ctrl_meta);
|
setAttribute(Qt::AA_MacDontSwapCtrlAndMeta,lyxrc.mac_dontswap_ctrl_meta);
|
||||||
# if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
# if QT_VERSION < 0x060000
|
||||||
setAttribute(Qt::AA_UseHighDpiPixmaps,true);
|
setAttribute(Qt::AA_UseHighDpiPixmaps,true);
|
||||||
# endif
|
# endif
|
||||||
// Create the global default menubar which is shown for the dialogs
|
// Create the global default menubar which is shown for the dialogs
|
||||||
|
@ -122,7 +122,7 @@ public:
|
|||||||
bool notify(QObject * receiver, QEvent * event) override;
|
bool notify(QObject * receiver, QEvent * event) override;
|
||||||
void commitData(QSessionManager & sm);
|
void commitData(QSessionManager & sm);
|
||||||
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB)
|
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB)
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
#if (QT_VERSION < 0x060000)
|
||||||
#define QINTPTR long
|
#define QINTPTR long
|
||||||
#else
|
#else
|
||||||
#define QINTPTR qintptr
|
#define QINTPTR qintptr
|
||||||
|
@ -70,9 +70,15 @@ void GuiChanges::updateContents()
|
|||||||
text += inserted ? qt_("Inserted by %1").arg(author)
|
text += inserted ? qt_("Inserted by %1").arg(author)
|
||||||
: qt_("Deleted by %1").arg(author);
|
: qt_("Deleted by %1").arg(author);
|
||||||
|
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
QString const date =
|
QString const date =
|
||||||
QLocale().toString(QDateTime::fromSecsSinceEpoch(c.changetime),
|
QLocale().toString(QDateTime::fromSecsSinceEpoch(c.changetime),
|
||||||
QLocale::LongFormat);
|
QLocale::LongFormat);
|
||||||
|
#else
|
||||||
|
QString const date =
|
||||||
|
QLocale().toString(QDateTime::fromTime_t(c.changetime),
|
||||||
|
QLocale::LongFormat);
|
||||||
|
#endif
|
||||||
if (!date.isEmpty()) {
|
if (!date.isEmpty()) {
|
||||||
if (!author.isEmpty())
|
if (!author.isEmpty())
|
||||||
text += qt_(" on[[date]] %1").arg(date);
|
text += qt_(" on[[date]] %1").arg(date);
|
||||||
|
@ -361,7 +361,7 @@ QString tidyHtml(QString const & input)
|
|||||||
// clutter.
|
// clutter.
|
||||||
QTextDocument converter;
|
QTextDocument converter;
|
||||||
converter.setHtml(input);
|
converter.setHtml(input);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
return converter.toHtml("utf-8");
|
return converter.toHtml("utf-8");
|
||||||
#else
|
#else
|
||||||
return converter.toHtml();
|
return converter.toHtml();
|
||||||
|
@ -494,7 +494,13 @@ PreambleModule::PreambleModule(QWidget * parent)
|
|||||||
checkFindButton();
|
checkFindButton();
|
||||||
int const tabStop = 4;
|
int const tabStop = 4;
|
||||||
QFontMetrics metrics(preambleTE->currentFont());
|
QFontMetrics metrics(preambleTE->currentFont());
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
|
// horizontalAdvance() is available starting in 5.11.0
|
||||||
|
// setTabStopDistance() is available starting in 5.10.0
|
||||||
preambleTE->setTabStopDistance(tabStop * metrics.horizontalAdvance(' '));
|
preambleTE->setTabStopDistance(tabStop * metrics.horizontalAdvance(' '));
|
||||||
|
#else
|
||||||
|
preambleTE->setTabStopWidth(tabStop * metrics.width(' '));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -640,7 +646,13 @@ LocalLayout::LocalLayout(QWidget * parent)
|
|||||||
connect(editPB, SIGNAL(clicked()), this, SLOT(editExternal()));
|
connect(editPB, SIGNAL(clicked()), this, SLOT(editExternal()));
|
||||||
int const tabStop = 4;
|
int const tabStop = 4;
|
||||||
QFontMetrics metrics(locallayoutTE->currentFont());
|
QFontMetrics metrics(locallayoutTE->currentFont());
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
|
// horizontalAdvance() is available starting in 5.11.0
|
||||||
|
// setTabStopDistance() is available starting in 5.10.0
|
||||||
locallayoutTE->setTabStopDistance(tabStop * metrics.horizontalAdvance(' '));
|
locallayoutTE->setTabStopDistance(tabStop * metrics.horizontalAdvance(' '));
|
||||||
|
#else
|
||||||
|
locallayoutTE->setTabStopWidth(tabStop * metrics.width(' '));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2510,7 +2522,11 @@ void GuiDocument::updateQuoteStyles(bool const set)
|
|||||||
for (int i = 0; i < langModule->quoteStyleCO->count(); ++i) {
|
for (int i = 0; i < langModule->quoteStyleCO->count(); ++i) {
|
||||||
langModule->quoteStyleCO->setItemData(i, QVariant(comboFont), Qt::FontRole);
|
langModule->quoteStyleCO->setItemData(i, QVariant(comboFont), Qt::FontRole);
|
||||||
QString str = langModule->quoteStyleCO->itemText(i);
|
QString str = langModule->quoteStyleCO->itemText(i);
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
qswidth = max(qswidth, fm.horizontalAdvance(str));
|
qswidth = max(qswidth, fm.horizontalAdvance(str));
|
||||||
|
#else
|
||||||
|
qswidth = max(qswidth, fm.width(str));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
// add scrollbar width and margin to width
|
// add scrollbar width and margin to width
|
||||||
qswidth += langModule->quoteStyleCO->style()->pixelMetric(QStyle::PM_ScrollBarExtent);
|
qswidth += langModule->quoteStyleCO->style()->pixelMetric(QStyle::PM_ScrollBarExtent);
|
||||||
@ -2896,7 +2912,7 @@ void GuiDocument::updateFontlist()
|
|||||||
fontModule->fontsMathCO->addItem(qt_("Class Default (TeX Fonts)"), QString("auto"));
|
fontModule->fontsMathCO->addItem(qt_("Class Default (TeX Fonts)"), QString("auto"));
|
||||||
fontModule->fontsMathCO->addItem(unimath, QString("default"));
|
fontModule->fontsMathCO->addItem(unimath, QString("default"));
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION >= 0x060000
|
||||||
const QStringList families(QFontDatabase::families());
|
const QStringList families(QFontDatabase::families());
|
||||||
#else
|
#else
|
||||||
QFontDatabase fontdb;
|
QFontDatabase fontdb;
|
||||||
|
@ -284,7 +284,11 @@ int GuiFontMetrics::width(docstring const & s) const
|
|||||||
if (math_char) {
|
if (math_char) {
|
||||||
QString const qs = toqstr(s);
|
QString const qs = toqstr(s);
|
||||||
int br_width = rbearing(s[0]);
|
int br_width = rbearing(s[0]);
|
||||||
|
#if QT_VERSION >= 0x050b00
|
||||||
int s_width = metrics_.horizontalAdvance(qs);
|
int s_width = metrics_.horizontalAdvance(qs);
|
||||||
|
#else
|
||||||
|
int s_width = metrics_.width(qs);
|
||||||
|
#endif
|
||||||
// keep value 0 for math chars with width 0
|
// keep value 0 for math chars with width 0
|
||||||
if (s_width != 0)
|
if (s_width != 0)
|
||||||
w = max(br_width, s_width);
|
w = max(br_width, s_width);
|
||||||
@ -664,10 +668,17 @@ int GuiFontMetrics::width(char_type c) const
|
|||||||
if (value != outOfLimitMetric)
|
if (value != outOfLimitMetric)
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x050b00
|
||||||
if (is_utf16(c))
|
if (is_utf16(c))
|
||||||
value = metrics_.horizontalAdvance(ucs4_to_qchar(c));
|
value = metrics_.horizontalAdvance(ucs4_to_qchar(c));
|
||||||
else
|
else
|
||||||
value = metrics_.horizontalAdvance(toqstr(docstring(1, c)));
|
value = metrics_.horizontalAdvance(toqstr(docstring(1, c)));
|
||||||
|
#else
|
||||||
|
if (is_utf16(c))
|
||||||
|
value = metrics_.width(ucs4_to_qchar(c));
|
||||||
|
else
|
||||||
|
value = metrics_.width(toqstr(docstring(1, c)));
|
||||||
|
#endif
|
||||||
|
|
||||||
width_cache_.insert(c, value);
|
width_cache_.insert(c, value);
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ GuiHSpace::GuiHSpace(bool math_mode, QWidget * parent)
|
|||||||
spacingCO->addItem(qt_("Visible Space"), "visible");
|
spacingCO->addItem(qt_("Visible Space"), "visible");
|
||||||
spacingCO->addItem(qt_("Custom"), "custom");
|
spacingCO->addItem(qt_("Custom"), "custom");
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION < 0x050e00
|
||||||
connect(spacingCO, SIGNAL(highlighted(QString)),
|
connect(spacingCO, SIGNAL(highlighted(QString)),
|
||||||
this, SLOT(changedSlot()));
|
this, SLOT(changedSlot()));
|
||||||
#else
|
#else
|
||||||
|
@ -845,15 +845,25 @@ bool KeySymbol::operator==(KeySymbol const & ks) const
|
|||||||
KeyModifier q_key_state(Qt::KeyboardModifiers state)
|
KeyModifier q_key_state(Qt::KeyboardModifiers state)
|
||||||
{
|
{
|
||||||
KeyModifier k = NoModifier;
|
KeyModifier k = NoModifier;
|
||||||
|
#if defined(Q_OS_MAC) && (QT_VERSION < QT_VERSION_CHECK(5, 12, 0))
|
||||||
|
/// Additional check for Control and Meta modifier swap state.
|
||||||
|
/// Starting with Qt 5 the modifiers aren't reported correctly.
|
||||||
|
/// Until this is fixed a correction is required.
|
||||||
|
/// AFAIK it is fixed at least with Qt 5.12.0
|
||||||
|
const bool dontSwapCtrlAndMeta =
|
||||||
|
frontend::theGuiApp()->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
|
||||||
|
#else
|
||||||
|
const bool dontSwapCtrlAndMeta = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (state & Qt::ControlModifier)
|
if (state & (dontSwapCtrlAndMeta ? Qt::MetaModifier : Qt::ControlModifier))
|
||||||
k |= ControlModifier;
|
k |= ControlModifier;
|
||||||
if (state & Qt::ShiftModifier)
|
if (state & Qt::ShiftModifier)
|
||||||
k |= ShiftModifier;
|
k |= ShiftModifier;
|
||||||
if (state & Qt::AltModifier)
|
if (state & Qt::AltModifier)
|
||||||
k |= AltModifier;
|
k |= AltModifier;
|
||||||
#if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
|
#if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
|
||||||
if (state & Qt::MetaModifier)
|
if (state & (dontSwapCtrlAndMeta ? Qt::ControlModifier : Qt::MetaModifier))
|
||||||
k |= MetaModifier;
|
k |= MetaModifier;
|
||||||
#else
|
#else
|
||||||
if (state & Qt::MetaModifier)
|
if (state & Qt::MetaModifier)
|
||||||
|
@ -802,7 +802,7 @@ PrefScreenFonts::PrefScreenFonts(GuiPreferences * form)
|
|||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION < 0x050e00
|
||||||
connect(screenRomanCO, SIGNAL(activated(QString)),
|
connect(screenRomanCO, SIGNAL(activated(QString)),
|
||||||
this, SLOT(selectRoman(QString)));
|
this, SLOT(selectRoman(QString)));
|
||||||
connect(screenSansCO, SIGNAL(activated(QString)),
|
connect(screenSansCO, SIGNAL(activated(QString)),
|
||||||
@ -818,7 +818,7 @@ PrefScreenFonts::PrefScreenFonts(GuiPreferences * form)
|
|||||||
this, SLOT(selectTypewriter(QString)));
|
this, SLOT(selectTypewriter(QString)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION >= 0x060000
|
||||||
const QStringList families(QFontDatabase::families());
|
const QStringList families(QFontDatabase::families());
|
||||||
#else
|
#else
|
||||||
QFontDatabase fontdb;
|
QFontDatabase fontdb;
|
||||||
@ -829,7 +829,7 @@ PrefScreenFonts::PrefScreenFonts(GuiPreferences * form)
|
|||||||
screenSansCO->addItem(family);
|
screenSansCO->addItem(family);
|
||||||
screenTypewriterCO->addItem(family);
|
screenTypewriterCO->addItem(family);
|
||||||
}
|
}
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION < 0x050e00
|
||||||
connect(screenRomanCO, SIGNAL(activated(QString)),
|
connect(screenRomanCO, SIGNAL(activated(QString)),
|
||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
connect(screenSansCO, SIGNAL(activated(QString)),
|
connect(screenSansCO, SIGNAL(activated(QString)),
|
||||||
@ -1563,7 +1563,7 @@ PrefConverters::PrefConverters(GuiPreferences * form)
|
|||||||
this, SLOT(updateConverter()));
|
this, SLOT(updateConverter()));
|
||||||
connect(convertersLW, SIGNAL(currentRowChanged(int)),
|
connect(convertersLW, SIGNAL(currentRowChanged(int)),
|
||||||
this, SLOT(switchConverter()));
|
this, SLOT(switchConverter()));
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION < 0x050e00
|
||||||
connect(converterFromCO, SIGNAL(activated(QString)),
|
connect(converterFromCO, SIGNAL(activated(QString)),
|
||||||
this, SLOT(changeConverter()));
|
this, SLOT(changeConverter()));
|
||||||
connect(converterToCO, SIGNAL(activated(QString)),
|
connect(converterToCO, SIGNAL(activated(QString)),
|
||||||
@ -1934,7 +1934,7 @@ PrefFileformats::PrefFileformats(GuiPreferences * form)
|
|||||||
this, SLOT(updatePrettyname()));
|
this, SLOT(updatePrettyname()));
|
||||||
connect(formatsCB->lineEdit(), SIGNAL(textEdited(QString)),
|
connect(formatsCB->lineEdit(), SIGNAL(textEdited(QString)),
|
||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
|
#if QT_VERSION < 0x050e00
|
||||||
connect(defaultFormatCB, SIGNAL(activated(QString)),
|
connect(defaultFormatCB, SIGNAL(activated(QString)),
|
||||||
this, SIGNAL(changed()));
|
this, SIGNAL(changed()));
|
||||||
connect(defaultOTFFormatCB, SIGNAL(activated(QString)),
|
connect(defaultOTFFormatCB, SIGNAL(activated(QString)),
|
||||||
|
@ -603,7 +603,7 @@ GuiSearch::GuiSearch(GuiView & parent, Qt::DockWidgetArea area, Qt::WindowFlags
|
|||||||
void GuiSearch::mousePressEvent(QMouseEvent * event)
|
void GuiSearch::mousePressEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
if (isFloating() && event->button() == Qt::LeftButton) {
|
if (isFloating() && event->button() == Qt::LeftButton) {
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION >= 0x060000
|
||||||
dragPosition = event->globalPosition().toPoint() - frameGeometry().topLeft();
|
dragPosition = event->globalPosition().toPoint() - frameGeometry().topLeft();
|
||||||
#else
|
#else
|
||||||
dragPosition = event->globalPos() - frameGeometry().topLeft();
|
dragPosition = event->globalPos() - frameGeometry().topLeft();
|
||||||
@ -617,7 +617,7 @@ void GuiSearch::mousePressEvent(QMouseEvent * event)
|
|||||||
void GuiSearch::mouseMoveEvent(QMouseEvent * event)
|
void GuiSearch::mouseMoveEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
if (isFloating() && event->buttons() & Qt::LeftButton) {
|
if (isFloating() && event->buttons() & Qt::LeftButton) {
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION >= 0x060000
|
||||||
move(event->globalPosition().toPoint() - dragPosition);
|
move(event->globalPosition().toPoint() - dragPosition);
|
||||||
#else
|
#else
|
||||||
move(event->globalPos() - dragPosition);
|
move(event->globalPos() - dragPosition);
|
||||||
|
@ -261,7 +261,7 @@ private:
|
|||||||
|
|
||||||
/// Current ratio between physical pixels and device-independent pixels
|
/// Current ratio between physical pixels and device-independent pixels
|
||||||
double pixelRatio() const {
|
double pixelRatio() const {
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
return devicePixelRatioF();
|
return devicePixelRatioF();
|
||||||
#else
|
#else
|
||||||
return devicePixelRatio();
|
return devicePixelRatio();
|
||||||
@ -665,7 +665,11 @@ GuiView::GuiView(int id)
|
|||||||
connect(stat_counts_, SIGNAL(clicked()), this, SLOT(statsPressed()));
|
connect(stat_counts_, SIGNAL(clicked()), this, SLOT(statsPressed()));
|
||||||
|
|
||||||
zoom_slider_ = new QSlider(Qt::Horizontal, statusBar());
|
zoom_slider_ = new QSlider(Qt::Horizontal, statusBar());
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
zoom_slider_->setFixedWidth(fm.horizontalAdvance('x') * 15);
|
zoom_slider_->setFixedWidth(fm.horizontalAdvance('x') * 15);
|
||||||
|
#else
|
||||||
|
zoom_slider_->setFixedWidth(fm.width('x') * 15);
|
||||||
|
#endif
|
||||||
// Make the defaultZoom center
|
// Make the defaultZoom center
|
||||||
zoom_slider_->setRange(10, (lyxrc.defaultZoom * 2) - 10);
|
zoom_slider_->setRange(10, (lyxrc.defaultZoom * 2) - 10);
|
||||||
// Initialize proper zoom value
|
// Initialize proper zoom value
|
||||||
@ -678,7 +682,11 @@ GuiView::GuiView(int id)
|
|||||||
zoom_slider_->setToolTip(qt_("Workarea zoom level. Drag, use Ctrl-+/- or Shift-Mousewheel to adjust."));
|
zoom_slider_->setToolTip(qt_("Workarea zoom level. Drag, use Ctrl-+/- or Shift-Mousewheel to adjust."));
|
||||||
|
|
||||||
// Buttons to change zoom stepwise
|
// Buttons to change zoom stepwise
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
QSize s(fm.horizontalAdvance('+'), fm.height());
|
QSize s(fm.horizontalAdvance('+'), fm.height());
|
||||||
|
#else
|
||||||
|
QSize s(fm.width('+'), fm.height());
|
||||||
|
#endif
|
||||||
zoom_in_ = new GuiClickableLabel(statusBar());
|
zoom_in_ = new GuiClickableLabel(statusBar());
|
||||||
zoom_in_->setText("+");
|
zoom_in_->setText("+");
|
||||||
zoom_in_->setFixedSize(s);
|
zoom_in_->setFixedSize(s);
|
||||||
@ -718,7 +726,11 @@ GuiView::GuiView(int id)
|
|||||||
// zoom_value_->setPalette(palette);
|
// zoom_value_->setPalette(palette);
|
||||||
zoom_value_->setForegroundRole(statusBar()->foregroundRole());
|
zoom_value_->setForegroundRole(statusBar()->foregroundRole());
|
||||||
zoom_value_->setFixedHeight(fm.height());
|
zoom_value_->setFixedHeight(fm.height());
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
zoom_value_->setMinimumWidth(fm.horizontalAdvance("444\%"));
|
zoom_value_->setMinimumWidth(fm.horizontalAdvance("444\%"));
|
||||||
|
#else
|
||||||
|
zoom_value_->setMinimumWidth(fm.width("444\%"));
|
||||||
|
#endif
|
||||||
zoom_value_->setAlignment(Qt::AlignCenter);
|
zoom_value_->setAlignment(Qt::AlignCenter);
|
||||||
zoom_value_->setText(toqstr(bformat(_("[[ZOOM]]%1$d%"), zoom)));
|
zoom_value_->setText(toqstr(bformat(_("[[ZOOM]]%1$d%"), zoom)));
|
||||||
statusBar()->addPermanentWidget(zoom_value_);
|
statusBar()->addPermanentWidget(zoom_value_);
|
||||||
@ -1694,8 +1706,10 @@ bool GuiView::event(QEvent * e)
|
|||||||
}
|
}
|
||||||
for (int i = 0; i != d.splitter_->count(); ++i)
|
for (int i = 0; i != d.splitter_->count(); ++i)
|
||||||
d.tabWorkArea(i)->setFullScreen(true);
|
d.tabWorkArea(i)->setFullScreen(true);
|
||||||
// Safe area measures won't allow us to go negative in margins
|
#if QT_VERSION > 0x050903
|
||||||
|
//Qt's 5.9.4 ba44cdae38406c safe area measures won't allow us to go negative in margins
|
||||||
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, false);
|
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, false);
|
||||||
|
#endif
|
||||||
setContentsMargins(-2, -2, -2, -2);
|
setContentsMargins(-2, -2, -2, -2);
|
||||||
// bug 5274
|
// bug 5274
|
||||||
hideDialogs("prefs", nullptr);
|
hideDialogs("prefs", nullptr);
|
||||||
@ -1714,7 +1728,9 @@ bool GuiView::event(QEvent * e)
|
|||||||
}
|
}
|
||||||
for (int i = 0; i != d.splitter_->count(); ++i)
|
for (int i = 0; i != d.splitter_->count(); ++i)
|
||||||
d.tabWorkArea(i)->setFullScreen(false);
|
d.tabWorkArea(i)->setFullScreen(false);
|
||||||
|
#if QT_VERSION > 0x050903
|
||||||
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, true);
|
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, true);
|
||||||
|
#endif
|
||||||
setContentsMargins(0, 0, 0, 0);
|
setContentsMargins(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -1856,7 +1872,7 @@ void GuiView::resetCommandExecute()
|
|||||||
|
|
||||||
double GuiView::pixelRatio() const
|
double GuiView::pixelRatio() const
|
||||||
{
|
{
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
return devicePixelRatioF();
|
return devicePixelRatioF();
|
||||||
#else
|
#else
|
||||||
return devicePixelRatio();
|
return devicePixelRatio();
|
||||||
@ -5173,10 +5189,14 @@ bool GuiView::lfunUiToggle(string const & ui_component)
|
|||||||
//are the frames in default state?
|
//are the frames in default state?
|
||||||
d.current_work_area_->setFrameStyle(QFrame::NoFrame);
|
d.current_work_area_->setFrameStyle(QFrame::NoFrame);
|
||||||
if (l == 0) {
|
if (l == 0) {
|
||||||
|
#if QT_VERSION > 0x050903
|
||||||
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, false);
|
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, false);
|
||||||
|
#endif
|
||||||
setContentsMargins(-2, -2, -2, -2);
|
setContentsMargins(-2, -2, -2, -2);
|
||||||
} else {
|
} else {
|
||||||
|
#if QT_VERSION > 0x050903
|
||||||
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, true);
|
setAttribute(Qt::WA_ContentsMarginsRespectsSafeArea, true);
|
||||||
|
#endif
|
||||||
setContentsMargins(0, 0, 0, 0);
|
setContentsMargins(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
@ -178,7 +178,7 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv)
|
|||||||
|
|
||||||
double GuiWorkArea::pixelRatio() const
|
double GuiWorkArea::pixelRatio() const
|
||||||
{
|
{
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||||
return devicePixelRatioF();
|
return devicePixelRatioF();
|
||||||
#else
|
#else
|
||||||
return devicePixelRatio();
|
return devicePixelRatio();
|
||||||
@ -774,7 +774,8 @@ void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
|
|||||||
FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
|
FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
|
||||||
#endif
|
#endif
|
||||||
q_button_state(e->button()), q_key_state(e->modifiers()));
|
q_button_state(e->button()), q_key_state(e->modifiers()));
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5,15,1)
|
#if (QT_VERSION > QT_VERSION_CHECK(5,10,1) && \
|
||||||
|
QT_VERSION < QT_VERSION_CHECK(5,15,1))
|
||||||
d->synthetic_mouse_event_.cmd = cmd; // QtBug QAbstractScrollArea::mouseMoveEvent
|
d->synthetic_mouse_event_.cmd = cmd; // QtBug QAbstractScrollArea::mouseMoveEvent
|
||||||
#endif
|
#endif
|
||||||
d->dispatch(cmd);
|
d->dispatch(cmd);
|
||||||
@ -784,7 +785,8 @@ void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
|
|||||||
|
|
||||||
void GuiWorkArea::mouseMoveEvent(QMouseEvent * e)
|
void GuiWorkArea::mouseMoveEvent(QMouseEvent * e)
|
||||||
{
|
{
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5,15,1)
|
#if (QT_VERSION > QT_VERSION_CHECK(5,10,1) && \
|
||||||
|
QT_VERSION < QT_VERSION_CHECK(5,15,1))
|
||||||
// cancel the event if the coordinates didn't change, this is due to QtBug
|
// cancel the event if the coordinates didn't change, this is due to QtBug
|
||||||
// QAbstractScrollArea::mouseMoveEvent, the event is triggered falsely when quickly
|
// QAbstractScrollArea::mouseMoveEvent, the event is triggered falsely when quickly
|
||||||
// double tapping a touchpad. To test: try to select a word by quickly double tapping
|
// double tapping a touchpad. To test: try to select a word by quickly double tapping
|
||||||
@ -1595,10 +1597,12 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const
|
|||||||
return QVariant(d->im_cursor_rect_);
|
return QVariant(d->im_cursor_rect_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
||||||
case Qt::ImAnchorRectangle: {
|
case Qt::ImAnchorRectangle: {
|
||||||
return QVariant(d->im_anchor_rect_);
|
return QVariant(d->im_anchor_rect_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
return QWidget::inputMethodQuery(query);
|
return QWidget::inputMethodQuery(query);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ void TearOff::mouseReleaseEvent(QMouseEvent * /*event*/)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
void TearOff::enterEvent(QEvent * event)
|
void TearOff::enterEvent(QEvent * event)
|
||||||
#else
|
#else
|
||||||
void TearOff::enterEvent(QEnterEvent * event)
|
void TearOff::enterEvent(QEnterEvent * event)
|
||||||
@ -81,7 +81,7 @@ void TearOff::paintEvent(QPaintEvent * /*event*/)
|
|||||||
menuOpt.checkType = QStyleOptionMenuItem::NotCheckable;
|
menuOpt.checkType = QStyleOptionMenuItem::NotCheckable;
|
||||||
menuOpt.menuRect = rect();
|
menuOpt.menuRect = rect();
|
||||||
menuOpt.maxIconWidth = 0;
|
menuOpt.maxIconWidth = 0;
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
menuOpt.tabWidth = 0;
|
menuOpt.tabWidth = 0;
|
||||||
#endif
|
#endif
|
||||||
menuOpt.menuItemType = QStyleOptionMenuItem::TearOff;
|
menuOpt.menuItemType = QStyleOptionMenuItem::TearOff;
|
||||||
@ -103,7 +103,7 @@ IconPalette::IconPalette(QWidget * parent)
|
|||||||
v->setSpacing(0);
|
v->setSpacing(0);
|
||||||
layout_ = new QGridLayout;
|
layout_ = new QGridLayout;
|
||||||
layout_->setSpacing(0);
|
layout_->setSpacing(0);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this);
|
const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this);
|
||||||
layout_->setMargin(fw);
|
layout_->setMargin(fw);
|
||||||
#else
|
#else
|
||||||
|
@ -27,7 +27,7 @@ class TearOff : public QWidget {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
TearOff(QWidget * parent);
|
TearOff(QWidget * parent);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < 0x060000
|
||||||
void enterEvent(QEvent *) override;
|
void enterEvent(QEvent *) override;
|
||||||
#else
|
#else
|
||||||
void enterEvent(QEnterEvent *) override;
|
void enterEvent(QEnterEvent *) override;
|
||||||
|
@ -320,7 +320,11 @@ void LayoutBox::Private::setFilter(QString const & s)
|
|||||||
lastSel_ = filterModel_->mapToSource(filterModel_->index(sel, 0)).row();
|
lastSel_ = filterModel_->mapToSource(filterModel_->index(sel, 0)).row();
|
||||||
|
|
||||||
filter_ = s;
|
filter_ = s;
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
|
||||||
filterModel_->setFilterRegExp(charFilterRegExp(filter_));
|
filterModel_->setFilterRegExp(charFilterRegExp(filter_));
|
||||||
|
#else
|
||||||
|
filterModel_->setFilterRegularExpression(charFilterRegExp(filter_));
|
||||||
|
#endif
|
||||||
countCategories();
|
countCategories();
|
||||||
|
|
||||||
// restore old selection
|
// restore old selection
|
||||||
|
@ -766,7 +766,11 @@ QString formatToolTip(QString text, int width)
|
|||||||
text = Qt::convertFromPlainText(text, Qt::WhiteSpaceNormal);
|
text = Qt::convertFromPlainText(text, Qt::WhiteSpaceNormal);
|
||||||
// Compute desired width in pixels
|
// Compute desired width in pixels
|
||||||
QFont const font = QToolTip::font();
|
QFont const font = QToolTip::font();
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
||||||
int const px_width = width * QFontMetrics(font).horizontalAdvance("M");
|
int const px_width = width * QFontMetrics(font).horizontalAdvance("M");
|
||||||
|
#else
|
||||||
|
int const px_width = width * QFontMetrics(font).width("M");
|
||||||
|
#endif
|
||||||
// Determine the ideal width of the tooltip
|
// Determine the ideal width of the tooltip
|
||||||
QTextDocument td("");
|
QTextDocument td("");
|
||||||
td.setHtml(text);
|
td.setHtml(text);
|
||||||
|
@ -179,6 +179,24 @@ QString changeExtension(QString const & oldname, QString const & ext);
|
|||||||
QString formatToolTip(QString text, int width = 30);
|
QString formatToolTip(QString text, int width = 30);
|
||||||
|
|
||||||
|
|
||||||
|
#if QT_VERSION < 0x050300
|
||||||
|
// Very partial implementation of QSignalBlocker for archaic qt versions.
|
||||||
|
class QSignalBlocker {
|
||||||
|
public:
|
||||||
|
explicit QSignalBlocker(QObject * o)
|
||||||
|
: obj(o), init_state(obj && obj->blockSignals(true)) {}
|
||||||
|
|
||||||
|
~QSignalBlocker() {
|
||||||
|
if (obj)
|
||||||
|
obj->blockSignals(init_state);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
QObject * obj;
|
||||||
|
bool init_state;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Check if text is understood as rich text (Qt HTML) and if so, produce a
|
// Check if text is understood as rich text (Qt HTML) and if so, produce a
|
||||||
// rendering in plain text.
|
// rendering in plain text.
|
||||||
QString qtHtmlToPlainText(QString const & text);
|
QString qtHtmlToPlainText(QString const & text);
|
||||||
|
@ -303,7 +303,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
|
|||||||
string const dt = split(name, '@');
|
string const dt = split(name, '@');
|
||||||
QDate date;
|
QDate date;
|
||||||
if (itype == "moddate")
|
if (itype == "moddate")
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
date = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).date();
|
date = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).date();
|
||||||
|
#else
|
||||||
|
date = QDateTime::fromTime_t(buf->fileName().lastModified()).date();
|
||||||
|
#endif
|
||||||
else if (itype == "fixdate" && !dt.empty()) {
|
else if (itype == "fixdate" && !dt.empty()) {
|
||||||
QDate const gdate = QDate::fromString(toqstr(dt), Qt::ISODate);
|
QDate const gdate = QDate::fromString(toqstr(dt), Qt::ISODate);
|
||||||
date = (gdate.isValid()) ? gdate : QDate::currentDate();
|
date = (gdate.isValid()) ? gdate : QDate::currentDate();
|
||||||
@ -330,7 +334,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
|
|||||||
string const tt = split(name, '@');
|
string const tt = split(name, '@');
|
||||||
QTime time;
|
QTime time;
|
||||||
if (itype == "modtime")
|
if (itype == "modtime")
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
time = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).time();
|
time = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).time();
|
||||||
|
#else
|
||||||
|
time = QDateTime::fromTime_t(buf->fileName().lastModified()).time();
|
||||||
|
#endif
|
||||||
else if (itype == "fixtime" && !tt.empty()) {
|
else if (itype == "fixtime" && !tt.empty()) {
|
||||||
QTime const gtime = QTime::fromString(toqstr(tt), Qt::ISODate);
|
QTime const gtime = QTime::fromString(toqstr(tt), Qt::ISODate);
|
||||||
time = (gtime.isValid()) ? gtime : QTime::currentTime();
|
time = (gtime.isValid()) ? gtime : QTime::currentTime();
|
||||||
@ -1222,7 +1230,11 @@ void InsetInfo::build()
|
|||||||
? split(params_.name, date_format, '@') : string();
|
? split(params_.name, date_format, '@') : string();
|
||||||
QDate date;
|
QDate date;
|
||||||
if (params_.type == InsetInfoParams::MODDATE_INFO)
|
if (params_.type == InsetInfoParams::MODDATE_INFO)
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
date = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).date();
|
date = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).date();
|
||||||
|
#else
|
||||||
|
date = QDateTime::fromTime_t(buffer().fileName().lastModified()).date();
|
||||||
|
#endif
|
||||||
else if (params_.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty())
|
else if (params_.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty())
|
||||||
date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
|
date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
|
||||||
else
|
else
|
||||||
@ -1240,7 +1252,11 @@ void InsetInfo::build()
|
|||||||
? split(params_.name, time_format, '@') : string();
|
? split(params_.name, time_format, '@') : string();
|
||||||
QTime time;
|
QTime time;
|
||||||
if (params_.type == InsetInfoParams::MODTIME_INFO)
|
if (params_.type == InsetInfoParams::MODTIME_INFO)
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
time = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).time();
|
time = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).time();
|
||||||
|
#else
|
||||||
|
time = QDateTime::fromTime_t(buffer().fileName().lastModified()).time();
|
||||||
|
#endif
|
||||||
else if (params_.type == InsetInfoParams::FIXTIME_INFO && !time_specifier.empty())
|
else if (params_.type == InsetInfoParams::FIXTIME_INFO && !time_specifier.empty())
|
||||||
time = QTime::fromString(toqstr(time_specifier), Qt::ISODate);
|
time = QTime::fromString(toqstr(time_specifier), Qt::ISODate);
|
||||||
else
|
else
|
||||||
@ -1287,7 +1303,11 @@ std::pair<QDate, std::string> parseDate(Buffer const & buffer, const InsetInfoPa
|
|||||||
|
|
||||||
QDate date;
|
QDate date;
|
||||||
if (params.type == InsetInfoParams::MODDATE_INFO)
|
if (params.type == InsetInfoParams::MODDATE_INFO)
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
date = QDateTime::fromSecsSinceEpoch(buffer.fileName().lastModified()).date();
|
date = QDateTime::fromSecsSinceEpoch(buffer.fileName().lastModified()).date();
|
||||||
|
#else
|
||||||
|
date = QDateTime::fromTime_t(buffer.fileName().lastModified()).date();
|
||||||
|
#endif
|
||||||
else if (params.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty()) {
|
else if (params.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty()) {
|
||||||
QDate date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
|
QDate date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
|
||||||
date = (date.isValid()) ? date : QDate::currentDate();
|
date = (date.isValid()) ? date : QDate::currentDate();
|
||||||
@ -1308,7 +1328,11 @@ std::pair<QTime, std::string> parseTime(Buffer const & buffer, const InsetInfoPa
|
|||||||
|
|
||||||
QTime time;
|
QTime time;
|
||||||
if (params.type == InsetInfoParams::MODTIME_INFO)
|
if (params.type == InsetInfoParams::MODTIME_INFO)
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
time = QDateTime::fromSecsSinceEpoch(buffer.fileName().lastModified()).time();
|
time = QDateTime::fromSecsSinceEpoch(buffer.fileName().lastModified()).time();
|
||||||
|
#else
|
||||||
|
time = QDateTime::fromTime_t(buffer.fileName().lastModified()).time();
|
||||||
|
#endif
|
||||||
else if (params.type == InsetInfoParams::FIXTIME_INFO && !date_specifier.empty()) {
|
else if (params.type == InsetInfoParams::FIXTIME_INFO && !date_specifier.empty()) {
|
||||||
time = QTime::fromString(toqstr(date_specifier), Qt::ISODate);
|
time = QTime::fromString(toqstr(date_specifier), Qt::ISODate);
|
||||||
time = (time.isValid()) ? time : QTime::currentTime();
|
time = (time.isValid()) ? time : QTime::currentTime();
|
||||||
|
@ -16,7 +16,9 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -39,7 +41,11 @@ public:
|
|||||||
setOrganizationDomain("lyx.org");
|
setOrganizationDomain("lyx.org");
|
||||||
setApplicationName(toqstr(app));
|
setApplicationName(toqstr(app));
|
||||||
|
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
|
||||||
QRandomGenerator(QDateTime::currentDateTime().toSecsSinceEpoch());
|
QRandomGenerator(QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||||
|
#else
|
||||||
|
qsrand(QDateTime::currentDateTime().toTime_t());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
int execute()
|
int execute()
|
||||||
{
|
{
|
||||||
|
@ -518,7 +518,12 @@ time_t FileName::lastModified() const
|
|||||||
// been touched between the object creation and now, we refresh the file
|
// been touched between the object creation and now, we refresh the file
|
||||||
// information.
|
// information.
|
||||||
d->refresh();
|
d->refresh();
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
return d->fi.lastModified().toSecsSinceEpoch();
|
return d->fi.lastModified().toSecsSinceEpoch();
|
||||||
|
#else
|
||||||
|
return d->fi.lastModified().toTime_t();
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -369,7 +369,11 @@ SystemcallPrivate::SystemcallPrivate(std::string const & sf, std::string const &
|
|||||||
|
|
||||||
connect(process_, SIGNAL(readyReadStandardOutput()), SLOT(stdOut()));
|
connect(process_, SIGNAL(readyReadStandardOutput()), SLOT(stdOut()));
|
||||||
connect(process_, SIGNAL(readyReadStandardError()), SLOT(stdErr()));
|
connect(process_, SIGNAL(readyReadStandardError()), SLOT(stdErr()));
|
||||||
|
#if QT_VERSION >= 0x050600
|
||||||
connect(process_, SIGNAL(errorOccurred(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError)));
|
connect(process_, SIGNAL(errorOccurred(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError)));
|
||||||
|
#else
|
||||||
|
connect(process_, SIGNAL(error(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError)));
|
||||||
|
#endif
|
||||||
connect(process_, SIGNAL(started()), this, SLOT(processStarted()));
|
connect(process_, SIGNAL(started()), this, SLOT(processStarted()));
|
||||||
connect(process_, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus)));
|
connect(process_, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus)));
|
||||||
}
|
}
|
||||||
|
@ -37,12 +37,20 @@ time_t current_time()
|
|||||||
docstring formatted_datetime(time_t t, string const & fmt)
|
docstring formatted_datetime(time_t t, string const & fmt)
|
||||||
{
|
{
|
||||||
QString qres;
|
QString qres;
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
if (fmt.empty())
|
if (fmt.empty())
|
||||||
qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
|
qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
|
||||||
QLocale::ShortFormat);
|
QLocale::ShortFormat);
|
||||||
else
|
else
|
||||||
qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
|
qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
|
||||||
toqstr(fmt));
|
toqstr(fmt));
|
||||||
|
#else
|
||||||
|
if (fmt.empty())
|
||||||
|
qres = QLocale().toString(QDateTime::fromTime_t(t),
|
||||||
|
QLocale::ShortFormat);
|
||||||
|
else
|
||||||
|
qres = QLocale().toString(QDateTime::fromTime_t(t), toqstr(fmt));
|
||||||
|
#endif
|
||||||
return qstring_to_ucs4(qres);
|
return qstring_to_ucs4(qres);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +77,11 @@ time_t from_asctime_utc(string t)
|
|||||||
#else
|
#else
|
||||||
loc_dt.setTimeSpec(Qt::UTC);
|
loc_dt.setTimeSpec(Qt::UTC);
|
||||||
#endif
|
#endif
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
|
||||||
return loc_dt.toSecsSinceEpoch();
|
return loc_dt.toSecsSinceEpoch();
|
||||||
|
#else
|
||||||
|
return loc_dt.toTime_t();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace support
|
} // namespace support
|
||||||
|
Loading…
Reference in New Issue
Block a user