winrt: Fix MessageDialog show on windows phone.

Run native dialog show on XAML thread.

Change-Id: I6273340e87d70aae21c838d9d7646a233c1f48be
Task-Id: QTBUG-47938
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
This commit is contained in:
Samuel Nevala 2015-08-26 15:11:39 +03:00
parent df49755d74
commit 9cdbf48c33
1 changed files with 15 additions and 9 deletions

View File

@ -38,7 +38,9 @@
#include "qwinrttheme.h"
#include <QtCore/qfunctions_winrt.h>
#include <private/qeventdispatcher_winrt_p.h>
#include <functional>
#include <windows.ui.popups.h>
#include <windows.foundation.h>
#include <windows.foundation.collections.h>
@ -168,16 +170,20 @@ bool QWinRTMessageDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModa
}
}
ComPtr<IAsyncOperation<IUICommand *>> op;
hr = dialog->ShowAsync(&op);
RETURN_FALSE_IF_FAILED("Failed to show dialog");
hr = op->put_Completed(Callback<DialogCompletedHandler>(this, &QWinRTMessageDialogHelper::onCompleted).Get());
RETURN_FALSE_IF_FAILED("Failed to set dialog callback");
d->shown = true;
hr = op.As(&d->info);
RETURN_FALSE_IF_FAILED("Failed to acquire AsyncInfo for MessageDialog");
hr = QEventDispatcherWinRT::runOnXamlThread([this, d, dialog]() {
HRESULT hr;
ComPtr<IAsyncOperation<IUICommand *>> op;
hr = dialog->ShowAsync(&op);
RETURN_HR_IF_FAILED("Failed to show dialog");
hr = op->put_Completed(Callback<DialogCompletedHandler>(this, &QWinRTMessageDialogHelper::onCompleted).Get());
RETURN_HR_IF_FAILED("Failed to set dialog callback");
d->shown = true;
hr = op.As(&d->info);
RETURN_HR_IF_FAILED("Failed to acquire AsyncInfo for MessageDialog");
return hr;
});
RETURN_FALSE_IF_FAILED("Failed to show dialog")
return true;
}