Skip to content

Commit 07249b5

Browse files
committed
Add option to disable right-click menu bar overlay (PR jordanbaird#893)
Adapted from upstream PR jordanbaird#893 by rafaelreverberi. - Disabling 'Enable secondary context menu' suppresses Ice right-click menus - Adds Option+Command+click fallback to open Ice settings when disabled - Improves compatibility with apps like DynamicLake - Applied to HIDEventManager.swift and updated settings API for macos-26
1 parent 356d3fe commit 07249b5

3 files changed

Lines changed: 31 additions & 2 deletions

File tree

Ice/Events/HIDEventManager.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ final class HIDEventManager: ObservableObject {
4848
guard let self, isEnabled, let appState, let screen = bestScreen(appState: appState) else {
4949
return event
5050
}
51+
if handleOpenSettingsFallback(with: event, appState: appState, screen: screen) {
52+
return event
53+
}
5154
switch event.type {
5255
case .leftMouseDown:
5356
handleShowOnClick(appState: appState, screen: screen)
@@ -405,6 +408,26 @@ extension HIDEventManager {
405408
}
406409
}
407410

411+
// MARK: Handle Open Settings Fallback
412+
413+
/// When secondary context menus are disabled, ⌥⌘-click in the menu bar opens Ice settings.
414+
@discardableResult
415+
private func handleOpenSettingsFallback(with event: NSEvent, appState: AppState, screen: NSScreen) -> Bool {
416+
guard
417+
!appState.settings.advanced.enableSecondaryContextMenu,
418+
event.type == .leftMouseDown || event.type == .rightMouseDown,
419+
isMouseInsideMenuBar(appState: appState, screen: screen)
420+
else {
421+
return false
422+
}
423+
let modifiers = event.modifierFlags.intersection(.deviceIndependentFlagsMask)
424+
guard modifiers.contains([.option, .command]) else {
425+
return false
426+
}
427+
appState.appDelegate?.openSettingsWindow()
428+
return true
429+
}
430+
408431
// MARK: Handle Prevent Show On Hover
409432

410433
private func handlePreventShowOnHover(with event: NSEvent, appState: AppState, screen: NSScreen) {

Ice/MenuBar/ControlItem/ControlItem.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,14 +459,16 @@ final class ControlItem {
459459
return
460460
}
461461

462+
let enableSecondaryContextMenu = appState?.settings.advanced.enableSecondaryContextMenu ?? true
463+
462464
switch event.type {
463465
case .leftMouseDown:
464466
let modifierFlags = NSEvent.modifierFlags
465467

466468
// Running this from a Task seems to improve the visual
467469
// responsiveness of the status item's button.
468470
Task {
469-
if modifierFlags == .control {
471+
if modifierFlags == .control, enableSecondaryContextMenu {
470472
showMenu()
471473
return
472474
}
@@ -488,6 +490,9 @@ final class ControlItem {
488490
}
489491
}
490492
case .rightMouseUp:
493+
guard enableSecondaryContextMenu else {
494+
return
495+
}
491496
showMenu()
492497
default:
493498
return

Ice/Settings/SettingsPanes/AdvancedSettingsPane.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ struct AdvancedSettingsPane: View {
9696
"""
9797
Right-click in an empty area of the menu bar to display a minimal \
9898
version of Ice's menu. Disable this setting if you encounter conflicts \
99-
with other apps.
99+
with other apps like DynamicLake. When disabled, \
100+
Option + Command + click in the menu bar opens Ice settings.
100101
"""
101102
)
102103
.padding(.trailing, 75)

0 commit comments

Comments
 (0)