Преглед на файлове

Fix clicks on the photo preview overlay reaching home page cards.

Hide underlying content while the overlay is open and block hit-testing so feature cards underneath no longer activate.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 преди 1 месец
родител
ревизия
71c2d0e64b
променени са 2 файла, в които са добавени 22 реда и са изтрити 12 реда
  1. 19 12
      smart_printer/PhotoPreviewView.swift
  2. 3 0
      smart_printer/ViewController.swift

+ 19 - 12
smart_printer/PhotoPreviewView.swift

@@ -16,6 +16,8 @@ enum PhotoPreviewService {
 final class PhotoPreviewOverlayView: NSView, AppearanceRefreshable {
     var onDismiss: (() -> Void)?
 
+    override var mouseDownCanMoveWindow: Bool { false }
+
     private let urls: [URL]
     private var currentIndex = 0
     private var securityAccess: [URL: Bool] = [:]
@@ -114,21 +116,26 @@ final class PhotoPreviewOverlayView: NSView, AppearanceRefreshable {
     }
 
     func present(in parent: NSView) {
-        guard superview == nil else { return }
-        parent.addSubview(self)
-        NSLayoutConstraint.activate([
-            leadingAnchor.constraint(equalTo: parent.leadingAnchor),
-            trailingAnchor.constraint(equalTo: parent.trailingAnchor),
-            topAnchor.constraint(equalTo: parent.topAnchor),
-            bottomAnchor.constraint(equalTo: parent.bottomAnchor),
-        ])
-        alphaValue = 0
-        NSAnimationContext.runAnimationGroup { context in
-            context.duration = 0.2
-            animator().alphaValue = 1
+        if superview == nil {
+            parent.addSubview(self)
+            NSLayoutConstraint.activate([
+                leadingAnchor.constraint(equalTo: parent.leadingAnchor),
+                trailingAnchor.constraint(equalTo: parent.trailingAnchor),
+                topAnchor.constraint(equalTo: parent.topAnchor),
+                bottomAnchor.constraint(equalTo: parent.bottomAnchor),
+            ])
+            alphaValue = 1
+        } else {
+            parent.addSubview(self, positioned: .above, relativeTo: nil)
         }
     }
 
+    override func hitTest(_ point: NSPoint) -> NSView? {
+        let hit = super.hitTest(point)
+        if hit != nil { return hit }
+        return bounds.contains(point) ? self : nil
+    }
+
     func dismiss(animated: Bool = true) {
         stopSecurityAccess()
         let remove = { [weak self] in

+ 3 - 0
smart_printer/ViewController.swift

@@ -251,9 +251,12 @@ class ViewController: NSViewController {
         scanFileOverlay?.dismiss(animated: false)
         dismissScannerOverlay()
 
+        contentContainer.isHidden = true
+
         let overlay = PhotoPreviewOverlayView(urls: urls)
         overlay.onDismiss = { [weak self] in
             self?.photoPreviewOverlay = nil
+            self?.restoreContentAfterOverlay()
         }
         photoPreviewOverlay = overlay
         overlay.present(in: mainContentView)