menuStart and menuEnd events are a nuisance. They are fired inconsistently and should only be used as a last resort if there is no focus event. Ultimately, they serve to indicate that focus has moved to a menu.
Therefore, move handling of these events to IAccessibleHandler.
* Only handle the most recent menu event in each pump.
* Only process the menu event if there is no valid focus in this pump.
* Processing of menu events is handled by processMenuWinEvent().
* For menuStart events, the focus is directed to the menu.
* For menuEnd events, the focus is found and an event generated for it if the focus doesn't change within 50 ms.
* The IAccessible NVDAObject no longer includes event_menuStart and event_menuEnd, as menus are now handled by the gainFocus event.
* The base NVDAObject's gainFocus and focusEntered events now cancel speech when they encounter a menu.