Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Free Ruler/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}

func toggleRuler(orientation: Orientation) {
if !rulerManager.hasRulers && rulers.isEmpty {
createRulersIfNeeded()
}

if rulerManager.hasRulers {
let controller = rulerManager.activeController ?? rulerManager.createRuler()
controller.toggleWing(orientation)
Expand Down Expand Up @@ -635,6 +639,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}

@IBAction func toggleGroupRulers(_ sender: Any) {
guard !rulerManager.hasRulers else { return }

prefs.groupRulers = !prefs.groupRulers
showGroupRulersHotkeyBezel(on: bezelScreen(for: sender))
}
Expand Down Expand Up @@ -770,6 +776,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}

func flipRulers(along orientation: Orientation) {
if !rulerManager.hasRulers && rulers.isEmpty {
createRulersIfNeeded()
}

if let controller = rulerManager.activeController {
let flippedCorner = prefs.zeroCorner.flipped(along: orientation)
controller.prepareForZeroCornerChange(to: flippedCorner)
Expand Down Expand Up @@ -893,6 +903,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
case kVK_ANSI_F:
toggleFloatRulers(sender)
case kVK_ANSI_G:
guard !rulerManager.hasRulers else { return true }
toggleGroupRulers(sender)
case kVK_ANSI_S:
toggleRulerShadow(sender)
Expand Down Expand Up @@ -974,6 +985,8 @@ extension AppDelegate: NSMenuItemValidation {
return true
case #selector(closeKeyWindow(_:)):
return NSApp.keyWindow?.isVisible == true
case #selector(toggleGroupRulers(_:)):
return !rulerManager.hasRulers
case #selector(toggleHorizontalRuler(_:)):
if let controller = rulerManager.activeController {
menuItem.title = controller.state.isWingVisible(.horizontal)
Expand Down
4 changes: 2 additions & 2 deletions Free Ruler/GroupedRulerWindow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ final class GroupedRulerWindow: NSPanel {

alphaValue = windowAlphaValue(prefs.foregroundOpacity)
title = NSLocalizedString(
"Grouped Rulers",
comment: "Window title for the grouped ruler window"
"Ruler",
comment: "Window title for a ruler window"
)
identifier = NSUserInterfaceItemIdentifier("grouped-ruler-window")
setAccessibilityIdentifier("grouped-ruler-window")
Expand Down
6 changes: 3 additions & 3 deletions Free Ruler/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@
}
}
},
"Grouped Rulers" : {
"comment" : "Window title for the grouped ruler window",
"Ruler" : {
"comment" : "Window title for a ruler window",
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Grouped Rulers"
"value" : "Ruler"
}
}
}
Expand Down
53 changes: 50 additions & 3 deletions FreeRulerTests/RulerCoreTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2138,7 +2138,7 @@ final class RulerCoreTests: XCTestCase {
}
}

func testGroupedRulerHotkeysToggleLegVisibilityWithoutUngrouping() {
func testPrimaryGroupedRulerHotkeysToggleLegVisibilityWithoutLegacyWindows() {
withRestoredZeroCornerPreference {
let previousGroupRulers = prefs.groupRulers
defer { prefs.groupRulers = previousGroupRulers }
Expand All @@ -2159,12 +2159,59 @@ final class RulerCoreTests: XCTestCase {
XCTAssertTrue(prefs.groupRulers)
XCTAssertFalse(groupedWindow?.isRuleVisible(.horizontal) ?? true)
XCTAssertTrue(groupedWindow?.isRuleVisible(.vertical) ?? false)
XCTAssertFalse(appDelegate.rulers.first { $0.ruler.orientation == .horizontal }?.rulerWindow.isVisible ?? true)
XCTAssertFalse(appDelegate.rulers.first { $0.ruler.orientation == .vertical }?.rulerWindow.isVisible ?? true)
XCTAssertTrue(appDelegate.rulers.isEmpty)
groupedWindow?.orderOut(self)
}
}

func testManagedGroupHotkeyDoesNotToggleRetiredGroupedMode() {
withRestoredZeroCornerPreference {
let previousGroupRulers = prefs.groupRulers
defer { prefs.groupRulers = previousGroupRulers }

prefs.groupRulers = true
let appDelegate = AppDelegate()
appDelegate.showRulers()

XCTAssertTrue(
appDelegate.performRulerHotkey(
keyCode: kVK_ANSI_G,
modifierFlags: [],
sender: appDelegate.groupedRulerController!
)
)

XCTAssertTrue(prefs.groupRulers)
XCTAssertEqual(appDelegate.rulerManager.controllers.count, 1)
appDelegate.groupedRulerController?.hide()
}
}

func testManagedWingHotkeysAffectOnlyActiveRuler() {
let appDelegate = AppDelegate()
let first = appDelegate.rulerManager.createRuler()
let second = appDelegate.rulerManager.createRuler()
defer {
first.hide()
second.hide()
}

appDelegate.rulerManager.markActive(first)

XCTAssertTrue(
appDelegate.performRulerHotkey(
keyCode: kVK_ANSI_H,
modifierFlags: [],
sender: first
)
)

XCTAssertFalse(first.groupedWindow.isRuleVisible(.horizontal))
XCTAssertTrue(first.groupedWindow.isRuleVisible(.vertical))
XCTAssertTrue(second.groupedWindow.isRuleVisible(.horizontal))
XCTAssertTrue(second.groupedWindow.isRuleVisible(.vertical))
}

func testUngroupedHorizontalFlipDoesNotMoveRulerWindows() {
withRestoredZeroCornerPreference {
let previousGroupRulers = prefs.groupRulers
Expand Down