Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Commit d24591d

Browse files
authored
1 parent 746bcde commit d24591d

File tree

33 files changed

+645
-562
lines changed

33 files changed

+645
-562
lines changed

DuckDuckGo-macOS.xcodeproj/project.pbxproj

Lines changed: 16 additions & 305 deletions
Large diffs are not rendered by default.

DuckDuckGo-macOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DuckDuckGo/Application/AppDelegate.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,8 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
374374

375375
// Freemium DBP
376376
freemiumDBPFeature.subscribeToDependencyUpdates()
377+
378+
_=NSPopover.swizzleShowRelativeToRectOnce
377379
}
378380

379381
// swiftlint:disable:next cyclomatic_complexity

DuckDuckGo/Assets.xcassets/Images/ZoomIncrease.imageset/Contents.json renamed to DuckDuckGo/Assets.xcassets/Images/ZoomChangeDefault.imageset/Contents.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"images" : [
33
{
4-
"filename" : "Zoom-Page-Increase-16D.svg",
4+
"filename" : "Union.pdf",
55
"idiom" : "universal"
66
}
77
],
Binary file not shown.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Shape 1.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "template"
15+
}
16+
}
Binary file not shown.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Shape 2.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true,
14+
"template-rendering-intent" : "template"
15+
}
16+
}
Binary file not shown.

DuckDuckGo/Assets.xcassets/Images/ZoomIncrease.imageset/Zoom-Page-Increase-16D.svg

Lines changed: 0 additions & 4 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"images" : [
33
{
4-
"filename" : "OptionsButtonMenuZoom.pdf",
4+
"filename" : "Shape.pdf",
55
"idiom" : "universal"
66
}
77
],
@@ -10,6 +10,7 @@
1010
"version" : 1
1111
},
1212
"properties" : {
13+
"preserves-vector-representation" : true,
1314
"template-rendering-intent" : "template"
1415
}
1516
}
Binary file not shown.

