[LyX features/killqt4] Get rid of Qt4 code in src/

Jean-Marc Lasgouttes lasgouttes at lyx.org
Fri Nov 18 15:34:34 UTC 2022


The branch, killqt4, has been created.
        at  ac248e392dd6f97f0dbcfcd6ba4ffedde2daf774 (commit)

- Log -----------------------------------------------------------------

commit ac248e392dd6f97f0dbcfcd6ba4ffedde2daf774
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Fri Nov 18 17:19:50 2022 +0100

    Get rid of Qt4 code in src/
    
    Qt4 code has been identidifed by
      git grep -l 'QT_VERSION.*\(0x050000\|0x04\)' src
    
    Uses of QT_VERSION_CHECK have been checked too.
    
    been used to remember what places need further work.
    
    Then remaining Qt4 references have been searched using
      git grep -i qt4
      git grep -i 'qt 4'
    and relevant issues have been either fixed or noted in the new
    TODO.killqt4 file.

diff --git a/TODO.killqt4 b/TODO.killqt4
new file mode 100644
index 0000000..86254fb
--- /dev/null
+++ b/TODO.killqt4
@@ -0,0 +1,16 @@
+Things left to do after killing Qt4 (obtained by grepping for Qt4 and 'Qt 4'):
+* look at the FIXME KILLQT4 comments in src/ and resolve them
+* update README
+* update INSTALL
+* update INSTALL.cmake
+* update INSTALL.MacOSX
+* update autoconf
+see also lib/RELEASE-NOTES
+* update cmake
+* check whether development/autotests/keytest.py really needs QT4
+  investigate references to Qt4 in keytest
+* update or remove development/lyx.rpm.README
+* update or remove development/lyxserver/server_monitor.cpp
+* update or remove development/tools/count_total_lines_of_compiled_code.sh
+* check references to qt4 in lib/symbols
+
diff --git a/src/frontends/qt/FancyLineEdit.cpp b/src/frontends/qt/FancyLineEdit.cpp
index b9874d2..666ad5f 100644
--- a/src/frontends/qt/FancyLineEdit.cpp
+++ b/src/frontends/qt/FancyLineEdit.cpp
@@ -19,8 +19,6 @@
 #include "GuiApplication.h"
 #endif
 
-#if QT_VERSION >= 0x040600
-
 #include <QEvent>
 #include <QDebug>
 #include <QString>
@@ -33,9 +31,7 @@
 #include <QPainter>
 #include <QStyle>
 #include <QPaintEvent>
-#if QT_VERSION >= 0x050000
 #include <QWindow>
-#endif
 
 enum { margin = 6 };
 
