From 7ce19dfe46bd2c03a7dbad7e40cd0a09dd194cce Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Sun, 21 Dec 2025 15:45:05 +0530 Subject: [PATCH] BugFix: System Share Menu Close --- DynamicIsland/ContentView.swift | 23 +++++++++++++++---- .../Shelf/Views/FileShareView.swift | 3 +++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/DynamicIsland/ContentView.swift b/DynamicIsland/ContentView.swift index ace6cff..8d2e3ea 100644 --- a/DynamicIsland/ContentView.swift +++ b/DynamicIsland/ContentView.swift @@ -248,14 +248,14 @@ struct ContentView: View { } .onChange(of: vm.isBatteryPopoverActive) { _, newPopoverState in runAfter(0.1) { - if !newPopoverState && !isHovering && vm.notchState == .open && !vm.isStatsPopoverActive && !vm.isMediaOutputPopoverActive && !vm.isReminderPopoverActive { + if !newPopoverState && !isHovering && vm.notchState == .open && !shouldPreventAutoClose() { vm.close() } } } .onChange(of: vm.isStatsPopoverActive) { _, newPopoverState in runAfter(0.1) { - if !newPopoverState && !isHovering && vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive && !vm.isMediaOutputPopoverActive && !vm.isReminderPopoverActive { + if !newPopoverState && !isHovering && vm.notchState == .open && !shouldPreventAutoClose() { vm.close() } } @@ -263,7 +263,14 @@ struct ContentView: View { .onChange(of: vm.shouldRecheckHover) { _, _ in // Recheck hover state when popovers are closed runAfter(0.1) { - if vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive && !vm.isStatsPopoverActive && !vm.isMediaOutputPopoverActive && !vm.isReminderPopoverActive && !isHovering { + if vm.notchState == .open && !shouldPreventAutoClose() && !isHovering { + vm.close() + } + } + } + .onReceive(NotificationCenter.default.publisher(for: .sharingDidFinish)) { _ in + runAfter(0.1) { + if vm.notchState == .open && !isHovering && !shouldPreventAutoClose() { vm.close() } } @@ -737,7 +744,9 @@ struct ContentView: View { } vm.dropEvent = false - vm.close() + if !shouldPreventAutoClose() { + vm.close() + } } } } else { @@ -800,7 +809,7 @@ struct ContentView: View { self.isHovering = false } - if self.vm.notchState == .open && !self.hasAnyActivePopovers() { + if self.vm.notchState == .open && !self.shouldPreventAutoClose() { self.vm.close() } } @@ -818,6 +827,10 @@ struct ContentView: View { vm.isMediaOutputPopoverActive || vm.isReminderPopoverActive } + + private func shouldPreventAutoClose() -> Bool { + hasAnyActivePopovers() || SharingStateManager.shared.preventNotchClose + } // Helper to prevent rapid haptic feedback private func triggerHapticIfAllowed() { diff --git a/DynamicIsland/components/Shelf/Views/FileShareView.swift b/DynamicIsland/components/Shelf/Views/FileShareView.swift index ee1ca47..f70c5df 100644 --- a/DynamicIsland/components/Shelf/Views/FileShareView.swift +++ b/DynamicIsland/components/Shelf/Views/FileShareView.swift @@ -87,9 +87,12 @@ struct FileShareView: View { Text(selectedProvider.id) .font(.system(.headline, design: .rounded)) .foregroundColor(.white.opacity(0.8)) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity) } .padding(18) + .frame(maxWidth: .infinity) // Loading overlay if isProcessing || quickShare.isPickerOpen {