#include "databases/CookiesDatabase.h"
#include "windows/BrowserWindow.h"
+// Qt toolkit headers.
+#include <QContextMenuEvent>
+#include <QMenu>
+
// Construct the class.
PrivacyWebEngineView::PrivacyWebEngineView() : QWebEngineView(nullptr) {}
emit updateCookiesAction(cookieListPointer->size());
}
+void PrivacyWebEngineView::contextMenuEvent(QContextMenuEvent *contextMenuEvent) {
+ // Get a handle for the
+ QWebEnginePage *webEnginePagePointer = page();
+
+ // Get a handle for the menu.
+ QMenu *contextMenu = webEnginePagePointer->createStandardContextMenu();
+
+ // Get the list of context menu actions.
+ const QList<QAction *> contextMenuActionsList = contextMenu->actions();
+
+ // Add the open link in new background tab action if the context menu already contains the open link in new window action.
+ if (contextMenuActionsList.contains(webEnginePagePointer->action(QWebEnginePage::OpenLinkInNewWindow)))
+ contextMenu->insertAction(webEnginePagePointer->action(QWebEnginePage::OpenLinkInNewWindow), webEnginePagePointer->action(QWebEnginePage::OpenLinkInNewBackgroundTab));
+
+ // Display the menu using the location in the context menu event.
+ contextMenu->popup(contextMenuEvent->globalPos());
+}
+
QWebEngineView* PrivacyWebEngineView::createWindow(QWebEnginePage::WebWindowType webWindowType) {
// Get a handle for the browser window.
BrowserWindow *browserWindowPointer = qobject_cast<BrowserWindow*>(window());
// Create the requsted window type.
- switch (webWindowType) {
- case QWebEnginePage::WebBrowserTab: {
+ switch (webWindowType)
+ {
+ case QWebEnginePage::WebBrowserTab:
+ {
// Create the new tab and return the privacy WebEngine view pointer. `true` removes the focus from the blank URL line edit.
// The new privacy WebEngine view pointer is returned so it can be populated with the link from the context menu.
return browserWindowPointer->tabWidgetPointer->addTab(true);
}
- case QWebEnginePage::WebBrowserWindow: {
+ case QWebEnginePage::WebBrowserWindow:
+ {
// Create a new browser window.
BrowserWindow *newBrowserWindowPointer = new BrowserWindow();
return newBrowserWindowPointer->tabWidgetPointer->loadBlankInitialWebsite();
}
- default: {
+ case QWebEnginePage::WebBrowserBackgroundTab:
+ {
+ // Create the new tab and return the privacy WebEngine view pointer. `false` does not clear the URL line edit. `true` creates a background tab.
+ // The new privacy WebEngine view pointer is returned so it can be populated with the link from the context menu.
+ return browserWindowPointer->tabWidgetPointer->addTab(false, true);
+ }
+
+ default:
+ {
// Return an null pointer for opening a background tab and opening a web dialog.
return nullptr;
}