From 94144b358301b69639f96e4f674b876b99ffa26e Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 11 Jan 2020 14:08:41 +0200 Subject: Refactor WebViewContextMenu - Remove KDE Wallet code --- src/webengine/webview.cpp | 219 +--------------------------------------------- 1 file changed, 3 insertions(+), 216 deletions(-) (limited to 'src/webengine/webview.cpp') diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp index 5b2b6fd..d42bad5 100644 --- a/src/webengine/webview.cpp +++ b/src/webengine/webview.cpp @@ -8,35 +8,12 @@ #include "webview.h" #include "subwindow/subwindow.h" -#include "wallet/wallet.h" #include "webpage.h" #include "webprofile.h" #include "webprofilemanager.h" +#include "webviewcontextmenu.h" #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include - -inline QAction *historyAction(QWebEngineView *view, const QWebEngineHistoryItem &item) -{ - QAction *action = new QAction(view); - if(item.title().isEmpty()) - action->setText(item.url().toString()); - else - action->setText(QObject::tr("%1 (%2)").arg(item.title(), item.url().toString())); - - QObject::connect(action, &QAction::triggered, view, [view, item]() { - view->history()->goToItem(item); - }); - return action; -} WebView::WebView(WebProfile *profile, QWidget *parent) : QWebEngineView(parent) @@ -113,197 +90,7 @@ WebView *WebView::createWindow(QWebEnginePage::WebWindowType type) void WebView::contextMenuEvent(QContextMenuEvent *event) { - QMenu *menu = new QMenu(this); - const auto ctxdata = page()->contextMenuData(); - - // back, forward, reload, mute buttons, added to all variants of the context menu - { - auto *navButtons = new QWidgetAction(this); - - auto *buttons = new QWidget(this); - auto *buttonsLayout = new QHBoxLayout(); - buttonsLayout->setContentsMargins(8, 0, 8, 0); - buttonsLayout->setSpacing(2); - - auto *backButton = new QToolButton(this); - backButton->setEnabled(history()->canGoBack()); - backButton->setIcon(style()->standardIcon(QStyle::SP_ArrowBack)); - connect(backButton, &QToolButton::clicked, this, [this, menu]() { - this->back(); - menu->close(); - }); - buttonsLayout->addWidget(backButton); - - auto *forwardButton = new QToolButton(this); - forwardButton->setEnabled(history()->canGoForward()); - forwardButton->setIcon(style()->standardIcon(QStyle::SP_ArrowForward)); - connect(forwardButton, &QToolButton::clicked, this, [this, menu]() { - this->forward(); - menu->close(); - }); - buttonsLayout->addWidget(forwardButton); - - auto *refreshButton = new QToolButton(this); - refreshButton->setIcon(style()->standardIcon(QStyle::SP_BrowserReload)); - connect(refreshButton, &QToolButton::clicked, this, [this, menu]() { - this->reload(); - menu->close(); - }); - buttonsLayout->addWidget(refreshButton); - - buttonsLayout->addStretch(); - - auto *muteButton = new QToolButton(this); - muteButton->setCheckable(true); - muteButton->setChecked(this->page()->isAudioMuted()); - QIcon muteIcon; - muteIcon.addPixmap(style()->standardPixmap(QStyle::SP_MediaVolume), QIcon::Normal, QIcon::Off); - muteIcon.addPixmap(style()->standardPixmap(QStyle::SP_MediaVolumeMuted), QIcon::Normal, QIcon::On); - muteButton->setIcon(muteIcon); - connect(muteButton, &QToolButton::clicked, this, [this, menu](bool checked) { - this->page()->setAudioMuted(checked); - menu->close(); - }); - buttonsLayout->addWidget(muteButton); - - buttons->setLayout(buttonsLayout); - navButtons->setDefaultWidget(buttons); - - menu->addAction(navButtons); - menu->addSeparator(); - } - - if(ctxdata.mediaType() == QWebEngineContextMenuData::MediaTypeNone) { - auto *backMenu = new QMenu(tr("Back"), this); - if(!history()->canGoBack()) { - backMenu->setEnabled(false); - } else { - connect(backMenu, &QMenu::aboutToShow, this, [this, backMenu]() { - backMenu->clear(); - const auto backItems = history()->backItems(10); - for(const QWebEngineHistoryItem &item : backItems) { - backMenu->addAction(historyAction(this, item)); - } - }); - } - menu->addMenu(backMenu); - - auto *forwardMenu = new QMenu(tr("Forward"), this); - if(!history()->canGoForward()) { - forwardMenu->setEnabled(false); - } else { - connect(forwardMenu, &QMenu::aboutToShow, this, [this, forwardMenu]() { - forwardMenu->clear(); - const auto forwardItems = history()->forwardItems(10); - for(const QWebEngineHistoryItem &item : forwardItems) { - forwardMenu->addAction(historyAction(this, item)); - } - }); - } - menu->addMenu(forwardMenu); - - connect(menu->addAction(tr("Reload")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::Reload); - }); - connect(menu->addAction(tr("Reload and bypass Cache")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::ReloadAndBypassCache); - }); - - menu->addSeparator(); - - connect(menu->addAction(tr("Select All")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::SelectAll); - }); - connect(menu->addAction(tr("Clear Selection")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::Unselect); - }); - connect(menu->addAction(tr("Copy to clipboard")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::Copy); - }); - - } else if(ctxdata.mediaType() == QWebEngineContextMenuData::MediaTypeImage) { - connect(menu->addAction(tr("Copy image to clipboard")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::CopyImageToClipboard); - }); - connect(menu->addAction(tr("Copy image URL to clipboard")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::CopyImageUrlToClipboard); - }); - if(!ctxdata.mediaUrl().isEmpty()) { - if(this->url() != ctxdata.mediaUrl()) { - connect(menu->addAction(tr("Open image")), &QAction::triggered, this, [this, ctxdata]() { - load(ctxdata.mediaUrl()); - }); - connect(menu->addAction(tr("Open image in new tab")), &QAction::triggered, this, [this, ctxdata]() { - createWindow(QWebEnginePage::WebBrowserTab)->load(ctxdata.mediaUrl()); - }); - } - connect(menu->addAction(tr("Save image")), &QAction::triggered, this, [this, ctxdata]() { - page()->download(ctxdata.mediaUrl()); - }); - } - - } else { - delete menu; - menu = page()->createStandardContextMenu(); - } - - if(!ctxdata.linkUrl().isEmpty()) { - menu->addSeparator(); - connect(menu->addAction(tr("Open link in new tab")), &QAction::triggered, this, [this, ctxdata]() { - createWindow(QWebEnginePage::WebBrowserTab)->load(ctxdata.linkUrl()); - }); - - auto *newTabMenu = menu->addMenu(tr("Open link in new tab with profile")); - profileMenu(newTabMenu, [this, ctxdata](WebProfile *profile) { - auto *view = this->createWindow(QWebEnginePage::WebBrowserTab); - view->setProfile(profile); - view->load(ctxdata.linkUrl()); - }); - - connect(menu->addAction(tr("Open link in new window")), &QAction::triggered, this, [this, ctxdata]() { - createWindow(QWebEnginePage::WebBrowserWindow)->load(ctxdata.linkUrl()); - }); - - connect(menu->addAction(tr("Copy link address")), &QAction::triggered, this, [this]() { - page()->triggerAction(QWebEnginePage::CopyLinkToClipboard); - }); - } - - // zoom widget - { - menu->addSeparator(); - - auto *zoomSlider = new QSlider(Qt::Horizontal); - zoomSlider->setMinimum(5); - zoomSlider->setMaximum(50); - zoomSlider->setValue(zoomFactor() * 10); - - auto *zoomAction = menu->addAction(tr("Zoom: %1x").arg(zoomFactor())); - connect(zoomAction, &QAction::triggered, this, [zoomSlider]() { - zoomSlider->setValue(10); - }); - - connect(zoomSlider, &QSlider::valueChanged, this, [this, zoomAction](int value) { - zoomAction->setText(tr("Zoom: %1x").arg(static_cast(value) / 10)); - setZoomFactor(static_cast(value) / 10); - }); - - auto *zoomWidgetAction = new QWidgetAction(this); - zoomWidgetAction->setDefaultWidget(zoomSlider); - - menu->addAction(zoomWidgetAction); - } - -#ifdef QT_DEBUG - { - menu->addSeparator(); - auto *autofillAction = menu->addAction(tr("Autofill form")); - connect(autofillAction, &QAction::triggered, this, [this]() { - Wallet::autocompleteForm(this); - }); - }; -#endif - - menu->setMinimumWidth(250); + auto *menu = new WebViewContextMenu(this); + //const auto ctxdata = page()->contextMenuData(); menu->exec(event->globalPos()); } -- cgit v1.2.1