From c2da62bef5f0e30cda7db8398696db7034b9f26f Mon Sep 17 00:00:00 2001 From: kramo Date: Mon, 17 Nov 2025 16:57:45 +0100 Subject: [PATCH] Stop using PyObjC --- .github/workflows/ci.yml | 2 +- cartridges/application_delegate.py | 121 ----------------------------- cartridges/main.py | 12 --- cartridges/meson.build | 1 - 4 files changed, 1 insertion(+), 135 deletions(-) delete mode 100644 cartridges/application_delegate.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2c1967..2c73902 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,7 +73,7 @@ jobs: - name: Install Dependencies run: | brew install meson pygobject3 libadwaita adwaita-icon-theme desktop-file-utils pyinstaller pillow - pip3 install --break-system-packages requests PyYAML pyobjc + pip3 install --break-system-packages requests PyYAML - name: Meson Build run: | diff --git a/cartridges/application_delegate.py b/cartridges/application_delegate.py deleted file mode 100644 index 7fe61bf..0000000 --- a/cartridges/application_delegate.py +++ /dev/null @@ -1,121 +0,0 @@ -# application_delegate.py -# -# Copyright 2024 kramo -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# SPDX-License-Identifier: GPL-3.0-or-later - -"""A set of methods that manage your app’s life cycle and its interaction -with common system services.""" - -from typing import Any - -from AppKit import NSApp, NSApplication, NSMenu, NSMenuItem # type: ignore -from Foundation import NSObject # type: ignore -from gi.repository import Gio # type: ignore - -from cartridges import shared - - -class ApplicationDelegate(NSObject): # type: ignore - """A set of methods that manage your app’s life cycle and its interaction - with common system services.""" - - def applicationDidFinishLaunching_(self, *_args: Any) -> None: - main_menu = NSApp.mainMenu() - - add_game_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Add Game", "add:", "n" - ) - - import_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Import", "import:", "i" - ) - - file_menu = NSMenu.alloc().init() - file_menu.addItem_(add_game_menu_item) - file_menu.addItem_(import_menu_item) - - file_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "File", None, "" - ) - file_menu_item.setSubmenu_(file_menu) - main_menu.addItem_(file_menu_item) - - show_hidden_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Show Hidden", "hidden:", "h" - ) - - windows_menu = NSMenu.alloc().init() - - view_menu = NSMenu.alloc().init() - view_menu.addItem_(show_hidden_menu_item) - - view_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "View", None, "" - ) - view_menu_item.setSubmenu_(view_menu) - main_menu.addItem_(view_menu_item) - - windows_menu = NSMenu.alloc().init() - - windows_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Window", None, "" - ) - windows_menu_item.setSubmenu_(windows_menu) - main_menu.addItem_(windows_menu_item) - - NSApp.setWindowsMenu_(windows_menu) - - keyboard_shortcuts_menu_item = ( - NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Keyboard Shortcuts", "shortcuts:", "?" - ) - ) - - help_menu = NSMenu.alloc().init() - help_menu.addItem_(keyboard_shortcuts_menu_item) - - help_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Help", None, "" - ) - help_menu_item.setSubmenu_(help_menu) - main_menu.addItem_(help_menu_item) - - NSApp.setHelpMenu_(help_menu) - - def add_(self, *_args: Any) -> None: - if (not shared.win) or (not (app := shared.win.get_application())): - return - - app.lookup_action("add_game").activate() - - def import_(self, *_args: Any) -> None: - if (not shared.win) or (not (app := shared.win.get_application())): - return - - app.lookup_action("import").activate() - - def hidden_(self, *_args: Any) -> None: - if not shared.win: - return - - shared.win.lookup_action("show_hidden").activate() - - def shortcuts_(self, *_args: Any) -> None: - if (not shared.win) or (not (overlay := shared.win.get_help_overlay())): - return - - overlay.present() diff --git a/cartridges/main.py b/cartridges/main.py index 2e1a184..e23e193 100644 --- a/cartridges/main.py +++ b/cartridges/main.py @@ -58,12 +58,6 @@ from cartridges.store.store import Store from cartridges.utils.run_executable import run_executable from cartridges.window import CartridgesWindow -if sys.platform.startswith("darwin"): - from AppKit import NSApp # type: ignore - from PyObjCTools import AppHelper - - from cartridges.application_delegate import ApplicationDelegate - class CartridgesApplication(Adw.Application): state = shared.AppState.DEFAULT @@ -98,12 +92,6 @@ class CartridgesApplication(Adw.Application): if settings := Gtk.Settings.get_default(): settings.props.gtk_decoration_layout = "close,minimize,maximize:" - def setup_app_delegate() -> None: - NSApp.setDelegate_(ApplicationDelegate.alloc().init()) # type: ignore - AppHelper.runEventLoop() # type: ignore - - GLib.Thread.new(None, setup_app_delegate) - def do_activate(self) -> None: # pylint: disable=arguments-differ """Called on app creation""" diff --git a/cartridges/meson.build b/cartridges/meson.build index ee10a4f..68e1359 100644 --- a/cartridges/meson.build +++ b/cartridges/meson.build @@ -15,7 +15,6 @@ install_subdir('logging', install_dir: moduledir) install_subdir('errors', install_dir: moduledir) install_data( [ - 'application_delegate.py', 'main.py', 'window.py', 'preferences.py',