From 9c29fce23a0fc8394f7bfbd12da1a6c530e5c20e Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Fri, 5 Jan 2024 17:02:13 +0100 Subject: [PATCH] obsolete kmameleon [release 0.243-2mamba;Sun Jun 11 2023] --- qmc2-0.243-webengine.patch | 1245 ++++++++++++++++++++++++++++++++++++ qmc2.spec | 15 +- 2 files changed, 1257 insertions(+), 3 deletions(-) create mode 100644 qmc2-0.243-webengine.patch diff --git a/qmc2-0.243-webengine.patch b/qmc2-0.243-webengine.patch new file mode 100644 index 0000000..718b842 --- /dev/null +++ b/qmc2-0.243-webengine.patch @@ -0,0 +1,1245 @@ +From 5b423e9aea7bc672b879359871a5c4c2b8a50e8d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ren=C3=A9=20Reucher?= +Date: Tue, 31 May 2022 19:20:34 +0200 +Subject: [PATCH] wip: first version with support for QWebEngine instead of + QWebKit + +--- + qmc2.pro | 2 +- + src/htmleditor/htmleditor.cpp | 178 ++++++++++++++++++++-------------- + src/htmleditor/htmleditor.ui | 74 +++++++------- + src/macros.h | 3 - + src/miniwebbrowser.cpp | 171 +++++++++++++++++--------------- + src/miniwebbrowser.h | 15 ++- + src/options.cpp | 19 ++-- + src/qmc2main.cpp | 12 ++- + 9 files changed, 261 insertions(+), 218 deletions(-) + +diff --git a/qmc2.pro b/qmc2.pro +index 46c736d60..15eae4c44 100644 +--- a/qmc2.pro ++++ b/qmc2.pro +@@ -1,6 +1,6 @@ + # general project settings + isEmpty(TARGET):TARGET = qmc2 +-QT += core gui widgets xml xmlpatterns network sql svg testlib webkitwidgets ++QT += core gui widgets xml xmlpatterns network sql svg testlib webenginewidgets + win32 { + QT += winextras + } +diff --git a/src/htmleditor/htmleditor.cpp b/src/htmleditor/htmleditor.cpp +index 2dff0d3cc..deb0f747b 100644 +--- a/src/htmleditor/htmleditor.cpp ++++ b/src/htmleditor/htmleditor.cpp +@@ -46,7 +46,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include // std::sort() +@@ -120,7 +120,6 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : + { + ui->setupUi(this); + +- // replace the standard QWebView with the MiniWebBrowser's tweaked one + ui->verticalLayoutWYSIWYG->removeWidget(ui->webView); + delete ui->webView; + ui->webView = new BrowserWidget(ui->tabWYSIWYG, 0); +@@ -224,6 +223,7 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : + connect(zoomSlider, SIGNAL(valueChanged(int)), SLOT(changeZoom(int))); + ui->standardToolBar->insertWidget(ui->actionZoomIn, zoomSlider); + ++ /* + #if defined(QMC2_BROWSER_PLUGINS_ENABLED) + ui->webView->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + #else +@@ -231,6 +231,7 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : + #endif + ui->webView->page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, false); + ui->webView->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); ++ */ + + connect(ui->webView, SIGNAL(loadStarted()), this, SLOT(setLoadActive())); + connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(setLoadInactive())); +@@ -260,19 +261,17 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : + connect(ui->actionZoomOut, SIGNAL(triggered()), SLOT(zoomOut())); + connect(ui->actionZoomIn, SIGNAL(triggered()), SLOT(zoomIn())); + +- // these are forwarded to the internal QWebView +- FORWARD_ACTION(ui->actionEditUndo, QWebPage::Undo); +- FORWARD_ACTION(ui->actionEditRedo, QWebPage::Redo); +- FORWARD_ACTION(ui->actionEditCut, QWebPage::Cut); +- FORWARD_ACTION(ui->actionEditCopy, QWebPage::Copy); +- FORWARD_ACTION(ui->actionEditPaste, QWebPage::Paste); +- FORWARD_ACTION(ui->actionFormatBold, QWebPage::ToggleBold); +- FORWARD_ACTION(ui->actionFormatItalic, QWebPage::ToggleItalic); +- FORWARD_ACTION(ui->actionFormatUnderline, QWebPage::ToggleUnderline); +- +- // Qt 4.5.0 has a bug: always returns 0 for QWebPage::SelectAll +- connect(ui->actionEditSelectAll, SIGNAL(triggered()), SLOT(editSelectAll())); +- // FIXME: still required? ++ // these are forwarded to the internal QWebEngineView ++ FORWARD_ACTION(ui->actionEditUndo, QWebEnginePage::Undo); ++ FORWARD_ACTION(ui->actionEditRedo, QWebEnginePage::Redo); ++ FORWARD_ACTION(ui->actionEditCut, QWebEnginePage::Cut); ++ FORWARD_ACTION(ui->actionEditCopy, QWebEnginePage::Copy); ++ FORWARD_ACTION(ui->actionEditPaste, QWebEnginePage::Paste); ++ /* ++ FORWARD_ACTION(ui->actionFormatBold, QWebEnginePage::ToggleBold); ++ FORWARD_ACTION(ui->actionFormatItalic, QWebEnginePage::ToggleItalic); ++ FORWARD_ACTION(ui->actionFormatUnderline, QWebEnginePage::ToggleUnderline); ++ */ + + connect(ui->actionStyleParagraph, SIGNAL(triggered()), SLOT(styleParagraph())); + connect(ui->actionStyleHeading1, SIGNAL(triggered()), SLOT(styleHeading1())); +@@ -310,27 +309,31 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : + connect(ui->webView->page(), SIGNAL(linkHovered(const QString &, const QString &, const QString &)), SLOT(linkHovered(const QString &, const QString &, const QString &))); + + // this effectively *disables* internal link-following +- ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); ++ //ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + connect(ui->webView, SIGNAL(linkClicked(QUrl)), SLOT(openLink(QUrl))); +- ui->webView->pageAction(QWebPage::OpenImageInNewWindow)->setVisible(false); +- ui->webView->pageAction(QWebPage::DownloadImageToDisk)->setVisible(false); +- ui->webView->pageAction(QWebPage::OpenFrameInNewWindow)->setVisible(false); +- ui->webView->pageAction(QWebPage::OpenLinkInNewWindow)->setVisible(false); +- ui->webView->pageAction(QWebPage::OpenLink)->setVisible(false); +- ui->webView->pageAction(QWebPage::DownloadLinkToDisk)->setVisible(false); +- ui->webView->pageAction(QWebPage::Back)->setVisible(false); +- ui->webView->pageAction(QWebPage::Forward)->setVisible(false); +- ui->webView->pageAction(QWebPage::Stop)->setVisible(false); +- ui->webView->pageAction(QWebPage::Reload)->setVisible(false); ++ //ui->webView->pageAction(QWebEnginePage::OpenImageInNewWindow)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::DownloadImageToDisk)->setVisible(false); ++ //ui->webView->pageAction(QWebEnginePage::OpenFrameInNewWindow)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setVisible(false); ++ //ui->webView->pageAction(QWebEnginePage::OpenLink)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::DownloadLinkToDisk)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::Back)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::Forward)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::Stop)->setVisible(false); ++ ui->webView->pageAction(QWebEnginePage::Reload)->setVisible(false); + + ui->webView->setFocus(); +- ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); ++ if ( actionReadOnly->isChecked() ) ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); ++ else ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); + ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); + + if ( !actionShowHTML->isChecked() ) + showHtmlTab(false); + +- connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); ++ // FIXME ++ //connect(ui->webView->page(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); + + changeZoom(qmc2Config->value(QMC2_FRONTEND_PREFIX + QString("HtmlEditor/%1/Zoom").arg(myEditorName), 100).toInt()); + +@@ -399,22 +402,26 @@ void HtmlEditor::loadFinished(bool) + + void HtmlEditor::setContentEditable(bool readonly) + { +- ui->webView->page()->setContentEditable(!readonly); ++ if ( readonly ) ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); ++ else ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); + ui->plainTextEdit->setReadOnly(readonly); + } + + void HtmlEditor::checkRevertStatus() + { + if ( !fileName.isEmpty() ) { +- bool wasModified; +- if ( loadedContent.isEmpty() ) +- wasModified = false; +- else if ( ui->tabWidget->currentIndex() == 0 ) +- wasModified = loadedContent != ui->webView->page()->mainFrame()->toHtml(); +- else ++ bool wasModified = !loadedContent.isEmpty(); ++ if ( ui->tabWidget->currentIndex() == 0 ) { ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ wasModified = loadedContent != data; ++ } else + wasModified = loadedContent != ui->plainTextEdit->toPlainText(); +- +- if ( ui->webView->page()->mainFrame()->toHtml() != emptyContent && wasModified ) { ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ if ( data != emptyContent && wasModified ) { + QFile f(fileName); + ui->actionFileRevert->setVisible(f.exists()); + } else +@@ -446,13 +453,16 @@ QString &HtmlEditor::noScript(QString &data) + + void HtmlEditor::fileNew() + { +- ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); ++ if ( actionReadOnly->isChecked() ) ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); ++ else ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); + ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); + + if ( !isEmbeddedEditor ) + setCurrentFileName(QString()); + +- // quirk in QWebView: need an initial mouse click to show the cursor ++ // quirk in QWebEngineView: need an initial mouse click to show the cursor + int mx = ui->webView->width() / 2; + int my = ui->webView->height() / 2; + QPoint center = QPoint(mx, my); +@@ -510,11 +520,12 @@ void HtmlEditor::fileOpenInBrowser() + } + connect(webBrowser->webViewBrowser->page(), SIGNAL(windowCloseRequested()), webBrowser, SLOT(close())); + if ( ui->tabWidget->currentIndex() == 1 ) { +- ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); ++ ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); + wysiwygDirty = false; + } +- QString data(ui->webView->page()->mainFrame()->toHtml()); +- webBrowser->webViewBrowser->setHtml(noScript(data)); ++ QString data("%1"); ++ webBrowser->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ webBrowser->webViewBrowser->page()->setHtml(noScript(data)); + if ( !fileName.isEmpty() && QFile(fileName).exists() ) { + webBrowser->homeUrl = QUrl::fromUserInput(fileName); + webBrowser->comboBoxURL->lineEdit()->setText(webBrowser->homeUrl.toString()); +@@ -540,10 +551,11 @@ bool HtmlEditor::fileSave() + bool success = file.open(QIODevice::WriteOnly); + if ( success ) { + if ( ui->tabWidget->currentIndex() == 1 ) { +- ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); ++ ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); + wysiwygDirty = false; + } +- QString content(ui->webView->page()->mainFrame()->toHtml()); ++ QString content("%1"); ++ ui->webView->page()->toHtml([content](const QString &result) { content.arg(result); }); + QTextStream ts(&file); + ts << noScript(content); + ts.flush(); +@@ -572,10 +584,11 @@ bool HtmlEditor::fileSaveAs() + bool success = file.open(QIODevice::WriteOnly); + if ( success ) { + if ( ui->tabWidget->currentIndex() == 1 ) { +- ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); ++ ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); + wysiwygDirty = false; + } +- QString content(ui->webView->page()->mainFrame()->toHtml()); ++ QString content("%1"); ++ ui->webView->page()->toHtml([content](const QString &result) { content.arg(result); }); + QTextStream ts(&file); + ts << noScript(content); + ts.flush(); +@@ -751,38 +764,41 @@ void HtmlEditor::zoomIn() + + void HtmlEditor::editSelectAll() + { +- ui->webView->triggerPageAction(QWebPage::SelectAll); ++ ui->webView->triggerPageAction(QWebEnginePage::SelectAll); + } + + void HtmlEditor::execCommand(const QString &cmd) + { +- QWebFrame *frame = ui->webView->page()->mainFrame(); ++ QWebEnginePage *page = ui->webView->page(); + QString js(QString("document.execCommand(\"%1\", false, null)").arg(cmd)); +- frame->evaluateJavaScript(js); ++ page->runJavaScript(js); + localModified = true; + } + + void HtmlEditor::execCommand(const QString &cmd, const QString &arg) + { +- QWebFrame *frame = ui->webView->page()->mainFrame(); ++ QWebEnginePage *page = ui->webView->page(); + QString js(QString("document.execCommand(\"%1\", false, \"%2\")").arg(cmd).arg(arg)); +- frame->evaluateJavaScript(js); ++ page->runJavaScript(js); + localModified = true; + } + + bool HtmlEditor::queryCommandState(const QString &cmd) + { +- QWebFrame *frame = ui->webView->page()->mainFrame(); ++ QWebEnginePage *page = ui->webView->page(); + QString js(QString("document.queryCommandState(\"%1\", false, null)").arg(cmd)); +- QVariant result = frame->evaluateJavaScript(js); +- return result.toString().simplified().toLower() == "true"; ++ QString result("%1"); ++ page->runJavaScript(js, [result](const QVariant &r) { result.arg(r.toString()); }); ++ return result.simplified().toLower() == "true"; + } + + void HtmlEditor::styleParagraph() + { + execCommand("formatBlock", "p"); + if ( generateEmptyContent ) { +- emptyContent = ui->webView->page()->mainFrame()->toHtml(); ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ emptyContent = data; + generateEmptyContent = false; + } + } +@@ -907,14 +923,16 @@ void HtmlEditor::formatBackgroundColor() + + void HtmlEditor::adjustActions() + { +- FOLLOW_ENABLE(ui->actionEditUndo, QWebPage::Undo); +- FOLLOW_ENABLE(ui->actionEditRedo, QWebPage::Redo); +- FOLLOW_ENABLE(ui->actionEditCut, QWebPage::Cut); +- FOLLOW_ENABLE(ui->actionEditCopy, QWebPage::Copy); +- FOLLOW_ENABLE(ui->actionEditPaste, QWebPage::Paste); +- FOLLOW_CHECK(ui->actionFormatBold, QWebPage::ToggleBold); +- FOLLOW_CHECK(ui->actionFormatItalic, QWebPage::ToggleItalic); +- FOLLOW_CHECK(ui->actionFormatUnderline, QWebPage::ToggleUnderline); ++ FOLLOW_ENABLE(ui->actionEditUndo, QWebEnginePage::Undo); ++ FOLLOW_ENABLE(ui->actionEditRedo, QWebEnginePage::Redo); ++ FOLLOW_ENABLE(ui->actionEditCut, QWebEnginePage::Cut); ++ FOLLOW_ENABLE(ui->actionEditCopy, QWebEnginePage::Copy); ++ FOLLOW_ENABLE(ui->actionEditPaste, QWebEnginePage::Paste); ++ /* ++ FOLLOW_CHECK(ui->actionFormatBold, QWebEnginePage::ToggleBold); ++ FOLLOW_CHECK(ui->actionFormatItalic, QWebEnginePage::ToggleItalic); ++ FOLLOW_CHECK(ui->actionFormatUnderline, QWebEnginePage::ToggleUnderline); ++ */ + + ui->actionFormatStrikethrough->setChecked(queryCommandState("strikeThrough")); + ui->actionFormatNumberedList->setChecked(queryCommandState("insertOrderedList")); +@@ -940,7 +958,7 @@ void HtmlEditor::changeTab(int index) + switch ( index ) { + case 0: + if ( wysiwygDirty ) { +- ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); ++ ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); + wysiwygDirty = false; + } + break; +@@ -948,7 +966,9 @@ void HtmlEditor::changeTab(int index) + case 1: + if ( htmlDirty ) { + ui->plainTextEdit->blockSignals(true); +- ui->plainTextEdit->setPlainText(ui->webView->page()->mainFrame()->toHtml()); ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ ui->plainTextEdit->setPlainText(data); + ui->plainTextEdit->blockSignals(false); + htmlDirty = false; + } +@@ -1021,7 +1041,10 @@ bool HtmlEditor::load(const QString &f) + loadedContent = data; + + ui->webView->setHtml(data); +- ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); ++ if ( actionReadOnly->isChecked() ) ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); ++ else ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); + ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); + + if ( fileName.isEmpty() ) +@@ -1093,11 +1116,16 @@ bool HtmlEditor::loadTemplate(const QString &f) + } + if ( !qmc2CleaningUp && !stopLoading ) { + ui->webView->setHtml(data, QUrl::fromLocalFile(f)); +- ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); ++ if ( actionReadOnly->isChecked() ) ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); ++ else ++ ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); + ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); + if ( fileName.isEmpty() ) + setCurrentFileName(f); +- emptyContent = ui->webView->page()->mainFrame()->toHtml(); ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ emptyContent = data; + adjustHTML(); + } else + emptyContent = "QMC2_INVALID"; +@@ -1107,8 +1135,9 @@ bool HtmlEditor::loadTemplate(const QString &f) + + void HtmlEditor::javaScriptWindowObjectCleared() + { +- ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("qmc2NotesEditorObject", this); +- ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("qmc2NEO", this); ++ // FIXME ++ //ui->webView->page()->addToJavaScriptWindowObject("qmc2NotesEditorObject", this); ++ //ui->webView->page()->addToJavaScriptWindowObject("qmc2NEO", this); + } + + QString HtmlEditor::getIconData() +@@ -1627,18 +1656,17 @@ bool HtmlEditor::save() + if ( emptyContent == "QMC2_INVALID" ) + return true; + +- if ( !ui->webView->page()->isModified() && !ui->plainTextEdit->document()->isModified() && !localModified ) +- return true; +- + if ( fileName.isEmpty() ) + return false; + + if ( ui->tabWidget->currentIndex() == 1 ) { +- ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); ++ ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); + wysiwygDirty = false; + } + +- loadedContent = ui->webView->page()->mainFrame()->toHtml(); ++ QString data("%1"); ++ ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ loadedContent = data; + + if ( loadedContent == emptyContent ) { + QFile f(fileName); +diff --git a/src/htmleditor/htmleditor.ui b/src/htmleditor/htmleditor.ui +index 8f64543bb..1bdab5bfa 100644 +--- a/src/htmleditor/htmleditor.ui ++++ b/src/htmleditor/htmleditor.ui +@@ -41,7 +41,7 @@ + 0 + + +- ++ + + + about:blank +@@ -107,7 +107,7 @@ + Insert &image + + +- ++ + :/htmleditor/images/image-x-generic.png:/htmleditor/images/image-x-generic.png + + +@@ -236,7 +236,7 @@ + + + +- ++ + :/htmleditor/images/document-new.png:/htmleditor/images/document-new.png + + +@@ -254,7 +254,7 @@ + + + +- ++ + :/htmleditor/images/document-new.png:/htmleditor/images/document-new.png + + +@@ -272,7 +272,7 @@ + + + +- ++ + :/htmleditor/images/edit-undo.png:/htmleditor/images/edit-undo.png + + +@@ -290,7 +290,7 @@ + + + +- ++ + :/htmleditor/images/document-open.png:/htmleditor/images/document-open.png + + +@@ -308,7 +308,7 @@ + + + +- ++ + :/htmleditor/images/document-save.png:/htmleditor/images/document-save.png + + +@@ -326,7 +326,7 @@ + + + +- ++ + :/data/img/filesaveas.png:/data/img/filesaveas.png + + +@@ -344,7 +344,7 @@ + + + +- ++ + :/data/img/browser.png:/data/img/browser.png + + +@@ -362,7 +362,7 @@ + + + +- ++ + :/htmleditor/images/edit-undo.png:/htmleditor/images/edit-undo.png + + +@@ -374,7 +374,7 @@ + + + +- ++ + :/htmleditor/images/edit-redo.png:/htmleditor/images/edit-redo.png + + +@@ -386,7 +386,7 @@ + + + +- ++ + :/htmleditor/images/edit-cut.png:/htmleditor/images/edit-cut.png + + +@@ -398,7 +398,7 @@ + + + +- ++ + :/htmleditor/images/edit-copy.png:/htmleditor/images/edit-copy.png + + +@@ -410,7 +410,7 @@ + + + +- ++ + :/htmleditor/images/edit-paste.png:/htmleditor/images/edit-paste.png + + +@@ -422,7 +422,7 @@ + + + +- ++ + :/htmleditor/images/edit-select-all.png:/htmleditor/images/edit-select-all.png + + +@@ -437,7 +437,7 @@ + true + + +- ++ + :/htmleditor/images/format-text-bold.png:/htmleditor/images/format-text-bold.png + + +@@ -452,7 +452,7 @@ + true + + +- ++ + :/htmleditor/images/format-text-italic.png:/htmleditor/images/format-text-italic.png + + +@@ -467,7 +467,7 @@ + true + + +- ++ + :/htmleditor/images/format-text-underline.png:/htmleditor/images/format-text-underline.png + + +@@ -482,7 +482,7 @@ + true + + +- ++ + :/htmleditor/images/format-text-strikethrough.png:/htmleditor/images/format-text-strikethrough.png + + +@@ -494,7 +494,7 @@ + + + +- ++ + :/htmleditor/images/format-justify-left.png:/htmleditor/images/format-justify-left.png + + +@@ -506,7 +506,7 @@ + + + +- ++ + :/htmleditor/images/format-justify-center.png:/htmleditor/images/format-justify-center.png + + +@@ -518,7 +518,7 @@ + + + +- ++ + :/htmleditor/images/format-justify-right.png:/htmleditor/images/format-justify-right.png + + +@@ -530,7 +530,7 @@ + + + +- ++ + :/htmleditor/images/format-justify-fill.png:/htmleditor/images/format-justify-fill.png + + +@@ -542,7 +542,7 @@ + + + +- ++ + :/htmleditor/images/format-indent-more.png:/htmleditor/images/format-indent-more.png + + +@@ -554,7 +554,7 @@ + + + +- ++ + :/htmleditor/images/format-indent-less.png:/htmleditor/images/format-indent-less.png + + +@@ -569,7 +569,7 @@ + true + + +- ++ + :/htmleditor/images/bulleted-list.png:/htmleditor/images/bulleted-list.png + + +@@ -584,7 +584,7 @@ + true + + +- ++ + :/htmleditor/images/numbered-list.png:/htmleditor/images/numbered-list.png + + +@@ -596,7 +596,7 @@ + + + +- ++ + :/htmleditor/images/document-open.png:/htmleditor/images/document-open.png + + +@@ -608,7 +608,7 @@ + + + +- ++ + :/htmleditor/images/text-html.png:/htmleditor/images/text-html.png + + +@@ -620,7 +620,7 @@ + + + +- ++ + :/htmleditor/images/text-html.png:/htmleditor/images/text-html.png + + +@@ -632,7 +632,7 @@ + + + +- ++ + :/htmleditor/images/list-remove.png:/htmleditor/images/list-remove.png + + +@@ -644,7 +644,7 @@ + + + +- ++ + :/htmleditor/images/list-add.png:/htmleditor/images/list-add.png + + +@@ -733,7 +733,7 @@ + + + +- ++ + :/htmleditor/images/insert-html.png:/htmleditor/images/insert-html.png + + +@@ -751,7 +751,7 @@ + + + +- ++ + :/htmleditor/images/insert-table.png:/htmleditor/images/insert-table.png + + +@@ -769,13 +769,13 @@ + + + +- QWebView ++ QWebEngineView + QWidget +-
QtWebKitWidgets/QWebView
++
QWebEngineView
+
+
+ +- ++ + + + +diff --git a/src/macros.h b/src/macros.h +index a7b15451d..66b7534e7 100644 +--- a/src/macros.h ++++ b/src/macros.h +@@ -558,9 +558,6 @@ + // ProjectMESS base URL (default) + #define QMC2_PROJECT_MESS_BASE_URL "http://www.progettoemma.net/mess/gioco.php?game=%1&list=%2" + +-// maximum number of pages held in QtWebKit's page cache +-#define QMC2_BROWSER_CACHE_PAGES 100 +- + // type conversions + #define QMC2_TO_UINT32(a) ((uchar)*((a) + 0) * (quint32)16777216ULL + \ + (uchar)*((a) + 1) * (quint32)65536ULL + \ +diff --git a/src/miniwebbrowser.cpp b/src/miniwebbrowser.cpp +index c704088fb..b9dbddae4 100644 +--- a/src/miniwebbrowser.cpp ++++ b/src/miniwebbrowser.cpp +@@ -4,9 +4,8 @@ + #include + #include + #include +-#include +-#include +-#include ++#include ++#include + #include + + #include "settings.h" +@@ -29,8 +28,6 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) + setObjectName("MiniWebBrowser"); + m_isPdfViewer = useAsPdfViewer; + +- QWebSettings::setMaximumPagesInCache(QMC2_BROWSER_CACHE_PAGES); +- + if ( MiniWebBrowser::supportedSchemes.isEmpty() ) + MiniWebBrowser::supportedSchemes << "http" << "ftp" << "file"; + +@@ -64,17 +61,16 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) + iconCache.setMaxCost(QMC2_BROWSER_ICONCACHE_SIZE); + + // we want the same global network access manager for all browsers +- webViewBrowser->page()->setNetworkAccessManager(qmc2NetworkAccessManager); ++ //webViewBrowser->page()->setNetworkAccessManager(qmc2NetworkAccessManager); + + // we want to manipulate the link activation +- webViewBrowser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); ++ //webViewBrowser->page()->setLinkDelegationPolicy(QWebEnginePage::DelegateAllLinks); + + // connect page actions we provide + connect(webViewBrowser->page(), SIGNAL(downloadRequested(const QNetworkRequest &)), this, SLOT(processPageActionDownloadRequested(const QNetworkRequest &))); + connect(webViewBrowser->page(), SIGNAL(unsupportedContent(QNetworkReply *)), this, SLOT(processPageActionHandleUnsupportedContent(QNetworkReply *))); + connect(webViewBrowser->page(), SIGNAL(linkHovered(const QString &, const QString &, const QString &)), this, SLOT(webViewBrowser_linkHovered(const QString &, const QString &, const QString &))); + connect(webViewBrowser->page(), SIGNAL(statusBarVisibilityChangeRequested(bool)), this, SLOT(webViewBrowser_statusBarVisibilityChangeRequested(bool))); +- connect(webViewBrowser->page(), SIGNAL(frameCreated(QWebFrame *)), this, SLOT(webViewBrowser_frameCreated(QWebFrame *))); + + connect(webViewBrowser, SIGNAL(linkClicked(const QUrl)), this, SLOT(webViewBrowser_linkClicked(const QUrl))); + connect(webViewBrowser, SIGNAL(urlChanged(const QUrl)), this, SLOT(webViewBrowser_urlChanged(const QUrl))); +@@ -89,97 +85,103 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) + if ( isPdfViewer() ) { + frameUrl->hide(); + // hide all page actions +- for (QWebPage::WebAction pa = QWebPage::OpenLink; pa != QWebPage::AlignRight; pa = static_cast(static_cast(pa) + 1)) { ++ /* ++ for (QWebEnginePage::WebAction pa = QWebEnginePage::Back; pa != QWebEnginePage::InsertUnorderedList; pa = static_cast(static_cast(pa) + 1)) { + QAction *a= webViewBrowser->pageAction(pa); + if ( a ) + a->setVisible(false); + } ++ */ + } else { ++ /* + // hide page actions we don't provide +- webViewBrowser->pageAction(QWebPage::OpenFrameInNewWindow)->setVisible(false); ++ webViewBrowser->pageAction(QWebEnginePage::OpenFrameInNewWindow)->setVisible(false); + + // change provided page actions to better fit our usage / integrate into QMC2's look +- webViewBrowser->pageAction(QWebPage::OpenLink)->setText(tr("Open link")); +- webViewBrowser->pageAction(QWebPage::OpenLink)->setIcon(QIcon(QString::fromUtf8(":/data/img/fileopen.png"))); +- webViewBrowser->pageAction(QWebPage::OpenLinkInNewWindow)->setText(tr("Open link in new window")); +- webViewBrowser->pageAction(QWebPage::OpenLinkInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/browser.png"))); +- webViewBrowser->pageAction(QWebPage::OpenImageInNewWindow)->setText(tr("Open image in new window")); +- webViewBrowser->pageAction(QWebPage::OpenImageInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/thumbnail.png"))); +- webViewBrowser->pageAction(QWebPage::DownloadLinkToDisk)->setText(tr("Save link as...")); +- webViewBrowser->pageAction(QWebPage::DownloadLinkToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); +- webViewBrowser->pageAction(QWebPage::CopyLinkToClipboard)->setText(tr("Copy link")); +- webViewBrowser->pageAction(QWebPage::CopyLinkToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); +- webViewBrowser->pageAction(QWebPage::DownloadImageToDisk)->setText(tr("Save image as...")); +- webViewBrowser->pageAction(QWebPage::DownloadImageToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); +- webViewBrowser->pageAction(QWebPage::CopyImageToClipboard)->setText(tr("Copy image")); +- webViewBrowser->pageAction(QWebPage::CopyImageToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); +- webViewBrowser->pageAction(QWebPage::CopyImageUrlToClipboard)->setText(tr("Copy image address")); +- webViewBrowser->pageAction(QWebPage::Back)->setText(tr("Go back")); +- webViewBrowser->pageAction(QWebPage::Back)->setIcon(QIcon(QString::fromUtf8(":/data/img/back.png"))); +- webViewBrowser->pageAction(QWebPage::Forward)->setText(tr("Go forward")); +- webViewBrowser->pageAction(QWebPage::Forward)->setIcon(QIcon(QString::fromUtf8(":/data/img/forward.png"))); +- webViewBrowser->pageAction(QWebPage::Reload)->setText(tr("Reload")); +- webViewBrowser->pageAction(QWebPage::Reload)->setIcon(QIcon(QString::fromUtf8(":/data/img/reload.png"))); +- webViewBrowser->pageAction(QWebPage::Stop)->setText(tr("Stop")); +- webViewBrowser->pageAction(QWebPage::Stop)->setIcon(QIcon(QString::fromUtf8(":/data/img/stop_browser.png"))); +- webViewBrowser->pageAction(QWebPage::Copy)->setText(tr("Copy")); +- webViewBrowser->pageAction(QWebPage::Copy)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::OpenLink)->setText(tr("Open link")); ++ webViewBrowser->pageAction(QWebEnginePage::OpenLink)->setIcon(QIcon(QString::fromUtf8(":/data/img/fileopen.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setText(tr("Open link in new window")); ++ webViewBrowser->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/browser.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::OpenImageInNewWindow)->setText(tr("Open image in new window")); ++ webViewBrowser->pageAction(QWebEnginePage::OpenImageInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/thumbnail.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::DownloadLinkToDisk)->setText(tr("Save link as...")); ++ webViewBrowser->pageAction(QWebEnginePage::DownloadLinkToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::CopyLinkToClipboard)->setText(tr("Copy link")); ++ webViewBrowser->pageAction(QWebEnginePage::CopyLinkToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::DownloadImageToDisk)->setText(tr("Save image as...")); ++ webViewBrowser->pageAction(QWebEnginePage::DownloadImageToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::CopyImageToClipboard)->setText(tr("Copy image")); ++ webViewBrowser->pageAction(QWebEnginePage::CopyImageToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::CopyImageUrlToClipboard)->setText(tr("Copy image address")); ++ webViewBrowser->pageAction(QWebEnginePage::Back)->setText(tr("Go back")); ++ webViewBrowser->pageAction(QWebEnginePage::Back)->setIcon(QIcon(QString::fromUtf8(":/data/img/back.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::Forward)->setText(tr("Go forward")); ++ webViewBrowser->pageAction(QWebEnginePage::Forward)->setIcon(QIcon(QString::fromUtf8(":/data/img/forward.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::Reload)->setText(tr("Reload")); ++ webViewBrowser->pageAction(QWebEnginePage::Reload)->setIcon(QIcon(QString::fromUtf8(":/data/img/reload.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::Stop)->setText(tr("Stop")); ++ webViewBrowser->pageAction(QWebEnginePage::Stop)->setIcon(QIcon(QString::fromUtf8(":/data/img/stop_browser.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::Copy)->setText(tr("Copy")); ++ webViewBrowser->pageAction(QWebEnginePage::Copy)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); + #if defined(QMC2_BROWSER_EXTRAS_ENABLED) +- webViewBrowser->pageAction(QWebPage::InspectElement)->setText(tr("Inspect")); +- webViewBrowser->pageAction(QWebPage::InspectElement)->setIcon(QIcon(QString::fromUtf8(":/data/img/inspect.png"))); ++ webViewBrowser->pageAction(QWebEnginePage::InspectElement)->setText(tr("Inspect")); ++ webViewBrowser->pageAction(QWebEnginePage::InspectElement)->setIcon(QIcon(QString::fromUtf8(":/data/img/inspect.png"))); + #endif ++ */ + + // connect page actions to own routines +- connect(webViewBrowser->pageAction(QWebPage::Back), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); +- connect(webViewBrowser->pageAction(QWebPage::Forward), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); ++ connect(webViewBrowser->pageAction(QWebEnginePage::Back), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); ++ connect(webViewBrowser->pageAction(QWebEnginePage::Forward), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); + } + + // setup browser settings ++ /* + webViewBrowser->page()->settings()->setIconDatabasePath(Options::configPath()); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::AutoLoadImages, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, true); + #if defined(QMC2_BROWSER_JAVASCRIPT_ENABLED) +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, true); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard, true); + #else +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); + #endif + #if defined(QMC2_BROWSER_JAVA_ENABLED) +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavaEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavaEnabled, true); + #else +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavaEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavaEnabled, false); + #endif + #if defined(QMC2_BROWSER_PLUGINS_ENABLED) +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true); + #else +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, false); + #endif +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PrivateBrowsingEnabled, false); + #if defined(QMC2_BROWSER_EXTRAS_ENABLED) +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DeveloperExtrasEnabled, true); + #else +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DeveloperExtrasEnabled, false); + #endif +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::LinksIncludedInFocusChain, false); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, false); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::PrintElementBackgrounds, false); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, false); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, false); +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::LinksIncludedInFocusChain, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::ZoomTextOnly, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PrintElementBackgrounds, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::OfflineStorageDatabaseEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::OfflineWebApplicationCacheEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); + #if defined(QMC2_BROWSER_PREFETCH_DNS_ENABLED) +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DnsPrefetchEnabled, true); + #else +- webViewBrowser->page()->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, false); ++ webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DnsPrefetchEnabled, false); + #endif ++ */ + + connect(this, SIGNAL(titleChanged(QString &)), this, SLOT(changeTitle(QString &))); + + #if defined(QMC2_BROWSER_EXTRAS_ENABLED) +- connect(webViewBrowser->pageAction(QWebPage::InspectElement), SIGNAL(triggered()), this, SLOT(postProcessPageActionInspect()), Qt::QueuedConnection); ++ connect(webViewBrowser->pageAction(QWebEnginePage::InspectElement), SIGNAL(triggered()), this, SLOT(postProcessPageActionInspect()), Qt::QueuedConnection); + #endif + + // we want to detect/handle unsupported content +- webViewBrowser->page()->setForwardUnsupportedContent(true); ++ //webViewBrowser->page()->setForwardUnsupportedContent(true); + + // status bar timeout connection + connect(&statusTimer, SIGNAL(timeout()), this, SLOT(statusTimeout())); +@@ -230,26 +232,32 @@ void MiniWebBrowser::on_toolButtonHighlight_clicked() + + void MiniWebBrowser::on_toolButtonNext_clicked() + { ++ // FIXME ++ /* + searchTimer.stop(); +- webViewBrowser->page()->findText("", QWebPage::HighlightAllOccurrences); +- QWebPage::FindFlags flags = QWebPage::FindWrapsAroundDocument; ++ webViewBrowser->page()->findText("", QWebEnginePage::HighlightAllOccurrences); ++ QWebEnginePage::FindFlags flags = QWebEnginePage::FindWrapsAroundDocument; + if ( toolButtonCaseSensitive->isChecked() ) +- flags |= QWebPage::FindCaseSensitively; ++ flags |= QWebEnginePage::FindCaseSensitively; + webViewBrowser->page()->findText(iconLineEditSearch->text(), flags); + if ( toolButtonHighlight->isChecked() ) +- webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebPage::HighlightAllOccurrences); ++ webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebEnginePage::HighlightAllOccurrences); ++ */ + } + + void MiniWebBrowser::on_toolButtonPrevious_clicked() + { ++ // FIXME ++ /* + searchTimer.stop(); +- webViewBrowser->page()->findText("", QWebPage::HighlightAllOccurrences); +- QWebPage::FindFlags flags = QWebPage::FindWrapsAroundDocument | QWebPage::FindBackward; ++ webViewBrowser->page()->findText("", QWebEnginePage::HighlightAllOccurrences); ++ QWebEnginePage::FindFlags flags = QWebEnginePage::FindWrapsAroundDocument | QWebEnginePage::FindBackward; + if ( toolButtonCaseSensitive->isChecked() ) +- flags |= QWebPage::FindCaseSensitively; ++ flags |= QWebEnginePage::FindCaseSensitively; + webViewBrowser->page()->findText(iconLineEditSearch->text(), flags); + if ( toolButtonHighlight->isChecked() ) +- webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebPage::HighlightAllOccurrences); ++ webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebEnginePage::HighlightAllOccurrences); ++ */ + } + + void MiniWebBrowser::on_toolButtonToggleSearchBar_clicked() +@@ -287,6 +295,8 @@ void MiniWebBrowser::on_toolButtonForward_clicked() + void MiniWebBrowser::hideEvent(QHideEvent *e) + { + #if defined(QMC2_BROWSER_EXTRAS_ENABLED) ++ // FIXME ++ /* + foreach (QWidget *widget, QApplication::topLevelWidgets()) { + if ( widget->inherits("QWebInspector") ) { + QWebInspector *inspector = (QWebInspector *)widget; +@@ -299,6 +309,7 @@ void MiniWebBrowser::hideEvent(QHideEvent *e) + } + } + } ++ */ + #endif + if ( !e ) + return; +@@ -309,6 +320,8 @@ void MiniWebBrowser::hideEvent(QHideEvent *e) + void MiniWebBrowser::postProcessPageActionInspect() + { + #if defined(QMC2_BROWSER_EXTRAS_ENABLED) ++ // FIXME ++ /* + foreach (QWidget *widget, QApplication::topLevelWidgets()) { + if ( widget->inherits("QWebInspector") ) { + QWebInspector *inspector = (QWebInspector *)widget; +@@ -318,6 +331,7 @@ void MiniWebBrowser::postProcessPageActionInspect() + } + } + } ++ */ + #endif + } + +@@ -383,6 +397,7 @@ void MiniWebBrowser::webViewBrowser_linkClicked(const QUrl url) + webBrowser->webViewBrowser->load(url); + webBrowser->show(); + } else { ++ /* + QWebHitTestResult hitTest = webViewBrowser->page()->mainFrame()->hitTestContent(webViewBrowser->lastMouseClickPosition); + if ( hitTest.linkTargetFrame() ) + hitTest.linkTargetFrame()->load(url); +@@ -390,6 +405,9 @@ void MiniWebBrowser::webViewBrowser_linkClicked(const QUrl url) + webViewBrowser->load(url); + webViewBrowser_urlChanged(url); + } ++ */ ++ webViewBrowser->load(url); ++ webViewBrowser_urlChanged(url); + } + } + QTimer::singleShot(0, this, SLOT(checkBackAndForward())); +@@ -517,7 +535,7 @@ void MiniWebBrowser::webViewBrowser_iconChanged() + if ( iconCache.contains(urlStr) ) + pageIcon = *iconCache[urlStr]; + if ( pageIcon.isNull() ) { +- pageIcon = QWebSettings::iconForUrl(webViewBrowser->url()); ++ //pageIcon = QWebEngineSettings::iconForUrl(webViewBrowser->url()); + if ( pageIcon.isNull() ) + pageIcon = QIcon(QString::fromUtf8(":/data/img/browser.png")); + else +@@ -546,11 +564,6 @@ void MiniWebBrowser::webViewBrowser_statusBarVisibilityChangeRequested(bool visi + progressBar->setVisible(visible); + } + +-void MiniWebBrowser::webViewBrowser_frameCreated(QWebFrame *frame) +-{ +- // NOP +-} +- + void MiniWebBrowser::statusTimeout() + { + statusTimer.stop(); +@@ -652,11 +665,11 @@ void MiniWebBrowser::setStatus(QString statusMessage) + updateGeometry(); + } + +-QWebView *BrowserWidget::createWindow(QWebPage::WebWindowType type) ++QWebEngineView *BrowserWidget::createWindow(QWebEnginePage::WebWindowType type) + { + MiniWebBrowser *webBrowser = new MiniWebBrowser(0); +- if ( type == QWebPage::WebModalDialog ) +- webBrowser->setWindowModality(Qt::ApplicationModal); ++ //if ( type == QWebEnginePage::WebModalDialog ) ++ // webBrowser->setWindowModality(Qt::ApplicationModal); + webBrowser->setAttribute(Qt::WA_DeleteOnClose); + if ( parentBrowser ) + webBrowser->spinBoxZoom->setValue(parentBrowser->spinBoxZoom->value()); +@@ -679,6 +692,6 @@ void BrowserWidget::wheelEvent(QWheelEvent *e) + e->accept(); + } else { + e->ignore(); +- QWebView::wheelEvent(e); ++ QWebEngineView::wheelEvent(e); + } + } +diff --git a/src/miniwebbrowser.h b/src/miniwebbrowser.h +index 4beaafeb3..945892a01 100644 +--- a/src/miniwebbrowser.h ++++ b/src/miniwebbrowser.h +@@ -2,7 +2,7 @@ + #define MINIWEBBROWSER_H + + #include +-#include ++#include + #include + #include + #include +@@ -13,7 +13,7 @@ + + class MiniWebBrowser; + +-class BrowserWidget : public QWebView ++class BrowserWidget : public QWebEngineView + { + Q_OBJECT + +@@ -23,7 +23,7 @@ class BrowserWidget : public QWebView + QTimer bwuDelayTimer; + MiniWebBrowser *parentBrowser; + +- BrowserWidget(QWidget *parent, MiniWebBrowser *browserParent) : QWebView(parent) ++ BrowserWidget(QWidget *parent, MiniWebBrowser *browserParent) : QWebEngineView(parent) + { + bwuDelayTimer.setSingleShot(true); + lastMouseClickPosition = QPoint(-1, -1); +@@ -38,22 +38,22 @@ class BrowserWidget : public QWebView + void mousePressEvent(QMouseEvent *e) + { + lastMouseClickPosition = e->pos(); +- QWebView::mousePressEvent(e); ++ QWebEngineView::mousePressEvent(e); + } + void enterEvent(QEvent *e) + { +- QWebView::enterEvent(e); ++ QWebEngineView::enterEvent(e); + mouseCurrentlyOnView = true; + emit mouseOnView(true); + } + void leaveEvent(QEvent *e) + { +- QWebView::leaveEvent(e); ++ QWebEngineView::leaveEvent(e); + mouseCurrentlyOnView = false; + emit mouseOnView(false); + } + void wheelEvent(QWheelEvent *); +- QWebView *createWindow(QWebPage::WebWindowType); ++ QWebEngineView *createWindow(QWebEnginePage::WebWindowType); + }; + + class MiniWebBrowser : public QWidget, public Ui::MiniWebBrowser +@@ -110,7 +110,6 @@ class MiniWebBrowser : public QWidget, public Ui::MiniWebBrowser + void webViewBrowser_iconChanged(); + void webViewBrowser_linkHovered(const QString &, const QString &, const QString &); + void webViewBrowser_statusBarVisibilityChangeRequested(bool); +- void webViewBrowser_frameCreated(QWebFrame *); + void statusTimeout(); + void adjustIconSizes(); + void setStatus(QString); +diff --git a/src/options.cpp b/src/options.cpp +index 0e0ee627a..4c92135fc 100644 +--- a/src/options.cpp ++++ b/src/options.cpp +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include "options.h" + #include "emuopt.h" +@@ -207,7 +208,7 @@ Options::Options(QWidget *parent) : + + config = new Settings(QSettings::IniFormat, QSettings::UserScope, "qmc2"); + +- QWebSettings::enablePersistentStorage(userScopePath); ++ //QWebEngineSettings::enablePersistentStorage(userScopePath); + + setupUi(this); + +@@ -600,14 +601,14 @@ void Options::apply() + tb->setIconSize(iconSizeMiddle); + } + // global web-browser fonts +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::StandardFont, qApp->font().family()); +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::SerifFont, qApp->font().family()); +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::SansSerifFont, qApp->font().family()); +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::FantasyFont, qApp->font().family()); +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::CursiveFont, qApp->font().family()); +- QWebSettings::globalSettings()->setFontFamily(QWebSettings::FixedFont, logFont.family()); +- QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFontSize, qApp->font().pointSize() + 1); +- QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFixedFontSize, logFont.pointSize() + 1); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::StandardFont, qApp->font().family()); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SerifFont, qApp->font().family()); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SansSerifFont, qApp->font().family()); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FantasyFont, qApp->font().family()); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::CursiveFont, qApp->font().family()); ++ QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FixedFont, logFont.family()); ++ QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, qApp->font().pointSize() + 1); ++ QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFixedFontSize, logFont.pointSize() + 1); + #if QMC2_JOYSTICK == 1 + pushButtonRescanJoysticks->setIconSize(iconSize); + pushButtonRemapJoystickFunction->setIconSize(iconSize); +diff --git a/src/qmc2main.cpp b/src/qmc2main.cpp +index 2298f0b4a..4cd3ed24f 100644 +--- a/src/qmc2main.cpp ++++ b/src/qmc2main.cpp +@@ -8130,8 +8130,10 @@ void MainWindow::projectMessLoadFinished(bool ok) + QString cacheKey = qmc2SoftwareList->currentItem->text(QMC2_SWLIST_COLUMN_LIST) + "_" + qmc2SoftwareList->currentItem->text(QMC2_SWLIST_COLUMN_NAME); + if ( qmc2ProjectMESSCache.contains(cacheKey) ) + qmc2ProjectMESSCache.remove(cacheKey); +- QByteArray data = QMC2_COMPRESS(qmc2ProjectMESS->webViewBrowser->page()->mainFrame()->toHtml().toUtf8()); +- qmc2ProjectMESSCache.insert(cacheKey, new QByteArray(data), data.size()); ++ QString data("%1"); ++ qmc2ProjectMESS->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ QByteArray cdata = QMC2_COMPRESS(data.toUtf8()); ++ qmc2ProjectMESSCache.insert(cacheKey, new QByteArray(cdata), cdata.size()); + } + + // we only want to know this ONCE +@@ -8146,8 +8148,10 @@ void MainWindow::projectMessSystemLoadStarted() + void MainWindow::projectMessSystemLoadFinished(bool ok) + { + if ( ok ) { +- QByteArray projectMessData = QMC2_COMPRESS(qmc2ProjectMESSLookup->webViewBrowser->page()->mainFrame()->toHtml().toUtf8()); +- QString machName = qmc2CurrentItem->text(QMC2_MACHINELIST_COLUMN_NAME); ++ QString data("%1"); ++ qmc2ProjectMESSLookup->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); ++ QByteArray projectMessData = QMC2_COMPRESS(data.toUtf8()); ++ QString machName(qmc2CurrentItem->text(QMC2_MACHINELIST_COLUMN_NAME)); + if ( qmc2ProjectMESSCache.contains(machName) ) + qmc2ProjectMESSCache.remove(machName); + qmc2ProjectMESSCache.insert(machName, new QByteArray(projectMessData), projectMessData.size()); +diff --git a/src/qmc2main.cpp b/src/qmc2main.cpp +index 4cd3ed24f..ec16009b2 100644 +--- a/src/qmc2main.cpp ++++ b/src/qmc2main.cpp +@@ -31,7 +31,6 @@ + #include + #include + #include +-#include + + #include // std::sort() + +diff --git a/src/machinelist.cpp b/src/machinelist.cpp +index 8c6944b29..4ccdc3c4b 100644 +--- a/src/machinelist.cpp ++++ b/src/machinelist.cpp +@@ -1,5 +1,4 @@ + #include +-#include + #include + #include + #include diff --git a/qmc2.spec b/qmc2.spec index 58c6361..e5cb34c 100644 --- a/qmc2.spec +++ b/qmc2.spec @@ -1,20 +1,23 @@ Name: qmc2 Version: 0.243 -Release: 1mamba +Release: 2mamba Summary: A Qt based multi-platform GUI front end for several MAME, MESS and UME variants Group: Graphical Desktop/Applications/Games Vendor: openmamba Distribution: openmamba Packager: Silvan Calarco -URL: https://qmc2.batcom-it.net/ +URL: https://github.com/qmc2/qmc2-mame-fe Source: https://github.com/qmc2/qmc2-mame-fe.git/v%{version}/qmc2-mame-fe-%{version}.tar.bz2 #Source: http://downloads.sourceforge.net/project/qmc2/qmc2/%{version}/qmc2-%{version}.tar.bz2 +Patch0: qmc2-0.243-webengine.patch License: GPL ## AUTOBUILDREQ-BEGIN BuildRequires: glibc-devel BuildRequires: libQt5Multimedia-devel +BuildRequires: libQt5Positioning-devel BuildRequires: libQt5Svg-devel -BuildRequires: libQt5WebKit-devel +BuildRequires: libQt5WebChannel-devel +BuildRequires: libQt5WebEngine-devel BuildRequires: libQt5XmlPatterns-devel BuildRequires: libSDL2-devel BuildRequires: libX11-devel @@ -22,7 +25,9 @@ BuildRequires: libgcc BuildRequires: libglvnd-devel BuildRequires: libstdc++6-devel BuildRequires: qt5-qtbase-devel +BuildRequires: qt5-qtdeclarative-devel ## AUTOBUILDREQ-END +Obsoletes: kmameleon <= 1.0pl2-3mamba %description QMC2 is a Qt based multi-platform GUI front end for several MAME, MESS and UME variants @@ -31,6 +36,7 @@ QMC2 is a Qt based multi-platform GUI front end for several MAME, MESS and UME v %prep %setup -q -n qmc2-mame-fe-%{version} +%patch 0 -p1 -b .webengine %build %make PREFIX=%{_prefix} @@ -54,6 +60,9 @@ QMC2 is a Qt based multi-platform GUI front end for several MAME, MESS and UME v %{_datadir}/qmc2/* %changelog +* Sun Jun 11 2023 Silvan Calarco 0.243-2mamba +- obsolete kmameleon + * Tue Dec 13 2022 Silvan Calarco 0.243-1mamba - update to 0.243