}
extension AppDelegate: StatusMenuWindowDelegate {
- func manageTunnelsWindow() -> NSWindow {
+ func showManageTunnelsWindow(completion: ((NSWindow?) -> Void)?) {
+ guard let tunnelsManager = tunnelsManager else {
+ completion?(nil)
+ return
+ }
if manageTunnelsWindowObject == nil {
- manageTunnelsRootVC = ManageTunnelsRootViewController(tunnelsManager: tunnelsManager!)
+ manageTunnelsRootVC = ManageTunnelsRootViewController(tunnelsManager: tunnelsManager)
let window = NSWindow(contentViewController: manageTunnelsRootVC!)
window.title = tr("macWindowTitleManageTunnels")
window.setContentSize(NSSize(width: 800, height: 480))
manageTunnelsWindowObject = window
tunnelsTracker?.manageTunnelsRootVC = manageTunnelsRootVC
}
- return manageTunnelsWindowObject!
+ NSApp.setActivationPolicy(.regular)
+ NSApp.activate(ignoringOtherApps: true)
+ manageTunnelsWindowObject!.makeKeyAndOrderFront(self)
+ completion?(manageTunnelsWindowObject)
}
}
import Cocoa
protocol StatusMenuWindowDelegate: class {
- func manageTunnelsWindow() -> NSWindow
+ func showManageTunnelsWindow(completion: ((NSWindow?) -> Void)?)
}
class StatusMenu: NSMenu {
}
@objc func manageTunnelsClicked() {
- NSApp.setActivationPolicy(.regular)
- NSApp.activate(ignoringOtherApps: true)
- guard let manageTunnelsWindow = windowDelegate?.manageTunnelsWindow() else { return }
- manageTunnelsWindow.makeKeyAndOrderFront(self)
+ windowDelegate?.showManageTunnelsWindow(completion: nil)
}
@objc func importTunnelsClicked() {
- NSApp.setActivationPolicy(.regular)
- NSApp.activate(ignoringOtherApps: true)
- guard let manageTunnelsWindow = windowDelegate?.manageTunnelsWindow() else { return }
- manageTunnelsWindow.makeKeyAndOrderFront(self)
- ImportPanelPresenter.presentImportPanel(tunnelsManager: tunnelsManager, sourceVC: manageTunnelsWindow.contentViewController)
+ windowDelegate?.showManageTunnelsWindow { [weak self] manageTunnelsWindow in
+ guard let self = self else { return }
+ guard let manageTunnelsWindow = manageTunnelsWindow else { return }
+ ImportPanelPresenter.presentImportPanel(tunnelsManager: self.tunnelsManager,
+ sourceVC: manageTunnelsWindow.contentViewController)
+ }
}
}