-
-
Notifications
You must be signed in to change notification settings - Fork 674
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Correct the creation of menubars in the web backend. #2195
Conversation
@@ -23,7 +23,7 @@ def create(self): | |||
self.interface.commands.add( | |||
# ---- Help menu ---------------------------------- | |||
toga.Command( | |||
lambda _: self.interface.about(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't follow this change. Previously it was taking one argument (the Command), and ignoring it. The other backends do the same thing. Now it's taking two arguments (event, widget)? How does that fit the protocol?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Huh... I made the change to get it to work, but didn't mentally catch that the resulting method was no longer following the same protocol. I'll dig deeper into what is going on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤦
The on_click
handler needs to be a DOM handler; it was being assigned the raw Toga handler. It worked previously because the first argument to the toga handler was eaten as part of the binding process, so the action would be invoked with the DOM event as the "widget". With the removal of the redundant argument, it was no longer being consumed.
Fixed by making the on_click handler an actual DOM event handler, which proxies to activate the action.
The same pattern is used by Winforms and GTK, so I've modified the code to use a consistent implementation approach. Android and Cocoa use a different approach - there's a central "menu item selected" event which triggers a lookup and activation of the appropriate action.
Fixes #2194.
The web backend would unconditionally create a new menubar whenever create_menus was triggered. This lead to 2 menubars being created on most simple examples, and would cause more menus if user commands were added.
Also corrects an issue with the about dialog not displaying correctly due to the event handler being incorrect.
PR Checklist: