import Cocoa
import WebKit
-private extension Selector {
-
- static let updateContentVisibleRect = #selector(ExternalBrowserWindowController.updateContentVisibleRect(_:))
-}
-
final class ExternalBrowserWindowController: NSWindowController {
- @IBOutlet var webView: WebView!
- @IBOutlet var goSegment: NSSegmentedControl!
- @IBOutlet var bookmarkListView: NSView!
+ @IBOutlet private var webView: WebView!
+ @IBOutlet private var goSegment: NSSegmentedControl!
+ @IBOutlet private var bookmarkListView: NSView!
private var canGoBackObservation: NSKeyValueObservation?
private var canGoForwardObservation: NSKeyValueObservation?
@objc dynamic var canResize: Bool = true {
willSet {
- guard let window = window else { return }
-
if canResize == newValue { return }
- var styleMask = window.styleMask
if newValue {
- styleMask.insert(.resizable)
+ window?.styleMask.insert(.resizable)
} else {
- styleMask.remove(.resizable)
+ window?.styleMask.remove(.resizable)
}
-
- window.styleMask = styleMask
}
}
@objc dynamic var canScroll: Bool = true {
willSet {
- guard let webView = webView else { return }
-
if canScroll == newValue { return }
- webView.mainFrame.frameView.allowsScrolling = newValue
+ webView?.mainFrame.frameView.allowsScrolling = newValue
}
}
@objc dynamic var canMovePage: Bool = true
}
}
+extension ExternalBrowserWindowController: NSWindowDelegate {
+
+ func windowWillClose(_ notification: Notification) {
+
+ webView.policyDelegate = nil
+ webView.uiDelegate = nil
+ webView.downloadDelegate = nil
+ webView.frameLoadDelegate = nil
+ }
+}
+
// MARK: - IBAction
extension ExternalBrowserWindowController {
let tag = cell.tag(forSegment: cell.selectedSegment)
switch tag {
- case 0:
- webView.goBack(nil)
- case 1:
- webView.goForward(nil)
+ case 0: webView.goBack(nil)
- default:
- break
+ case 1: webView.goForward(nil)
+
+ default: break
}
}
@IBAction func addBookmark(_ sender: AnyObject?) {
guard let window = window else { return }
- guard let bookmark = BookmarkManager.shared().createNewBookmark() else { return }
-
- bookmark.name = window.title
- bookmark.urlString = webView.mainFrameURL
- bookmark.windowContentSize = windowContentSize
- bookmark.contentVisibleRect = contentVisibleRect
- bookmark.canResize = canResize
- bookmark.canScroll = canScroll
- bookmark.scrollDelay = 0.5
+ _ = BookmarkManager.shared.createNewBookmark { bookmark in
+
+ bookmark.name = window.title
+ bookmark.urlString = self.webView.mainFrameURL
+ bookmark.windowContentSize = self.windowContentSize
+ bookmark.contentVisibleRect = self.contentVisibleRect
+ bookmark.canResize = self.canResize
+ bookmark.canScroll = self.canScroll
+ bookmark.scrollDelay = 0.5
+
+ return true
+ }
}
@IBAction func showBookmark(_ sender: AnyObject?) {
newFrame.size.width = window.frame.size.width - 200
}
- let webAnime: [NSViewAnimation.Key: Any] = [
- .target: webView,
- .endFrame: NSValue(rect: newFrame)
- ]
- let bookmarkAnime: [NSViewAnimation.Key: Any] = [
- .target: bookmarkListView,
- .endFrame: NSValue(rect: frame)
- ]
- let anime = NSViewAnimation(viewAnimations: [webAnime, bookmarkAnime])
- anime.delegate = self
- anime.start()
+ let webAnime = ViewAnimationAttributes(target: webView, endFrame: newFrame)
+ let bookmarkAnime = ViewAnimationAttributes(target: bookmarkListView, endFrame: frame)
+
+ let anime = ViewAnimation(viewAnimations: [webAnime, bookmarkAnime])
+ anime.start { [weak self] in
+
+ self?.bookmarkShowing = false
+ }
}
@IBAction func scrollLeft(_ sender: AnyObject?) {
}
}
-extension ExternalBrowserWindowController: NSAnimationDelegate {
-
- func animationDidEnd(_ animation: NSAnimation) {
-
- bookmarkShowing = false
- }
-}
-
extension ExternalBrowserWindowController: WebFrameLoadDelegate, WebPolicyDelegate {
@objc func updateContentVisibleRect(_ timer: Timer) {
Timer.scheduledTimer(timeInterval: waitingBookmarkItem.scrollDelay,
target: self,
- selector: .updateContentVisibleRect,
+ selector: #selector(ExternalBrowserWindowController.updateContentVisibleRect(_:)),
userInfo: waitingBookmarkItem,
repeats: false)
}