Kaydet (Commit) 06d253ef authored tarafından Caolán McNamara's avatar Caolán McNamara

afl-eventtesting: add Application::EndAllDialogs

which uses PostUserEvent like Application::Quit so can ensure
EndAllDialogs gets called before Quit

Change-Id: I9eb7dbd4f012be2e9b9cea7a73c90c5aaba141aa
üst 4855e780
...@@ -1481,6 +1481,10 @@ public: ...@@ -1481,6 +1481,10 @@ public:
static css::uno::Reference< css::ui::dialogs::XFolderPicker2 > static css::uno::Reference< css::ui::dialogs::XFolderPicker2 >
createFolderPicker( const css::uno::Reference< css::uno::XComponentContext >& rServiceManager ); createFolderPicker( const css::uno::Reference< css::uno::XComponentContext >& rServiceManager );
/** Cancel all open dialogs
*/
static void EndAllDialogs();
///@} ///@}
// For vclbootstrapprotector: // For vclbootstrapprotector:
......
...@@ -161,7 +161,8 @@ struct ImplSVAppData ...@@ -161,7 +161,8 @@ struct ImplSVAppData
Idle* mpEventTestingIdle; Idle* mpEventTestingIdle;
int mnEventTestLimit; int mnEventTestLimit;
DECL_STATIC_LINK_TYPED( ImplSVAppData, ImplQuitMsg, void*, void ); DECL_STATIC_LINK_TYPED(ImplSVAppData, ImplQuitMsg, void*, void);
DECL_STATIC_LINK_TYPED(ImplSVAppData, ImplEndAllDialogsMsg, void*, void);
DECL_LINK_TYPED(VclEventTestingHdl, Idle*, void); DECL_LINK_TYPED(VclEventTestingHdl, Idle*, void);
}; };
......
...@@ -328,6 +328,21 @@ const vcl::KeyCode* Application::GetReservedKeyCode( sal_uLong i ) ...@@ -328,6 +328,21 @@ const vcl::KeyCode* Application::GetReservedKeyCode( sal_uLong i )
return &ImplReservedKeys::get()->first[i].mKeyCode; return &ImplReservedKeys::get()->first[i].mKeyCode;
} }
IMPL_STATIC_LINK_NOARG_TYPED( ImplSVAppData, ImplEndAllDialogsMsg, void*, void )
{
vcl::Window* pAppWindow = Application::GetFirstTopLevelWindow();
while (pAppWindow)
{
Dialog::EndAllDialogs(pAppWindow);
pAppWindow = Application::GetNextTopLevelWindow(pAppWindow);
}
}
void Application::EndAllDialogs()
{
Application::PostUserEvent( LINK( NULL, ImplSVAppData, ImplEndAllDialogsMsg ) );
}
namespace namespace
{ {
bool InjectKeyEvent(SvStream& rStream) bool InjectKeyEvent(SvStream& rStream)
...@@ -351,14 +366,8 @@ namespace ...@@ -351,14 +366,8 @@ namespace
void CloseDialogsAndQuit() void CloseDialogsAndQuit()
{ {
Scheduler::ProcessTaskScheduling(true); Scheduler::ProcessTaskScheduling(false);
vcl::Window* pAppWindow = Application::GetFirstTopLevelWindow(); Application::EndAllDialogs();
while (pAppWindow)
{
Dialog::EndAllDialogs(pAppWindow);
pAppWindow = Application::GetNextTopLevelWindow(pAppWindow);
}
Scheduler::ProcessTaskScheduling(true);
Application::Quit(); Application::Quit();
} }
} }
...@@ -375,7 +384,7 @@ IMPL_LINK_NOARG_TYPED(ImplSVAppData, VclEventTestingHdl, Idle *, void) ...@@ -375,7 +384,7 @@ IMPL_LINK_NOARG_TYPED(ImplSVAppData, VclEventTestingHdl, Idle *, void)
} }
else else
{ {
Scheduler::ProcessTaskScheduling(true); Scheduler::ProcessTaskScheduling(false);
if (InjectKeyEvent(*mpEventTestInput)) if (InjectKeyEvent(*mpEventTestInput))
--mnEventTestLimit; --mnEventTestLimit;
if (!mpEventTestInput->good()) if (!mpEventTestInput->good())
...@@ -383,7 +392,7 @@ IMPL_LINK_NOARG_TYPED(ImplSVAppData, VclEventTestingHdl, Idle *, void) ...@@ -383,7 +392,7 @@ IMPL_LINK_NOARG_TYPED(ImplSVAppData, VclEventTestingHdl, Idle *, void)
SAL_INFO("vcl.eventtesting", "Event Input exhausted, exit next cycle"); SAL_INFO("vcl.eventtesting", "Event Input exhausted, exit next cycle");
mnEventTestLimit = 0; mnEventTestLimit = 0;
} }
Scheduler::ProcessTaskScheduling(true); Scheduler::ProcessTaskScheduling(false);
mpEventTestingIdle->Start(); mpEventTestingIdle->Start();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment