summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets/api/qwebengineview.cpp
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2020-07-29 15:30:44 +0200
committerMichal Klocek <michal.klocek@qt.io>2020-08-12 15:57:59 +0200
commit0dca1220141c1aa0ce983e27f1f09425f47f062d (patch)
tree7ed5a37e17589daeda3e164042a435efc38dac89 /src/webenginewidgets/api/qwebengineview.cpp
parentc2b43bc93d81ed2e768501e680430a1df22166b6 (diff)
Merge all webenginecontextmenudata wrappers into one class
Introduce new class qwebenginecontextmenurequest in core which merges: * qquickwebenginecontextmenurequest * qwebenginecontextmenudata * implictly shared webenginecontextdata Unfortunately new class has to be QObject, since we want to reuse it qml. Q_GADGET can be used only as a value type, however we need to know if request is accepted or not in qml, therefore it must be passed as pointer. Since we use QObject now, class is no longer implicitly shared, however we only allocate request once and reuse the object for every new request (it is still copied in qml just to keep it aligned with other request handlers) [ChangleLog] QWebEngineContextMenuRequest is replacement for QWebEngineContextMenuData Change-Id: Ib387ec2065361a4bacc20675ca7352ab75a0e436 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src/webenginewidgets/api/qwebengineview.cpp')
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp54
1 files changed, 22 insertions, 32 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index d19537320..f30fc3c4d 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -125,27 +125,24 @@ void QWebEngineViewPrivate::widgetChanged(QtWebEngineCore::RenderWidgetHostViewQ
}
}
-void QWebEngineViewPrivate::contextMenuRequested(
- const QtWebEngineCore::WebEngineContextMenuData &data)
+void QWebEngineViewPrivate::contextMenuRequested(QWebEngineContextMenuRequest *request)
{
#if QT_CONFIG(action)
- m_contextData.reset();
+ m_contextRequest = request;
switch (q_ptr->contextMenuPolicy()) {
case Qt::DefaultContextMenu: {
- m_contextData = data;
- QContextMenuEvent event(QContextMenuEvent::Mouse, data.position(),
- q_ptr->mapToGlobal(data.position()));
+ QContextMenuEvent event(QContextMenuEvent::Mouse, request->position(),
+ q_ptr->mapToGlobal(request->position()));
q_ptr->contextMenuEvent(&event);
return;
}
case Qt::CustomContextMenu:
- m_contextData = data;
- Q_EMIT q_ptr->customContextMenuRequested(data.position());
+ Q_EMIT q_ptr->customContextMenuRequested(request->position());
return;
case Qt::ActionsContextMenu:
if (q_ptr->actions().count()) {
- QContextMenuEvent event(QContextMenuEvent::Mouse, data.position(),
- q_ptr->mapToGlobal(data.position()));
+ QContextMenuEvent event(QContextMenuEvent::Mouse, request->position(),
+ q_ptr->mapToGlobal(request->position()));
QMenu::exec(q_ptr->actions(), event.globalPos(), 0, q_ptr);
}
return;
@@ -170,9 +167,7 @@ static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *obje
#endif // QT_NO_ACCESSIBILITY
QWebEngineViewPrivate::QWebEngineViewPrivate()
- : page(0)
- , m_dragEntered(false)
- , m_ownsPage(false)
+ : page(0), m_dragEntered(false), m_ownsPage(false), m_contextRequest(nullptr)
{
#ifndef QT_NO_ACCESSIBILITY
QAccessible::installFactory(&webAccessibleFactory);
@@ -509,13 +504,8 @@ void QWebEngineView::dropEvent(QDropEvent *e)
QMenu *QWebEngineView::createStandardContextMenu()
{
Q_D(QWebEngineView);
- if (!d->m_contextData.d)
- return nullptr;
-
QMenu *menu = new QMenu(this);
- const QtWebEngineCore::WebEngineContextMenuData &contextMenuData = *d->m_contextData.d;
-
- QContextMenuBuilder contextMenuBuilder(contextMenuData, this, menu);
+ QContextMenuBuilder contextMenuBuilder(d->m_contextRequest, this, menu);
contextMenuBuilder.initMenu();
@@ -533,10 +523,10 @@ QMenu *QWebEngineView::createStandardContextMenu()
\sa createStandardContextMenu()
*/
-const QWebEngineContextMenuData &QWebEngineView::contextMenuData() const
+QWebEngineContextMenuRequest *QWebEngineView::lastContextMenuRequest() const
{
Q_D(const QWebEngineView);
- return d->m_contextData;
+ return d->m_contextRequest;
}
#ifndef QT_NO_ACCESSIBILITY
@@ -579,9 +569,9 @@ int QWebEngineViewAccessible::indexOfChild(const QAccessibleInterface *c) const
#endif // QT_NO_ACCESSIBILITY
#if QT_CONFIG(action)
-QContextMenuBuilder::QContextMenuBuilder(const QtWebEngineCore::WebEngineContextMenuData &data,
+QContextMenuBuilder::QContextMenuBuilder(QWebEngineContextMenuRequest *request,
QWebEngineView *view, QMenu *menu)
- : QtWebEngineCore::RenderViewContextMenuQt(data), m_view(view), m_menu(menu)
+ : QtWebEngineCore::RenderViewContextMenuQt(request), m_view(view), m_menu(menu)
{
m_view->page()->d_ptr->ensureInitialized();
}
@@ -678,9 +668,9 @@ void QContextMenuBuilder::addMenuItem(ContextMenuItem menuItem)
action = thisRef->action(QWebEnginePage::ViewSource);
break;
case ContextMenuItem::SpellingSuggestions:
- for (int i = 0; i < m_contextData.spellCheckerSuggestions().count() && i < 4; i++) {
+ for (int i = 0; i < m_contextData->spellCheckerSuggestions().count() && i < 4; i++) {
action = new QAction(m_menu);
- QString replacement = m_contextData.spellCheckerSuggestions().at(i);
+ QString replacement = m_contextData->spellCheckerSuggestions().at(i);
QObject::connect(action, &QAction::triggered, [thisRef, replacement] {
if (thisRef)
thisRef->replaceMisspelledWord(replacement);
@@ -708,19 +698,19 @@ bool QContextMenuBuilder::isMenuItemEnabled(ContextMenuItem menuItem)
case ContextMenuItem::Reload:
return true;
case ContextMenuItem::Cut:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanCut;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanCut;
case ContextMenuItem::Copy:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanCopy;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanCopy;
case ContextMenuItem::Paste:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanPaste;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanPaste;
case ContextMenuItem::Undo:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanUndo;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanUndo;
case ContextMenuItem::Redo:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanRedo;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanRedo;
case ContextMenuItem::SelectAll:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanSelectAll;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanSelectAll;
case ContextMenuItem::PasteAndMatchStyle:
- return m_contextData.editFlags() & QtWebEngineCore::WebEngineContextMenuData::CanPaste;
+ return m_contextData->editFlags() & QWebEngineContextMenuRequest::CanPaste;
case ContextMenuItem::OpenLinkInNewWindow:
case ContextMenuItem::OpenLinkInNewTab:
case ContextMenuItem::CopyLinkToClipboard: