diff --git a/CMakeLists.txt b/CMakeLists.txt index c54fe88..428fe8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,6 +116,11 @@ platform_glob(SOURCES "${PROJECT_SOURCE_DIR}/*.cpp" "${PROJECT_SOURCE_DIR}/*.hpp" "${PROJECT_SOURCE_DIR}/*.h") +if (APPLE) + platform_glob(APPLE_SOURCES "${PROJECT_SOURCE_DIR}/*.m") + list(APPEND SOURCES ${APPLE_SOURCES}) +endif() + file(GLOB TEST_SOURCES "${PROJECT_SOURCE_DIR}/cpu/ppc/test/*.cpp") add_executable(dingusppc ${SOURCES} $ @@ -143,6 +148,12 @@ else() ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif() +if (APPLE) + find_library(COCOA_LIBRARY Cocoa) + target_link_libraries(dingusppc PRIVATE ${COCOA_LIBRARY}) +endif() + + if (DPPC_68K_DEBUGGER) target_link_libraries(dingusppc PRIVATE capstone) endif() diff --git a/main_sdl.cpp b/main_sdl.cpp index 69e93d9..e7ef99f 100644 --- a/main_sdl.cpp +++ b/main_sdl.cpp @@ -25,11 +25,20 @@ along with this program. If not, see . #include #include +#ifdef __APPLE__ +extern "C" void remap_appkit_menu_shortcuts(); +#endif + bool init() { if (SDL_Init(SDL_INIT_VIDEO)) { LOG_F(ERROR, "SDL_Init error: %s", SDL_GetError()); return false; } + +#ifdef __APPLE__ + remap_appkit_menu_shortcuts(); +#endif + return true; } diff --git a/main_sdl.m b/main_sdl.m new file mode 100644 index 0000000..db6daf9 --- /dev/null +++ b/main_sdl.m @@ -0,0 +1,40 @@ +/* +DingusPPC - The Experimental PowerPC Macintosh emulator +Copyright (C) 2018-23 divingkatae and maximum + (theweirdo) spatium + +(Contact divingkatae#1017 or powermax#2286 on Discord for more info) + +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 . +*/ + +#include + +/** @file SDL-specific main function additions for macOS hosts. */ + +// Replace Command shortcuts with Control shortcuts in the menu bar, so that +// they're not going to conflict with ones in the guest OS (but we still allow +// some of them to be used in the host OS, e.g. Control+Q to quit). +void remap_appkit_menu_shortcuts(void) { + for (NSMenuItem *menuItem in [NSApp mainMenu].itemArray) { + if (menuItem.hasSubmenu) { + for (NSMenuItem *item in menuItem.submenu.itemArray) { + if (item.keyEquivalentModifierMask & NSEventModifierFlagCommand) { + item.keyEquivalentModifierMask &= ~NSEventModifierFlagCommand; + item.keyEquivalentModifierMask |= NSEventModifierFlagControl; + } + } + } + } +}