From 702cbfd429bcb1881d843a3f861442f9d37982bb Mon Sep 17 00:00:00 2001 From: Vasilito Date: Thu, 7 May 2026 09:11:47 +0100 Subject: [PATCH] fix: port Konsole to Redox Qt surface --- ...-multimedia-printsupport-core5compat.patch | 439 ++++++++++++++++++ local/recipes/kde/konsole/recipe.toml | 9 +- .../recipes/kde/konsole/source/CMakeLists.txt | 18 +- .../kde/konsole/source/src/CMakeLists.txt | 16 +- .../source/src/EscapeSequenceUrlExtractor.cpp | 3 +- .../kde/konsole/source/src/MainWindow.cpp | 2 +- .../kde/konsole/source/src/ProcessInfo.cpp | 1 + .../recipes/kde/konsole/source/src/Screen.cpp | 19 +- .../kde/konsole/source/src/Vt102Emulation.cpp | 8 + .../kde/konsole/source/src/Vt102Emulation.h | 7 + .../src/colorscheme/ColorSchemeWallpaper.cpp | 6 +- .../konsole/source/src/config-konsole.h.cmake | 4 + .../source/src/filterHotSpots/FileFilter.cpp | 2 +- .../src/plugins/QuickCommands/filtermodel.cpp | 3 +- .../QuickCommands/quickcommandswidget.cpp | 6 +- .../SSHManager/sshmanagerfiltermodel.cpp | 3 +- .../source/src/session/SessionController.cpp | 6 + .../src/terminalDisplay/TerminalDisplay.cpp | 8 +- .../src/terminalDisplay/TerminalDisplay.h | 4 + 19 files changed, 534 insertions(+), 30 deletions(-) create mode 100644 local/recipes/kde/konsole/01-optional-multimedia-printsupport-core5compat.patch diff --git a/local/recipes/kde/konsole/01-optional-multimedia-printsupport-core5compat.patch b/local/recipes/kde/konsole/01-optional-multimedia-printsupport-core5compat.patch new file mode 100644 index 000000000..c53cbb153 --- /dev/null +++ b/local/recipes/kde/konsole/01-optional-multimedia-printsupport-core5compat.patch @@ -0,0 +1,439 @@ +diff --git a/konsole-v24.08.3/CMakeLists.txt b/konsole-v24.08.3/CMakeLists.txt +--- a/konsole-v24.08.3/CMakeLists.txt ++++ b/konsole-v24.08.3/CMakeLists.txt +@@ -43,13 +43,23 @@ include(ECMQtDeclareLoggingCategory) + # Allows passing e.g. -DECM_ENABLE_SANITIZERS='address;undefined' to cmake. + include(ECMEnableSanitizers) + ++string(REPLACE " -fpermissive" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") ++ + find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED + Core +- Multimedia +- PrintSupport + Widgets + Core5Compat + ) ++find_package(Qt6Multimedia ${QT_MIN_VERSION} CONFIG QUIET) ++find_package(Qt6PrintSupport ${QT_MIN_VERSION} CONFIG QUIET) ++set(HAVE_QTMULTIMEDIA 0) ++if(TARGET Qt6::Multimedia) ++ set(HAVE_QTMULTIMEDIA 1) ++endif() ++set(HAVE_QTPRINTSUPPORT 0) ++if(TARGET Qt6::PrintSupport) ++ set(HAVE_QTPRINTSUPPORT 1) ++endif() + + find_package(KF6 ${KF6_DEP_VERSION} REQUIRED + Bookmarks +@@ -104,7 +114,7 @@ if(USE_DBUS) + set(HAVE_DBUS 1) + endif() + +-find_package(KF6DocTools ${KF6_DEP_VERSION}) ++find_package(KF6DocTools ${KF6_DEP_VERSION} QUIET) + set_package_properties(KF6DocTools PROPERTIES DESCRIPTION + "Tools to generate documentation" + TYPE OPTIONAL +diff --git a/konsole-v24.08.3/src/CMakeLists.txt b/konsole-v24.08.3/src/CMakeLists.txt +--- a/konsole-v24.08.3/src/CMakeLists.txt ++++ b/konsole-v24.08.3/src/CMakeLists.txt +@@ -65,8 +65,6 @@ endif() + + set(konsole_LIBS + KF6::XmlGui +- Qt::Multimedia +- Qt::PrintSupport + Qt::Xml + KF6::Notifications + KF6::WindowSystem +@@ -79,6 +77,14 @@ set(konsole_LIBS + KF6::NewStuffCore + ) + ++if(TARGET Qt6::Multimedia) ++ list(APPEND konsole_LIBS Qt::Multimedia) ++endif() ++ ++if(TARGET Qt6::PrintSupport) ++ list(APPEND konsole_LIBS Qt::PrintSupport) ++endif() ++ + if(NOT WIN32) + list(APPEND konsole_LIBS + KF6::Pty +@@ -234,13 +240,16 @@ set(konsoleprivate_SRCS ${windowadaptors_SRCS} + widgets/TerminalHeaderBar.cpp + widgets/ViewContainer.cpp + widgets/ViewSplitter.cpp +- widgets/KonsolePrintManager.cpp + + ${dbus_xml_srcs} + + ../data/data.qrc + ../desktop/konsole.qrc) + ++if(TARGET Qt6::PrintSupport) ++ list(APPEND konsoleprivate_SRCS widgets/KonsolePrintManager.cpp) ++endif() ++ + kconfig_add_kcfg_files(konsoleprivate_SRCS settings/KonsoleSettings.kcfgc) + + ### Konsole Application +diff --git a/konsole-v24.08.3/src/config-konsole.h.cmake b/konsole-v24.08.3/src/config-konsole.h.cmake +--- a/konsole-v24.08.3/src/config-konsole.h.cmake ++++ b/konsole-v24.08.3/src/config-konsole.h.cmake +@@ -17,3 +17,7 @@ + + /* Defined if system has the malloc_trim function, which is a GNU extension */ + #cmakedefine01 HAVE_MALLOC_TRIM ++ ++#cmakedefine01 HAVE_QTMULTIMEDIA ++ ++#cmakedefine01 HAVE_QTPRINTSUPPORT +diff --git a/konsole-v24.08.3/src/Vt102Emulation.h b/konsole-v24.08.3/src/Vt102Emulation.h +--- a/konsole-v24.08.3/src/Vt102Emulation.h ++++ b/konsole-v24.08.3/src/Vt102Emulation.h +@@ -9,9 +9,12 @@ + #define VT102EMULATION_H + + // Qt ++#include "config-konsole.h" + #include + #include ++#if HAVE_QTMULTIMEDIA + #include ++#endif + #include + #include + #include +@@ -100,7 +103,9 @@ private Q_SLOTS: + // pair in _pendingSessionAttributesUpdates. + // Used to buffer multiple attribute updates in the current session + void updateSessionAttributes(); ++#if HAVE_QTMULTIMEDIA + void deletePlayer(QMediaPlayer::MediaStatus); ++#endif + + private: + unsigned int applyCharset(uint c); +@@ -315,7 +320,9 @@ private: + // For kitty graphics protocol - image cache + int getFreeGraphicsImageId(); + ++#if HAVE_QTMULTIMEDIA + QMediaPlayer *player; ++#endif + }; + + } +diff --git a/konsole-v24.08.3/src/Vt102Emulation.cpp b/konsole-v24.08.3/src/Vt102Emulation.cpp +--- a/konsole-v24.08.3/src/Vt102Emulation.cpp ++++ b/konsole-v24.08.3/src/Vt102Emulation.cpp +@@ -12,7 +12,9 @@ + #include + + // Qt ++#if HAVE_QTMULTIMEDIA + #include ++#endif + #include + #include + #include +@@ -70,7 +72,9 @@ Vt102Emulation::Vt102Emulation() + , _pendingSessionAttributesUpdates(QHash()) + , _sessionAttributesUpdateTimer(new QTimer(this)) + , _reportFocusEvents(false) ++#if HAVE_QTMULTIMEDIA + , player(nullptr) ++#endif + { + _sessionAttributesUpdateTimer->setSingleShot(true); + QObject::connect(_sessionAttributesUpdateTimer, &QTimer::timeout, this, &Konsole::Vt102Emulation::updateSessionAttributes); +@@ -1295,6 +1299,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u + } + } + if (inlineMedia) { ++#if HAVE_QTMULTIMEDIA + if (player == nullptr) { + player = new QMediaPlayer(this); + player->setAudioOutput(new QAudioOutput(player)); +@@ -1306,6 +1311,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u + delete (QIODevice *)(player->sourceDevice()); + player->setSourceDevice(buffer); + player->play(); ++#endif + return; + } + if (!inlineImage) { +@@ -1333,6 +1339,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u + _sessionAttributesUpdateTimer->start(20); + } + ++#if HAVE_QTMULTIMEDIA + void Vt102Emulation::deletePlayer(QMediaPlayer::MediaStatus mediaStatus) + { + if (mediaStatus == QMediaPlayer::EndOfMedia || mediaStatus == QMediaPlayer::InvalidMedia) { +@@ -1342,6 +1349,7 @@ void Vt102Emulation::deletePlayer(QMediaPlayer::MediaStatus mediaStatus) + player = nullptr; + } + } ++#endif + + void Vt102Emulation::updateSessionAttributes() + { +diff --git a/konsole-v24.08.3/src/session/SessionController.cpp b/konsole-v24.08.3/src/session/SessionController.cpp +--- a/konsole-v24.08.3/src/session/SessionController.cpp ++++ b/konsole-v24.08.3/src/session/SessionController.cpp +@@ -8,6 +8,8 @@ + // Own + #include "SessionController.h" + ++#include "config-konsole.h" ++ + #include "profile/ProfileManager.h" + #include "terminalDisplay/TerminalColor.h" + #include "terminalDisplay/TerminalFonts.h" +@@ -145,7 +147,9 @@ SessionController::SessionController(Session *sessionParam, TerminalDisplay *vie + setupExtraActions(); + } + ++#if HAVE_QTPRINTSUPPORT + connect(this, &SessionController::requestPrint, view(), &TerminalDisplay::printScreen); ++#endif + + actionCollection()->addAssociatedWidget(viewParam); + +@@ -730,9 +734,11 @@ void SessionController::setupCommonActions() + action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S)); + #endif + ++#if HAVE_QTPRINTSUPPORT + action = KStandardAction::print(this, &SessionController::requestPrint, collection); + action->setText(i18n("&Print Screen...")); + collection->setDefaultShortcut(action, Konsole::ACCEL | Qt::Key_P); ++#endif + + action = collection->addAction(QStringLiteral("adjust-history"), this, &SessionController::showHistoryOptions); + action->setText(i18n("Adjust Scrollback...")); +diff --git a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.h b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.h +--- a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.h ++++ b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.h +@@ -8,6 +8,8 @@ + #ifndef TERMINALDISPLAY_H + #define TERMINALDISPLAY_H + ++#include "config-konsole.h" ++ + // Qt + #include + #include +@@ -834,7 +836,9 @@ private: + TerminalColor *_terminalColor = nullptr; + std::unique_ptr _terminalFont; + ++#if HAVE_QTPRINTSUPPORT + std::unique_ptr _printManager; ++#endif + + bool _semanticUpDown; + bool _semanticInputClick; +diff --git a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp +--- a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp ++++ b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp +@@ -55,7 +55,9 @@ + #include "../characters/ExtendedCharTable.h" + #include "../characters/LineBlockCharacters.h" + #include "../decoders/PlainTextDecoder.h" ++#if HAVE_QTPRINTSUPPORT + #include "../widgets/KonsolePrintManager.h" ++#endif + #include "../widgets/TerminalDisplayAccessible.h" + #include "EscapeSequenceUrlExtractor.h" + #include "PrintOptions.h" +@@ -308,6 +310,7 @@ TerminalDisplay::TerminalDisplay(QWidget *parent) + + _terminalPainter = new TerminalPainter(this); + ++#if HAVE_QTPRINTSUPPORT + auto ldrawBackground = [this](QPainter &painter, const QRect &rect, const QColor &backgroundColor, bool useOpacitySetting) { + _terminalPainter->drawBackground(painter, rect, backgroundColor, useOpacitySetting); + }; +@@ -319,6 +322,7 @@ TerminalDisplay::TerminalDisplay(QWidget *parent) + }; + + _printManager.reset(new KonsolePrintManager(ldrawBackground, ldrawContents, lgetBackgroundColor)); ++#endif + ubidi = ubidi_open(); + } + +@@ -3182,6 +3186,7 @@ void TerminalDisplay::applyProfile(const Profile::Ptr &profile) + + void TerminalDisplay::printScreen() + { ++#if HAVE_QTPRINTSUPPORT + auto lprintContent = [this](QPainter &painter, bool friendly) { + QPoint columnLines(_usedLines, _usedColumns); + auto lfontget = [this]() { +@@ -3194,6 +3199,7 @@ void TerminalDisplay::printScreen() + _printManager->printContent(painter, friendly, columnLines, lfontget, lfontset); + }; + _printManager->printRequest(lprintContent, this); ++#endif + } + + Character TerminalDisplay::getCursorCharacter(int column, int line) +diff --git a/konsole-v24.08.3/src/colorscheme/ColorSchemeWallpaper.cpp b/konsole-v24.08.3/src/colorscheme/ColorSchemeWallpaper.cpp +--- a/konsole-v24.08.3/src/colorscheme/ColorSchemeWallpaper.cpp ++++ b/konsole-v24.08.3/src/colorscheme/ColorSchemeWallpaper.cpp +@@ -201,11 +201,11 @@ QImage ColorSchemeWallpaper::FlipImage(const QImage image, const ColorSchemeWall + { + switch (flipType) { + case Horizontal: +- return image.mirrored(true, false); ++ return image.flipped(Qt::Horizontal); + case Vertical: +- return image.mirrored(false, true); ++ return image.flipped(Qt::Vertical); + case Both: +- return image.mirrored(true, true); ++ return image.flipped(Qt::Horizontal | Qt::Vertical); + default: + return image; + } +diff --git a/konsole-v24.08.3/src/EscapeSequenceUrlExtractor.cpp b/konsole-v24.08.3/src/EscapeSequenceUrlExtractor.cpp +--- a/konsole-v24.08.3/src/EscapeSequenceUrlExtractor.cpp ++++ b/konsole-v24.08.3/src/EscapeSequenceUrlExtractor.cpp +@@ -33,7 +33,8 @@ void EscapeSequenceUrlExtractor::appendUrlText_impl(uint c) + const int realCcolumn = _screen->getCursorY() + _screen->getHistLines(); + _currentUrl.begin = Coordinate{realCcolumn, _screen->getCursorX() - 1}; + } +- _currentUrl.text += QString::fromUcs4(&c, 1); ++ const auto codepoint = static_cast(c); ++ _currentUrl.text += QString::fromUcs4(&codepoint, 1); + } + + void EscapeSequenceUrlExtractor::setUrl(const QString &url) +diff --git a/konsole-v24.08.3/src/ProcessInfo.cpp b/konsole-v24.08.3/src/ProcessInfo.cpp +--- a/konsole-v24.08.3/src/ProcessInfo.cpp ++++ b/konsole-v24.08.3/src/ProcessInfo.cpp +@@ -1272,6 +1272,7 @@ ProcessInfo *ProcessInfo::newInstance(int pid, int sessionPid) + #elif defined(Q_OS_OPENBSD) + info = new OpenBSDProcessInfo(pid); + #else ++ Q_UNUSED(sessionPid); + info = new NullProcessInfo(pid); + #endif + info->readProcessInfo(pid); +diff --git a/konsole-v24.08.3/src/Screen.cpp b/konsole-v24.08.3/src/Screen.cpp +--- a/konsole-v24.08.3/src/Screen.cpp ++++ b/konsole-v24.08.3/src/Screen.cpp +@@ -1838,16 +1838,17 @@ void Screen::setSelectionEnd(const int x, const int y, const bool trimTrailingWh + // Do not let this code go to a release. + if (_screenLines.size() < line) { + QFile konsoleInfo(QStringLiteral("~/konsole_info_crash_array_out_of_bounds.txt")); +- konsoleInfo.open(QIODevice::WriteOnly); +- QTextStream messages(&konsoleInfo); +- +- messages << "_selBegin" << _selBegin << "\n"; +- messages << "endPos" << endPos << "\n"; +- messages << "_selBottomRight" << _selBottomRight << "\n"; +- messages << "bottomRow Calculation: (_selBottomRight / _columns) = " << _selBottomRight << "/" << _columns << "\n"; +- messages << "line Calculation: (bottomRow - _history->getLines()) = " << bottomRow << "-" << _history->getLines() << "\n"; +- messages << "_screenLines.count()" << _screenLines.size() << "\n"; +- messages << "line" << line << "\n"; ++ if (konsoleInfo.open(QIODevice::WriteOnly)) { ++ QTextStream messages(&konsoleInfo); ++ ++ messages << "_selBegin" << _selBegin << "\n"; ++ messages << "endPos" << endPos << "\n"; ++ messages << "_selBottomRight" << _selBottomRight << "\n"; ++ messages << "bottomRow Calculation: (_selBottomRight / _columns) = " << _selBottomRight << "/" << _columns << "\n"; ++ messages << "line Calculation: (bottomRow - _history->getLines()) = " << bottomRow << "-" << _history->getLines() << "\n"; ++ messages << "_screenLines.count()" << _screenLines.size() << "\n"; ++ messages << "line" << line << "\n"; ++ } + } + + // HACK: do not crash. +diff --git a/konsole-v24.08.3/src/filterHotSpots/FileFilter.cpp b/konsole-v24.08.3/src/filterHotSpots/FileFilter.cpp +--- a/konsole-v24.08.3/src/filterHotSpots/FileFilter.cpp ++++ b/konsole-v24.08.3/src/filterHotSpots/FileFilter.cpp +@@ -93,7 +93,7 @@ QSharedPointer FileFilter::newHotSpot(int startLine, int startColumn, i + + // '.' and '..' could be valid hotspots, but '..................' most likely isn't + static const QRegularExpression allDotRe{QRegularExpression::anchoredPattern(QStringLiteral("\\.{3}"))}; +- if (allDotRe.match(filename).hasMatch()) { ++ if (allDotRe.matchView(filename).hasMatch()) { + return nullptr; + } + +diff --git a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp +--- a/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp ++++ b/konsole-v24.08.3/src/terminalDisplay/TerminalDisplay.cpp +@@ -2309,7 +2309,7 @@ void TerminalDisplay::doPaste(QString text, bool appendReturn) + if (isUnsafe(c)) { + const QString sequence = charToSequence(c); + const QString description = characterDescriptions.value(c.unicode(), QString()); +- QString entry = QStringLiteral("U+%1").arg(c.unicode(), 4, 16, QLatin1Char('0')); ++ QString entry = QStringLiteral("U+%1").arg(static_cast(c.unicode()), 4, 16, QLatin1Char('0')); + if (!sequence.isEmpty()) { + entry += QStringLiteral("\t%1").arg(sequence); + } +diff --git a/konsole-v24.08.3/src/MainWindow.cpp b/konsole-v24.08.3/src/MainWindow.cpp +--- a/konsole-v24.08.3/src/MainWindow.cpp ++++ b/konsole-v24.08.3/src/MainWindow.cpp +@@ -370,7 +370,7 @@ void MainWindow::setupActions() + }); + + // Set up themes +- auto *manager = new KColorSchemeManager(actionCollection()); ++ auto *manager = KColorSchemeManager::instance(); + manager->setAutosaveChanges(true); + KActionMenu *selectionMenu = KColorSchemeMenu::createMenu(manager, this); + auto winColorSchemeMenu = new QAction(this); +diff --git a/konsole-v24.08.3/src/plugins/QuickCommands/filtermodel.cpp b/konsole-v24.08.3/src/plugins/QuickCommands/filtermodel.cpp +--- a/konsole-v24.08.3/src/plugins/QuickCommands/filtermodel.cpp ++++ b/konsole-v24.08.3/src/plugins/QuickCommands/filtermodel.cpp +@@ -33,8 +33,9 @@ bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParen + + void FilterModel::setInvertFilter(bool invert) + { ++ beginFilterChange(); + m_invertFilter = invert; +- invalidateFilter(); ++ endFilterChange(QSortFilterProxyModel::Direction::Rows); + } + + #include "moc_filtermodel.cpp" +diff --git a/konsole-v24.08.3/src/plugins/SSHManager/sshmanagerfiltermodel.cpp b/konsole-v24.08.3/src/plugins/SSHManager/sshmanagerfiltermodel.cpp +--- a/konsole-v24.08.3/src/plugins/SSHManager/sshmanagerfiltermodel.cpp ++++ b/konsole-v24.08.3/src/plugins/SSHManager/sshmanagerfiltermodel.cpp +@@ -31,8 +31,9 @@ bool SSHManagerFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &s + + void SSHManagerFilterModel::setInvertFilter(bool invert) + { ++ beginFilterChange(); + m_invertFilter = invert; +- invalidateFilter(); ++ endFilterChange(QSortFilterProxyModel::Direction::Rows); + } + + #include "moc_sshmanagerfiltermodel.cpp" +diff --git a/konsole-v24.08.3/src/plugins/QuickCommands/quickcommandswidget.cpp b/konsole-v24.08.3/src/plugins/QuickCommands/quickcommandswidget.cpp +--- a/konsole-v24.08.3/src/plugins/QuickCommands/quickcommandswidget.cpp ++++ b/konsole-v24.08.3/src/plugins/QuickCommands/quickcommandswidget.cpp +@@ -314,7 +314,11 @@ void QuickCommandsWidget::runShellCheck() + } + + QTemporaryFile file; +- file.open(); ++ if (!file.open()) { ++ ui->warning->setPlainText(file.errorString()); ++ ui->tabWidget->setTabText(1, i18n("Warnings (*)")); ++ return; ++ } + + QTextStream ts(&file); + ts << "#!/bin/bash\n"; diff --git a/local/recipes/kde/konsole/recipe.toml b/local/recipes/kde/konsole/recipe.toml index 312819a4b..255c227fb 100644 --- a/local/recipes/kde/konsole/recipe.toml +++ b/local/recipes/kde/konsole/recipe.toml @@ -1,6 +1,6 @@ #TODO: Konsole — KDE terminal emulator. Qt6-based, depends on kf6-kio. # Bell audio (Qt6Multimedia) and printing (Qt6PrintSupport) disabled via cmake patch. -# Core5Compat linked if available. ICU required for BiDi text rendering. +# Core5Compat is provided by qt5compat. ICU required for BiDi text rendering. [source] tar = "https://invent.kde.org/utilities/konsole/-/archive/v24.08.3/konsole-v24.08.3.tar.gz" patches = [ @@ -12,6 +12,7 @@ template = "custom" dependencies = [ "icu", "qtbase", + "qt5compat", "kf6-extra-cmake-modules", "kf6-kcoreaddons", "kf6-ki18n", @@ -50,9 +51,9 @@ for qtdir in plugins mkspecs metatypes modules; do fi done -sed -i "s/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/" \ +sed -i -E "s/^[[:space:]]*ecm_install_po_files_as_qm/#&/" \ "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true -sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' \ +sed -i -E 's/^[[:space:]]*ki18n_install[[:space:]]*[(][[:space:]]*po[[:space:]]*[)]/#&/' \ "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true rm -f CMakeCache.txt @@ -64,6 +65,8 @@ cmake "${COOKBOOK_SOURCE}" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \ + -DKF6_HOST_TOOLING=/usr/lib/cmake \ + -DWITH_X11=OFF \ -DBUILD_TESTING=OFF \ -Wno-dev diff --git a/local/recipes/kde/konsole/source/CMakeLists.txt b/local/recipes/kde/konsole/source/CMakeLists.txt index af289ad73..9a4e43123 100644 --- a/local/recipes/kde/konsole/source/CMakeLists.txt +++ b/local/recipes/kde/konsole/source/CMakeLists.txt @@ -43,13 +43,23 @@ include(CheckIncludeFiles) # Allows passing e.g. -DECM_ENABLE_SANITIZERS='address;undefined' to cmake. include(ECMEnableSanitizers) +string(REPLACE " -fpermissive" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED Core - Multimedia - PrintSupport Widgets Core5Compat ) +find_package(Qt6Multimedia ${QT_MIN_VERSION} CONFIG QUIET) +find_package(Qt6PrintSupport ${QT_MIN_VERSION} CONFIG QUIET) +set(HAVE_QTMULTIMEDIA 0) +if(TARGET Qt6::Multimedia) + set(HAVE_QTMULTIMEDIA 1) +endif() +set(HAVE_QTPRINTSUPPORT 0) +if(TARGET Qt6::PrintSupport) + set(HAVE_QTPRINTSUPPORT 1) +endif() find_package(KF6 ${KF6_DEP_VERSION} REQUIRED Bookmarks @@ -96,7 +106,7 @@ if(USE_DBUS) set(HAVE_DBUS 1) endif() -find_package(KF6DocTools ${KF6_DEP_VERSION}) +find_package(KF6DocTools ${KF6_DEP_VERSION} QUIET) set_package_properties(KF6DocTools PROPERTIES DESCRIPTION "Tools to generate documentation" TYPE OPTIONAL @@ -157,7 +167,7 @@ ecm_qt_install_logging_categories( DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}" ) -ki18n_install( po ) +#ki18n_install( po ) if(KF6DocTools_FOUND) kdoctools_install( po ) endif() diff --git a/local/recipes/kde/konsole/source/src/CMakeLists.txt b/local/recipes/kde/konsole/source/src/CMakeLists.txt index 1cb38d160..81f5d4641 100644 --- a/local/recipes/kde/konsole/source/src/CMakeLists.txt +++ b/local/recipes/kde/konsole/source/src/CMakeLists.txt @@ -65,8 +65,6 @@ endif() set(konsole_LIBS KF6::XmlGui - Qt::Multimedia - Qt::PrintSupport Qt::Xml KF6::Notifications KF6::WindowSystem @@ -79,6 +77,14 @@ set(konsole_LIBS KF6::NewStuffCore ) +if(TARGET Qt6::Multimedia) + list(APPEND konsole_LIBS Qt::Multimedia) +endif() + +if(TARGET Qt6::PrintSupport) + list(APPEND konsole_LIBS Qt::PrintSupport) +endif() + if(NOT WIN32) list(APPEND konsole_LIBS KF6::Pty @@ -234,13 +240,16 @@ set(konsoleprivate_SRCS ${windowadaptors_SRCS} widgets/TerminalHeaderBar.cpp widgets/ViewContainer.cpp widgets/ViewSplitter.cpp - widgets/KonsolePrintManager.cpp ${dbus_xml_srcs} ../data/data.qrc ../desktop/konsole.qrc) +if(TARGET Qt6::PrintSupport) + list(APPEND konsoleprivate_SRCS widgets/KonsolePrintManager.cpp) +endif() + kconfig_add_kcfg_files(konsoleprivate_SRCS settings/KonsoleSettings.kcfgc) ### Konsole Application @@ -408,4 +417,3 @@ if(COVERAGE_GENERATE_HTML) COMMAND ${GENHTML} --ignore-errors source --demangle-cpp -o coverage coverage.info WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) endif() - diff --git a/local/recipes/kde/konsole/source/src/EscapeSequenceUrlExtractor.cpp b/local/recipes/kde/konsole/source/src/EscapeSequenceUrlExtractor.cpp index d4511d93b..9f085f7b4 100644 --- a/local/recipes/kde/konsole/source/src/EscapeSequenceUrlExtractor.cpp +++ b/local/recipes/kde/konsole/source/src/EscapeSequenceUrlExtractor.cpp @@ -33,7 +33,8 @@ void EscapeSequenceUrlExtractor::appendUrlText_impl(uint c) const int realCcolumn = _screen->getCursorY() + _screen->getHistLines(); _currentUrl.begin = Coordinate{realCcolumn, _screen->getCursorX() - 1}; } - _currentUrl.text += QString::fromUcs4(&c, 1); + const auto codepoint = static_cast(c); + _currentUrl.text += QString::fromUcs4(&codepoint, 1); } void EscapeSequenceUrlExtractor::setUrl(const QString &url) diff --git a/local/recipes/kde/konsole/source/src/MainWindow.cpp b/local/recipes/kde/konsole/source/src/MainWindow.cpp index 163105357..ec1bbdb2c 100644 --- a/local/recipes/kde/konsole/source/src/MainWindow.cpp +++ b/local/recipes/kde/konsole/source/src/MainWindow.cpp @@ -370,7 +370,7 @@ void MainWindow::setupActions() }); // Set up themes - auto *manager = new KColorSchemeManager(actionCollection()); + auto *manager = KColorSchemeManager::instance(); manager->setAutosaveChanges(true); KActionMenu *selectionMenu = KColorSchemeMenu::createMenu(manager, this); auto winColorSchemeMenu = new QAction(this); diff --git a/local/recipes/kde/konsole/source/src/ProcessInfo.cpp b/local/recipes/kde/konsole/source/src/ProcessInfo.cpp index 8db330384..e42055ea6 100644 --- a/local/recipes/kde/konsole/source/src/ProcessInfo.cpp +++ b/local/recipes/kde/konsole/source/src/ProcessInfo.cpp @@ -1272,6 +1272,7 @@ ProcessInfo *ProcessInfo::newInstance(int pid, int sessionPid) #elif defined(Q_OS_OPENBSD) info = new OpenBSDProcessInfo(pid); #else + Q_UNUSED(sessionPid); info = new NullProcessInfo(pid); #endif info->readProcessInfo(pid); diff --git a/local/recipes/kde/konsole/source/src/Screen.cpp b/local/recipes/kde/konsole/source/src/Screen.cpp index 74b870b8a..eaf4fa6e6 100644 --- a/local/recipes/kde/konsole/source/src/Screen.cpp +++ b/local/recipes/kde/konsole/source/src/Screen.cpp @@ -1838,16 +1838,17 @@ void Screen::setSelectionEnd(const int x, const int y, const bool trimTrailingWh // Do not let this code go to a release. if (_screenLines.size() < line) { QFile konsoleInfo(QStringLiteral("~/konsole_info_crash_array_out_of_bounds.txt")); - konsoleInfo.open(QIODevice::WriteOnly); - QTextStream messages(&konsoleInfo); + if (konsoleInfo.open(QIODevice::WriteOnly)) { + QTextStream messages(&konsoleInfo); - messages << "_selBegin" << _selBegin << "\n"; - messages << "endPos" << endPos << "\n"; - messages << "_selBottomRight" << _selBottomRight << "\n"; - messages << "bottomRow Calculation: (_selBottomRight / _columns) = " << _selBottomRight << "/" << _columns << "\n"; - messages << "line Calculation: (bottomRow - _history->getLines()) = " << bottomRow << "-" << _history->getLines() << "\n"; - messages << "_screenLines.count()" << _screenLines.size() << "\n"; - messages << "line" << line << "\n"; + messages << "_selBegin" << _selBegin << "\n"; + messages << "endPos" << endPos << "\n"; + messages << "_selBottomRight" << _selBottomRight << "\n"; + messages << "bottomRow Calculation: (_selBottomRight / _columns) = " << _selBottomRight << "/" << _columns << "\n"; + messages << "line Calculation: (bottomRow - _history->getLines()) = " << bottomRow << "-" << _history->getLines() << "\n"; + messages << "_screenLines.count()" << _screenLines.size() << "\n"; + messages << "line" << line << "\n"; + } } // HACK: do not crash. diff --git a/local/recipes/kde/konsole/source/src/Vt102Emulation.cpp b/local/recipes/kde/konsole/source/src/Vt102Emulation.cpp index 06cd8412a..618143e30 100644 --- a/local/recipes/kde/konsole/source/src/Vt102Emulation.cpp +++ b/local/recipes/kde/konsole/source/src/Vt102Emulation.cpp @@ -12,7 +12,9 @@ #include // Qt +#if HAVE_QTMULTIMEDIA #include +#endif #include #include #include @@ -70,7 +72,9 @@ Vt102Emulation::Vt102Emulation() , _pendingSessionAttributesUpdates(QHash()) , _sessionAttributesUpdateTimer(new QTimer(this)) , _reportFocusEvents(false) +#if HAVE_QTMULTIMEDIA , player(nullptr) +#endif { _sessionAttributesUpdateTimer->setSingleShot(true); QObject::connect(_sessionAttributesUpdateTimer, &QTimer::timeout, this, &Konsole::Vt102Emulation::updateSessionAttributes); @@ -1295,6 +1299,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u } } if (inlineMedia) { +#if HAVE_QTMULTIMEDIA if (player == nullptr) { player = new QMediaPlayer(this); player->setAudioOutput(new QAudioOutput(player)); @@ -1306,6 +1311,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u delete (QIODevice *)(player->sourceDevice()); player->setSourceDevice(buffer); player->play(); +#endif return; } if (!inlineImage) { @@ -1333,6 +1339,7 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u _sessionAttributesUpdateTimer->start(20); } +#if HAVE_QTMULTIMEDIA void Vt102Emulation::deletePlayer(QMediaPlayer::MediaStatus mediaStatus) { if (mediaStatus == QMediaPlayer::EndOfMedia || mediaStatus == QMediaPlayer::InvalidMedia) { @@ -1342,6 +1349,7 @@ void Vt102Emulation::deletePlayer(QMediaPlayer::MediaStatus mediaStatus) player = nullptr; } } +#endif void Vt102Emulation::updateSessionAttributes() { diff --git a/local/recipes/kde/konsole/source/src/Vt102Emulation.h b/local/recipes/kde/konsole/source/src/Vt102Emulation.h index 665e9f026..3784d60f6 100644 --- a/local/recipes/kde/konsole/source/src/Vt102Emulation.h +++ b/local/recipes/kde/konsole/source/src/Vt102Emulation.h @@ -9,9 +9,12 @@ #define VT102EMULATION_H // Qt +#include "config-konsole.h" #include #include +#if HAVE_QTMULTIMEDIA #include +#endif #include #include #include @@ -100,7 +103,9 @@ private Q_SLOTS: // pair in _pendingSessionAttributesUpdates. // Used to buffer multiple attribute updates in the current session void updateSessionAttributes(); +#if HAVE_QTMULTIMEDIA void deletePlayer(QMediaPlayer::MediaStatus); +#endif private: unsigned int applyCharset(uint c); @@ -315,7 +320,9 @@ private: // For kitty graphics protocol - image cache int getFreeGraphicsImageId(); +#if HAVE_QTMULTIMEDIA QMediaPlayer *player; +#endif }; } diff --git a/local/recipes/kde/konsole/source/src/colorscheme/ColorSchemeWallpaper.cpp b/local/recipes/kde/konsole/source/src/colorscheme/ColorSchemeWallpaper.cpp index fda45f774..bbbbb23b6 100644 --- a/local/recipes/kde/konsole/source/src/colorscheme/ColorSchemeWallpaper.cpp +++ b/local/recipes/kde/konsole/source/src/colorscheme/ColorSchemeWallpaper.cpp @@ -201,11 +201,11 @@ QImage ColorSchemeWallpaper::FlipImage(const QImage image, const ColorSchemeWall { switch (flipType) { case Horizontal: - return image.mirrored(true, false); + return image.flipped(Qt::Horizontal); case Vertical: - return image.mirrored(false, true); + return image.flipped(Qt::Vertical); case Both: - return image.mirrored(true, true); + return image.flipped(Qt::Horizontal | Qt::Vertical); default: return image; } diff --git a/local/recipes/kde/konsole/source/src/config-konsole.h.cmake b/local/recipes/kde/konsole/source/src/config-konsole.h.cmake index a1702d8ed..3550fe171 100644 --- a/local/recipes/kde/konsole/source/src/config-konsole.h.cmake +++ b/local/recipes/kde/konsole/source/src/config-konsole.h.cmake @@ -17,3 +17,7 @@ /* Defined if system has the malloc_trim function, which is a GNU extension */ #cmakedefine01 HAVE_MALLOC_TRIM + +#cmakedefine01 HAVE_QTMULTIMEDIA + +#cmakedefine01 HAVE_QTPRINTSUPPORT diff --git a/local/recipes/kde/konsole/source/src/filterHotSpots/FileFilter.cpp b/local/recipes/kde/konsole/source/src/filterHotSpots/FileFilter.cpp index 6a00c558c..2e1411492 100644 --- a/local/recipes/kde/konsole/source/src/filterHotSpots/FileFilter.cpp +++ b/local/recipes/kde/konsole/source/src/filterHotSpots/FileFilter.cpp @@ -93,7 +93,7 @@ QSharedPointer FileFilter::newHotSpot(int startLine, int startColumn, i // '.' and '..' could be valid hotspots, but '..................' most likely isn't static const QRegularExpression allDotRe{QRegularExpression::anchoredPattern(QStringLiteral("\\.{3}"))}; - if (allDotRe.match(filename).hasMatch()) { + if (allDotRe.matchView(filename).hasMatch()) { return nullptr; } diff --git a/local/recipes/kde/konsole/source/src/plugins/QuickCommands/filtermodel.cpp b/local/recipes/kde/konsole/source/src/plugins/QuickCommands/filtermodel.cpp index 28d8bd70f..8af5057b1 100644 --- a/local/recipes/kde/konsole/source/src/plugins/QuickCommands/filtermodel.cpp +++ b/local/recipes/kde/konsole/source/src/plugins/QuickCommands/filtermodel.cpp @@ -33,8 +33,9 @@ bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParen void FilterModel::setInvertFilter(bool invert) { + beginFilterChange(); m_invertFilter = invert; - invalidateFilter(); + endFilterChange(QSortFilterProxyModel::Direction::Rows); } #include "moc_filtermodel.cpp" diff --git a/local/recipes/kde/konsole/source/src/plugins/QuickCommands/quickcommandswidget.cpp b/local/recipes/kde/konsole/source/src/plugins/QuickCommands/quickcommandswidget.cpp index 839910614..366f7defc 100644 --- a/local/recipes/kde/konsole/source/src/plugins/QuickCommands/quickcommandswidget.cpp +++ b/local/recipes/kde/konsole/source/src/plugins/QuickCommands/quickcommandswidget.cpp @@ -314,7 +314,11 @@ void QuickCommandsWidget::runShellCheck() } QTemporaryFile file; - file.open(); + if (!file.open()) { + ui->warning->setPlainText(file.errorString()); + ui->tabWidget->setTabText(1, i18n("Warnings (*)")); + return; + } QTextStream ts(&file); ts << "#!/bin/bash\n"; diff --git a/local/recipes/kde/konsole/source/src/plugins/SSHManager/sshmanagerfiltermodel.cpp b/local/recipes/kde/konsole/source/src/plugins/SSHManager/sshmanagerfiltermodel.cpp index c3b4aa464..a51502d77 100644 --- a/local/recipes/kde/konsole/source/src/plugins/SSHManager/sshmanagerfiltermodel.cpp +++ b/local/recipes/kde/konsole/source/src/plugins/SSHManager/sshmanagerfiltermodel.cpp @@ -31,8 +31,9 @@ bool SSHManagerFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &s void SSHManagerFilterModel::setInvertFilter(bool invert) { + beginFilterChange(); m_invertFilter = invert; - invalidateFilter(); + endFilterChange(QSortFilterProxyModel::Direction::Rows); } #include "moc_sshmanagerfiltermodel.cpp" diff --git a/local/recipes/kde/konsole/source/src/session/SessionController.cpp b/local/recipes/kde/konsole/source/src/session/SessionController.cpp index 4dccd678d..3c614caf0 100644 --- a/local/recipes/kde/konsole/source/src/session/SessionController.cpp +++ b/local/recipes/kde/konsole/source/src/session/SessionController.cpp @@ -8,6 +8,8 @@ // Own #include "SessionController.h" +#include "config-konsole.h" + #include "profile/ProfileManager.h" #include "terminalDisplay/TerminalColor.h" #include "terminalDisplay/TerminalFonts.h" @@ -145,7 +147,9 @@ SessionController::SessionController(Session *sessionParam, TerminalDisplay *vie setupExtraActions(); } +#if HAVE_QTPRINTSUPPORT connect(this, &SessionController::requestPrint, view(), &TerminalDisplay::printScreen); +#endif actionCollection()->addAssociatedWidget(viewParam); @@ -730,9 +734,11 @@ void SessionController::setupCommonActions() action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S)); #endif +#if HAVE_QTPRINTSUPPORT action = KStandardAction::print(this, &SessionController::requestPrint, collection); action->setText(i18n("&Print Screen...")); collection->setDefaultShortcut(action, Konsole::ACCEL | Qt::Key_P); +#endif action = collection->addAction(QStringLiteral("adjust-history"), this, &SessionController::showHistoryOptions); action->setText(i18n("Adjust Scrollback...")); diff --git a/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.cpp b/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.cpp index 47cde079f..de55a0a35 100644 --- a/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.cpp +++ b/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.cpp @@ -55,7 +55,9 @@ #include "../characters/ExtendedCharTable.h" #include "../characters/LineBlockCharacters.h" #include "../decoders/PlainTextDecoder.h" +#if HAVE_QTPRINTSUPPORT #include "../widgets/KonsolePrintManager.h" +#endif #include "../widgets/TerminalDisplayAccessible.h" #include "EscapeSequenceUrlExtractor.h" #include "PrintOptions.h" @@ -308,6 +310,7 @@ TerminalDisplay::TerminalDisplay(QWidget *parent) _terminalPainter = new TerminalPainter(this); +#if HAVE_QTPRINTSUPPORT auto ldrawBackground = [this](QPainter &painter, const QRect &rect, const QColor &backgroundColor, bool useOpacitySetting) { _terminalPainter->drawBackground(painter, rect, backgroundColor, useOpacitySetting); }; @@ -319,6 +322,7 @@ TerminalDisplay::TerminalDisplay(QWidget *parent) }; _printManager.reset(new KonsolePrintManager(ldrawBackground, ldrawContents, lgetBackgroundColor)); +#endif ubidi = ubidi_open(); } @@ -2305,7 +2309,7 @@ void TerminalDisplay::doPaste(QString text, bool appendReturn) if (isUnsafe(c)) { const QString sequence = charToSequence(c); const QString description = characterDescriptions.value(c.unicode(), QString()); - QString entry = QStringLiteral("U+%1").arg(c.unicode(), 4, 16, QLatin1Char('0')); + QString entry = QStringLiteral("U+%1").arg(static_cast(c.unicode()), 4, 16, QLatin1Char('0')); if (!sequence.isEmpty()) { entry += QStringLiteral("\t%1").arg(sequence); } @@ -3182,6 +3186,7 @@ void TerminalDisplay::applyProfile(const Profile::Ptr &profile) void TerminalDisplay::printScreen() { +#if HAVE_QTPRINTSUPPORT auto lprintContent = [this](QPainter &painter, bool friendly) { QPoint columnLines(_usedLines, _usedColumns); auto lfontget = [this]() { @@ -3194,6 +3199,7 @@ void TerminalDisplay::printScreen() _printManager->printContent(painter, friendly, columnLines, lfontget, lfontset); }; _printManager->printRequest(lprintContent, this); +#endif } Character TerminalDisplay::getCursorCharacter(int column, int line) diff --git a/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.h b/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.h index 0a28c9428..15392aa53 100644 --- a/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.h +++ b/local/recipes/kde/konsole/source/src/terminalDisplay/TerminalDisplay.h @@ -8,6 +8,8 @@ #ifndef TERMINALDISPLAY_H #define TERMINALDISPLAY_H +#include "config-konsole.h" + // Qt #include #include @@ -834,7 +836,9 @@ private: TerminalColor *_terminalColor = nullptr; std::unique_ptr _terminalFont; +#if HAVE_QTPRINTSUPPORT std::unique_ptr _printManager; +#endif bool _semanticUpDown; bool _semanticInputClick;