Reported by mdcurran on 2012-12-26 10:29
When opening and closing a Slide show window in Powerpoint 2007 (and perhaps 2003), Powerpoint's main thread (the one that created the slide show window) does a SendMessageTimeout call with HWND_BROADCAST while responding to WM_GETOBJECT from NVDA's call to AccessibleObjectFromEvent -> SendMessageTimeout. However, as NVDA is busy waiting on SendMessageTimeout (and our SendMessageTimeout hook forces SMTO_BLOCK) there is a deadlock between Powerpoint and NVDA. Watchdog does eventually kick in, but of course then you just get nothing as it killed off any possible gainFocus anyway.
The simplist fix is to not forceably add SMTO_BLOCK to our SendMessageTimeout calls, thus again allowing AccessibleObjectFromEvent to pump.
We added blocking as we no longer wanted AccessibleObjectFromEvent and friends to be reentrent, though I'm not sure if this was necessary or just a nice to have?
Certainly Powerpoint is the one with the bug as doing a broadcast SendMessage while responding to a SendMessage is pretty silly. But, at the end of the day Powerpoint 2007 Slide Show is unusable in this case.
Blocking #501
Reported by mdcurran on 2012-12-26 10:29
When opening and closing a Slide show window in Powerpoint 2007 (and perhaps 2003), Powerpoint's main thread (the one that created the slide show window) does a SendMessageTimeout call with HWND_BROADCAST while responding to WM_GETOBJECT from NVDA's call to AccessibleObjectFromEvent -> SendMessageTimeout. However, as NVDA is busy waiting on SendMessageTimeout (and our SendMessageTimeout hook forces SMTO_BLOCK) there is a deadlock between Powerpoint and NVDA. Watchdog does eventually kick in, but of course then you just get nothing as it killed off any possible gainFocus anyway.
The simplist fix is to not forceably add SMTO_BLOCK to our SendMessageTimeout calls, thus again allowing AccessibleObjectFromEvent to pump.
We added blocking as we no longer wanted AccessibleObjectFromEvent and friends to be reentrent, though I'm not sure if this was necessary or just a nice to have?
Certainly Powerpoint is the one with the bug as doing a broadcast SendMessage while responding to a SendMessage is pretty silly. But, at the end of the day Powerpoint 2007 Slide Show is unusable in this case.
Blocking #501