Skip to content

Initial app menus cleanup #232

@marcellamaki

Description

@marcellamaki

Overview

Complexity: Low
Target branch: main

The Kolibri desktop app menu (src/kolibri_app/view.py) contains several items that are either redundant or auto-generated OS defaults that add noise without value. This task cleans up three specific areas: removes a standalone History menu, trims redundant File menu items, and takes explicit control of the Window menu to pare it down to essentials.

Context

The app menu is built in src/kolibri_app/view.py in KolibriView.__init__. Three areas need attention:

File menu: Currently contains "New Window", "Close Window", and "Open Kolibri Home Folder". The first two are redundant — "New Window" is rarely useful for a single-server app, and "Close Window" duplicates standard OS-level close shortcuts (Cmd+W, Alt+F4, Ctrl+W).

History menu: Currently a top-level menu containing only Back (Ctrl+[) and Forward (Ctrl+]). These
keyboard shortcuts function natively in the webview without the menu being present.

Window menu: The Window menu visible in the app is auto-generated by wxPython on macOS and is not defined in view.py. It currently includes Minimize, Zoom, Fill, Center, Move & Resize, Full Screen Tile, Remove Window from Set, Bring All to Front, and the window list — many of which are unnecessary for this app. Explicitly defining a Window menu in the menubar overrides the auto-generated one.

The Change

Three changes to the app menu in src/kolibri_app/view.py:

  1. Remove the History menu. The History menu and its two items (Back, Forward) should be removed from the menubar entirely.

  2. Trim the File menu. Remove the "New Window" and "Close Window" menu items. The File menu remains, containing only "Open Kolibri Home Folder". Reorganising where the remaining item ultimately belongs (per Figma, it moves to the macOS app menu) is out of scope.

  3. Take explicit control of the Window menu. Add a Window menu to the menubar in view.py that includes
    only: Minimize, Zoom, Bring All to Front, and the open window list. This overrides the verbose macOS
    auto-generated Window menu from wxPython. The window list entry should reflect the current window title.

How to Get There

After fetching and preparing the Kolibri wheel (see README), run the app in development mode:

make run-dev

To verify the menu changes:

  • Click each top-level menu item in the menu bar to inspect its contents
  • On macOS, confirm the Window menu reflects the explicitly defined version (not the wx auto-generated one)
  • Verify Back and Forward navigation still works in the webview via the native shortcuts (Alt+Left / Alt+Right, mouse side-buttons) after the History menu is removed

Out of Scope

  • Adding new menu items or menus not present today (e.g. Server menu, Settings submenu, About Kolibri, Check for
    Updates, Troubleshooting)
  • Changes to the tray/system menu bar icon or its menu
  • Reorganizing the View menu, or restructuring where the remaining File menu item ultimately belongs
  • Any changes to the Edit menu or its handlers
  • Any changes to keyboard shortcut behavior in the webview itself

Acceptance Criteria

General

  • The History menu is removed from the menubar entirely
  • Back and Forward navigation continues to work in the webview via native shortcuts (Alt+Left / Alt+Right, mouse side-buttons)
  • "New Window" is removed from the File menu
  • "Close Window" is removed from the File menu
  • "Open Kolibri Home Folder" remains in the File menu
  • A Window menu is explicitly defined in view.py and contains only: Minimize, Zoom, Bring All to Front,
    and the open window list
  • The macOS auto-generated Window menu items (Fill, Center, Move & Resize, Full Screen Tile, Remove Window from Set) are no longer present in the app

Testing

  • App launches and runs without errors via make run-dev
  • All remaining menu items open the correct submenus or trigger the expected behavior

References

AI usage

Drafted with Claude Code. The scope, approach, and all acceptance criteria were reviewed and approved by a human before issue creation. The brainstorming session that produced this issue explored t-shirt sized options for the broader menu cleanup work; this issue captures the first increment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions