{ "issue": { "url": "https://api.github.com/repos/laurent22/joplin/issues/10324", "repository_url": "https://api.github.com/repos/laurent22/joplin", "labels_url": "https://api.github.com/repos/laurent22/joplin/issues/10324/labels{/name}", "comments_url": "https://api.github.com/repos/laurent22/joplin/issues/10324/comments", "events_url": "https://api.github.com/repos/laurent22/joplin/issues/10324/events", "html_url": "https://github.com/laurent22/joplin/pull/10324", "id": 2249682478, "node_id": "PR_kwDOBLftOs5s_zpm", "number": 10324, "title": "Desktop: Resolves #1752: Added capability to toggle visibility of the Menu Bar from the View menu", "user": { "login": "LightTreasure", "id": 1550856, "node_id": "MDQ6VXNlcjE1NTA4NTY=", "avatar_url": "https://avatars.githubusercontent.com/u/1550856?v=4", "gravatar_id": "", "url": "https://api.github.com/users/LightTreasure", "html_url": "https://github.com/LightTreasure", "followers_url": "https://api.github.com/users/LightTreasure/followers", "following_url": "https://api.github.com/users/LightTreasure/following{/other_user}", "gists_url": "https://api.github.com/users/LightTreasure/gists{/gist_id}", "starred_url": "https://api.github.com/users/LightTreasure/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/LightTreasure/subscriptions", "organizations_url": "https://api.github.com/users/LightTreasure/orgs", "repos_url": "https://api.github.com/users/LightTreasure/repos", "events_url": "https://api.github.com/users/LightTreasure/events{/privacy}", "received_events_url": "https://api.github.com/users/LightTreasure/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 4, "created_at": "2024-04-18T03:55:05Z", "updated_at": "2024-05-07T09:57:14Z", "closed_at": "2024-05-07T09:57:03Z", "author_association": "CONTRIBUTOR", "sub_issues_summary": { "total": 0, "completed": 0, "percent_completed": 0 }, "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/laurent22/joplin/pulls/10324", "html_url": "https://github.com/laurent22/joplin/pull/10324", "diff_url": "https://github.com/laurent22/joplin/pull/10324.diff", "patch_url": "https://github.com/laurent22/joplin/pull/10324.patch", "merged_at": "2024-05-07T09:57:03Z" }, "body": "### Add menu option and shortcut to toggle visibility of the menu bar\r\n#### _What this does_:\r\nThis PR adds a new item to the View Menu called \"Toggle Menu Bar\", and proposes `Ctrl+Shift+M` as its default keyboard shortcut. Clicking on this item or using the shortcut toggles the visibility of the menu bar. Also, when the bar is hidden, pressing `Alt` will temporarily show the menu bar\r\n**EDIT**: The menu item is not shown on Mac since macOS does not allow for hiding menus. \r\n\r\nThis feature has been requested via the following issues:\r\n- #1752 \r\n- #3894\r\n\r\nIt has also been requested on the Joplin Forum:\r\n- https://discourse.joplinapp.org/t/hide-menubar/8731\r\n- https://discourse.joplinapp.org/t/fr-toggle-tool-bar-and-menu-bar-distraction-free-mode/4430 \r\n\r\n#### _How implemented_:\r\nBuilds on @tinyoverflow's previously submitted [pull request](https://github.com/laurent22/joplin/pull/9603) to address the same issue. This work incorporates @laurent22's feedback in that PR to add this capability as a View Menu item instead of it being present on the settings page.\r\n\r\n- Added a new entry to the 'View' Menu, called \"Toggle menu bar\", with a proposed keyboard shortcut `Ctrl+Shift+M` (defined in `lib/services/KeymapService.ts`), and a localization string added to `tools/locales/joplin.pot` and english translation `tools/locales/en_US.po`\r\n- Added a new, non-public setting called `hideMenuBar`, a boolean with the default value of `false`, applicable only to the Desktop App (defined in `lib/models/Setting.ts`)\r\n- Created a MainScreen Command called `toggleMenuBar()`, which contains the main implementation. This flips the value of the `hideMenuBar` setting and then correspondingly calls `setAutoHideMenuBar()` and `setMenuBarVisibility()` on the Electron Window.\r\n- Added a similar function called `updateMenuBar()` in `app-desktop/app.ts` - Called during initializatoin, this function calls `setAutoHideMenuBar()` and `setMenuBarVisibility()` based on the value of the `hideMenuBar` setting.\r\n- `toggleMenuBar()` and `updateMenuBar()` do not do anything on Mac.\r\n\r\n#### _Usage with screenshots_:\r\nThe new menu entry:\r\n![joplin_menuentry](https://github.com/laurent22/joplin/assets/1550856/40022060-c643-4190-8b41-c5fb7ce98909)\r\n\r\nWhen the setting is toggled:\r\n![joplin_nomenu](https://github.com/laurent22/joplin/assets/1550856/1bed7c98-d8bd-4198-abb0-f3ab55b49c7f)\r\n\r\nToggling again brings the menu back:\r\n![joplin_start](https://github.com/laurent22/joplin/assets/1550856/19071ded-1d7e-4549-bf46-b51460f03a95)\r\n\r\n#### _Issues_:\r\nSometimes, after hiding the menu bar, the window is left with a white empty area, indicating that the contents aren't painted correctly. @tinyoverflow also mentioned this issue in their PR. I've tried debugging this, but haven't been able to fix it. My guess is that Electron isn't repainting the window properly after the menu bar is hidden.\r\n![joplin_nomenu_whitearea](https://github.com/laurent22/joplin/assets/1550856/881efaa8-3004-4512-88e1-285c1bc71c0b)", "closed_by": { "login": "laurent22", "id": 1285584, "node_id": "MDQ6VXNlcjEyODU1ODQ=", "avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4", "gravatar_id": "", "url": "https://api.github.com/users/laurent22", "html_url": "https://github.com/laurent22", "followers_url": "https://api.github.com/users/laurent22/followers", "following_url": "https://api.github.com/users/laurent22/following{/other_user}", "gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}", "starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/laurent22/subscriptions", "organizations_url": "https://api.github.com/users/laurent22/orgs", "repos_url": "https://api.github.com/users/laurent22/repos", "events_url": "https://api.github.com/users/laurent22/events{/privacy}", "received_events_url": "https://api.github.com/users/laurent22/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/10324/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos/laurent22/joplin/issues/10324/timeline", "performed_via_github_app": null, "state_reason": null }, "comments": [ { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2062943514", "html_url": "https://github.com/laurent22/joplin/pull/10324#issuecomment-2062943514", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/10324", "id": 2062943514, "node_id": "IC_kwDOBLftOs569gUa", "user": { "login": "github-actions[bot]", "id": 41898282, "node_id": "MDM6Qm90NDE4OTgyODI=", "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github-actions%5Bbot%5D", "html_url": "https://github.com/apps/github-actions", "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", "type": "Bot", "user_view_type": "public", "site_admin": false }, "created_at": "2024-04-18T03:55:20Z", "updated_at": "2024-05-07T09:57:14Z", "author_association": "CONTRIBUTOR", "body": "****CLA Assistant Lite bot**** All contributors have signed the CLA ✍️ ✅", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2062943514/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "performed_via_github_app": { "id": 15368, "client_id": "Iv1.05c79e9ad1f6bdfa", "slug": "github-actions", "node_id": "MDM6QXBwMTUzNjg=", "owner": { "login": "github", "id": 9919, "node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=", "avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4", "gravatar_id": "", "url": "https://api.github.com/users/github", "html_url": "https://github.com/github", "followers_url": "https://api.github.com/users/github/followers", "following_url": "https://api.github.com/users/github/following{/other_user}", "gists_url": "https://api.github.com/users/github/gists{/gist_id}", "starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/github/subscriptions", "organizations_url": "https://api.github.com/users/github/orgs", "repos_url": "https://api.github.com/users/github/repos", "events_url": "https://api.github.com/users/github/events{/privacy}", "received_events_url": "https://api.github.com/users/github/received_events", "type": "Organization", "user_view_type": "public", "site_admin": false }, "name": "GitHub Actions", "description": "Automate your workflow from idea to production", "external_url": "https://help.github.com/en/actions", "html_url": "https://github.com/apps/github-actions", "created_at": "2018-07-30T09:30:17Z", "updated_at": "2025-03-07T16:35:00Z", "permissions": { "actions": "write", "administration": "read", "attestations": "write", "checks": "write", "contents": "write", "deployments": "write", "discussions": "write", "issues": "write", "merge_queues": "write", "metadata": "read", "models": "read", "packages": "write", "pages": "write", "pull_requests": "write", "repository_hooks": "write", "repository_projects": "write", "security_events": "write", "statuses": "write", "vulnerability_alerts": "read" }, "events": [ "branch_protection_rule", "check_run", "check_suite", "create", "delete", "deployment", "deployment_status", "discussion", "discussion_comment", "fork", "gollum", "issues", "issue_comment", "label", "merge_group", "milestone", "page_build", "project", "project_card", "project_column", "public", "pull_request", "pull_request_review", "pull_request_review_comment", "push", "registry_package", "release", "repository", "repository_dispatch", "status", "watch", "workflow_dispatch", "workflow_run" ] } }, { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2062944385", "html_url": "https://github.com/laurent22/joplin/pull/10324#issuecomment-2062944385", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/10324", "id": 2062944385, "node_id": "IC_kwDOBLftOs569giB", "user": { "login": "LightTreasure", "id": 1550856, "node_id": "MDQ6VXNlcjE1NTA4NTY=", "avatar_url": "https://avatars.githubusercontent.com/u/1550856?v=4", "gravatar_id": "", "url": "https://api.github.com/users/LightTreasure", "html_url": "https://github.com/LightTreasure", "followers_url": "https://api.github.com/users/LightTreasure/followers", "following_url": "https://api.github.com/users/LightTreasure/following{/other_user}", "gists_url": "https://api.github.com/users/LightTreasure/gists{/gist_id}", "starred_url": "https://api.github.com/users/LightTreasure/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/LightTreasure/subscriptions", "organizations_url": "https://api.github.com/users/LightTreasure/orgs", "repos_url": "https://api.github.com/users/LightTreasure/repos", "events_url": "https://api.github.com/users/LightTreasure/events{/privacy}", "received_events_url": "https://api.github.com/users/LightTreasure/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "created_at": "2024-04-18T03:56:40Z", "updated_at": "2024-04-18T03:56:40Z", "author_association": "CONTRIBUTOR", "body": "I have read the CLA Document and I hereby sign the CLA", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2062944385/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "performed_via_github_app": null }, { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2096772561", "html_url": "https://github.com/laurent22/joplin/pull/10324#issuecomment-2096772561", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/10324", "id": 2096772561, "node_id": "IC_kwDOBLftOs58-jXR", "user": { "login": "LightTreasure", "id": 1550856, "node_id": "MDQ6VXNlcjE1NTA4NTY=", "avatar_url": "https://avatars.githubusercontent.com/u/1550856?v=4", "gravatar_id": "", "url": "https://api.github.com/users/LightTreasure", "html_url": "https://github.com/LightTreasure", "followers_url": "https://api.github.com/users/LightTreasure/followers", "following_url": "https://api.github.com/users/LightTreasure/following{/other_user}", "gists_url": "https://api.github.com/users/LightTreasure/gists{/gist_id}", "starred_url": "https://api.github.com/users/LightTreasure/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/LightTreasure/subscriptions", "organizations_url": "https://api.github.com/users/LightTreasure/orgs", "repos_url": "https://api.github.com/users/LightTreasure/repos", "events_url": "https://api.github.com/users/LightTreasure/events{/privacy}", "received_events_url": "https://api.github.com/users/LightTreasure/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "created_at": "2024-05-06T19:39:10Z", "updated_at": "2024-05-06T19:39:10Z", "author_association": "CONTRIBUTOR", "body": "Hi @laurent22, please let me know if you have any further suggestions. Thanks so much!", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2096772561/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "performed_via_github_app": null }, { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2097913574", "html_url": "https://github.com/laurent22/joplin/pull/10324#issuecomment-2097913574", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/10324", "id": 2097913574, "node_id": "IC_kwDOBLftOs59C57m", "user": { "login": "laurent22", "id": 1285584, "node_id": "MDQ6VXNlcjEyODU1ODQ=", "avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4", "gravatar_id": "", "url": "https://api.github.com/users/laurent22", "html_url": "https://github.com/laurent22", "followers_url": "https://api.github.com/users/laurent22/followers", "following_url": "https://api.github.com/users/laurent22/following{/other_user}", "gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}", "starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/laurent22/subscriptions", "organizations_url": "https://api.github.com/users/laurent22/orgs", "repos_url": "https://api.github.com/users/laurent22/repos", "events_url": "https://api.github.com/users/laurent22/events{/privacy}", "received_events_url": "https://api.github.com/users/laurent22/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "created_at": "2024-05-07T09:56:58Z", "updated_at": "2024-05-07T09:56:58Z", "author_association": "OWNER", "body": "That looks good now, thanks @LightTreasure!", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/2097913574/reactions", "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "performed_via_github_app": null } ] }