diff options
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 43 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.h | 5 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage_p.h | 10 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 5 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.h | 2 |
5 files changed, 59 insertions, 6 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 760a8eff7..ca1c203dd 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -57,6 +57,9 @@ CallbackDirectory::~CallbackDirectory() case CallbackSharedDataPointer::String: (*sharedPtr.stringCallback)(QString()); break; + case CallbackSharedDataPointer::Bool: + (*sharedPtr.boolCallback)(false); + break; default: Q_UNREACHABLE(); } @@ -73,6 +76,11 @@ void CallbackDirectory::registerCallback(quint64 requestId, const QExplicitlySha m_callbackMap.insert(requestId, CallbackSharedDataPointer(callback.data())); } +void CallbackDirectory::registerCallback(quint64 requestId, const QExplicitlySharedDataPointer<BoolCallback> &callback) +{ + m_callbackMap.insert(requestId, CallbackSharedDataPointer(callback.data())); +} + void CallbackDirectory::invoke(quint64 requestId, const QVariant &result) { CallbackSharedDataPointer sharedPtr = m_callbackMap.take(requestId); @@ -91,6 +99,15 @@ void CallbackDirectory::invoke(quint64 requestId, const QString &result) } } +void CallbackDirectory::invoke(quint64 requestId, bool result) +{ + CallbackSharedDataPointer sharedPtr = m_callbackMap.take(requestId); + if (sharedPtr) { + Q_ASSERT(sharedPtr.type == CallbackSharedDataPointer::Bool); + (*sharedPtr.boolCallback)(result); + } +} + void CallbackDirectory::CallbackSharedDataPointer::doRef() { switch (type) { @@ -102,6 +119,9 @@ void CallbackDirectory::CallbackSharedDataPointer::doRef() case String: stringCallback->ref.ref(); break; + case Bool: + boolCallback->ref.ref(); + break; } } @@ -118,6 +138,10 @@ void CallbackDirectory::CallbackSharedDataPointer::doDeref() if (!stringCallback->ref.deref()) delete stringCallback; break; + case Bool: + if (!boolCallback->ref.deref()) + delete boolCallback; + break; } } @@ -251,6 +275,11 @@ void QWebEnginePagePrivate::didFetchDocumentInnerText(quint64 requestId, const Q m_callbacks.invoke(requestId, result); } +void QWebEnginePagePrivate::didFindText(quint64 requestId, int matchCount) +{ + m_callbacks.invoke(requestId, matchCount > 0); +} + void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const { #ifdef QT_NO_ACTION @@ -414,6 +443,20 @@ void QWebEnginePage::triggerAction(WebAction action, bool) } } +void QWebEnginePage::findText(const QString &subString, FindFlags options, const QWebEngineCallback<bool> &resultCallback) +{ + Q_D(QWebEnginePage); + if (subString.isEmpty()) { + d->adapter->stopFinding(); + if (resultCallback.d) + (*resultCallback.d)(false); + } else { + quint64 requestId = d->adapter->findText(subString, options & FindCaseSensitively, options & FindBackward); + if (resultCallback.d) + d->m_callbacks.registerCallback(requestId, resultCallback.d); + } +} + void QWebEnginePage::setViewportSize(const QSize &size) const { Q_UNUSED(size) diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index f89115579..aac37bc99 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -76,6 +76,7 @@ class QWebEngineCallback { public: template <typename F> QWebEngineCallback(F f) : d(new QtWebEnginePrivate::QWebEngineCallbackPrivate<T, F>(f)) { } + QWebEngineCallback() { } private: QExplicitlySharedDataPointer<QtWebEnginePrivate::QWebEngineCallbackPrivateBase<T> > d; friend class QWebEnginePage; @@ -249,8 +250,6 @@ public: enum FindFlag { FindBackward = 1, FindCaseSensitively = 2, - FindWrapsAroundDocument = 4, - HighlightAllOccurrences = 8 }; Q_DECLARE_FLAGS(FindFlags, FindFlag) @@ -368,7 +367,7 @@ public: QVariant inputMethodQuery(Qt::InputMethodQuery property) const; - bool findText(const QString &subString, FindFlags options = 0); + void findText(const QString &subString, FindFlags options = 0, const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>()); void setForwardUnsupportedContent(bool forward); bool forwardUnsupportedContent() const; diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index e6113b795..ed21c3816 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -62,27 +62,33 @@ class CallbackDirectory { public: typedef QtWebEnginePrivate::QWebEngineCallbackPrivateBase<const QVariant&> VariantCallback; typedef QtWebEnginePrivate::QWebEngineCallbackPrivateBase<const QString&> StringCallback; + typedef QtWebEnginePrivate::QWebEngineCallbackPrivateBase<bool> BoolCallback; ~CallbackDirectory(); void registerCallback(quint64 requestId, const QExplicitlySharedDataPointer<VariantCallback> &callback); void registerCallback(quint64 requestId, const QExplicitlySharedDataPointer<StringCallback> &callback); + void registerCallback(quint64 requestId, const QExplicitlySharedDataPointer<BoolCallback> &callback); void invoke(quint64 requestId, const QVariant &result); void invoke(quint64 requestId, const QString &result); + void invoke(quint64 requestId, bool result); private: struct CallbackSharedDataPointer { enum { None, Variant, - String + String, + Bool } type; union { VariantCallback *variantCallback; StringCallback *stringCallback; + BoolCallback *boolCallback; }; CallbackSharedDataPointer() : type(None) { } CallbackSharedDataPointer(VariantCallback *callback) : type(Variant), variantCallback(callback) { callback->ref.ref(); } CallbackSharedDataPointer(StringCallback *callback) : type(String), stringCallback(callback) { callback->ref.ref(); } + CallbackSharedDataPointer(BoolCallback *callback) : type(Bool), boolCallback(callback) { callback->ref.ref(); } CallbackSharedDataPointer(const CallbackSharedDataPointer &other) : type(other.type), variantCallback(other.variantCallback) { doRef(); } ~CallbackSharedDataPointer() { doDeref(); } operator bool () const { return type != None; } @@ -125,8 +131,8 @@ public: virtual void didRunJavaScript(quint64 requestId, const QVariant& result) Q_DECL_OVERRIDE; virtual void didFetchDocumentMarkup(quint64 requestId, const QString& result) Q_DECL_OVERRIDE; virtual void didFetchDocumentInnerText(quint64 requestId, const QString& result) Q_DECL_OVERRIDE; + virtual void didFindText(quint64 requestId, int matchCount) Q_DECL_OVERRIDE; virtual void passOnFocus(bool reverse) Q_DECL_OVERRIDE { Q_UNUSED(reverse); }; - virtual void javaScriptConsoleMessage(int level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE; void updateAction(QWebEnginePage::WebAction) const; diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index e5237bc72..3d884f464 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -177,6 +177,11 @@ void QWebEngineView::triggerPageAction(QWebEnginePage::WebAction action, bool ch page()->triggerAction(action, checked); } +void QWebEngineView::findText(const QString &subString, QWebEnginePage::FindFlags options, const QWebEngineCallback<bool> &resultCallback) +{ + page()->findText(subString, options, resultCallback); +} + void QWebEngineView::stop() { page()->triggerAction(QWebEnginePage::Stop); diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h index 46b144d14..836e61be3 100644 --- a/src/webenginewidgets/api/qwebengineview.h +++ b/src/webenginewidgets/api/qwebengineview.h @@ -105,7 +105,7 @@ public: void setRenderHints(QPainter::RenderHints hints); void setRenderHint(QPainter::RenderHint hint, bool enabled = true); - bool findText(const QString& subString, QWebEnginePage::FindFlags options = 0); + void findText(const QString &subString, QWebEnginePage::FindFlags options = 0, const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>()); virtual QSize sizeHint() const { return QSize(800, 600); } |