DuckDuckGo/BookmarksBar/View/BookmarksBarMenuPopover.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ final class BookmarksBarMenuPopover: NSPopover {
3030
private(set) var rootFolder: BookmarkFolder?
3131

3232
private(set) var preferredEdge: NSRectEdge?
33-
private(set) weak var positioningView: NSView?
3433

3534
private var bookmarksMenuPopoverDelegate: BookmarksBarMenuPopoverDelegate? {
3635
delegate as? BookmarksBarMenuPopoverDelegate
@@ -85,7 +84,6 @@ final class BookmarksBarMenuPopover: NSPopover {
8584
tableView.addSubview(v)
8685
}
8786

88-
self.positioningView = positioningView
8987
self.preferredEdge = preferredEdge
9088
viewController.adjustPreferredContentSize(positionedRelativeTo: positioningRect, of: positioningView, at: preferredEdge)
9189
super.show(relativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge)

DuckDuckGo/Common/Extensions/NSPopoverExtension.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
//
1818

1919
import AppKit
20+
import Combine
21+
import os.log
2022

2123
extension NSPopover {
2224

@@ -45,6 +47,22 @@ extension NSPopover {
4547
self.contentViewController?.view.window?.parent ?? Self.mainWindow
4648
}
4749

50+
private static let positioningViewKey = UnsafeRawPointer(bitPattern: "positioningViewKey".hashValue)!
51+
private final class WeakPositioningViewRef: NSObject {
52+
weak var view: NSView?
53+
init(_ view: NSView? = nil) {
54+
self.view = view
55+
}
56+
}
57+
@nonobjc var positioningView: NSView? {
58+
get {
59+
(objc_getAssociatedObject(self, Self.positioningViewKey) as? WeakPositioningViewRef)?.view
60+
}
61+
set {
62+
objc_setAssociatedObject(self, Self.positioningViewKey, newValue.map { WeakPositioningViewRef($0) }, .OBJC_ASSOCIATION_RETAIN)
63+
}
64+
}
65+
4866
/// prefferred bounding box for the popover positioning
4967
@objc var boundingFrame: NSRect {
5068
guard let mainWindow else { return .infinite }
@@ -122,4 +140,36 @@ extension NSPopover {
122140
return nil
123141
}
124142

143+
static let swizzleShowRelativeToRectOnce: () = {
144+
guard let originalMethod = class_getInstanceMethod(NSPopover.self, #selector(show(relativeTo:of:preferredEdge:))),
145+
let swizzledMethod = class_getInstanceMethod(NSPopover.self, #selector(swizzled_show(relativeTo:of:preferredEdge:))) else {
146+
assertionFailure("Methods not available")
147+
return
148+
}
149+
150+
method_exchangeImplementations(originalMethod, swizzledMethod)
151+
}()
152+
153+
// ignore popovers shown from a view not in view hierarchy
154+
// https://app.asana.com/0/1201037661562251/1206407295280737/f
155+
@objc(swizzled_showRelativeToRect:ofView:preferredEdge:)
156+
private dynamic func swizzled_show(relativeTo positioningRect: NSRect, of positioningView: NSView, preferredEdge: NSRectEdge) {
157+
if positioningView.window == nil {
158+
var observer: Cancellable?
159+
observer = positioningView.observe(\.window) { positioningView, _ in
160+
if positioningView.window != nil {
161+
self.swizzled_show(relativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge)
162+
observer?.cancel()
163+
}
164+
}
165+
positioningView.onDeinit {
166+
observer?.cancel()
167+
}
168+
169+
Logger.general.error("trying to present \(self) from \(positioningView) not in view hierarchy")
170+
return
171+
}
172+
self.positioningView = positioningView
173+
self.swizzled_show(relativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge)
174+
}
125175
}

DuckDuckGo/Common/Extensions/WKWebViewConfigurationExtensions.swift

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import Combine
2121
import Common
2222
import WebKit
2323
import UserScript
24-
import os.log
2524

2625
extension WKWebViewConfiguration {
2726

@@ -79,8 +78,6 @@ extension WKWebViewConfiguration {
7978

8079
self.userContentController = userContentController
8180
self.processPool.geolocationProvider = GeolocationProvider(processPool: self.processPool)
82-
83-
_=NSPopover.swizzleShowRelativeToRectOnce
8481
}
8582

8683
}
@@ -111,39 +108,3 @@ extension WKPreferences {
111108
}
112109

113110
}
114-
115-
extension NSPopover {
116-
117-
fileprivate static let swizzleShowRelativeToRectOnce: () = {
118-
guard let originalMethod = class_getInstanceMethod(NSPopover.self, #selector(show(relativeTo:of:preferredEdge:))),
119-
let swizzledMethod = class_getInstanceMethod(NSPopover.self, #selector(swizzled_show(relativeTo:of:preferredEdge:))) else {
120-
assertionFailure("Methods not available")
121-
return
122-
}
123-
124-
method_exchangeImplementations(originalMethod, swizzledMethod)
125-
}()
126-
127-
// ignore popovers shown from a view not in view hierarchy
128-
// https://app.asana.com/0/1201037661562251/1206407295280737/f
129-
@objc(swizzled_showRelativeToRect:ofView:preferredEdge:)
130-
private dynamic func swizzled_show(relativeTo positioningRect: NSRect, of positioningView: NSView, preferredEdge: NSRectEdge) {
131-
if positioningView.window == nil {
132-
var observer: Cancellable?
133-
observer = positioningView.observe(\.window) { positioningView, _ in
134-
if positioningView.window != nil {
135-
self.swizzled_show(relativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge)
136-
observer?.cancel()
137-
}
138-
}
139-
positioningView.onDeinit {
140-
observer?.cancel()
141-
}
142-
143-
Logger.general.error("trying to present \(self) from \(positioningView) not in view hierarchy")
144-
return
145-
}
146-
self.swizzled_show(relativeTo: positioningRect, of: positioningView, preferredEdge: preferredEdge)
147-
}
148-
149-
}

DuckDuckGo/Common/View/AppKit/MouseOverButton.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ internal class MouseOverButton: NSButton, Hoverable {
5353
}
5454
}
5555

56+
@IBInspectable var horizontalPadding: CGFloat = 0
57+
@IBInspectable var verticalPadding: CGFloat = 0
58+
59+
override var intrinsicContentSize: NSSize {
60+
var size = super.intrinsicContentSize
61+
size.width += self.horizontalPadding
62+
size.height += self.verticalPadding
63+
return size
64+
}
65+
5666
var normalTintColor: NSColor? {
5767
didSet {
5868
updateTintColor()

DuckDuckGo/Menus/MainMenu.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,9 @@ final class MainMenu: NSMenu {
304304
toggleFullscreenMenuItem
305305
NSMenuItem.separator()
306306

307-
actualSizeMenuItem
308307
zoomInMenuItem
309308
zoomOutMenuItem
309+
actualSizeMenuItem
310310
NSMenuItem.separator()
311311

312312
NSMenuItem(title: UserText.mainMenuDeveloper) {

DuckDuckGo/Menus/MainMenuActions.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,10 +465,12 @@ extension MainViewController {
465465

466466
@objc func zoomIn(_ sender: Any) {
467467
getActiveTabAndIndex()?.tab.webView.zoomIn()
468+
navigationBarViewController.addressBarViewController?.addressBarButtonsViewController?.openZoomPopover(source: .menu)
468469
}
469470

470471
@objc func zoomOut(_ sender: Any) {
471472
getActiveTabAndIndex()?.tab.webView.zoomOut()
473+
navigationBarViewController.addressBarViewController?.addressBarButtonsViewController?.openZoomPopover(source: .menu)
472474
}
473475

474476
@objc func actualSize(_ sender: Any) {

0 commit comments

Comments
 (0)