diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index e4373751d..c34cd63f8 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -5643,7 +5643,6 @@ "$(USER_LIBRARY_DIR)/Frameworks", ); GCC_C_LANGUAGE_STANDARD = gnu11; - MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -5666,7 +5665,6 @@ GCC_C_LANGUAGE_STANDARD = gnu11; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = NDEBUG; - MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -5720,7 +5718,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -5773,7 +5771,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -5795,7 +5793,6 @@ CODE_SIGN_ENTITLEMENTS = "Clock Signal/Clock Signal.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = DV3346VVUN; ENABLE_HARDENED_RUNTIME = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -5841,7 +5838,6 @@ CODE_SIGN_ENTITLEMENTS = "Clock Signal/Clock Signal.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = DV3346VVUN; ENABLE_HARDENED_RUNTIME = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -5863,6 +5859,7 @@ INFOPLIST_FILE = "Clock Signal/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; MTL_TREAT_WARNINGS_AS_ERRORS = YES; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-Wreorder", @@ -5884,7 +5881,6 @@ CODE_SIGN_ENTITLEMENTS = "Clock Signal/Clock Signal.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; INFOPLIST_FILE = "Clock SignalTests/Info.plist"; @@ -5908,7 +5904,6 @@ CODE_SIGN_ENTITLEMENTS = "Clock Signal/Clock Signal.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; GCC_OPTIMIZATION_LEVEL = 2; @@ -5926,7 +5921,6 @@ 4BB73ECD1B587A5100552FC2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = CP2SKEB3XT; INFOPLIST_FILE = "Clock SignalUITests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; @@ -5941,7 +5935,6 @@ 4BB73ECE1B587A5100552FC2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = CP2SKEB3XT; INFOPLIST_FILE = "Clock SignalUITests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 158786bfb..25436b72f 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -88,14 +88,30 @@ class MachineDocument: } override func close() { + // Close any dangling sheets. + // + // Be warned: in 11.0 at least, if there are any panels then posting the endSheet request + // will defer the close(), and close() will be called again at the end of that animation. + // + // So: MAKE SURE IT'S SAFE TO ENTER THIS FUNCTION TWICE. Hence the non-assumption here about + // any windows still existing. + if self.windowControllers.count > 0, let window = self.windowControllers[0].window { + for sheet in window.sheets { + window.endSheet(sheet) + } + } + + // Stop the machine, if any. machine?.stop() + // Dismiss panels. activityPanel?.setIsVisible(false) activityPanel = nil optionsPanel?.setIsVisible(false) optionsPanel = nil + // End the update cycle. actionLock.lock() drawLock.lock() machine = nil @@ -103,6 +119,7 @@ class MachineDocument: actionLock.unlock() drawLock.unlock() + // Let the document controller do its thing. super.close() } @@ -147,7 +164,7 @@ class MachineDocument: // a sheet mysteriously floating on its own. For now, use windowDidUpdate as a proxy to check whether // the window is visible. func windowDidUpdate(_ notification: Notification) { - if let window = self.windowControllers[0].window, window.isVisible { + if self.windowControllers.count > 0, let window = self.windowControllers[0].window, window.isVisible { // Grab the regular window title, if it's not already stored. if self.unadornedWindowTitle.count == 0 { self.unadornedWindowTitle = window.title diff --git a/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift b/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift index 732ae3af5..c56c97857 100644 --- a/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift +++ b/OSBindings/Mac/Clock Signal/MachinePicker/MachinePicker.swift @@ -55,7 +55,11 @@ class MachinePicker: NSObject { // Machine type if let machineIdentifier = standardUserDefaults.string(forKey: "new.machine") { - machineSelector?.selectTabViewItem(withIdentifier: machineIdentifier as Any) + // If I've changed my mind about visible tabs between versions, there may not be one that corresponds + // to the stored identifier. Make sure not to raise an NSRangeException in that scenario. + if let index = machineSelector?.indexOfTabViewItem(withIdentifier: machineIdentifier as Any), index != NSNotFound { + machineSelector?.selectTabViewItem(at: index) + } } // Apple II settings