mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
Fix: Closing when mouse hover out
This commit is contained in:
parent
e6eaf933ab
commit
4826cb5d44
3 changed files with 34 additions and 3 deletions
|
|
@ -124,13 +124,13 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only close if mouse leaves and the notch is open and no popovers are active
|
// Only close if mouse leaves and the notch is open and no popovers are active
|
||||||
if !hovering && vm.notchState == .open && !vm.isBatteryPopoverActive {
|
if !hovering && vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive {
|
||||||
// Add slight delay for stats tab to prevent accidental closure during layout changes
|
// Add slight delay for stats tab to prevent accidental closure during layout changes
|
||||||
let delay: Double = (coordinator.currentView == .stats) ? 0.2 : 0.0
|
let delay: Double = (coordinator.currentView == .stats) ? 0.2 : 0.0
|
||||||
|
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
|
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
|
||||||
// Double-check conditions after delay
|
// Double-check conditions after delay
|
||||||
if !isHovering && vm.notchState == .open && !vm.isBatteryPopoverActive {
|
if !isHovering && vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive {
|
||||||
vm.close()
|
vm.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -185,6 +185,14 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.onChange(of: vm.shouldRecheckHover) { _, _ in
|
||||||
|
// Recheck hover state when popovers are closed
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||||
|
if vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive && !isHovering {
|
||||||
|
vm.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.sensoryFeedback(.alignment, trigger: haptics)
|
.sensoryFeedback(.alignment, trigger: haptics)
|
||||||
.contextMenu {
|
.contextMenu {
|
||||||
SettingsLink(label: {
|
SettingsLink(label: {
|
||||||
|
|
@ -527,7 +535,7 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the notch if it's open and no popovers are active
|
// Close the notch if it's open and no popovers are active
|
||||||
if vm.notchState == .open && !vm.isBatteryPopoverActive {
|
if vm.notchState == .open && !vm.isBatteryPopoverActive && !vm.isClipboardPopoverActive && !vm.isColorPickerPopoverActive {
|
||||||
vm.close()
|
vm.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,16 @@ struct DynamicIslandHeader: View {
|
||||||
.popover(isPresented: $showClipboardPopover, arrowEdge: .bottom) {
|
.popover(isPresented: $showClipboardPopover, arrowEdge: .bottom) {
|
||||||
ClipboardPopover()
|
ClipboardPopover()
|
||||||
}
|
}
|
||||||
|
.onChange(of: showClipboardPopover) { isActive in
|
||||||
|
vm.isClipboardPopoverActive = isActive
|
||||||
|
|
||||||
|
// If popover was closed, trigger a hover recheck
|
||||||
|
if !isActive {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||||
|
vm.shouldRecheckHover.toggle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
if Defaults[.enableClipboardManager] && !clipboardManager.isMonitoring {
|
if Defaults[.enableClipboardManager] && !clipboardManager.isMonitoring {
|
||||||
clipboardManager.startMonitoring()
|
clipboardManager.startMonitoring()
|
||||||
|
|
@ -117,6 +127,16 @@ struct DynamicIslandHeader: View {
|
||||||
.popover(isPresented: $showColorPickerPopover, arrowEdge: .bottom) {
|
.popover(isPresented: $showColorPickerPopover, arrowEdge: .bottom) {
|
||||||
ColorPickerPopover()
|
ColorPickerPopover()
|
||||||
}
|
}
|
||||||
|
.onChange(of: showColorPickerPopover) { isActive in
|
||||||
|
vm.isColorPickerPopoverActive = isActive
|
||||||
|
|
||||||
|
// If popover was closed, trigger a hover recheck
|
||||||
|
if !isActive {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||||
|
vm.shouldRecheckHover.toggle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if Defaults[.settingsIconInNotch] {
|
if Defaults[.settingsIconInNotch] {
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,9 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
|
||||||
@Published var hideOnClosed: Bool = true
|
@Published var hideOnClosed: Bool = true
|
||||||
@Published var isHoveringCalendar: Bool = false
|
@Published var isHoveringCalendar: Bool = false
|
||||||
@Published var isBatteryPopoverActive: Bool = false
|
@Published var isBatteryPopoverActive: Bool = false
|
||||||
|
@Published var isClipboardPopoverActive: Bool = false
|
||||||
|
@Published var isColorPickerPopoverActive: Bool = false
|
||||||
|
@Published var shouldRecheckHover: Bool = false
|
||||||
|
|
||||||
let webcamManager = WebcamManager.shared
|
let webcamManager = WebcamManager.shared
|
||||||
@Published var isCameraExpanded: Bool = false
|
@Published var isCameraExpanded: Bool = false
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue