From 3faa251216ab907fbca2288b17efe126cd26a940 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 10 Dec 2021 17:30:57 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8C=20Fix=20launching=20apps=20with=20?= =?UTF-8?q?spaces=20in=20name,=20add=20window=20position=20(#68)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 8 ++++---- phpmon/Domain/Helpers/Application.swift | 14 +++++++------- phpmon/Domain/Helpers/PMWindowController.swift | 12 ++++++++++++ phpmon/Domain/Preferences/PrefsVC.swift | 1 + phpmon/Domain/SiteList/SiteListVC.swift | 1 + 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index eaba103..2403c5e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -777,7 +777,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 110; + CURRENT_PROJECT_VERSION = 120; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; @@ -786,7 +786,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = "4.1-beta5"; + MARKETING_VERSION = "4.1-rc1"; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -802,7 +802,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 110; + CURRENT_PROJECT_VERSION = 120; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; @@ -811,7 +811,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = "4.1-beta5"; + MARKETING_VERSION = "4.1-rc1"; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/phpmon/Domain/Helpers/Application.swift b/phpmon/Domain/Helpers/Application.swift index 42f3607..f0ec791 100644 --- a/phpmon/Domain/Helpers/Application.swift +++ b/phpmon/Domain/Helpers/Application.swift @@ -15,7 +15,7 @@ import Foundation class Application { enum AppType { - case editor, browser, gitgui, terminal + case editor, browser, git_gui, terminal } /// Name of the app. Used for display purposes and to determine `name.app` exists. @@ -24,25 +24,25 @@ class Application { /// Application type. Depending on the type, a different action might occur. let type: AppType - /// Initializer. + /// Initializer. Used to detect a specific app of a specific type. init(_ name: String, _ type: AppType) { self.name = name self.type = type } /** - Attempt to open a specific directory in the editor of choice. - This will open the editor if it isn't open yet. + Attempt to open a specific directory in the app of choice. + (This will open the app if it isn't open yet.) */ @objc public func openDirectory(file: String) { - return Shell.run("/usr/bin/open -a \(self.name) \(file)") + return Shell.run("/usr/bin/open -a \"\(name)\" \(file)") } /** Checks if the app is installed. */ func isInstalled() -> Bool { // If this script does not complain, the app exists! return Shell.user.execute( - "/usr/bin/open -Ra \"\(self.name)\"", + "/usr/bin/open -Ra \"\(name)\"", requiresPath: false, waitUntilExit: true ).task.terminationStatus == 0 @@ -56,7 +56,7 @@ class Application { Application("PhpStorm", .editor), Application("Visual Studio Code", .editor), Application("Sublime Text", .editor), - Application("Sublime Merge", .gitgui), + Application("Sublime Merge", .git_gui), Application("iTerm", .terminal) ].filter { return $0.isInstalled() diff --git a/phpmon/Domain/Helpers/PMWindowController.swift b/phpmon/Domain/Helpers/PMWindowController.swift index 5e5a62b..3165a36 100644 --- a/phpmon/Domain/Helpers/PMWindowController.swift +++ b/phpmon/Domain/Helpers/PMWindowController.swift @@ -25,6 +25,18 @@ class PMWindowController: NSWindowController, NSWindowDelegate { App.shared.register(window: windowName) } + public func positionWindowInTopLeftCorner() { + guard let frame = NSScreen.main?.frame else { return } + guard let window = self.window else { return } + + window.setFrame(NSRect( + x: frame.size.width - window.frame.size.width - 20, + y: frame.size.height - window.frame.size.height - 40, + width: window.frame.width, + height: window.frame.height + ), display: true) + } + func windowWillClose(_ notification: Notification) { App.shared.remove(window: windowName) } diff --git a/phpmon/Domain/Preferences/PrefsVC.swift b/phpmon/Domain/Preferences/PrefsVC.swift index f7e8a22..4aa1f80 100644 --- a/phpmon/Domain/Preferences/PrefsVC.swift +++ b/phpmon/Domain/Preferences/PrefsVC.swift @@ -57,6 +57,7 @@ class PrefsVC: NSViewController { windowController.window!.delegate = delegate windowController.window!.styleMask = [.titled, .closable, .miniaturizable] windowController.window!.delegate = windowController + windowController.positionWindowInTopLeftCorner() App.shared.preferencesWindowController = windowController } diff --git a/phpmon/Domain/SiteList/SiteListVC.swift b/phpmon/Domain/SiteList/SiteListVC.swift index b9960c3..3fab94c 100644 --- a/phpmon/Domain/SiteList/SiteListVC.swift +++ b/phpmon/Domain/SiteList/SiteListVC.swift @@ -56,6 +56,7 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource { ] windowController.window!.minSize = NSSize(width: 550, height: 200) windowController.window!.delegate = windowController + windowController.positionWindowInTopLeftCorner() App.shared.siteListWindowController = windowController }