Skip to content
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

Merged
merged 4 commits into from
Nov 7, 2023

Conversation

freakboy3742
Copy link
Member

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:

  • All new features have been tested
  • All new features have been documented
  • I have read the CONTRIBUTING.md file
  • I will abide by the code of conduct

mhsmith
mhsmith previously approved these changes Nov 6, 2023
@mhsmith mhsmith dismissed their stale review November 6, 2023 08:39

MIssed something

@@ -23,7 +23,7 @@ def create(self):
self.interface.commands.add(
# ---- Help menu ----------------------------------
toga.Command(
lambda _: self.interface.about(),
Copy link
Member

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?

Copy link
Member Author

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.

Copy link
Member Author

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.

@mhsmith mhsmith merged commit 11ca222 into beeware:main Nov 7, 2023
35 checks passed
@freakboy3742 freakboy3742 deleted the web-header branch November 8, 2023 00:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Web backend generates double header bar
2 participants