From 5718e42f41be42dda9bbd7390b277033ac8d4383 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Wed, 28 May 2025 15:52:40 +0100 Subject: [PATCH] added settings: saves dock moves, smaller deathzone in fullscreeen etc --- DockPhobia.xcodeproj/project.pbxproj | 4 +++ DockPhobia/.DS_Store | Bin 6148 -> 6148 bytes DockPhobia/AppDelegate.swift | 50 ++++++++++++++++++++++----- DockPhobia/DPSettings.swift | 40 +++++++++++++++++++++ DockPhobia/MouseTracker.swift | 16 +++++++-- 5 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 DockPhobia/DPSettings.swift diff --git a/DockPhobia.xcodeproj/project.pbxproj b/DockPhobia.xcodeproj/project.pbxproj index 3dcc331..f0de0a8 100644 --- a/DockPhobia.xcodeproj/project.pbxproj +++ b/DockPhobia.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ A966B4F42DE0842500C721A5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A966B4EE2DE0842400C721A5 /* AppDelegate.swift */; }; A966B4F52DE0842500C721A5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A966B4EF2DE0842400C721A5 /* Assets.xcassets */; }; A966B4F82DE0852900C721A5 /* MouseTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A966B4F72DE0852900C721A5 /* MouseTracker.swift */; }; + A98C20C62DE614180008D61C /* DPSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20C52DE614180008D61C /* DPSettings.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -21,6 +22,7 @@ A966B4F02DE0842400C721A5 /* DockPhobia.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DockPhobia.entitlements; sourceTree = ""; }; A966B4F72DE0852900C721A5 /* MouseTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MouseTracker.swift; sourceTree = ""; }; A97798072DE485F200B6CB13 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; + A98C20C52DE614180008D61C /* DPSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DPSettings.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,6 +74,7 @@ children = ( A966B4EE2DE0842400C721A5 /* AppDelegate.swift */, A966B4F72DE0852900C721A5 /* MouseTracker.swift */, + A98C20C52DE614180008D61C /* DPSettings.swift */, A94BEC102DE23ECE00D4811D /* Views */, A94BEC0A2DE21F8100D4811D /* Resources */, A966B4F02DE0842400C721A5 /* DockPhobia.entitlements */, @@ -152,6 +155,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A98C20C62DE614180008D61C /* DPSettings.swift in Sources */, A966B4F82DE0852900C721A5 /* MouseTracker.swift in Sources */, A966B4F42DE0842500C721A5 /* AppDelegate.swift in Sources */, ); diff --git a/DockPhobia/.DS_Store b/DockPhobia/.DS_Store index e238db70b71c8ebb80addeca2d12b75ab2a6a56e..6fce90f491344a6fc1b100ce10ea26c3a7928d3b 100644 GIT binary patch delta 92 zcmZoMXfc=|#>B)qu~2NHo}wr(0|Nsi1A_nqgC0W;Ljgk(Lq0>+#=_-{jJ%T#SS2QZ tVVS%+oNWW+W(AG~%$wOc_&I=jHw$unXP(S2;>ZEi4bslCIYML&GXS)a6fXb( delta 503 zcmZoMXfc=|#>B!ku~2NHo}#EI0|Nsi1A_nqLkUAMgC0W#Lo!3+W=59f%=I8Ceg;RN za4|zFvNS>@C*3eOIX|}msFHz!Q))h89l7}~E=f80NkEkxXOi#7Iej?hh+S6@Ln6YW z-24 Bool { return true } + //MARK: menu bar stuff func setupMenus() { let menu = NSMenu() let start = NSMenuItem(title: describeStartButton(), action: #selector(didTapStart), keyEquivalent: "") @@ -43,6 +49,22 @@ class AppDelegate: NSObject, NSApplicationDelegate { ) menu.addItem(screen) + let dockMoves = NSMenuItem( + title: "Moved the Dock \(settings.settings.dockMoves) time\(settings.settings.dockMoves.plural)", + action: nil, + keyEquivalent: "" + ) + menu.addItem(dockMoves) + + menu.addItem(NSMenuItem.separator()) + + let checkfullscreenButton = NSMenuItem( + title: "Smaller deathzone in fullscreen", + action: #selector(checkFullscreenToggle), + keyEquivalent: "" + ) + checkfullscreenButton.state = NSControl.StateValue(rawValue: settings.settings.checkFullscreen ? 1 : 0) + menu.addItem(checkfullscreenButton) menu.addItem(NSMenuItem.separator()) menu.addItem( @@ -73,7 +95,6 @@ class AppDelegate: NSObject, NSApplicationDelegate { menu.addItem(quit) statusItem.menu = menu } - func changeMenuIcon(running: Bool) { guard let button = statusItem.button else { return } switch running { @@ -83,7 +104,6 @@ class AppDelegate: NSObject, NSApplicationDelegate { button.image = NSImage(named: "cursor.slash") } } - @objc func didTapStart() { if mouseTracker.running { mouseTracker.stop() @@ -92,17 +112,18 @@ class AppDelegate: NSObject, NSApplicationDelegate { mouseTracker.start() changeMenuIcon(running: true) } - setupMenus() + refreshMenus() } - @objc func quit() { NSApplication.shared.terminate(self) } - @objc func moveDockObjcLeft() { mouseTracker.moveDock(.left) } @objc func moveDockObjcRight() { mouseTracker.moveDock(.right) } @objc func moveDockObjcBottom() { mouseTracker.moveDock(.bottom) } - + @objc func checkFullscreenToggle() { + settings.settings.checkFullscreen.toggle() + refreshMenus() + } func describeStartButton() -> String { if mouseTracker.running { return "Stop tracking" @@ -111,3 +132,14 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } } + +func refreshMenus() { + guard let delegate = NSApp.delegate as? AppDelegate else { return } + delegate.setupMenus() +} + +extension Numeric { + var plural: String { + return self == 1 ? "" : "s" + } +} diff --git a/DockPhobia/DPSettings.swift b/DockPhobia/DPSettings.swift new file mode 100644 index 0000000..8f5afe4 --- /dev/null +++ b/DockPhobia/DPSettings.swift @@ -0,0 +1,40 @@ +// +// Persistence.swift +// DockPhobia +// +// Created by neon443 on 27/05/2025. +// + +import Foundation +import AppKit + +struct DPSettings: Codable { + var dockMoves: Int = 0 + var checkFullscreen: Bool = false +} + +class DPSettingsModel { + var settings = DPSettings() + + let userDefaults = UserDefaults.standard + + init() { + guard let data = userDefaults.data(forKey: "settings") else { return } + + let decoder = JSONDecoder() + + guard let decoded = try? decoder.decode(DPSettings.self, from: data) else { + return + } + self.settings = decoded + refreshMenus() + } + + func saveSettings() { + let encoder = JSONEncoder() + guard let encoded = try? encoder.encode(settings) else { + return + } + userDefaults.set(encoded, forKey: "settings") + } +} diff --git a/DockPhobia/MouseTracker.swift b/DockPhobia/MouseTracker.swift index ac3e145..a0a7f57 100644 --- a/DockPhobia/MouseTracker.swift +++ b/DockPhobia/MouseTracker.swift @@ -77,7 +77,9 @@ class MouseTracker { var dockHeight: CGFloat = 0 - init() { + var settings: DPSettingsModel + + init(settings: DPSettingsModel) { print(DockSide()) if let screen = NSScreen.main { let rect = screen.frame @@ -89,6 +91,9 @@ class MouseTracker { } else { fatalError("no screen wtf???") } + + self.settings = settings + self.currentDockSide = .left moveDock(.bottom) getDockSize() @@ -98,6 +103,11 @@ class MouseTracker { var location = NSEvent.mouseLocation location.y = screen.height - location.y + guard settings.settings.checkFullscreen else { + handleDockValue(dockIsAt: currentDockSide, location: location) + return + } + guard isFrontmostFullscreen() else { if location.x < 1 || location.x < screen.width-1 || @@ -106,8 +116,6 @@ class MouseTracker { } return } - - handleDockValue(dockIsAt: currentDockSide, location: location) } func handleDockValue(dockIsAt: DockSide, location: NSPoint) { @@ -180,6 +188,8 @@ class MouseTracker { applescript(scriptMove) // applescript(scriptShow) currentDockSide = toSide + settings.settings.dockMoves += 1 + refreshMenus() } func getDockSize() {