diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-10-16 15:53:32 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-10-16 17:16:51 +0100 |
commit | 6a627d6c5a94dbfae38bc1a6b1f716df19e47fd1 (patch) | |
tree | 995e0e4355b9c633232d14a0c416627ea2b2203d /vcl | |
parent | 9f5ab26bdada54898cac79e3c524664926de66b5 (diff) |
afl-eventtesting: tweak key event injection
lowest idles have a minimum time out associated
with them. So just post events and use higher idle
time priority as launcher for min-wait-for-opportune
time to start inserting
Change-Id: I8088e142199e880b198da11473558b4bd972a8d9
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/svdata.hxx | 1 | ||||
-rw-r--r-- | vcl/source/app/svapp.cxx | 51 |
2 files changed, 35 insertions, 17 deletions
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx index 0559cd896ca1..0c850c03f9c8 100644 --- a/vcl/inc/svdata.hxx +++ b/vcl/inc/svdata.hxx @@ -163,6 +163,7 @@ struct ImplSVAppData DECL_STATIC_LINK_TYPED(ImplSVAppData, ImplQuitMsg, void*, void); DECL_STATIC_LINK_TYPED(ImplSVAppData, ImplEndAllDialogsMsg, void*, void); + DECL_STATIC_LINK_TYPED(ImplSVAppData, ImplVclEventTestingHdl, void*, void); DECL_LINK_TYPED(VclEventTestingHdl, Idle*, void); }; diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 1d924699a9e6..14b34c2ada48 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -347,9 +347,6 @@ namespace { bool InjectKeyEvent(SvStream& rStream) { - if (Application::AnyInput()) - return false; - VclPtr<vcl::Window> xWin(Application::GetFirstTopLevelWindow()); while (xWin) { @@ -360,6 +357,17 @@ namespace if (!xWin) return false; + // skip the first available cycle and insert on the next one when we + // are trying the initial event, flagged by a triggered but undeleted + // mpEventTestingIdle + ImplSVData* pSVData = ImplGetSVData(); + if (pSVData->maAppData.mpEventTestingIdle) + { + delete pSVData->maAppData.mpEventTestingIdle; + pSVData->maAppData.mpEventTestingIdle = nullptr; + return false; + } + SalKeyEvent aKeyEvent; aKeyEvent.mnTime = 0; rStream.ReadUInt16(aKeyEvent.mnCode); @@ -375,7 +383,6 @@ namespace void CloseDialogsAndQuit() { - Scheduler::ProcessTaskScheduling(false); Application::EndAllDialogs(); Application::Quit(); } @@ -383,26 +390,36 @@ namespace IMPL_LINK_NOARG_TYPED(ImplSVAppData, VclEventTestingHdl, Idle *, void) { - SAL_INFO("vcl.eventtesting", "EventTestLimit is " << mnEventTestLimit); - if (mnEventTestLimit == 0) + if (Application::AnyInput()) { - delete mpEventTestInput; - delete mpEventTestingIdle; - SAL_INFO("vcl.eventtesting", "Event Limit reached, exiting" << mnEventTestLimit); + mpEventTestingIdle->Start(); + } + else + { + Application::PostUserEvent( LINK( NULL, ImplSVAppData, ImplVclEventTestingHdl ) ); + } +} + +IMPL_STATIC_LINK_NOARG_TYPED( ImplSVAppData, ImplVclEventTestingHdl, void*, void ) +{ + ImplSVData* pSVData = ImplGetSVData(); + SAL_INFO("vcl.eventtesting", "EventTestLimit is " << pSVData->maAppData.mnEventTestLimit); + if (pSVData->maAppData.mnEventTestLimit == 0) + { + delete pSVData->maAppData.mpEventTestInput; + SAL_INFO("vcl.eventtesting", "Event Limit reached, exiting" << pSVData->maAppData.mnEventTestLimit); CloseDialogsAndQuit(); } else { - Scheduler::ProcessTaskScheduling(false); - if (InjectKeyEvent(*mpEventTestInput)) - --mnEventTestLimit; - if (!mpEventTestInput->good()) + if (InjectKeyEvent(*pSVData->maAppData.mpEventTestInput)) + --pSVData->maAppData.mnEventTestLimit; + if (!pSVData->maAppData.mpEventTestInput->good()) { SAL_INFO("vcl.eventtesting", "Event Input exhausted, exit next cycle"); - mnEventTestLimit = 0; + pSVData->maAppData.mnEventTestLimit = 0; } - Scheduler::ProcessTaskScheduling(false); - mpEventTestingIdle->Start(); + Application::PostUserEvent( LINK( NULL, ImplSVAppData, ImplVclEventTestingHdl ) ); } } @@ -420,7 +437,7 @@ void Application::Execute() pSVData->maAppData.mnEventTestLimit = 10; pSVData->maAppData.mpEventTestingIdle = new Idle("eventtesting"); pSVData->maAppData.mpEventTestingIdle->SetIdleHdl(LINK(&(pSVData->maAppData), ImplSVAppData, VclEventTestingHdl)); - pSVData->maAppData.mpEventTestingIdle->SetPriority(SchedulerPriority::LOWEST); + pSVData->maAppData.mpEventTestingIdle->SetPriority(SchedulerPriority::MEDIUM); pSVData->maAppData.mpEventTestInput = new SvFileStream("eventtesting", StreamMode::READ); pSVData->maAppData.mpEventTestingIdle->Start(); break; |