summaryrefslogtreecommitdiffstats
path: root/src/webengine/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/api')
-rw-r--r--src/webengine/api/qquickwebengineview.cpp36
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h2
2 files changed, 37 insertions, 1 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index ac25cd4d2..ced8c1452 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -93,6 +93,27 @@
QT_BEGIN_NAMESPACE
using namespace QtWebEngineCore;
+QQuickWebEngineView::WebAction editorActionForKeyEvent(QKeyEvent* event)
+{
+ static struct {
+ QKeySequence::StandardKey standardKey;
+ QQuickWebEngineView::WebAction action;
+ } editorActions[] = {
+ { QKeySequence::Cut, QQuickWebEngineView::Cut },
+ { QKeySequence::Copy, QQuickWebEngineView::Copy },
+ { QKeySequence::Paste, QQuickWebEngineView::Paste },
+ { QKeySequence::Undo, QQuickWebEngineView::Undo },
+ { QKeySequence::Redo, QQuickWebEngineView::Redo },
+ { QKeySequence::SelectAll, QQuickWebEngineView::SelectAll },
+ { QKeySequence::UnknownKey, QQuickWebEngineView::NoWebAction }
+ };
+ for (int i = 0; editorActions[i].standardKey != QKeySequence::UnknownKey; ++i)
+ if (event == editorActions[i].standardKey)
+ return editorActions[i].action;
+
+ return QQuickWebEngineView::NoWebAction;
+}
+
#ifndef QT_NO_ACCESSIBILITY
static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *object)
{
@@ -343,7 +364,8 @@ void QQuickWebEngineViewPrivate::allowCertificateError(const QSharedPointer<Cert
Q_Q(QQuickWebEngineView);
QQuickWebEngineCertificateError *quickController = new QQuickWebEngineCertificateError(errorController);
- QQmlEngine::setObjectOwnership(quickController, QQmlEngine::JavaScriptOwnership);
+ // mark the object for gc by creating temporary jsvalue
+ qmlEngine(q)->newQObject(quickController);
Q_EMIT q->certificateError(quickController);
if (!quickController->deferred() && !quickController->answered())
quickController->rejectCertificate();
@@ -526,6 +548,18 @@ void QQuickWebEngineViewPrivate::focusContainer()
void QQuickWebEngineViewPrivate::unhandledKeyEvent(QKeyEvent *event)
{
Q_Q(QQuickWebEngineView);
+#ifdef Q_OS_OSX
+ if (event->type() == QEvent::KeyPress) {
+ QQuickWebEngineView::WebAction action = editorActionForKeyEvent(event);
+ if (action != QQuickWebEngineView::NoWebAction) {
+ // Try triggering a registered short-cut
+ if (QGuiApplicationPrivate::instance()->shortcutMap.tryShortcut(event))
+ return;
+ q->triggerWebAction(action);
+ return;
+ }
+ }
+#endif
if (q->parentItem())
q->window()->sendEvent(q->parentItem(), event);
}
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 1b5198110..f13bfd09a 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -73,6 +73,8 @@ class QQmlContext;
class QQuickWebEngineSettings;
class QQuickWebEngineFaviconProvider;
+QQuickWebEngineView::WebAction editorActionForKeyEvent(QKeyEvent* event);
+
#ifdef ENABLE_QML_TESTSUPPORT_API
class QQuickWebEngineTestSupport;
#endif