fix: bring back mouse hover selection (closes #2317)

This commit is contained in:
decodism authored and Louis Pontoise committed 2023-02-12 19:07:45 +01:00
1 parent f9bb33c49b
commit abe2e0b73b
4 files changed
+26 -23

No files matched your search

+1 -1
View File
@@ -29,7 +29,7 @@ class Preferences {
"quitAppShortcut": "Q",
"hideShowAppShortcut": "H",
"arrowKeysEnabled": "true",
"mouseHoverEnabled": "true",
"mouseHoverEnabled": "false",
"cursorFollowFocusEnabled": "false",
"showMinimizedWindows": ShowHowPreference.show.rawValue,
"showMinimizedWindows2": ShowHowPreference.show.rawValue,
+11 -10
View File
@@ -36,11 +36,11 @@ class Windows {
if let app = Applications.find(NSWorkspace.shared.frontmostApplication?.processIdentifier),
app.focusedWindow == nil,
let lastFocusedWindowIndex = getLastFocusedWindowIndex() {
updateFocusedWindowIndex(lastFocusedWindowIndex)
updateHoveredAndFocusedWindowIndexes(lastFocusedWindowIndex)
} else {
cycleFocusedWindowIndex(1)
if focusedWindowIndex == 0 {
updateFocusedWindowIndex(0)
updateHoveredAndFocusedWindowIndexes(0)
}
}
}
@@ -99,22 +99,23 @@ class Windows {
return nil
}
static func updateFocusedWindowIndex(_ newIndex: Int, _ fromMouse: Bool = false) {
if (fromMouse && newIndex == hoveredWindowIndex) || (!fromMouse && newIndex == focusedWindowIndex) {
return
}
if fromMouse {
static func updateHoveredAndFocusedWindowIndexes(_ newIndex: Int, _ fromMouse: Bool = false) {
var index: Int?
if fromMouse && newIndex != hoveredWindowIndex {
let oldIndex = hoveredWindowIndex
hoveredWindowIndex = newIndex
if let oldIndex = oldIndex {
ThumbnailsView.highlight(oldIndex)
}
} else {
index = hoveredWindowIndex
}
if (!fromMouse || Preferences.mouseHoverEnabled) && newIndex != focusedWindowIndex {
let oldIndex = focusedWindowIndex
focusedWindowIndex = newIndex
ThumbnailsView.highlight(oldIndex)
index = focusedWindowIndex
}
let index = fromMouse ? hoveredWindowIndex! : focusedWindowIndex
guard let index = index else { return }
ThumbnailsView.highlight(index)
let focusedView = ThumbnailsView.recycledViews[index]
App.app.thumbnailsPanel.thumbnailsView.scrollView.contentView.scrollToVisible(focusedView.frame)
@@ -143,7 +144,7 @@ class Windows {
(KeyRepeatTimer.isARepeat || KeyRepeatTimer.timer?.isValid ?? false) {
return
}
updateFocusedWindowIndex(nextIndex)
updateHoveredAndFocusedWindowIndexes(nextIndex)
}
static func windowIndexAfterCycling(_ step: Int) -> Int {
+2 -4
View File
@@ -186,7 +186,7 @@ class ThumbnailView: NSStackView {
windowlessIcon.needsDisplay = true
}
self.mouseUpCallback = { () -> Void in App.app.focusSelectedWindow(element) }
self.mouseMovedCallback = { () -> Void in Windows.updateFocusedWindowIndex(index, true) }
self.mouseMovedCallback = { () -> Void in Windows.updateHoveredAndFocusedWindowIndexes(index, true) }
[quitIcon, closeIcon, minimizeIcon, maximizeIcon].forEach { $0.window_ = element }
showOrHideWindowControls(false)
// force a display to avoid flickering; see https://github.com/lwouis/alt-tab-macos/issues/197
@@ -263,9 +263,7 @@ class ThumbnailView: NSStackView {
func mouseMoved() {
showOrHideWindowControls(true)
if Preferences.mouseHoverEnabled {
mouseMovedCallback()
}
mouseMovedCallback()
}
override func mouseUp(with event: NSEvent) {
+12 -8
View File
@@ -71,7 +71,7 @@ class ThumbnailsView: NSVisualEffectView {
return leadingSide ? NSMinX($0.frame) < originCenter : NSMaxX($0.frame) > originCenter
} ?? iterable.last!
let targetIndex = ThumbnailsView.recycledViews.firstIndex(of: targetView)!
Windows.updateFocusedWindowIndex(targetIndex)
Windows.updateHoveredAndFocusedWindowIndexes(targetIndex)
}
}
@@ -228,6 +228,14 @@ class ScrollView: NSScrollView {
self?.isCurrentlyScrolling = true
}
}
private func resetHoveredWindow() {
if let oldIndex = Windows.hoveredWindowIndex {
Windows.hoveredWindowIndex = nil
ThumbnailsView.highlight(oldIndex)
ThumbnailsView.recycledViews[oldIndex].showOrHideWindowControls(false)
}
}
override func mouseMoved(with event: NSEvent) {
// disable mouse hover during scrolling as it creates jank during elastic bounces at the start/end of the scrollview
@@ -245,19 +253,15 @@ class ScrollView: NSScrollView {
let target = target as! ThumbnailView
target.mouseMoved()
} else {
previousTarget?.showOrHideWindowControls(false)
resetHoveredWindow()
}
} else {
previousTarget?.showOrHideWindowControls(false)
resetHoveredWindow()
}
}
override func mouseExited(with event: NSEvent) {
if let oldIndex = Windows.hoveredWindowIndex {
Windows.hoveredWindowIndex = nil
ThumbnailsView.highlight(oldIndex)
ThumbnailsView.recycledViews[oldIndex].showOrHideWindowControls(false)
}
resetHoveredWindow()
}
/// holding shift and using the scrolling wheel will generate a horizontal movement