@@ -120,7 +116,7 @@ FancyLineEdit::FancyLineEdit(QWidget *parent) :
 {
 	ensurePolished();
 	updateMargins();
-	
+
 	connect(this, SIGNAL(textChanged(QString)),
 		this, SLOT(checkButtons(QString)));
 	connect(m_d->m_iconbutton[Left], SIGNAL(clicked()),
@@ -198,10 +194,8 @@ void FancyLineEdit::updateMargins()
 	Side realRight = (leftToRight ? Right : Left);
 
 	qreal dpr = 1.0;
-#if QT_VERSION >= 0x050000
 	// Consider device/pixel ratio (HiDPI)
 	dpr = devicePixelRatio();
-#endif
 	int leftMargin = (m_d->m_iconbutton[realLeft]->pixmap().width() / dpr ) + 8;
 	int rightMargin = (m_d->m_iconbutton[realRight]->pixmap().width() / dpr) + 8;
 	// Note KDE does not reserve space for the highlight color
@@ -224,7 +218,7 @@ void FancyLineEdit::updateButtonPositions()
 		Side iconpos = (Side)i;
 		if (layoutDirection() == Qt::RightToLeft)
 			iconpos = (iconpos == Left ? Right : Left);
-		
+
 		if (iconpos == FancyLineEdit::Right) {
 			const int iconoffset = textMargins().right() + 4;
 			m_d->m_iconbutton[i]->setGeometry(
@@ -342,12 +336,9 @@ IconButton::IconButton(QWidget *parent)
 
 void IconButton::paintEvent(QPaintEvent *)
 {
-	qreal dpr = 1.0;
-#if QT_VERSION >= 0x050000
 	// Consider device/pixel ratio (HiDPI)
 	QWindow * window = this->window()->windowHandle();
-	dpr = window->devicePixelRatio();
-#endif
+	qreal const dpr = window->devicePixelRatio();
 	QRect pixmapRect(QPoint(), m_pixmap.size() / dpr);
 	pixmapRect.moveCenter(rect().center());
 	QPixmap pm = m_pixmap;
@@ -381,6 +372,4 @@ void IconButton::animateShow(bool visible)
 
 } // namespace lyx
 
-#endif // QT_VERSION >= 0x040600
-
 #include "moc_FancyLineEdit.cpp"
diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp
index ff33065..3e84743 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -135,13 +135,9 @@
 #endif
 #endif
 
-#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
+#if (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
-#if (QT_VERSION < 0x050000)
-#include <QWindowsMime>
-#define QWINDOWSMIME QWindowsMime
-#define QVARIANTTYPE QVariant::Type
-#elif (QT_VERSION >= 0x060000)
+#if (QT_VERSION >= 0x060000)
 #include <QtGui/private/qguiapplication_p.h>
 #include <QtGui/private/qwindowsmime_p.h>
 #include <QtGui/qpa/qplatformintegration.h>
@@ -719,7 +715,6 @@ QPixmap getPixmap(QString const & path, QString const & name, QString const & ex
 
 QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl)
 {
-#if (QT_VERSION >= 0x040600)
 	if (lyxrc.use_system_theme_icons) {
 		// use the icons from system theme that are available
 		QString action = toqstr(lyxaction.getActionName(f.action()));
@@ -732,7 +727,6 @@ QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl)
 				return thmicn;
 		}
 	}
-#endif
 
 	IconInfo icondata = iconInfo(f, unknown, rtl);
 	if (icondata.filepath.isEmpty())
@@ -784,11 +778,7 @@ public:
 
 	QString translate(const char * /* context */,
 		const char *sourceText,
-#if QT_VERSION >= 0x050000
 		const char * /* disambiguation */ = nullptr, int /* n */ = -1) const override
-#else
-		const char * /*comment*/ = 0) const override
-#endif
 	{
 		// Here we declare the strings that need to be translated from Qt own GUI
 		// This is needed to include these strings to po files
@@ -879,7 +869,7 @@ public:
 ////////////////////////////////////////////////////////////////////////
 // Windows specific stuff goes here...
 
-#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
+#if (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
 // QWindowsMimeMetafile can only be compiled on Windows.
 
@@ -1045,7 +1035,7 @@ struct GuiApplication::Private
 		, last_state_(Qt::ApplicationInactive)
 	#endif
 	{
-	#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
+	#if (QT_VERSION >= 0x050400)
 	#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
 		/// WMF Mime handler for Windows clipboard.
 		wmf_mime_ = new QWindowsMimeMetafile;
@@ -1134,7 +1124,7 @@ struct GuiApplication::Private
 	QMacPasteboardMimeGraphics mac_pasteboard_mime_;
 #endif
 
-#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
+#if (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
 	/// WMF Mime handler for Windows clipboard.
 	QWindowsMimeMetafile * wmf_mime_;
@@ -1239,11 +1229,8 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
 	if (lyxrc.typewriter_font_name.empty())
 		lyxrc.typewriter_font_name = fromqstr(typewriterFontName());
 
-#if (QT_VERSION >= 0x050000)
-	// Qt4 does this in event(), see below.
 	// Track change of keyboard
 	connect(inputMethod(), SIGNAL(localeChanged()), this, SLOT(onLocaleChanged()));
-#endif
 
 	d->general_timer_.setInterval(500);
 	connect(&d->general_timer_, SIGNAL(timeout()),
@@ -1266,36 +1253,9 @@ GuiApplication * theGuiApp()
 }
 
 
-#if QT_VERSION < 0x050000
-// Emulate platformName() for Qt4
-
-// FIXME: when ditching this method, remove all tests
-//     platformName() == "qt4x11"
-// in the code
-QString GuiApplication::platformName() const
-{
-# if defined(Q_WS_X11)
-	// Note that this one does not really exist
-	return "qt4x11";
-# elif defined(Q_OS_MAC)
-	return "cocoa";
-# elif defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
-	return "windows";
-# else
-	LYXERR0("Unknown platform!");
-	return "unknown";
-# endif
-}
-#endif
-
-
 double GuiApplication::pixelRatio() const
 {
-#if QT_VERSION >= 0x050000
 	return qt_scale_factor * devicePixelRatio();
-#else
-	return 1.0;
-#endif
 }
 
 
@@ -2363,11 +2323,7 @@ docstring GuiApplication::viewStatusMessage()
 
 string GuiApplication::inputLanguageCode() const
 {
-#if (QT_VERSION < 0x050000)
-	QLocale loc = keyboardInputLocale();
-#else
 	QLocale loc = inputMethod()->locale();
-#endif
 	//LYXERR0("input lang = " << fromqstr(loc.name()));
 	return loc.name() == "C" ? "en_US" : fromqstr(loc.name());
 }
@@ -2862,12 +2818,10 @@ void GuiApplication::execBatchCommands()
 		return;
 
 #ifdef Q_OS_MAC
-#if QT_VERSION > 0x040600
 	setAttribute(Qt::AA_MacDontSwapCtrlAndMeta,lyxrc.mac_dontswap_ctrl_meta);
-#endif
-#if QT_VERSION >= 0x050000 && QT_VERSION < 0x060000
+#  if QT_VERSION < 0x060000
 	setAttribute(Qt::AA_UseHighDpiPixmaps,true);
-#endif
+#  endif
 	// Create the global default menubar which is shown for the dialogs
 	// and if no GuiView is visible.
 	// This must be done after the session was recovered to know the "last files".
@@ -3033,15 +2987,6 @@ bool GuiApplication::event(QEvent * e)
 		e->accept();
 		return true;
 	}
-#if (QT_VERSION < 0x050000)
-	// Qt5 uses a signal for that, see above.
-	case QEvent::KeyboardLayoutChange:
-		//LYXERR0("keyboard change");
-		if (currentView() && currentView()->currentBufferView())
-			currentView()->currentBufferView()->cursor().setLanguageFromInput();
-		e->accept();
-		return true;
-#endif
 	case QEvent::ApplicationPaletteChange: {
 		// runtime switch from/to dark mode
 		onPaletteChanged();
diff --git a/src/frontends/qt/GuiApplication.h b/src/frontends/qt/GuiApplication.h
index e40815e..4aa9950 100644
--- a/src/frontends/qt/GuiApplication.h
+++ b/src/frontends/qt/GuiApplication.h
@@ -164,21 +164,12 @@ public:
 	///
 	GuiView & view(int id) const;
 
-#if (QT_VERSION < 0x050000)
-	/// Emulate platformName() for Qt4
-	QString platformName() const;
-#endif
-
 	/// Current ratio between physical pixels and device-independent pixels
 	double pixelRatio() const;
 
 	/// How to load image files
 	support::search_mode imageSearchMode() const {
-#if QT_VERSION >= 0x050000
 		return pixelRatio() > 1 ? support::check_hidpi : support::must_exist;
-#else
-		return support::must_exist;
-#endif
 	}
 
 	/// return true if the key is part of a shortcut
diff --git a/src/frontends/qt/GuiBibtex.cpp b/src/frontends/qt/GuiBibtex.cpp
index 3c71884..b9c928a 100644
--- a/src/frontends/qt/GuiBibtex.cpp
+++ b/src/frontends/qt/GuiBibtex.cpp
@@ -108,13 +108,8 @@ GuiBibtex::GuiBibtex(GuiView & lv)
 		this, SLOT(filterChanged(QString)));
 	connect(filter_, SIGNAL(returnPressed()),
 		this, SLOT(filterPressed()));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-	        availableLV, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 	        availableLV, [this](){ focusAndHighlight(availableLV); });
-#endif
 
 	availableLV->setToolTip(formatToolTip(qt_("This list consists of all databases that are indexed by LaTeX and thus are found without a file path. "
 				    "This is usually everything in the bib/ subdirectory of LaTeX's texmf tree. "
@@ -129,11 +124,7 @@ GuiBibtex::GuiBibtex(GuiView & lv)
 	bc().addReadOnly(bibtocCB);
 	bc().addReadOnly(bibEncodingCO);
 
-#if (QT_VERSION < 0x050000)
-	selectedLV->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
-#else
 	selectedLV->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
-#endif
 
 	// Always put the default encoding in the first position.
 	bibEncodingCO->addItem(qt_("Document Encoding"), "default");
diff --git a/src/frontends/qt/GuiCitation.cpp b/src/frontends/qt/GuiCitation.cpp
index 4b55488..c5fa266 100644
--- a/src/frontends/qt/GuiCitation.cpp
+++ b/src/frontends/qt/GuiCitation.cpp
@@ -153,13 +153,8 @@ GuiCitation::GuiCitation(GuiView & lv)
 		this, SLOT(filterChanged(QString)));
 	connect(filter_, SIGNAL(returnPressed()),
 		this, SLOT(filterPressed()));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-	        availableLV, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 	        availableLV, [this](){ focusAndHighlight(availableLV); });
-#endif
 	connect(regexp_, SIGNAL(triggered()),
 		this, SLOT(regexChanged()));
 	connect(casesense_, SIGNAL(triggered()),
@@ -167,11 +162,7 @@ GuiCitation::GuiCitation(GuiView & lv)
 	connect(instant_, SIGNAL(triggered(bool)),
 		this, SLOT(instantChanged(bool)));
 
-#if (QT_VERSION < 0x050000)
-	selectedLV->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
-#else
 	selectedLV->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
-#endif
 
 	selectedLV->setToolTip(qt_("Ordered list of all cited references.\n"
 				   "You can reorder, add and remove references with the buttons on the left."));
diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index b3f3130..ff6c2df 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -909,13 +909,8 @@ GuiDocument::GuiDocument(GuiView & lv)
 	masterChildModule->childrenTW->setColumnCount(2);
 	masterChildModule->childrenTW->headerItem()->setText(0, qt_("Child Document"));
 	masterChildModule->childrenTW->headerItem()->setText(1, qt_("Include to Output"));
-#if (QT_VERSION > 0x050000)
-        masterChildModule->childrenTW->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
-        masterChildModule->childrenTW->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
-#else
-        masterChildModule->childrenTW->header()->setResizeMode(0, QHeaderView::ResizeToContents);
-        masterChildModule->childrenTW->header()->setResizeMode(1, QHeaderView::ResizeToContents);
-#endif
+	masterChildModule->childrenTW->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
+	masterChildModule->childrenTW->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
 
 	// Formats
 	outputModule = new UiWidget<Ui::OutputUi>(this);
@@ -1679,13 +1674,8 @@ GuiDocument::GuiDocument(GuiView & lv)
 		this, SLOT(moduleFilterChanged(QString)));
 	connect(filter_, SIGNAL(returnPressed()),
 		this, SLOT(moduleFilterPressed()));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-		modulesModule->availableLV, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 		modulesModule->availableLV, [this](){ focusAndHighlight(modulesModule->availableLV); });
-#endif
 
 
 	// PDF support
@@ -1793,11 +1783,10 @@ GuiDocument::GuiDocument(GuiView & lv)
 	docPS->addPanel(outputModule, N_("Formats[[output]]"));
 	docPS->addPanel(preambleModule, N_("LaTeX Preamble"));
 	docPS->setCurrentPanel("Document Class");
+// FIXME KILLQT4: check that this is still needed (is this workaround still needed?)
 // FIXME: hack to work around resizing bug in Qt >= 4.2
 // bug verified with Qt 4.2.{0-3} (JSpitzm)
-#if QT_VERSION >= 0x040200
 	docPS->updateGeometry();
-#endif
 }
 
 
diff --git a/src/frontends/qt/GuiFontLoader.cpp b/src/frontends/qt/GuiFontLoader.cpp
index a47e555..ebc3857 100644
--- a/src/frontends/qt/GuiFontLoader.cpp
+++ b/src/frontends/qt/GuiFontLoader.cpp
@@ -66,27 +66,9 @@ namespace {
 struct SymbolFont {
 	FontFamily lyx_family;
 	QString family;
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-	QString xlfd;
-#endif
 };
 
 SymbolFont symbol_fonts[] = {
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-	{ SYMBOL_FAMILY,"symbol", "-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific"},
-	{ CMR_FAMILY,   "cmr10",  "-*-cmr10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ CMSY_FAMILY,  "cmsy10", "-*-cmsy10-*-*-*-*-*-*-*-*-*-*-*-*" },
-	{ CMM_FAMILY,   "cmmi10", "-*-cmmi10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ CMEX_FAMILY,  "cmex10", "-*-cmex10-*-*-*-*-*-*-*-*-*-*-*-*" },
-	{ MSA_FAMILY,   "msam10", "-*-msam10-*-*-*-*-*-*-*-*-*-*-*-*" },
-	{ MSB_FAMILY,   "msbm10", "-*-msbm10-*-*-*-*-*-*-*-*-*-*-*-*" },
-	{ DS_FAMILY,    "dsrom10", "-*-dsrom10-*-*-*-*-*-*-*-*-*-*-*-*" },
-	{ EUFRAK_FAMILY,"eufm10", "-*-eufm10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ RSFS_FAMILY,  "rsfs10", "-*-rsfs10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ STMARY_FAMILY,"stmary10","-*-stmary10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ WASY_FAMILY,  "wasy10", "-*-wasy10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-	{ ESINT_FAMILY, "esint10","-*-esint10-medium-*-*-*-*-*-*-*-*-*-*-*" }
-#else
 	{ SYMBOL_FAMILY,"symbol"},
 	{ CMR_FAMILY,   "cmr10"},
 	{ CMSY_FAMILY,  "cmsy10"},
@@ -100,7 +82,6 @@ SymbolFont symbol_fonts[] = {
 	{ STMARY_FAMILY,"stmary10"},
 	{ WASY_FAMILY,  "wasy10"},
 	{ ESINT_FAMILY, "esint10"}
-#endif
 };
 
 size_t const nr_symbol_fonts = sizeof(symbol_fonts) / sizeof(symbol_fonts[0]);
@@ -147,19 +128,6 @@ GuiFontInfo & fontinfo(FontInfo const & f)
 }
 
 
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-QString rawName(QString const & family)
-{
-	for (size_t i = 0; i < nr_symbol_fonts; ++i)
-		if (family == symbol_fonts[i].family)
-			return symbol_fonts[i].xlfd;
-
-	LYXERR(Debug::FONT, "BUG: family not found !");
-	return QString();
-}
-#endif
-
-
 QString symbolFamily(FontFamily family)
 {
 	for (size_t i = 0; i < nr_symbol_fonts; ++i) {
@@ -190,10 +158,7 @@ static bool isChosenFont(QFont & font, QString const & family,
 	LYXERR_NOPOS(Debug::FONT, "got: " << fi.family());
 
 	if (fi.family().contains(family)
-#if QT_VERSION >= 0x040800
-	    && (style.isEmpty() || fi.styleName().contains(style))
-#endif
-	    ) {
+	    && (style.isEmpty() || fi.styleName().contains(style))) {
 		LYXERR_NOENDL(Debug::FONT, " got it ");
 		return true;
 	}
@@ -209,8 +174,7 @@ QFont symbolFont(QString const & family, bool * ok)
 	upper[0] = family[0].toUpper();
 
 	QFont font;
-	if (guiApp->platformName() == "qt4x11"
-	    || guiApp->platformName() == "xcb"
+	if (guiApp->platformName() == "xcb"
 	    || guiApp->platformName().contains("wayland")) {
 		// On *nix we have to also specify the foundry to be able to
 		// discriminate our fonts when the texlive fonts are managed by
@@ -220,7 +184,6 @@ QFont symbolFont(QString const & family, bool * ok)
 		font.setFamily(family);
 	}
 	font.setStyleStrategy(QFont::NoFontMerging);
-#if QT_VERSION >= 0x040800
 	font.setStyleName("LyX");
 
 	if (isChosenFont(font, family, "LyX")) {
@@ -231,7 +194,6 @@ QFont symbolFont(QString const & family, bool * ok)
 
 	LYXERR_NOENDL(Debug::FONT, "Trying normal " << family << " ... ");
 	font.setStyleName(QString());
-#endif
 
 	if (isChosenFont(font, family, QString())) {
 		LYXERR_NOPOS(Debug::FONT, "normal!");
@@ -248,20 +210,6 @@ QFont symbolFont(QString const & family, bool * ok)
 		return font;
 	}
 
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-	// A simple setFamily() fails on Qt 2
-
-	QString const raw = rawName(family);
-	LYXERR_NOENDL(Debug::FONT, "Trying " << raw << " ... ");
-	font.setRawName(raw);
-
-	if (isChosenFont(font, family, QString())) {
-		LYXERR_NOPOS(Debug::FONT, "raw version!");
-		*ok = true;
-		return font;
-	}
-#endif
-
 	LYXERR_NOPOS(Debug::FONT, " FAILED :-(");
 	*ok = false;
 	return font;
@@ -337,14 +285,13 @@ QFont makeQFont(FontInfo const & f)
 				toqstr(lyxrc.roman_font_foundry));
 			font.setFamily(family);
 #ifdef Q_OS_MAC
-#if QT_VERSION >= 0x040300 //&& QT_VERSION < 0x040800
+			// FIXME KILLQT4: Double-check that this is fixed in Qt5
 			// Workaround for a Qt bug, see http://www.lyx.org/trac/ticket/3684
 			// and http://bugreports.qt.nokia.com/browse/QTBUG-11145.
 			// FIXME: Check whether this is really fixed in Qt 4.8
 			if (family == "Times" && !font.exactMatch())
 				font.setFamily("Times New Roman");
 #endif
-#endif
 			break;
 		}
 		case SANS_FAMILY:
@@ -394,10 +341,6 @@ QFont makeQFont(FontInfo const & f)
 	else
 		LYXERR(Debug::FONT, "This font is NOT an exact match");
 
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-	LYXERR(Debug::FONT, "XFLD: " << font.rawName());
-#endif
-
 	font.setPointSizeF(f.realSize() * lyxrc.currentZoom / 100.0);
 
 	LYXERR(Debug::FONT, "The font has size: " << font.pointSizeF());
@@ -453,13 +396,9 @@ bool FontLoader::canBeDisplayed(char_type c)
 {
 	// bug 8493
 	if (c == 0x0009)
+		// FIXME KILLQT4: get rid of this function if not needed anymore
 		// FIXME check whether this is still needed for Qt5
 		return false;
-#if QT_VERSION < 0x050000 && defined(QT_MAC_USE_COCOA) && (QT_MAC_USE_COCOA > 0)
-	// bug 7954, see also comment in GuiPainter::text()
-	if (c == 0x00ad)
-		return false;
-#endif
 	return true;
 }
 
diff --git a/src/frontends/qt/GuiFontMetrics.cpp b/src/frontends/qt/GuiFontMetrics.cpp
index cc3a329..bde48c0 100644
--- a/src/frontends/qt/GuiFontMetrics.cpp
+++ b/src/frontends/qt/GuiFontMetrics.cpp
@@ -53,14 +53,6 @@ using namespace lyx::support;
 #endif
 
 
-#if QT_VERSION < 0x050000
-inline uint qHash(double key)
-{
-	return qHash(QByteArray(reinterpret_cast<char const *>(&key), sizeof(key)));
-}
-#endif
-
-
 namespace std {
 
 /*
@@ -91,7 +83,8 @@ int const strwidth_cache_max_cost = 1024 * 1024;
 int const breakstr_cache_max_cost = 10 * 1024 * 1024;
 // Qt 5.x already has its own caching of QTextLayout objects
 // but it does not seem to work well on MacOS X.
-#if (QT_VERSION < 0x050000) || defined(Q_OS_MAC)
+#if defined(Q_OS_MAC)
+//FIXME KILLQT4: check wether setting the cache to 0 hurts on macOS
 // Limit qtextlayout_cache_ size to 500 elements (we do not know the
 // size of the QTextLayout objects anyway).
 int const qtextlayout_cache_max_size = 500;
@@ -291,11 +284,7 @@ int GuiFontMetrics::width(docstring const & s) const
 	*/
 	int w = 0;
 	// is the string a single character from a math font ?
-#if QT_VERSION >= 0x040800
 	bool const math_char = s.length() == 1 && font_.styleName() == "LyX";
-#else
-	bool const math_char = s.length() == 1;
-#endif
 	if (math_char) {
 		QString const qs = toqstr(s);
 		int br_width = metrics_.boundingRect(qs).width();
@@ -354,7 +343,7 @@ struct TextLayoutHelper
 	/// \c s is the original string
 	/// \c isrtl is true if the string is right-to-left
 	/// \c naked is true to disable the insertion of zero width annotations
-	/// FIXME: remove \c naked argument when Qt4 support goes away.
+	/// FIXME KILLQT4: remove \c naked argument when Qt4 support goes away.
 	TextLayoutHelper(docstring const & s, bool isrtl, bool naked = false);
 
 	/// translate QString index to docstring index
diff --git a/src/frontends/qt/GuiFontMetrics.h b/src/frontends/qt/GuiFontMetrics.h
index 0187c5c..ff2f0a3 100644
--- a/src/frontends/qt/GuiFontMetrics.h
+++ b/src/frontends/qt/GuiFontMetrics.h
@@ -120,7 +120,7 @@ private:
 	double slope_;
 
 	/// If true, avoid extra annotation in string for QTextLayout
-	// FIXME: remove wen Qt4 suport goes away
+	// FIXME KILLQT4: remove when Qt4 suport goes away
 	bool needs_naked_ = false;
 
 	/// Cache of char widths
diff --git a/src/frontends/qt/GuiImage.cpp b/src/frontends/qt/GuiImage.cpp
index 6e4c072..e73a798 100644
--- a/src/frontends/qt/GuiImage.cpp
+++ b/src/frontends/qt/GuiImage.cpp
@@ -64,25 +64,17 @@ QImage const & GuiImage::image() const
 
 unsigned int GuiImage::width() const
 {
-#if QT_VERSION >= 0x050000
 	return static_cast<unsigned int>(ceil(is_transformed_ ?
 		(transformed_.width() / transformed_.devicePixelRatio()) :
 		(original_.width() / original_.devicePixelRatio())));
-#else
-	return is_transformed_ ? transformed_.width() : original_.width();
-#endif
 }
 
 
 unsigned int GuiImage::height() const
 {
-#if QT_VERSION >= 0x050000
 	return static_cast<unsigned int>(ceil(is_transformed_ ?
 		(transformed_.height() / transformed_.devicePixelRatio()) :
 		(original_.height() / original_.devicePixelRatio())));
-#else
-	return is_transformed_ ? transformed_.height() : original_.height();
-#endif
 }
 
 
@@ -117,9 +109,7 @@ bool GuiImage::setPixmap(Params const & params)
 			return false;
 	}
 
-#if QT_VERSION >= 0x050000
 	original_.setDevicePixelRatio(params.pixel_ratio);
-#endif
 
 	is_transformed_ = clip(params);
 	is_transformed_ |= rotate(params);
@@ -141,14 +131,9 @@ bool GuiImage::clip(Params const & params)
 		// No clipping is necessary.
 		return false;
 
-#if QT_VERSION >= 0x050000
 	double const pixelRatio = is_transformed_ ? transformed_.devicePixelRatio() : original_.devicePixelRatio();
 	int const new_width  = static_cast<int>((params.bb.xr.inBP() - params.bb.xl.inBP()) * pixelRatio);
 	int const new_height = static_cast<int>((params.bb.yt.inBP() - params.bb.yb.inBP()) * pixelRatio);
-#else
-	int const new_width  = static_cast<int>((params.bb.xr.inBP() - params.bb.xl.inBP()));
-	int const new_height = static_cast<int>((params.bb.yt.inBP() - params.bb.yb.inBP()));
-#endif
 
 	QImage const & image = is_transformed_ ? transformed_ : original_;
 
@@ -191,19 +176,8 @@ bool GuiImage::scale(Params const & params)
 	if (params.scale == 100)
 		return false;
 
-#if QT_VERSION >= 0x050000
 	double const pixelRatio = is_transformed_ ? transformed_.devicePixelRatio() : original_.devicePixelRatio();
-	qreal scale = qreal(params.scale) / 100.0 * pixelRatio;
-#else
-	qreal scale = qreal(params.scale) / 100.0;
-#endif
-
-#if (QT_VERSION >= 0x040500) && (QT_VERSION <= 0x040502)
-	// Due to a bug in Qt, LyX will crash for certain
-	// scaling factors and sizes of the image.
-	// see bug #5957: http://www.lyx.org/trac/ticket/5957
-	scale += 0.0001;
-#endif
+	qreal const scale = qreal(params.scale) / 100.0 * pixelRatio;
 
 	QTransform m;
 	m.scale(scale, scale);
diff --git a/src/frontends/qt/GuiKeySymbol.cpp b/src/frontends/qt/GuiKeySymbol.cpp
index 551ea8d..47cadea 100644
--- a/src/frontends/qt/GuiKeySymbol.cpp
+++ b/src/frontends/qt/GuiKeySymbol.cpp
@@ -11,7 +11,7 @@
 #include <config.h>
 
 #include "GuiKeySymbol.h"
-#if defined(Q_OS_MAC) && QT_VERSION > 0x050000
+#if defined(Q_OS_MAC)
 #include "GuiApplication.h"
 #endif
 #include "qt_helpers.h"
@@ -867,7 +867,7 @@ bool KeySymbol::operator==(KeySymbol const & ks) const
 KeyModifier q_key_state(Qt::KeyboardModifiers state)
 {
 	KeyModifier k = NoModifier;
-#if defined(Q_OS_MAC) && (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) && (QT_VERSION < QT_VERSION_CHECK(5, 12, 0))
+#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.
diff --git a/src/frontends/qt/GuiLyXFiles.cpp b/src/frontends/qt/GuiLyXFiles.cpp
index 2c97f2b..1bfbdbb 100644
--- a/src/frontends/qt/GuiLyXFiles.cpp
+++ b/src/frontends/qt/GuiLyXFiles.cpp
@@ -189,13 +189,8 @@ GuiLyXFiles::GuiLyXFiles(GuiView & lv)
 	filter_->setClearButton(true);
 	filter_->setPlaceholderText(qt_("All available files"));
 	filter_->setToolTip(qt_("Enter string to filter the list of available files"));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-		filesLW, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 		filesLW, [this](){ focusAndHighlight(filesLW); });
-#endif
 
 	filterBarL->addWidget(filter_, 0);
 	findKeysLA->setBuddy(filter_);
diff --git a/src/frontends/qt/GuiPainter.cpp b/src/frontends/qt/GuiPainter.cpp
index b243c6e..a64d006 100644
--- a/src/frontends/qt/GuiPainter.cpp
+++ b/src/frontends/qt/GuiPainter.cpp
@@ -315,13 +315,6 @@ void GuiPainter::text(int x, int y, docstring const & s,
 	*/
 	QString str = toqstr(s);
 
-#if 0
-	// HACK: QT3 refuses to show single compose characters
-	//       Still needed with Qt4?
-	if (ls == 1 && str[0].unicode() >= 0x05b0 && str[0].unicode() <= 0x05c2)
-		str = ' ' + str;
-#endif
-
 	QFont ff = getFont(f);
 	ff.setWordSpacing(wordspacing);
 	GuiFontMetrics const & fm = getFontMetrics(f);
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index 03d630d..9697902 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -438,13 +438,11 @@ PrefInput::PrefInput(GuiPreferences * form)
 		this, SIGNAL(changed()));
 
 	// reveal checkbox for switching Ctrl and Meta on Mac:
-	bool swapcb = false;
 #ifdef Q_OS_MAC
-#if QT_VERSION > 0x040600
-	swapcb = true;
-#endif
+	dontswapCB->setVisible(true);
+#else
+	dontswapCB->setVisible(false);
 #endif
-	dontswapCB->setVisible(swapcb);
 }
 
 
@@ -2635,11 +2633,8 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form)
 	iconSetCO->addItem(qt_("Classic"), "classic");
 	iconSetCO->addItem(qt_("Oxygen"), "oxygen");
 
-#if QT_VERSION >= 0x040600
-	if (guiApp->platformName() != "qt4x11"
-	    && guiApp->platformName() != "xcb"
+	if (guiApp->platformName() != "xcb"
 	    && !guiApp->platformName().contains("wayland"))
-#endif
 		useSystemThemeIconsCB->hide();
 }
 
@@ -3573,11 +3568,10 @@ GuiPreferences::GuiPreferences(GuiView & lv)
 	addModule(formats);
 
 	prefsPS->setCurrentPanel("User Interface");
+// FIXME KILLQT4: check that this is still needed (what bug is it?)
 // FIXME: hack to work around resizing bug in Qt >= 4.2
 // bug verified with Qt 4.2.{0-3} (JSpitzm)
-#if QT_VERSION >= 0x040200
 	prefsPS->updateGeometry();
-#endif
 
 	bc().setPolicy(ButtonPolicy::PreferencesPolicy);
 	bc().setOK(buttonBox->button(QDialogButtonBox::Ok));
diff --git a/src/frontends/qt/GuiRef.cpp b/src/frontends/qt/GuiRef.cpp
index 9cb9d81..ad4d710 100644
--- a/src/frontends/qt/GuiRef.cpp
+++ b/src/frontends/qt/GuiRef.cpp
@@ -59,13 +59,8 @@ GuiRef::GuiRef(GuiView & lv)
 	filter_->setClearButton(true);
 	filter_->setPlaceholderText(qt_("All available labels"));
 	filter_->setToolTip(qt_("Enter string to filter the list of available labels"));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-	        refsTW, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 	        refsTW, [this](){ focusAndHighlight(refsTW); });
-#endif
 
 	filterBarL->addWidget(filter_, 0);
 	findKeysLA->setBuddy(filter_);
diff --git a/src/frontends/qt/GuiSearch.cpp b/src/frontends/qt/GuiSearch.cpp
index f12d42c..8ac62c6 100644
--- a/src/frontends/qt/GuiSearch.cpp
+++ b/src/frontends/qt/GuiSearch.cpp
@@ -42,9 +42,7 @@
 #include <QHideEvent>
 #include <QShowEvent>
 #include "QSizePolicy"
-#if QT_VERSION >= 0x050000
 #include <QSvgRenderer>
-#endif
 
 using namespace std;
 using namespace lyx::support;
@@ -233,11 +231,9 @@ void GuiSearchWidget::handleIndicators()
 
 		bool const dark_mode = guiApp && guiApp->isInDarkMode();
 		qreal dpr = 1.0;
-#if QT_VERSION >= 0x050000
 		// Consider device/pixel ratio (HiDPI)
 		if (guiApp && guiApp->currentView())
 			dpr = guiApp->currentView()->devicePixelRatio();
-#endif
 		QString imagedir = "images/";
 		QPixmap bpixmap = getPixmap("images/", "search-options", "svgz,png");
 		QPixmap pm = bpixmap;
@@ -250,16 +246,13 @@ void GuiSearchWidget::handleIndicators()
 			pm.fill(Qt::transparent);
 			QPainter painter(&pm);
 			int x = 0;
-			
+
 			tip = qt_("Active options:");
 			tip += "<ul>";
 			if (caseCB->isChecked()) {
 				tip += "<li>" + qt_("Case sensitive search");
 				QPixmap spixmap = getPixmap("images/", "search-case-sensitive", "svgz,png");
-#if QT_VERSION < 0x050000
-				painter.drawPixmap(x, 0, spixmap);
-#else
-				// With Qt5, we render SVG directly for HiDPI scalability
+				// We render SVG directly for HiDPI scalability
 				FileName fname = imageLibFileSearch(imagedir, "search-case-sensitive", "svgz,png");
 				QString fpath = toqstr(fname.absFileName());
 				if (!fpath.isEmpty()) {
@@ -268,15 +261,11 @@ void GuiSearchWidget::handleIndicators()
 						svgRenderer.render(&painter, QRectF(0, 0, spixmap.width() * dpr,
 										    spixmap.height() * dpr));
 				}
-#endif
 				x += (spixmap.width() * dpr) + gap;
 			}
 			if (wordsCB->isChecked()) {
 				tip += "<li>" + qt_("Whole words only");
 				QPixmap spixmap = getPixmap("images/", "search-whole-words", "svgz,png");
-#if QT_VERSION < 0x050000
-				painter.drawPixmap(x, 0, spixmap);
-#else
 				FileName fname = imageLibFileSearch(imagedir, "search-whole-words", "svgz,png");
 				QString fpath = toqstr(fname.absFileName());
 				if (!fpath.isEmpty()) {
@@ -285,15 +274,11 @@ void GuiSearchWidget::handleIndicators()
 						svgRenderer.render(&painter, QRectF(x, 0, spixmap.width() * dpr,
 										    spixmap.height() * dpr));
 				}
-#endif
 				x += (spixmap.width() * dpr) + gap;
 			}
 			if (selectionCB->isChecked()) {
 				tip += "<li>" + qt_("Search only in selection");
 				QPixmap spixmap = getPixmap("images/", "search-selection", "svgz,png");
-#if QT_VERSION < 0x050000
-				painter.drawPixmap(x, 0, spixmap);
-#else
 				FileName fname = imageLibFileSearch(imagedir, "search-selection", "svgz,png");
 				QString fpath = toqstr(fname.absFileName());
 				if (!fpath.isEmpty()) {
@@ -302,15 +287,11 @@ void GuiSearchWidget::handleIndicators()
 						svgRenderer.render(&painter, QRectF(x, 0, spixmap.width() * dpr,
 										    spixmap.height() * dpr));
 				}
-#endif
 				x += (spixmap.width() * dpr) + gap;
 			}
 			if (instantSearchCB->isChecked()) {
 				tip += "<li>" + qt_("Search as you type");
 				QPixmap spixmap = getPixmap("images/", "search-instant", "svgz,png");
-#if QT_VERSION < 0x050000
-				painter.drawPixmap(x, 0, spixmap);
-#else
 				FileName fname = imageLibFileSearch(imagedir, "search-instant", "svgz,png");
 				QString fpath = toqstr(fname.absFileName());
 				if (!fpath.isEmpty()) {
@@ -319,15 +300,11 @@ void GuiSearchWidget::handleIndicators()
 						svgRenderer.render(&painter, QRectF(x, 0, spixmap.width() * dpr,
 										    spixmap.height() * dpr));
 				}
-#endif
 				x += (spixmap.width() * dpr) + gap;
 			}
 			if (wrapCB->isChecked()) {
 				tip += "<li>" + qt_("Wrap search");
 				QPixmap spixmap = getPixmap("images/", "search-wrap", "svgz,png");
-#if QT_VERSION < 0x050000
-				painter.drawPixmap(x, 0, spixmap);
-#else
 				FileName fname = imageLibFileSearch(imagedir, "search-wrap", "svgz,png");
 				QString fpath = toqstr(fname.absFileName());
 				if (!fpath.isEmpty()) {
@@ -336,18 +313,14 @@ void GuiSearchWidget::handleIndicators()
 						svgRenderer.render(&painter, QRectF(x, 0, spixmap.width() * dpr,
 										    spixmap.height() * dpr));
 				}
-#endif
 				x += (spixmap.width() * dpr) + gap;
 			}
 			tip += "</ul>";
-#if QT_VERSION >= 0x050000
 			pm.setDevicePixelRatio(dpr);
-#endif
 			painter.end();
 		} else {
 			tip = qt_("Click here to change search options");
-#if QT_VERSION >= 0x050000
-			// With Qt5, we render SVG directly for HiDPI scalability
+			// We render SVG directly for HiDPI scalability
 			FileName fname = imageLibFileSearch(imagedir, "search-options", "svgz,png");
 			QString fpath = toqstr(fname.absFileName());
 			if (!fpath.isEmpty()) {
@@ -360,7 +333,6 @@ void GuiSearchWidget::handleIndicators()
 					pm.setDevicePixelRatio(dpr);
 				}
 			}
-#endif
 		}
 		if (dark_mode) {
 			QImage img = pm.toImage();
diff --git a/src/frontends/qt/GuiToolbar.cpp b/src/frontends/qt/GuiToolbar.cpp
index 51699c9..ed8dd0a 100644
--- a/src/frontends/qt/GuiToolbar.cpp
+++ b/src/frontends/qt/GuiToolbar.cpp
@@ -521,7 +521,7 @@ void GuiToolbar::add(ToolbarItem const & item)
 	case ToolbarItem::MINIBUFFER:
 		command_buffer_ = new GuiCommandBuffer(&owner_);
 		addWidget(command_buffer_);
-		/// \todo find a Qt4 equivalent to setHorizontalStretchable(true);
+		/// \todo find a Qt5 equivalent to setHorizontalStretchable(true);
 		//setHorizontalStretchable(true);
 		break;
 	case ToolbarItem::TABLEINSERT: {
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 24d6703..e8f7606 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -159,7 +159,6 @@ public:
 		/// The text to be written on top of the pixmap
 		QString const text = lyx_version ?
 			qt_("version ") + lyx_version : qt_("unknown version");
-#if QT_VERSION >= 0x050000
 		QString imagedir = "images/";
 		FileName fname = imageLibFileSearch(imagedir, "banner", "svgz");
 		QSvgRenderer svgRenderer(toqstr(fname.absFileName()));
@@ -171,9 +170,6 @@ public:
 		} else {
 			splash_ = getPixmap("images/", "banner", "png");
 		}
-#else
-		splash_ = getPixmap("images/", "banner", "svgz,png");
-#endif
 
 		QPainter pain(&splash_);
 		pain.setPen(QColor(0, 0, 0));
@@ -262,11 +258,7 @@ private:
 
 	/// Current ratio between physical pixels and device-independent pixels
 	double pixelRatio() const {
-#if QT_VERSION >= 0x050000
 		return qt_scale_factor * devicePixelRatio();
-#else
-		return 1.0;
-#endif
 	}
 
 	qreal fontSize() const {
@@ -286,11 +278,7 @@ private:
 
 	/// Ratio between physical pixels and device-independent pixels of splash image
 	double splashPixelRatio() const {
-#if QT_VERSION >= 0x050000
 		return splash_.devicePixelRatio();
-#else
-		return 1.0;
-#endif
 	}
 };
 
@@ -606,15 +594,10 @@ GuiView::GuiView(int id)
 	setAttribute(Qt::WA_DeleteOnClose, true);
 
 #if !(defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)) && !defined(Q_OS_MAC)
-	// QIcon::fromTheme was introduced in Qt 4.6
-#if (QT_VERSION >= 0x040600)
 	// assign an icon to main form. We do not do it under Qt/Win or Qt/Mac,
 	// since the icon is provided in the application bundle. We use a themed
 	// version when available and use the bundled one as fallback.
 	setWindowIcon(QIcon::fromTheme("lyx", getPixmap("images/", "lyx", "svg,png")));
-#else
-	setWindowIcon(getPixmap("images/", "lyx", "svg,png"));
-#endif
 
 #endif
 	resetWindowTitle();
@@ -986,7 +969,7 @@ void GuiView::saveLayout() const
 	settings.setValue("devel_mode", devel_mode_);
 	settings.beginGroup("views");
 	settings.beginGroup(QString::number(id_));
-	if (guiApp->platformName() == "qt4x11" || guiApp->platformName() == "xcb") {
+	if (guiApp->platformName() == "xcb") {
 		settings.setValue("pos", pos());
 		settings.setValue("size", size());
 	} else
@@ -1052,7 +1035,7 @@ bool GuiView::restoreLayout()
 	char_nb_count_enabled_ = settings.value("char_nb_count_enabled", true).toBool();
 	stat_counts_->setVisible(word_count_enabled_ || char_count_enabled_ || char_nb_count_enabled_);
 
-	if (guiApp->platformName() == "qt4x11" || guiApp->platformName() == "xcb") {
+	if (guiApp->platformName() == "xcb") {
 		QPoint pos = settings.value("pos", QPoint(50, 50)).toPoint();
 		QSize size = settings.value("size", QSize(690, 510)).toSize();
 		resize(size);
@@ -1820,11 +1803,7 @@ void GuiView::resetCommandExecute()
 
 double GuiView::pixelRatio() const
 {
-#if QT_VERSION >= 0x050000
 	return qt_scale_factor * devicePixelRatio();
-#else
-	return 1.0;
-#endif
 }
 
 
@@ -5217,11 +5196,9 @@ Dialog * GuiView::findOrBuild(string const & name, bool hide_it)
 
 	dialog = build(name);
 	d.dialogs_[name].reset(dialog);
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
 	// Force a uniform style for group boxes
 	// On Mac non-flat works better, on Linux flat is standard
 	flatGroupBoxes(dialog->asQWidget(), guiApp->platformName() != "cocoa");
-#endif
 	if (lyxrc.allow_geometry_session)
 		dialog->restoreSession();
 	if (hide_it)
diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index 802fbc7..495f2a9 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -53,9 +53,6 @@
 #include "frontends/WorkAreaManager.h"
 
 #include <QContextMenuEvent>
-#if (QT_VERSION < 0x050000)
-#include <QInputContext>
-#endif
 #include <QDrag>
 #include <QHelpEvent>
 #ifdef Q_OS_MAC
@@ -182,11 +179,7 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv)
 
 double GuiWorkArea::pixelRatio() const
 {
-#if QT_VERSION >= 0x050000
 	return qt_scale_factor * devicePixelRatio();
-#else
-	return 1.0;
-#endif
 }
 
 
@@ -202,7 +195,7 @@ void GuiWorkArea::init()
 		});
 
 	d->resetScreen();
-	// With Qt4.5 a mouse event will happen before the first paint event
+	// A mouse event will happen before the first paint event,
 	// so make sure that the buffer view has an up to date metrics.
 	d->buffer_view_->resize(viewport()->width(), viewport()->height());
 
@@ -724,10 +717,6 @@ void GuiWorkArea::mousePressEvent(QMouseEvent * e)
 		return;
 	}
 
-#if (QT_VERSION < 0x050000) && !defined(__HAIKU__)
-	inputContext()->reset();
-#endif
-
 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
 	FuncRequest const cmd(LFUN_MOUSE_PRESS, e->position().x(), e->position().y(),
 #else
@@ -860,13 +849,6 @@ void GuiWorkArea::wheelEvent(QWheelEvent * ev)
 	// Wheel rotation by one notch results in a delta() of 120 (see
 	// documentation of QWheelEvent)
 	// But first we have to ignore horizontal scroll events.
-#if QT_VERSION < 0x050000
-	if (ev->orientation() == Qt::Horizontal) {
-		ev->accept();
-		return;
-	}
-	double const delta = ev->delta() / 120.0;
-#else
 	QPoint const aDelta = ev->angleDelta();
 	// skip horizontal wheel event
 	if (abs(aDelta.x()) > abs(aDelta.y())) {
@@ -874,7 +856,6 @@ void GuiWorkArea::wheelEvent(QWheelEvent * ev)
 		return;
 	}
 	double const delta = aDelta.y() / 120.0;
-#endif
 
 	bool zoom = false;
 	switch (lyxrc.scroll_wheel_zoom) {
@@ -1232,9 +1213,7 @@ void GuiWorkArea::Private::resetScreen()
 		screen_ = QImage(pr * p->viewport()->width(),
 		                 pr * p->viewport()->height(),
 		                 QImage::Format_ARGB32_Premultiplied);
-#  if QT_VERSION >= 0x050000
 		screen_.setDevicePixelRatio(pr);
-#  endif
 	}
 }
 
@@ -1378,11 +1357,7 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const
 	switch (query) {
 		// this is the CJK-specific composition window position and
 		// the context menu position when the menu key is pressed.
-#if (QT_VERSION < 0x050000)
-	case Qt::ImMicroFocus: {
-#else
 	case Qt::ImCursorRectangle: {
-#endif
 		CaretGeometry const & cg = bufferView().caretGeometry();
 		return QRect(cg.left - 10 * (d->preedit_lines_ != 1),
 		             cg.top + cg.height() * d->preedit_lines_,
@@ -1595,11 +1570,7 @@ void TabWorkArea::paintEvent(QPaintEvent * event)
 		// painting of the frame of the tab widget.
 		// This is needed for gtk style in Qt.
 		QStylePainter p(this);
-#if QT_VERSION < 0x050000
-		QStyleOptionTabWidgetFrameV2 opt;
-#else
 		QStyleOptionTabWidgetFrame opt;
-#endif
 		initStyleOption(&opt);
 		opt.rect = style()->subElementRect(QStyle::SE_TabWidgetTabPane,
 			&opt, this);
diff --git a/src/frontends/qt/Menus.cpp b/src/frontends/qt/Menus.cpp
index 6b0c12b..5ea7133 100644
--- a/src/frontends/qt/Menus.cpp
+++ b/src/frontends/qt/Menus.cpp
@@ -76,10 +76,8 @@
 #include <QHash>
 #include <QList>
 #include <QMenuBar>
-#include <QString>
-#if QT_VERSION >= 0x040600
 #include <QProxyStyle>
-#endif
+#include <QString>
 
 #include <algorithm>
 #include <memory>
@@ -2146,7 +2144,7 @@ void Menu::Impl::populate(QMenu * qMenu, MenuDefinition const & menu)
 		}
 }
 
-#if (defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)) && (QT_VERSION >= 0x040600)
+#if (defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN))
 class AlwaysMnemonicStyle : public QProxyStyle {
 public:
 	int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
@@ -2166,7 +2164,7 @@ public:
 Menu::Menu(GuiView * gv, QString const & name, bool top_level, bool keyboard)
 : QMenu(gv), d(new Menu::Impl)
 {
-#if (defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)) && (QT_VERSION >= 0x040600)
+#if (defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN))
 	if (keyboard)
 		setStyle(new AlwaysMnemonicStyle);
 #else
@@ -2280,11 +2278,10 @@ MenuDefinition Menus::Impl::mac_special_menu_;
 */
 void Menus::Impl::macxMenuBarInit(QMenuBar * qmb)
 {
-	/* Since Qt 4.2, the qt/mac menu code has special code for
-	   specifying the role of a menu entry. However, it does not
-	   work very well with our scheme of creating menus on demand,
-	   and therefore we need to put these entries in a special
-	   invisible menu. (JMarc)
+	/* The qt/mac menu code has special code for specifying the role
+	   of a menu entry. However, it does not work very well with our
+	   scheme of creating menus on demand, and therefore we need to
+	   put these entries in a special invisible menu. (JMarc)
 	*/
 
 	/* The entries of our special mac menu. If we add support for
@@ -2306,11 +2303,6 @@ void Menus::Impl::macxMenuBarInit(QMenuBar * qmb)
 		 QAction::AboutRole},
 		{LFUN_DIALOG_SHOW, "prefs", "Preferences",
 		 QAction::PreferencesRole},
-#if !(defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000))
-		/* This doesn't work with Cocoa. */
-		{LFUN_RECONFIGURE, "", "Reconfigure",
-		 QAction::ApplicationSpecificRole},
-#endif
 		{LFUN_LYX_QUIT, "", "Quit LyX", QAction::QuitRole}
 	};
 	const size_t num_entries = sizeof(entries) / sizeof(entries[0]);
@@ -2641,7 +2633,7 @@ void Menus::fillMenuBar(QMenuBar * qmb, GuiView * view, bool initial)
 	} else {
 		// Clear all menubar contents before filling it.
 		qmb->clear();
-#if (QT_VERSION >= 0x050000 && defined(Q_OS_MAC))
+#if (defined(Q_OS_MAC))
 		d->macxMenuBarInit(qmb);
 #endif
 	}
@@ -2684,8 +2676,8 @@ void Menus::fillMenuBar(QMenuBar * qmb, GuiView * view, bool initial)
 		Menu * menuptr = new Menu(view, m->submenuname(), true);
 		menuptr->setTitle(label(*m));
 
-#if defined(Q_OS_MAC) && (defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000))
-		// On Mac OS with QT/cocoa, the menu is not displayed if there is no action
+#if defined(Q_OS_MAC)
+		// On Mac OS with Qt/Cocoa, the menu is not displayed if there is no action
 		// so we create a temporary one here
 		QAction * action = new QAction(menuptr);
 		menuptr->addAction(action);
diff --git a/src/frontends/qt/TocWidget.cpp b/src/frontends/qt/TocWidget.cpp
index 573e232..fcbd605 100644
--- a/src/frontends/qt/TocWidget.cpp
+++ b/src/frontends/qt/TocWidget.cpp
@@ -102,13 +102,8 @@ TocWidget::TocWidget(GuiView & gui_view, QWidget * parent)
 		this, SLOT(showContextMenu(const QPoint &)));
 	connect(filter_, SIGNAL(textEdited(QString)),
 		this, SLOT(filterContents()));
-#if (QT_VERSION < 0x050000)
-	connect(filter_, SIGNAL(downPressed()),
-		tocTV, SLOT(setFocus()));
-#else
 	connect(filter_, &FancyLineEdit::downPressed,
 		tocTV, [this](){ focusAndHighlight(tocTV); });
-#endif
 	connect(activeFilterCO, SIGNAL(activated(int)),
 		this, SLOT(filterContents()));
 
diff --git a/src/frontends/qt/qt_helpers.cpp b/src/frontends/qt/qt_helpers.cpp
index 0431c04..a123035 100644
--- a/src/frontends/qt/qt_helpers.cpp
+++ b/src/frontends/qt/qt_helpers.cpp
@@ -269,22 +269,16 @@ void setMessageColour(list<QWidget *> highlighted, list<QWidget *> plain)
 }
 
 
+/// FIXME KILLQT4: kill this function
 /// wrapper to hide the change of method name to setSectionResizeMode
 void setSectionResizeMode(QHeaderView * view,
     int logicalIndex, QHeaderView::ResizeMode mode) {
-#if (QT_VERSION >= 0x050000)
 	view->setSectionResizeMode(logicalIndex, mode);
-#else
-	view->setResizeMode(logicalIndex, mode);
-#endif
 }
 
+/// FIXME KILLQT4: kill this function
 void setSectionResizeMode(QHeaderView * view, QHeaderView::ResizeMode mode) {
-#if (QT_VERSION >= 0x050000)
 	view->setSectionResizeMode(mode);
-#else
-	view->setResizeMode(mode);
-#endif
 }
 
 void showDirectory(FileName const & directory)
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 0ba2ace..39543fa 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -57,13 +57,8 @@
 //#define ResultsDebug
 #define USE_QT_FOR_SEARCH
 #if defined(USE_QT_FOR_SEARCH)
-	#include <QtCore>	// sets QT_VERSION
-	#if (QT_VERSION >= 0x050000)
-		#include <QRegularExpression>
-		#define QTSEARCH 1
-	#else
-		#define QTSEARCH 0
-	#endif
+	#include <QRegularExpression>
+	#define QTSEARCH 1
 #else
 	#define QTSEARCH 0
 #endif
diff --git a/src/support/FileMonitor.cpp b/src/support/FileMonitor.cpp
index 0af322d..4a81cc2 100644
--- a/src/support/FileMonitor.cpp
+++ b/src/support/FileMonitor.cpp
@@ -126,15 +126,7 @@ void FileMonitorGuard::refresh(bool const emit)
 	if (!qwatcher_->files().contains(qfilename)) {
 		bool const existed = exists_;
 		exists_ = QFile(qfilename).exists();
-#if (QT_VERSION >= 0x050000)
 		if (exists_ && !qwatcher_->addPath(qfilename))
-#else
-		auto add_path = [&]() {
-			qwatcher_->addPath(qfilename);
-			return qwatcher_->files().contains(qfilename);
-		};
-		if (exists_ && !add_path())
-#endif
 		{
 			LYXERR(Debug::FILES,
 			       "Could not add path to QFileSystemWatcher: " << filename_);
diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp
index 5b494a5..32a5862 100644
--- a/src/support/FileName.cpp
+++ b/src/support/FileName.cpp
@@ -778,11 +778,7 @@ docstring FileName::fileContents(string const & encoding) const
 	if (encoding.empty() || encoding == "UTF-8")
 		s = QString::fromUtf8(contents.data());
 	else if (encoding == "ascii")
-#if (QT_VERSION < 0x050000)
-		s = QString::fromAscii(contents.data());
-#else
 		s = QString::fromLatin1(contents.data());
-#endif
 	else if (encoding == "local8bit")
 		s = QString::fromLocal8Bit(contents.data());
 	else if (encoding == "latin1")
diff --git a/src/support/Package.cpp b/src/support/Package.cpp
index a779544..400bf15 100644
--- a/src/support/Package.cpp
+++ b/src/support/Package.cpp
@@ -420,12 +420,9 @@ FileName const get_document_dir(FileName const & home_dir)
 	(void)home_dir; // Silence warning about unused variable.
 	os::GetFolderPath win32_folder_path;
 	return FileName(win32_folder_path(os::GetFolderPath::PERSONAL));
-#elif defined (USE_MACOSX_PACKAGING) && (QT_VERSION >= 0x050000)
-	(void)home_dir; // Silence warning about unused variable.
-	return FileName(fromqstr(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)));
 #elif defined (USE_MACOSX_PACKAGING)
 	(void)home_dir; // Silence warning about unused variable.
-	return FileName(fromqstr(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)));
+	return FileName(fromqstr(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)));
 #else // Posix-like.
 	return home_dir;
 #endif
@@ -686,13 +683,9 @@ FileName const get_default_user_support_dir(FileName const & home_dir)
 	os::GetFolderPath win32_folder_path;
 	return FileName(addPath(win32_folder_path(os::GetFolderPath::APPDATA), PACKAGE));
 
-#elif defined (USE_MACOSX_PACKAGING) && (QT_VERSION >= 0x050000)
-	(void)home_dir; // Silence warning about unused variable.
-	return FileName(addPath(fromqstr(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)), PACKAGE));
-
 #elif defined (USE_MACOSX_PACKAGING)
 	(void)home_dir; // Silence warning about unused variable.
-	return FileName(addPath(fromqstr(QDesktopServices::storageLocation(QDesktopServices::DataLocation)), PACKAGE));
+	return FileName(addPath(fromqstr(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)), PACKAGE));
 
 #elif defined (USE_HAIKU_PACKAGING)
 	return FileName(addPath(home_dir.absFileName(), string("/config/settings/") + PACKAGE));
diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp
index d554f47..e24dcba 100644
--- a/src/support/filetools.cpp
+++ b/src/support/filetools.cpp
@@ -1314,12 +1314,8 @@ void fileUnlock(int fd, const char * /* lock_file*/)
 
 std::string toHexHash(const std::string & str)
 {
-	// Use the best available hashing algorithm. Qt 5 proposes SHA-2, but Qt 4 is limited to SHA-1.
-#if QT_VERSION >= 0x050000
+	// Use the best available hashing algorithm.
 	auto hashAlgo = QCryptographicHash::Sha256;
-#else
-	auto hashAlgo = QCryptographicHash::Sha1;
-#endif
 
 	QByteArray hash = QCryptographicHash::hash(toqstr(str).toLocal8Bit(), hashAlgo);
 	return fromqstr(QString(hash.toHex()));

commit d9847302359b7f6d5ca02b97b3b323d7f6bc3df7
Author: Pavel Sanda <sanda at lyx.org>
Date:   Wed Nov 16 21:23:01 2022 +0100

    Drop C++17 if init-statements to support older compilers.

diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index d72527a..54757a7 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -373,7 +373,8 @@ void InsetIndex::docbook(XMLStream & xs, OutputParams const & runparams) const
 
 	// Handle primary, secondary, and tertiary terms (entries, subentries, and subsubentries, for LaTeX).
 	vector<docstring> terms;
-	if (const vector<docstring> potential_terms = getSubentriesAsText(runparams); !potential_terms.empty()) {
+	const vector<docstring> potential_terms = getSubentriesAsText(runparams);
+	if (!potential_terms.empty()) {
 		terms = potential_terms;
 		// The main term is not present in the vector, as it's not a subentry. The main index term is inserted raw in
 		// the index inset. Considering that the user either uses the new or the legacy mechanism, the main term is the

commit 94e7421a0a408bf60077bffe5d6f70142c5dad3f
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Wed Nov 16 17:43:22 2022 +0100

    Fix compilation with gcc 4.9
    
    It appears that gcc 4.9 does not implement the following part of C++11:
    https://cplusplus.github.io/CWG/issues/1148.html
    
    Therefore, we have to use a special case in C++11 mode that does an
    explicit std:move.
    
    With recent compilers (gcc >= 9), this leads in C++11 mode to a warning:
    
    MetricsInfo.cpp: In member function ‘lyx::Changer lyx::MetricsBase::changeFontSet(const string&)’:
    ../../master/src/MetricsInfo.cpp:83:13: warning: redundant move in return statement [-Wredundant-move]
       83 |  return move(rc);
          |         ~~~~^~~~
    MetricsInfo.cpp:83:13: note: remove ‘std::move’ call
    
    Partly reverts commit fff28c57.

diff --git a/src/MetricsInfo.cpp b/src/MetricsInfo.cpp
index 92ed4a7..89196f3 100644
--- a/src/MetricsInfo.cpp
+++ b/src/MetricsInfo.cpp
@@ -75,7 +75,13 @@ Changer MetricsBase::changeFontSet(string const & name)
 	    && ((isTextFont(oldname) && oldcolor != Color_foreground)
 	        || (isMathFont(oldname) && oldcolor != Color_math)))
 		font.setColor(oldcolor);
+#if __cplusplus >= 201402L
 	return rc;
+#else
+	/** In theory, this is not needed with C++11, and modern compilers
+	 * will complain in C++11 mode, but gcc 4.9 requires this. */
+	return std::move(rc);
+#endif
 }
 
 

commit 12bff77722205bdec4e78236bd6d8c75e818e717
Merge: 5bf7f93 50e1bdf
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Wed Nov 16 10:22:11 2022 +0100

    Merge branch 'breakspace'
    
    This branch improves handling of spaces on display (see #10117):
    * caret is correctly shown in the middle of double spaces in justified rows;
    
    * sequence spaces are correctly shown at the end of rows before
      automatic row breaks.
    
    Moreover, this branch:
    * streamlines the code that handles spaces in row breaking
    
    * improves display in Qt4 : although the improvements outlined above
      are not present in Qt4 for monospaced fonts, some dsplay glitches
      are resolved.
    
    * improves performance for very long paragraphs (#12598).


commit 5bf7f938a4a951b49bff9828bd6d17ee8da7e317
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Fri Nov 11 08:12:14 2022 +0100

    Fix tex2lyx corner case (#12537)

diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index e11d0a5..2ee2ada 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -3742,7 +3742,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
 			continue;
 		}
 
-		if (t.cs() == "appendix") {
+		if (t.cs() == "appendix" && !context.in_list_preamble) {
 			context.add_par_extra_stuff("\\start_of_appendix\n");
 			// We need to start a new paragraph. Otherwise the
 			// appendix in 'bla\appendix\chapter{' would start

commit d35753a6d0e1bd0287c88998ffc9cb874279536b
Author: Scott Kostyshak <skostysh at lyx.org>
Date:   Thu Nov 10 10:34:15 2022 -0500

    CMake build: disable warn about not known policy
    
    This only showed up with -DLYX_EXTERNAL_ICONV=OFF.

diff --git a/3rdparty/libiconv/CMakeLists.txt b/3rdparty/libiconv/CMakeLists.txt
index 39beb96..12d5446 100644
--- a/3rdparty/libiconv/CMakeLists.txt
+++ b/3rdparty/libiconv/CMakeLists.txt
@@ -14,6 +14,9 @@ if (POLICY CMP0069)
     set(LYX_IPO_SUPPORTED YES)
   endif()
 endif()
+if (POLICY CMP0075)
+  cmake_policy(SET CMP0075 NEW)
+endif()
 
 set(CMAKE_MODULE_PATH .)
 include ( configure.cmake )

-----------------------------------------------------------------------


hooks/post-receive
-- 
Repository for new features


More information about the lyx-cvs mailing list