From 6eb5a6d9f165a8cab09dedf60bac367d9d27c559 Mon Sep 17 00:00:00 2001 From: Gres Date: Sat, 28 Jan 2023 12:17:49 +0300 Subject: [PATCH] Port to qt6 --- screen-translator.pro | 2 +- src/correct/hunspellcorrector.cpp | 20 +++++++++------- src/correct/hunspellcorrector.h | 3 ++- src/manager.cpp | 4 +++- src/ocr/recognizerworker.h | 2 ++ src/represent/resultwidget.cpp | 3 +-- src/service/globalaction.cpp | 40 +++++++++++++++++++------------ src/service/globalaction.h | 2 +- src/service/keysequenceedit.cpp | 2 +- src/settings.cpp | 2 +- src/settingseditor.cpp | 5 ++-- src/stfwd.h | 4 +++- src/substitutionstable.cpp | 2 +- src/translate/translator.cpp | 1 + src/translate/webpage.cpp | 15 ++++++++---- src/translate/webpage.h | 2 +- 16 files changed, 68 insertions(+), 41 deletions(-) diff --git a/screen-translator.pro b/screen-translator.pro index 0963b50..23de681 100644 --- a/screen-translator.pro +++ b/screen-translator.pro @@ -14,7 +14,7 @@ win32{ LIBS += -lUser32 } linux{ - QT += x11extras +# QT += x11extras LIBS += -lX11 } diff --git a/src/correct/hunspellcorrector.cpp b/src/correct/hunspellcorrector.cpp index 5509228..4844c56 100644 --- a/src/correct/hunspellcorrector.cpp +++ b/src/correct/hunspellcorrector.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include static int levenshteinDistance(const QString &source, const QString &target) { @@ -106,19 +106,21 @@ QString HunspellCorrector::correct(const QString &original) { SOFT_ASSERT(engine_, return original); - const auto codec = - QTextCodec::codecForName(engine_->get_dict_encoding().c_str()); - SOFT_ASSERT(codec, return original); + const auto encoding = + QStringConverter::encodingForName(engine_->get_dict_encoding().c_str()); + SOFT_ASSERT(encoding, return original); + auto codec = QStringEncoder(*encoding); QString result; QString word; QString separator; - for (auto i = 0, end = original.size(); i < end; ++i) { + + for (auto i = 0ll, end = original.size(); i < end; ++i) { const auto ch = original[i]; if (ch.isPunct() || ch.isSpace()) { if (!word.isEmpty()) { - correctWord(word, *codec); + correctWord(word, codec); result += word; word.clear(); } @@ -139,7 +141,7 @@ QString HunspellCorrector::correct(const QString &original) } if (!word.isEmpty()) { - correctWord(word, *codec); + correctWord(word, codec); result += word; } result += separator; @@ -147,12 +149,12 @@ QString HunspellCorrector::correct(const QString &original) return result; } -void HunspellCorrector::correctWord(QString &word, QTextCodec &codec) const +void HunspellCorrector::correctWord(QString &word, QStringEncoder &codec) const { if (word.isEmpty()) return; - const auto stdWord = codec.fromUnicode(word).toStdString(); + const auto stdWord = codec(word).data.toStdString(); if (engine_->spell(stdWord)) return; diff --git a/src/correct/hunspellcorrector.h b/src/correct/hunspellcorrector.h index 58c728c..ca67386 100644 --- a/src/correct/hunspellcorrector.h +++ b/src/correct/hunspellcorrector.h @@ -5,6 +5,7 @@ #include class Hunspell; +class QStringEncoder; class HunspellCorrector { @@ -19,7 +20,7 @@ public: private: void init(const QString& path); - void correctWord(QString& word, QTextCodec& codec) const; + void correctWord(QString& word, QStringEncoder& codec) const; std::unique_ptr engine_; QString error_; diff --git a/src/manager.cpp b/src/manager.cpp index 2ddb072..9aa037a 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include namespace @@ -187,7 +188,8 @@ bool Manager::setupTrace(bool isOn) const auto traceFile = QStandardPaths::writableLocation(QStandardPaths::TempLocation) + QLatin1String("/screen-translator-") + - QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"); + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss") + + QLatin1String(".txt"); if (!debug::setTraceFileName(traceFile)) { QMessageBox::warning( diff --git a/src/ocr/recognizerworker.h b/src/ocr/recognizerworker.h index 74350b3..006b664 100644 --- a/src/ocr/recognizerworker.h +++ b/src/ocr/recognizerworker.h @@ -4,6 +4,8 @@ #include +Q_MOC_INCLUDE("tesseract.h") + class Tesseract; class RecognizeWorker : public QObject diff --git a/src/represent/resultwidget.cpp b/src/represent/resultwidget.cpp index 26055df..7022e18 100644 --- a/src/represent/resultwidget.cpp +++ b/src/represent/resultwidget.cpp @@ -7,7 +7,6 @@ #include #include -#include #include #include #include @@ -70,7 +69,7 @@ ResultWidget::ResultWidget(Manager &manager, Representer &representer, layout->addWidget(separator_); layout->addWidget(translated_); - layout->setMargin(0); + layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); updateSettings(); diff --git a/src/service/globalaction.cpp b/src/service/globalaction.cpp index e6cd2c5..52cd1dd 100644 --- a/src/service/globalaction.cpp +++ b/src/service/globalaction.cpp @@ -77,7 +77,7 @@ void GlobalAction::triggerHotKey(quint32 nativeKey, quint32 nativeMods) #ifdef Q_OS_LINUX #include #include -#include +#include namespace service { @@ -101,18 +101,22 @@ static int customHandler(Display *display, XErrorEvent *event) bool GlobalAction::registerHotKey(quint32 nativeKey, quint32 nativeMods) { - Display *display = QX11Info::display(); - Window window = QX11Info::appRootWindow(); + auto nativeInterface = + qApp->nativeInterface(); + SOFT_ASSERT(nativeInterface, return false); + Display *display = nativeInterface->display(); + SOFT_ASSERT(display, return false); Bool owner = True; int pointer = GrabModeAsync; int keyboard = GrabModeAsync; error = false; int (*handler)(Display * display, XErrorEvent * event) = XSetErrorHandler(customHandler); - XGrabKey(display, nativeKey, nativeMods, window, owner, pointer, keyboard); + XGrabKey(display, nativeKey, nativeMods, DefaultRootWindow(display), owner, + pointer, keyboard); // allow numlock - XGrabKey(display, nativeKey, nativeMods | Mod2Mask, window, owner, pointer, - keyboard); + XGrabKey(display, nativeKey, nativeMods | Mod2Mask, + DefaultRootWindow(display), owner, pointer, keyboard); XSync(display, False); XSetErrorHandler(handler); return !error; @@ -120,21 +124,25 @@ bool GlobalAction::registerHotKey(quint32 nativeKey, quint32 nativeMods) bool GlobalAction::unregisterHotKey(quint32 nativeKey, quint32 nativeMods) { - Display *display = QX11Info::display(); - Window window = QX11Info::appRootWindow(); + auto nativeInterface = + qApp->nativeInterface(); + SOFT_ASSERT(nativeInterface, return false); + Display *display = nativeInterface->display(); + SOFT_ASSERT(display, return false); error = false; int (*handler)(Display * display, XErrorEvent * event) = XSetErrorHandler(customHandler); - XUngrabKey(display, nativeKey, nativeMods, window); + XUngrabKey(display, nativeKey, nativeMods, DefaultRootWindow(display)); // allow numlock - XUngrabKey(display, nativeKey, nativeMods | Mod2Mask, window); + XUngrabKey(display, nativeKey, nativeMods | Mod2Mask, + DefaultRootWindow(display)); XSync(display, False); XSetErrorHandler(handler); return !error; } bool GlobalAction::nativeEventFilter(const QByteArray &eventType, void *message, - long *result) + qintptr *result) { Q_UNUSED(eventType); Q_UNUSED(result); @@ -151,7 +159,9 @@ bool GlobalAction::nativeEventFilter(const QByteArray &eventType, void *message, quint32 GlobalAction::nativeKeycode(Qt::Key key) { - Display *display = QX11Info::display(); + auto nativeInterface = + qApp->nativeInterface(); + Display *display = nativeInterface->display(); KeySym keySym = XStringToKeysym(qPrintable(QKeySequence(key).toString())); if (XKeysymToString(keySym) == nullptr) { keySym = QChar(key).unicode(); @@ -191,7 +201,7 @@ bool GlobalAction::unregisterHotKey(quint32 nativeKey, quint32 nativeMods) } bool GlobalAction::nativeEventFilter(const QByteArray &eventType, void *message, - long *result) + qintptr *result) { Q_UNUSED(eventType); Q_UNUSED(result); @@ -407,8 +417,8 @@ bool GlobalAction::unregisterHotKey(quint32 nativeKey, quint32 nativeMods) } } -bool GlobalAction::nativeEventFilter(const QByteArray & /*eventType*/, - void * /*message*/, long * /*result*/) +bool GlobalAction::nativeEventFilter(const QByteArray &eventType, void *message, + qintptr *result) { return false; } diff --git a/src/service/globalaction.h b/src/service/globalaction.h index 90fba80..d078f6f 100644 --- a/src/service/globalaction.h +++ b/src/service/globalaction.h @@ -11,7 +11,7 @@ class GlobalAction : public QAbstractNativeEventFilter { public: bool nativeEventFilter(const QByteArray &eventType, void *message, - long *result); + qintptr *result) override; static void init(); static bool makeGlobal(QAction *action); diff --git a/src/service/keysequenceedit.cpp b/src/service/keysequenceedit.cpp index b072b7f..45a9307 100644 --- a/src/service/keysequenceedit.cpp +++ b/src/service/keysequenceedit.cpp @@ -63,7 +63,7 @@ void KeySequenceEdit::keyPressEvent(QKeyEvent *event) return; } - QKeySequence seq = event->modifiers() + event->key(); + QKeySequence seq(QKeyCombination(event->modifiers(), Qt::Key(event->key()))); setKeySequence(seq, false); event->accept(); } diff --git a/src/settings.cpp b/src/settings.cpp index 8b073af..f553e5d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -85,7 +85,7 @@ Substitutions unpackSubstitutions(const QStringList& raw) return {}; Substitutions result; - for (auto i = 0, end = raw.size(); i < end; i += 3) { + for (auto i = 0ll, end = raw.size(); i < end; i += 3) { result.emplace(raw[i], Substitution{raw[i + 1], raw[i + 2]}); } return result; diff --git a/src/settingseditor.cpp b/src/settingseditor.cpp index 6b4b1d1..e00f74e 100644 --- a/src/settingseditor.cpp +++ b/src/settingseditor.cpp @@ -9,6 +9,7 @@ #include "widgetstate.h" #include +#include #include namespace @@ -112,10 +113,10 @@ SettingsEditor::SettingsEditor(Manager &manager, update::Updater &updater) proxyTypes.insert(ProxyType::Http, tr("HTTP")); ui->proxyTypeCombo->addItems(proxyTypes.values()); - QRegExp urlRegexp( + QRegularExpression urlRegexp( R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)"); ui->proxyHostEdit->setValidator( - new QRegExpValidator(urlRegexp, ui->proxyHostEdit)); + new QRegularExpressionValidator(urlRegexp, ui->proxyHostEdit)); ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); } diff --git a/src/stfwd.h b/src/stfwd.h index f257727..a8c39e1 100644 --- a/src/stfwd.h +++ b/src/stfwd.h @@ -3,7 +3,9 @@ #include class QString; -class QStringList; +template +class QList; +using QStringList = QList; class Manager; class Settings; diff --git a/src/substitutionstable.cpp b/src/substitutionstable.cpp index 0f3662e..4d825bb 100644 --- a/src/substitutionstable.cpp +++ b/src/substitutionstable.cpp @@ -55,7 +55,7 @@ public: {"\\\\", "\\"}, {"\\n", "\n"}, }; - for (auto i = 0, end = text.size() - 1; i < end; ++i) { + for (auto i = 0ll, end = text.size() - 1; i < end; ++i) { const auto pair = text.mid(i, 2); const auto replaced = replacements.value(pair); if (replaced.isEmpty()) diff --git a/src/translate/translator.cpp b/src/translate/translator.cpp index 5692d18..d8c19d1 100644 --- a/src/translate/translator.cpp +++ b/src/translate/translator.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include diff --git a/src/translate/webpage.cpp b/src/translate/webpage.cpp index 6d91079..4fc05bd 100644 --- a/src/translate/webpage.cpp +++ b/src/translate/webpage.cpp @@ -33,6 +33,9 @@ WebPage::WebPage(Translator &translator, const QString &script, channel->registerObject("proxy", proxy_.get()); setWebChannel(channel, QWebEngineScript::ScriptWorldId::UserWorld); + connect(this, &QWebEnginePage::certificateError, // + this, &WebPage::handleCertificateError); + // to load scripts setUrl(QUrl::fromUserInput("about:blank")); } @@ -186,11 +189,15 @@ void WebPage::javaScriptConsoleMessage( emit log(QString("%1: %2 %3").arg(sourceID).arg(lineNumber).arg(message)); } -bool WebPage::certificateError(const QWebEngineCertificateError &error) +void WebPage::handleCertificateError(const QWebEngineCertificateError &error) { - qDebug() << "certificateError" << error.url() << error.error() - << error.errorDescription(); - return ignoreSslErrors_; + qDebug() << "certificateError" << error.url() << error.type() + << error.description(); + if (ignoreSslErrors_) { + const_cast(error).acceptCertificate(); + return; + } + const_cast(error).rejectCertificate(); } void WebPage::authenticateProxy(const QUrl & /*requestUrl*/, diff --git a/src/translate/webpage.h b/src/translate/webpage.h index 9931752..bd5f3c9 100644 --- a/src/translate/webpage.h +++ b/src/translate/webpage.h @@ -34,7 +34,7 @@ protected: void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID) override; - bool certificateError(const QWebEngineCertificateError &error) override; + void handleCertificateError(const QWebEngineCertificateError &error); private: void authenticateProxy(const QUrl &requestUrl, QAuthenticator *authenticator,