Component::focusLost() is called before handling menu select


#1

Hi Jules,

I found a problem on Windows.

When choosing a menu item, Component::focusLost() is called before handling the menu item. This is a problem.

For example, I have a component and a menu item in menu bar. The menu item is enabled only while the component has keyboard focus. So I override focusGained() and focusLost() to control the status of the item in the menu bar.

While the component has keyboard focus,

On Windows case 1 (NG):

  • Press the mouse button on the menu bar then the menu is shown, and release the mouse button.
  • Move the mouse cursor on the menu item, then click it.
  • MyComponent::focusLost() is called, then change the menu status to set the item disabled.
  • MyWindow::perform() never been called because the menu is disabled.

On Windows case 2 (OK):

  • Press the mouse button on the menu bar then the menu is shown, holding the mouse button.
  • Move the mouse cursor on the menu item, then release the mouse button.
  • MyWindow::perform() is called then do the menu item handling.
  • MyComponent::focusLost() is called, then change the menu status.

On Mac (OK):

  • Press the mouse button on the menu bar then the menu is shown, and release the mouse button.
  • Move the mouse cursor on the menu item, then click it.
  • MyWindow::perform() is called then do the menu item handling.
  • MyComponent::focusLost() is called, then change the menu status.

Could you change the behavior of the first case to the same as other cases? Or should I change the menu item status in other way or timing?

Best regards,
Masanao Hayashi