From 243a2fef90dc3ac846a36738bfe97efba3050dc9 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 8 Feb 2018 17:31:44 +0100 Subject: Adaptations to form validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Form validations messages has moved entirely to being done by Blink. Change-Id: I6742c111fc59f0baba75b8b37f5d0ec9ae2fb920 Reviewed-by: Peter Varga Reviewed-by: Michael BrĂ¼ning --- .../api/qquickwebenginedialogrequests.cpp | 33 +---- src/webengine/api/qquickwebengineview.cpp | 44 ------ src/webengine/api/qquickwebengineview_p_p.h | 4 - src/webengine/doc/src/webengineview_lgpl.qdoc | 9 +- src/webengine/ui/MessageBubble.qml | 150 --------------------- src/webengine/ui/ui.pro | 2 - src/webengine/ui_delegates_manager.cpp | 34 ----- src/webengine/ui_delegates_manager.h | 6 - 8 files changed, 4 insertions(+), 278 deletions(-) delete mode 100644 src/webengine/ui/MessageBubble.qml (limited to 'src/webengine') diff --git a/src/webengine/api/qquickwebenginedialogrequests.cpp b/src/webengine/api/qquickwebenginedialogrequests.cpp index c57f4c76f..b1f52a6b1 100644 --- a/src/webengine/api/qquickwebenginedialogrequests.cpp +++ b/src/webengine/api/qquickwebenginedialogrequests.cpp @@ -716,40 +716,11 @@ void QQuickWebEngineFileDialogRequest::dialogReject() \instantiates QQuickWebEngineFormValidationMessageRequest \inqmlmodule QtWebEngine \since QtWebEngine 1.4 + \obsolete \brief A request for showing a HTML5 form validation message to the user. - A FormValidationMessageRequest is passed as an argument of the - WebEngineView::formValidationMessageRequested signal. It is generated when - the handling of the validation message is requested. - - The \l accepted property of the request indicates whether the request - is handled by the user code or the default message should be displayed. - - The following code uses a custom message to handle the request: - - \code - WebEngineView { - // ... - onFormValidationMessageRequested: function(request) { - request.accepted = true; - switch (request.type) { - case FormValidationMessageRequest.Show: - validationMessage.text = request.text; - validationMessage.x = request.x; - validationMessage.y = request.y - validationMessage.visible = true; - break; - case FormValidationMessageRequest.Move: - break; - case FormValidationMessageRequest.Hide: - validationMessage.visible = false; - break; - } - } - // ... - } - \endcode + No longer used since 5.11, as Blink now renders Validation messages internally. */ QQuickWebEngineFormValidationMessageRequest::QQuickWebEngineFormValidationMessageRequest( diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 5e11a1c04..2fe146d4c 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -116,7 +116,6 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() , m_fullscreenMode(false) , isLoading(false) , m_activeFocusOnPress(true) - , m_validationShowing(false) , devicePixelRatio(QGuiApplication::primaryScreen()->devicePixelRatio()) , m_webChannel(0) , m_webChannelWorld(0) @@ -995,49 +994,6 @@ void QQuickWebEngineViewPrivate::didPrintPageToPdf(const QString &filePath, bool Q_EMIT q->pdfPrintingFinished(filePath, success); } -void QQuickWebEngineViewPrivate::showValidationMessage(const QRect &anchor, const QString &mainText, const QString &subText) -{ - Q_Q(QQuickWebEngineView); - QQuickWebEngineFormValidationMessageRequest *request; - request = new QQuickWebEngineFormValidationMessageRequest(QQuickWebEngineFormValidationMessageRequest::Show, - anchor,mainText,subText); - m_validationShowing = true; - // mark the object for gc by creating temporary jsvalue - qmlEngine(q)->newQObject(request); - Q_EMIT q->formValidationMessageRequested(request); - if (!request->isAccepted()) - ui()->showMessageBubble(anchor, mainText, subText); -} - -void QQuickWebEngineViewPrivate::hideValidationMessage() -{ - Q_Q(QQuickWebEngineView); - // Suppress the initial hide message before any show messages (Since 61-based) - if (!m_validationShowing) - return; - QQuickWebEngineFormValidationMessageRequest *request; - request = new QQuickWebEngineFormValidationMessageRequest(QQuickWebEngineFormValidationMessageRequest::Hide); - m_validationShowing = false; - // mark the object for gc by creating temporary jsvalue - qmlEngine(q)->newQObject(request); - Q_EMIT q->formValidationMessageRequested(request); - if (!request->isAccepted()) - ui()->hideMessageBubble(); -} - -void QQuickWebEngineViewPrivate::moveValidationMessage(const QRect &anchor) -{ - Q_Q(QQuickWebEngineView); - QQuickWebEngineFormValidationMessageRequest *request; - request = new QQuickWebEngineFormValidationMessageRequest(QQuickWebEngineFormValidationMessageRequest::Move, - anchor); - // mark the object for gc by creating temporary jsvalue - qmlEngine(q)->newQObject(request); - Q_EMIT q->formValidationMessageRequested(request); - if (!request->isAccepted()) - ui()->moveMessageBubble(anchor); -} - void QQuickWebEngineViewPrivate::updateScrollPosition(const QPointF &position) { Q_Q(QQuickWebEngineView); diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 19cdffdea..4b8617749 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -137,9 +137,6 @@ public: QtWebEngineCore::WebEngineSettings *webEngineSettings() const override; void allowCertificateError(const QSharedPointer &errorController) override; void runGeolocationPermissionRequest(QUrl const&) override; - void showValidationMessage(const QRect &anchor, const QString &mainText, const QString &subText) override; - void hideValidationMessage() override; - void moveValidationMessage(const QRect &anchor) override; void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) override; void requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) override; void updateScrollPosition(const QPointF &position) override; @@ -181,7 +178,6 @@ public: bool isLoading; bool m_activeFocusOnPress; bool m_navigationActionTriggered; - bool m_validationShowing; qreal devicePixelRatio; QMap m_callbacks; QList > m_certificateErrorControllers; diff --git a/src/webengine/doc/src/webengineview_lgpl.qdoc b/src/webengine/doc/src/webengineview_lgpl.qdoc index 761eb2a2c..1621d0821 100644 --- a/src/webengine/doc/src/webengineview_lgpl.qdoc +++ b/src/webengine/doc/src/webengineview_lgpl.qdoc @@ -1271,14 +1271,9 @@ /*! \qmlsignal WebEngineView::formValidationMessageRequested(FormValidationMessageRequest request) \since QtWebEngine 1.4 + \obsolete - This signal is emitted when a validation message is requested. - - The request can be handled by using the methods of the FormValidationMessageRequest - type. - - \note Signal handlers need to call \c{request.accepted = true} to prevent a - default dialog from showing up. + No longer used since 5.11, as Blink now renders Validation messages internally. */ /*! diff --git a/src/webengine/ui/MessageBubble.qml b/src/webengine/ui/MessageBubble.qml deleted file mode 100644 index 056aac1fe..000000000 --- a/src/webengine/ui/MessageBubble.qml +++ /dev/null @@ -1,150 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.5 - -Item { - id: bubble - - width: 1 - height: 1 - - property int maxWidth: 0 - property string mainText: "" - property string subText: "" - - property int border: 1 - - property int arrowWidth: 18 - property int arrowHeight: 18 - property int arrowOffset: 18 - - property int marginLeft: border + 8 - property int marginTop: border + arrowHeight + 6 - property int marginRight: border + 8 - property int marginBottom: border + 6 - - Column { - id: messageColumn - - x: bubble.marginLeft - y: bubble.marginTop - z: 1 - - spacing: 5 - - Text { - id: message - width: bubble.maxWidth - - wrapMode: Text.WordWrap - elide: Text.ElideNone - clip: true - - font.pointSize: subMessage.font.pointSize + 4 - - text: bubble.mainText - } - - Text { - id: subMessage - width: bubble.maxWidth - - wrapMode: Text.WordWrap - elide: Text.ElideNone - clip: true - - text: bubble.subText - } - } - - Canvas { - id: bubbleCanvas - - property int textWidth: Math.min(bubble.maxWidth, Math.max(message.paintedWidth, subMessage.paintedWidth)) - property int textHeight: message.paintedHeight + (subMessage.paintedWidth > 0 ? (messageColumn.spacing + subMessage.paintedHeight) : 0) - - width: textWidth + bubble.marginLeft + bubble.marginRight - height: textHeight + bubble.marginTop + bubble.marginBottom - - property int cornerRadius: 7 - - property int messageBoxLeft: 0 - property int messageBoxTop: bubble.arrowHeight - property int messageBoxRight: width - border - property int messageBoxBottom: height - border - - onPaint: { - var ctx = getContext("2d"); - - ctx.lineWidth = bubble.border; - ctx.strokeStyle = "#555"; - ctx.fillStyle = "#ffffe1"; - - ctx.beginPath(); - - ctx.moveTo(messageBoxLeft + cornerRadius, messageBoxTop); - - // Arrow - ctx.lineTo(messageBoxLeft + bubble.arrowOffset, messageBoxTop); - ctx.lineTo(messageBoxLeft + bubble.arrowOffset, messageBoxTop - bubble.arrowHeight); - ctx.lineTo(messageBoxLeft + bubble.arrowOffset + bubble.arrowWidth, messageBoxTop); - - // Message Box - ctx.lineTo(messageBoxRight - cornerRadius, messageBoxTop); - ctx.quadraticCurveTo(messageBoxRight, messageBoxTop, messageBoxRight, messageBoxTop + cornerRadius); - ctx.lineTo(messageBoxRight, messageBoxBottom - cornerRadius); - ctx.quadraticCurveTo(messageBoxRight, messageBoxBottom, messageBoxRight - cornerRadius, messageBoxBottom); - ctx.lineTo(messageBoxLeft + cornerRadius, messageBoxBottom); - ctx.quadraticCurveTo(messageBoxLeft, messageBoxBottom, messageBoxLeft, messageBoxBottom - cornerRadius); - ctx.lineTo(messageBoxLeft, messageBoxTop + cornerRadius); - ctx.quadraticCurveTo(messageBoxLeft, messageBoxTop, messageBoxLeft + cornerRadius, messageBoxTop); - - ctx.closePath(); - - ctx.fill(); - ctx.stroke(); - } - - onPainted: { - bubble.width = bubbleCanvas.width; - bubble.height = bubbleCanvas.height; - } - } -} diff --git a/src/webengine/ui/ui.pro b/src/webengine/ui/ui.pro index bce03cc0c..eb6bf435c 100644 --- a/src/webengine/ui/ui.pro +++ b/src/webengine/ui/ui.pro @@ -13,8 +13,6 @@ QML_FILES += \ Menu.qml \ MenuItem.qml \ MenuSeparator.qml \ - # Message Bubble - MessageBubble.qml \ ToolTip.qml load(qml_module) diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp index 046affbf4..12474a1f1 100644 --- a/src/webengine/ui_delegates_manager.cpp +++ b/src/webengine/ui_delegates_manager.cpp @@ -129,7 +129,6 @@ MenuItemHandler::MenuItemHandler(QObject *parent) UIDelegatesManager::UIDelegatesManager(QQuickWebEngineView *view) : m_view(view) - , m_messageBubbleItem(0) , m_toolTip(nullptr) FOR_EACH_COMPONENT_TYPE(COMPONENT_MEMBER_INIT, NO_SEPARATOR) { @@ -535,39 +534,6 @@ void UIDelegatesManager::showMenu(QObject *menu) QMetaObject::invokeMethod(menu, "popup"); } -void UIDelegatesManager::showMessageBubble(const QRect &anchor, const QString &mainText, const QString &subText) -{ - if (!ensureComponentLoaded(MessageBubble)) - return; - - Q_ASSERT(m_messageBubbleItem.isNull()); - - QQmlContext *context = qmlContext(m_view); - m_messageBubbleItem.reset(qobject_cast(messageBubbleComponent->beginCreate(context))); - m_messageBubbleItem->setParentItem(m_view); - messageBubbleComponent->completeCreate(); - - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("maxWidth")).write(anchor.size().width()); - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("mainText")).write(mainText); - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("subText")).write(subText); - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("x")).write(anchor.x()); - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("y")).write(anchor.y() + anchor.size().height()); -} - -void UIDelegatesManager::hideMessageBubble() -{ - m_messageBubbleItem.reset(); -} - -void UIDelegatesManager::moveMessageBubble(const QRect &anchor) -{ - if (m_messageBubbleItem.isNull()) - return; - - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("x")).write(anchor.x()); - QQmlProperty(m_messageBubbleItem.data(), QStringLiteral("y")).write(anchor.y() + anchor.size().height()); -} - void UIDelegatesManager::showToolTip(const QString &text) { if (!ensureComponentLoaded(ToolTip)) diff --git a/src/webengine/ui_delegates_manager.h b/src/webengine/ui_delegates_manager.h index 54ecf0986..1cbf2ad28 100644 --- a/src/webengine/ui_delegates_manager.h +++ b/src/webengine/ui_delegates_manager.h @@ -58,7 +58,6 @@ F(ConfirmDialog, confirmDialog) SEPARATOR \ F(PromptDialog, promptDialog) SEPARATOR \ F(FilePicker, filePicker) SEPARATOR \ - F(MessageBubble, messageBubble) SEPARATOR \ F(AuthenticationDialog, authenticationDialog) SEPARATOR \ F(ToolTip, toolTip) SEPARATOR \ @@ -120,17 +119,12 @@ public: void showDialog(QSharedPointer); void showFilePicker(QSharedPointer); virtual void showMenu(QObject *menu); - void showMessageBubble(const QRect &anchor, const QString &mainText, - const QString &subText); - void hideMessageBubble(); - void moveMessageBubble(const QRect &anchor); void showToolTip(const QString &text); protected: bool ensureComponentLoaded(ComponentType); QQuickWebEngineView *m_view; - QScopedPointer m_messageBubbleItem; QScopedPointer m_toolTip; QStringList m_importDirs; -- cgit v1.2.3