summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp43
-rw-r--r--src/webenginewidgets/api/qwebenginepage.h5
-rw-r--r--src/webenginewidgets/api/qwebenginepage_p.h10
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp5
-rw-r--r--src/webenginewidgets/api/qwebengineview.h2
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); }