From 86981a0c5b29d50c9d1d23a337f987572283fbab Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sun, 7 Mar 2021 16:47:39 +0800 Subject: [PATCH] #2597 Fixes #2597: Toggles a small window height change to get webview to behave on macOS 11. --- Mac/MainWindow/Detail/DetailWebViewController.swift | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift index b661a3e86..5ad51eae5 100644 --- a/Mac/MainWindow/Detail/DetailWebViewController.swift +++ b/Mac/MainWindow/Detail/DetailWebViewController.swift @@ -116,6 +116,7 @@ final class DetailWebViewController: NSViewController, WKUIDelegate { NotificationCenter.default.addObserver(self, selector: #selector(avatarDidBecomeAvailable(_:)), name: .AvatarDidBecomeAvailable, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(faviconDidBecomeAvailable(_:)), name: .FaviconDidBecomeAvailable, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(bigSurOffsetFix(_:)), name: NSWindow.didExitFullScreenNotification, object: nil) webView.loadFileURL(ArticleRenderer.blank.url, allowingReadAccessTo: ArticleRenderer.blank.baseURL) } @@ -141,6 +142,18 @@ final class DetailWebViewController: NSViewController, WKUIDelegate { } } + /// On macOS 11, when a user exits full screen, the webview's origin.y is offset by a sizeable amount. This function adjusts the height of the window height by 1pt which puts the webview back in the correct place. This is an issue with SwiftUI and AppKit. + @objc func bigSurOffsetFix(_ note: Notification) { + if #available(macOS 11, *) { + // On macOS 11, at the end of a resize down + guard var frame = self.view.window?.frame else { + return + } + frame.size = NSSize(width: self.view.window!.frame.width, height: self.view.window!.frame.height - 1) + self.view.window!.setFrame(frame, display: true) + } + } + // MARK: Media Functions func stopMediaPlayback() {