diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-01-13 15:01:54 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-15 21:35:29 +0100 |
commit | 6f5850dd4f6c4cc253c48f41f59130aee5415591 (patch) | |
tree | 9f92f25e0e297cdc51e5dd8aed3b942413e6c917 /src/core/javascript_dialog_manager_qt.cpp | |
parent | e46886912858e9b233fb099bb211e288dd7d57b5 (diff) |
JS dialogs in QtQuick
Refactor JavaScriptDialogManagerQt to support a Qt Quick dialogs
friendly approach.
Qt Quick dialogs are still missing a prompt, so we use a "handmade"
one. This should be solved before 5.3 though.
Change-Id: I965df66837b2e81d6e4618a8da1167a37661c26e
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src/core/javascript_dialog_manager_qt.cpp')
-rw-r--r-- | src/core/javascript_dialog_manager_qt.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp index b2f6d86bc..f0b8c5485 100644 --- a/src/core/javascript_dialog_manager_qt.cpp +++ b/src/core/javascript_dialog_manager_qt.cpp @@ -41,6 +41,8 @@ #include "javascript_dialog_manager_qt.h" +#include "javascript_dialog_controller.h" +#include "javascript_dialog_controller_p.h" #include "web_contents_adapter_client.h" #include "web_contents_view_qt.h" #include "type_conversion.h" @@ -65,14 +67,31 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon return; } - QString promptInput; WebContentsAdapterClient::JavascriptDialogType dialogType = static_cast<WebContentsAdapterClient::JavascriptDialogType>(javascriptMessageType); - bool res = client->javascriptDialog(dialogType, toQt(messageText).toHtmlEscaped(), toQt(defaultPromptText).toHtmlEscaped(), &promptInput); - callback.Run(res, toString16(promptInput)); + JavaScriptDialogControllerPrivate *dialogData = new JavaScriptDialogControllerPrivate(dialogType, toQt(messageText).toHtmlEscaped() + , toQt(defaultPromptText).toHtmlEscaped(), callback, webContents); + QSharedPointer<JavaScriptDialogController> dialog(new JavaScriptDialogController(dialogData)); + + // We shouldn't get new dialogs for a given WebContents until we gave back a result. + Q_ASSERT(!m_activeDialogs.contains(webContents)); + m_activeDialogs.insert(webContents, dialog); + + client->javascriptDialog(dialog); +} + +bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *contents, bool accept, const base::string16 *promptOverride) +{ + if (!m_activeDialogs.contains(contents)) + return false; + QSharedPointer<JavaScriptDialogController> dialog = m_activeDialogs.value(contents); + Q_EMIT dialog->dialogCloseRequested(); + dialog->d->dialogFinished(accept, promptOverride ? *promptOverride : base::string16()); + return true; } -bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *, bool accept, const base::string16 *promptOverride) + +void JavaScriptDialogManagerQt::removeDialogForContents(content::WebContents *contents) { - // FIXME: We might need to keep a queue of modal dialogs in there and unqueue them... - return false; + QSharedPointer<JavaScriptDialogController> dialog = m_activeDialogs.take(contents); + Q_EMIT dialog->dialogCloseRequested(); } |