Skip to content

Commit

Permalink
Restore active preference when reopening window (#26)
Browse files Browse the repository at this point in the history
Closes #16
  • Loading branch information
DivineDominion authored and sindresorhus committed Apr 20, 2019
1 parent cdbdea1 commit 2bb3fc7
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion Sources/Preferences/PreferencesStyleController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ protocol PreferencesStyleController: AnyObject {
}

protocol PreferencesStyleControllerDelegate: AnyObject {
func activateTab(preferenceIdentifier: PreferencePaneIdentifier?, animated: Bool)
func activateTab(preferenceIdentifier: PreferencePaneIdentifier, animated: Bool)
func activateTab(index: Int, animated: Bool)
}
29 changes: 17 additions & 12 deletions Sources/Preferences/PreferencesTabViewController.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Cocoa

final class PreferencesTabViewController: NSViewController, PreferencesStyleControllerDelegate {
private var activeTab: Int!
private var activeTab: Int?
private var preferencePanes = [PreferencePane]()
internal var preferencePanesCount: Int {
return preferencePanes.count
Expand Down Expand Up @@ -54,19 +54,12 @@ final class PreferencesTabViewController: NSViewController, PreferencesStyleCont
window.toolbar = toolbar
}

func activateTab(preferencePane: PreferencePane?, animated: Bool) {
guard let preference = preferencePane else {
return activateTab(index: 0, animated: animated)
}

activateTab(preferenceIdentifier: preference.preferencePaneIdentifier, animated: animated)
func activateTab(preferencePane: PreferencePane, animated: Bool) {
activateTab(preferenceIdentifier: preferencePane.preferencePaneIdentifier, animated: animated)
}

func activateTab(preferenceIdentifier: PreferencePaneIdentifier?, animated: Bool) {
guard
let preferenceIdentifier = preferenceIdentifier,
let index = (preferencePanes.firstIndex { $0.preferencePaneIdentifier == preferenceIdentifier })
else {
func activateTab(preferenceIdentifier: PreferencePaneIdentifier, animated: Bool) {
guard let index = (preferencePanes.firstIndex { $0.preferencePaneIdentifier == preferenceIdentifier }) else {
return activateTab(index: 0, animated: animated)
}

Expand All @@ -91,6 +84,12 @@ final class PreferencesTabViewController: NSViewController, PreferencesStyleCont
}
}

func restoreInitialTab() {
if activeTab == nil {
activateTab(index: 0, animated: false)
}
}

private func updateWindowTitle(tabIndex: Int) {
self.window.title = {
if preferencePanes.count > 1 {
Expand All @@ -114,6 +113,12 @@ final class PreferencesTabViewController: NSViewController, PreferencesStyleCont
}

private func animateTabTransition(index: Int, animated: Bool) {
guard let activeTab = activeTab else {
assertionFailure("animateTabTransition called before a tab was displayed; transition only works from one tab to another")
immediatelyDisplayTab(index: index)
return
}

let fromViewController = children[activeTab]
let toViewController = children[index]
let options: NSViewController.TransitionOptions = animated && isAnimated
Expand Down
11 changes: 8 additions & 3 deletions Sources/Preferences/PreferencesWindowController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,20 @@ public final class PreferencesWindowController: NSWindowController {
///
/// - See `close()` to close the window again.
/// - See `showWindow(_:)` to show the window without the convenience of activating the app.
/// - Note: Unless you need to open a specific pane, prefer not to pass a parameter at all
/// - Parameter preferencePane: Identifier of the preference pane to display.
/// - Note: Unless you need to open a specific pane, prefer not to pass a parameter at all or `nil`.
/// - Parameter preferencePane: Identifier of the preference pane to display, or `nil` to show the
/// tab that was open when the user last closed the window.
public func show(preferencePane preferenceIdentifier: PreferencePaneIdentifier? = nil) {
if !window!.isVisible {
window?.center()
}

showWindow(self)
tabViewController.activateTab(preferenceIdentifier: preferenceIdentifier, animated: false)
if let preferenceIdentifier = preferenceIdentifier {
tabViewController.activateTab(preferenceIdentifier: preferenceIdentifier, animated: false)
} else {
tabViewController.restoreInitialTab()
}
NSApp.activate(ignoringOtherApps: true)
}
}

0 comments on commit 2bb3fc7

Please sign in to comment.