By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.

Dismiss

Make app menu categories configurable

roundabout,
created on Thursday, 14 August 2025, 13:37:35 (1755178655), received on Thursday, 14 August 2025, 13:37:37 (1755178657)
Author identity: Vlad <vlad.muntoiu@gmail.com>

eaefedca701ce44f3f84c03b9992c59a42ceb606

applets/app-menu/__init__.py

@@ -34,18 +34,18 @@ _ = lambda x: locale.dgettext("panorama-app-menu", x)

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            CATEGORY_MAPPINGS = {
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Utility": (_("Accessories"), "applications-accessories"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Development": (_("Programming"), "applications-development"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Game": (_("Games"), "applications-games"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Graphics": (_("Graphics"), "applications-graphics"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Network": (_("Network"), "applications-internet"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "AudioVideo": (_("Multimedia"), "applications-multimedia"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Office": (_("Office"), "applications-office"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Science": (_("Science"), "applications-science"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Education": (_("Education"), "applications-education"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "System": (_("System"), "applications-system"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Settings": (_("Settings"), "preferences-desktop"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Other": (_("Other"), "applications-other"),
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Utility": {"menu_name": _("Accessories"), "icon": "applications-accessories"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Development": {"menu_name": _("Programming"), "icon": "applications-development"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Game": {"menu_name": _("Games"), "icon": "applications-games"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Graphics": {"menu_name": _("Graphics"), "icon": "applications-graphics"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Network": {"menu_name": _("Network"), "icon": "applications-internet"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "AudioVideo": {"menu_name": _("Multimedia"), "icon": "applications-multimedia"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Office": {"menu_name": _("Office"), "icon": "applications-office"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Science": {"menu_name": _("Science"), "icon": "applications-science"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Education": {"menu_name": _("Education"), "icon": "applications-education"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "System": {"menu_name": _("System"), "icon": "applications-system"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Settings": {"menu_name": _("Settings"), "icon": "preferences-desktop"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            "Other": {"menu_name": _("Other"), "icon": "applications-other"},
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            }
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            custom_css = """
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        

@@ -130,6 +130,7 @@ class AppMenu(panorama_panel.Applet):

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    super().__init__(orientation=orientation, config=config)
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    if config is None:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                        config = {}
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                self.category_mappings = config.get("category_mappings", CATEGORY_MAPPINGS)
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    self.button = Gtk.MenuButton()
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    self.button.set_has_frame(False)   # flat look
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    self.icon = Gtk.Image.new_from_icon_name("start-here")
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        

@@ -194,7 +195,7 @@ class AppMenu(panorama_panel.Applet):

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    ...
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                def get_config(self):
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                return {}
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                return {"category_mappings": self.category_mappings}
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                def set_panel_position(self, position):
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    self.popover.set_position(panorama_panel.OPPOSITE_POSITION[position])
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        

@@ -206,7 +207,7 @@ class AppMenu(panorama_panel.Applet):

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    all_apps = Gio.AppInfo.get_all()
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    apps_by_category: dict[str, list[Gio.AppInfo]] = {}
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                for category, info in CATEGORY_MAPPINGS.items():
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                for category, info in self.category_mappings.items():
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                        apps_by_category[category] = []
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    for app in all_apps:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        

@@ -222,10 +223,10 @@ class AppMenu(panorama_panel.Applet):

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                        if not category_found:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                            apps_by_category["Other"].append(app)
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                for category, info in CATEGORY_MAPPINGS.items():
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                for category, info in self.category_mappings.items():
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                        if apps_by_category[category]:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                        item = Gio.MenuItem.new(info[0])
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                        item.set_icon(Gio.ThemedIcon.new(info[1]))
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                        item = Gio.MenuItem.new(info["menu_name"])
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                        item.set_icon(Gio.ThemedIcon.new(info["icon"]))
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                            submenu = Gio.Menu()
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                            
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                            for app in apps_by_category[category]:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                            
                                

config.yaml

@@ -7,7 +7,44 @@ panels:

                                
                                
                                
                            
                                
                                    
                                        
                                            
                                              can_capture_keyboard: false
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                              applets:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                left:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            - AppMenu: {}
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            - AppMenu:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                category_mappings:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Utility:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Accessories
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-accessories
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Development:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Programming
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-development
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Game:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Games
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-games
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Graphics:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Graphics
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-graphics
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Network:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Network
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-internet
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  AudioVideo:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Multimedia
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-multimedia
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Office:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Office
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-office
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Science:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Science
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-science
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Education:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Education
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-education
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  System:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: System
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-system
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Settings:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Settings
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: preferences-desktop
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                  Other:
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    menu_name: Other
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                                    icon: applications-other
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                - WFWindowList:
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                    max_button_width: 256
                                        
                                        
                                            
                                            
                                            
                                            
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                            
                                                centre: []