mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
Fix terminal keyboard open + sticky outside-click
This commit is contained in:
parent
a4d34b7f0f
commit
0f034b8528
2 changed files with 19 additions and 6 deletions
|
|
@ -82,6 +82,7 @@ struct ContentView: View {
|
||||||
@Default(.showStandardMediaControls) var showStandardMediaControls
|
@Default(.showStandardMediaControls) var showStandardMediaControls
|
||||||
@Default(.externalDisplayStyle) var externalDisplayStyle
|
@Default(.externalDisplayStyle) var externalDisplayStyle
|
||||||
@Default(.hideNonNotchUntilHover) var hideNonNotchUntilHover
|
@Default(.hideNonNotchUntilHover) var hideNonNotchUntilHover
|
||||||
|
@Default(.terminalStickyMode) var terminalStickyMode
|
||||||
|
|
||||||
// Dynamic sizing based on view type and graph count with smooth transitions
|
// Dynamic sizing based on view type and graph count with smooth transitions
|
||||||
var dynamicNotchSize: CGSize {
|
var dynamicNotchSize: CGSize {
|
||||||
|
|
@ -520,6 +521,7 @@ struct ContentView: View {
|
||||||
currentView: currentViewString
|
currentView: currentViewString
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
syncStickyTerminalOutsideClickMonitor()
|
||||||
}
|
}
|
||||||
.sensoryFeedback(.alignment, trigger: haptics)
|
.sensoryFeedback(.alignment, trigger: haptics)
|
||||||
.contextMenu {
|
.contextMenu {
|
||||||
|
|
@ -546,12 +548,6 @@ struct ContentView: View {
|
||||||
)
|
)
|
||||||
.frame(maxHeight: .infinity, alignment: .top)
|
.frame(maxHeight: .infinity, alignment: .top)
|
||||||
.environmentObject(privacyManager)
|
.environmentObject(privacyManager)
|
||||||
.onChange(of: dynamicNotchSize) { oldSize, newSize in
|
|
||||||
guard oldSize != newSize else { return }
|
|
||||||
runAfter(0.1) {
|
|
||||||
vm.shouldRecheckHover.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.background(dragDetector)
|
.background(dragDetector)
|
||||||
.environmentObject(vm)
|
.environmentObject(vm)
|
||||||
.environmentObject(webcamManager)
|
.environmentObject(webcamManager)
|
||||||
|
|
@ -566,6 +562,9 @@ struct ContentView: View {
|
||||||
enqueueMusicControlWindowSync(forceRefresh: true)
|
enqueueMusicControlWindowSync(forceRefresh: true)
|
||||||
startHiddenEdgeHoverPolling()
|
startHiddenEdgeHoverPolling()
|
||||||
}
|
}
|
||||||
|
.onChange(of: terminalStickyMode) { _, _ in
|
||||||
|
syncStickyTerminalOutsideClickMonitor()
|
||||||
|
}
|
||||||
.onChange(of: vm.notchState) { _, state in
|
.onChange(of: vm.notchState) { _, state in
|
||||||
if state == .open {
|
if state == .open {
|
||||||
suppressMusicControlWindowUpdates()
|
suppressMusicControlWindowUpdates()
|
||||||
|
|
@ -1752,6 +1751,16 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Installs the global outside-click monitor when Terminal + sticky mode are active (e.g. keyboard-opened terminal).
|
||||||
|
/// Removes the monitor when the tab, sticky setting, or open state no longer applies.
|
||||||
|
private func syncStickyTerminalOutsideClickMonitor() {
|
||||||
|
guard vm.notchState == .open, terminalStickyMode, coordinator.currentView == .terminal else {
|
||||||
|
removeStickyTerminalClickMonitor()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
installStickyTerminalClickMonitor()
|
||||||
|
}
|
||||||
|
|
||||||
private func installStickyTerminalClickMonitor() {
|
private func installStickyTerminalClickMonitor() {
|
||||||
guard stickyTerminalClickMonitor == nil else { return }
|
guard stickyTerminalClickMonitor == nil else { return }
|
||||||
stickyTerminalClickMonitor = NSEvent.addGlobalMonitorForEvents(matching: [.leftMouseDown]) { [weak vm] _ in
|
stickyTerminalClickMonitor = NSEvent.addGlobalMonitorForEvents(matching: [.leftMouseDown]) { [weak vm] _ in
|
||||||
|
|
|
||||||
|
|
@ -1041,12 +1041,16 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
guard Defaults[.enableShortcuts], Defaults[.enableTerminalFeature] else { return }
|
guard Defaults[.enableShortcuts], Defaults[.enableTerminalFeature] else { return }
|
||||||
|
|
||||||
if vm.notchState == .closed {
|
if vm.notchState == .closed {
|
||||||
|
closeNotchWorkItem?.cancel()
|
||||||
|
closeNotchWorkItem = nil
|
||||||
vm.open()
|
vm.open()
|
||||||
coordinator.currentView = .terminal
|
coordinator.currentView = .terminal
|
||||||
} else {
|
} else {
|
||||||
if coordinator.currentView == .terminal {
|
if coordinator.currentView == .terminal {
|
||||||
vm.close()
|
vm.close()
|
||||||
} else {
|
} else {
|
||||||
|
closeNotchWorkItem?.cancel()
|
||||||
|
closeNotchWorkItem = nil
|
||||||
coordinator.currentView = .terminal
|
coordinator.currentView = .terminal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue