Kaynağa Gözat

Hide traffic light buttons on the system print dialog.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 ay önce
ebeveyn
işleme
c201f6192a
1 değiştirilmiş dosya ile 32 ekleme ve 0 silme
  1. 32 0
      smart_printer/PrintService.swift

+ 32 - 0
smart_printer/PrintService.swift

@@ -165,9 +165,41 @@ enum PrintService {
 
         NSApp.activate(ignoringOtherApps: true)
         window?.makeKeyAndOrderFront(nil)
+
+        let observer = observePrintPanelTrafficLights()
+        defer { NotificationCenter.default.removeObserver(observer) }
         _ = operation.run()
     }
 
+    private static func observePrintPanelTrafficLights() -> NSObjectProtocol {
+        NotificationCenter.default.addObserver(
+            forName: NSWindow.didBecomeKeyNotification,
+            object: nil,
+            queue: .main
+        ) { notification in
+            guard let panelWindow = notification.object as? NSWindow,
+                  isPrintPanelWindow(panelWindow) else { return }
+            hideTrafficLights(on: panelWindow)
+            DispatchQueue.main.async {
+                hideTrafficLights(on: panelWindow)
+            }
+        }
+    }
+
+    private static func isPrintPanelWindow(_ window: NSWindow) -> Bool {
+        let className = String(describing: type(of: window))
+        if className.localizedCaseInsensitiveContains("printpanel") {
+            return true
+        }
+        return window.title == "Print"
+    }
+
+    private static func hideTrafficLights(on window: NSWindow) {
+        for buttonType: NSWindow.ButtonType in [.closeButton, .miniaturizeButton, .zoomButton] {
+            window.standardWindowButton(buttonType)?.isHidden = true
+        }
+    }
+
     private static func configuredPrintInfo() -> NSPrintInfo {
         let printInfo = (NSPrintInfo.shared.copy() as? NSPrintInfo) ?? NSPrintInfo()