@@ -15,49 +15,52 @@ class StatusBarController {
15
15
16
16
//MARK: - BarItems
17
17
18
- private let expandCollapseStatusBar = NSStatusBar . system. statusItem ( withLength: NSStatusItem . variableLength)
19
- private let separateStatusBar = NSStatusBar . system. statusItem ( withLength: NSStatusItem . variableLength )
20
- private var alwayHideSeparateStatusBar : NSStatusItem ? = nil
18
+ private let btnExpandCollapse = NSStatusBar . system. statusItem ( withLength: NSStatusItem . variableLength)
19
+ private let btnSeparate = NSStatusBar . system. statusItem ( withLength: 1 )
20
+ private var btnAlwaysHidden : NSStatusItem ? = nil
21
21
22
- private var normalSeparateStatusBarIconLength : CGFloat { return Preferences . areSeparatorsHidden ? 0 : 20 }
23
- private let collapseSeparateStatusBarIconLength : CGFloat = 10000
22
+ private var btnHiddenLength : CGFloat = 20
23
+ private let btnHiddenCollapseLength : CGFloat = 10000
24
24
25
- private let normalTerminateStatusBarIconLength : CGFloat = Preferences . alwaysHiddenSectionEnabled ? 20 : 0
26
- private let collapseTerminateStatusBarIconLength : CGFloat = Preferences . alwaysHiddenSectionEnabled ? 10000 : 0
25
+ private let btnAlwaysHiddenLength : CGFloat = Preferences . alwaysHiddenSectionEnabled ? 20 : 0
26
+ private let btnAlwaysHiddenEnableExpandCollapseLength : CGFloat = Preferences . alwaysHiddenSectionEnabled ? 10000 : 0
27
27
28
28
private let imgIconLine = NSImage ( named: NSImage . Name ( " ic_line " ) )
29
29
30
30
private var isCollapsed : Bool {
31
- return self . separateStatusBar . length == self . collapseSeparateStatusBarIconLength
31
+ return self . btnSeparate . length == self . btnHiddenCollapseLength
32
32
}
33
33
34
- private var isValidPosition : Bool {
34
+ private var isBtnSeparateValidPosition : Bool {
35
35
guard
36
- let expandBarButtonX = self . expandCollapseStatusBar . button? . getOrigin? . x,
37
- let separateBarButtonX = self . separateStatusBar . button? . getOrigin? . x
36
+ let btnExpandCollapseX = self . btnExpandCollapse . button? . getOrigin? . x,
37
+ let btnSeparateX = self . btnSeparate . button? . getOrigin? . x
38
38
else { return false }
39
39
40
40
if Constant . isUsingLTRLanguage {
41
- return expandBarButtonX >= separateBarButtonX
41
+ return btnExpandCollapseX >= btnSeparateX
42
42
} else {
43
- return expandBarButtonX <= separateBarButtonX
43
+ return btnExpandCollapseX <= btnSeparateX
44
44
}
45
45
}
46
- private var isValidTogglablePosition : Bool {
46
+
47
+ private var isBtnAlwaysHiddenValidPosition : Bool {
47
48
if !Preferences. alwaysHiddenSectionEnabled { return true }
48
49
49
50
guard
50
- let separateBarButtonX = self . separateStatusBar . button? . getOrigin? . x,
51
- let terminateBarButtonX = self . alwayHideSeparateStatusBar ? . button? . getOrigin? . x
51
+ let btnSeparateX = self . btnSeparate . button? . getOrigin? . x,
52
+ let btnAlwaysHiddenX = self . btnAlwaysHidden ? . button? . getOrigin? . x
52
53
else { return false }
53
54
54
55
if Constant . isUsingLTRLanguage {
55
- return separateBarButtonX >= terminateBarButtonX
56
+ return btnSeparateX >= btnAlwaysHiddenX
56
57
} else {
57
- return separateBarButtonX <= terminateBarButtonX
58
+ return btnSeparateX <= btnAlwaysHiddenX
58
59
}
59
60
}
60
61
62
+ private var isToggle = false
63
+
61
64
//MARK: - Methods
62
65
init ( ) {
63
66
@@ -72,27 +75,27 @@ class StatusBarController {
72
75
}
73
76
74
77
private func setupUI( ) {
75
- if let button = separateStatusBar . button {
78
+ if let button = btnSeparate . button {
76
79
button. image = self . imgIconLine
77
80
}
78
81
let menu = self . getContextMenu ( )
79
- separateStatusBar . menu = menu
82
+ btnSeparate . menu = menu
80
83
81
84
updateAutoCollapseMenuTitle ( )
82
85
83
- if let button = expandCollapseStatusBar . button {
86
+ if let button = btnExpandCollapse . button {
84
87
button. image = Assets . collapseImage
85
88
button. target = self
86
89
87
- button. action = #selector( self . expandCollapseButtonPressed ( sender: ) )
90
+ button. action = #selector( self . btnExpandCollapsePressed ( sender: ) )
88
91
button. sendAction ( on: [ . leftMouseUp, . rightMouseUp] )
89
92
}
90
93
91
- expandCollapseStatusBar . autosaveName = " hiddenbar_expandcollapse " ;
92
- separateStatusBar . autosaveName = " hiddenbar_separate " ;
94
+ btnExpandCollapse . autosaveName = " hiddenbar_expandcollapse " ;
95
+ btnSeparate . autosaveName = " hiddenbar_separate " ;
93
96
}
94
97
95
- @objc func expandCollapseButtonPressed ( sender: NSStatusBarButton ) {
98
+ @objc func btnExpandCollapsePressed ( sender: NSStatusBarButton ) {
96
99
if let event = NSApp . currentEvent {
97
100
98
101
let isOptionKeyPressed = event. modifierFlags. contains ( NSEvent . ModifierFlags. option)
@@ -115,53 +118,59 @@ class StatusBarController {
115
118
Preferences . areSeparatorsHidden = false
116
119
117
120
if !self . isCollapsed {
118
- self . separateStatusBar . length = self . normalSeparateStatusBarIconLength
121
+ self . btnSeparate . length = self . btnHiddenLength
119
122
}
120
- self . alwayHideSeparateStatusBar ? . length = self . normalTerminateStatusBarIconLength
123
+ self . btnAlwaysHidden ? . length = self . btnAlwaysHiddenLength
121
124
}
122
125
123
126
private func hideSeparators( ) {
124
- guard self . isValidTogglablePosition else { return }
127
+ guard self . isBtnAlwaysHiddenValidPosition else { return }
125
128
126
129
Preferences . areSeparatorsHidden = true
127
130
128
131
if !self . isCollapsed {
129
- self . separateStatusBar . length = self . normalSeparateStatusBarIconLength
132
+ self . btnSeparate . length = self . btnHiddenLength
130
133
}
131
- self . alwayHideSeparateStatusBar ? . length = self . collapseTerminateStatusBarIconLength
134
+ self . btnAlwaysHidden ? . length = self . btnAlwaysHiddenEnableExpandCollapseLength
132
135
}
133
136
134
137
func expandCollapseIfNeeded( ) {
138
+ //prevented rapid click cause icon show many in Dock
139
+ if isToggle { return }
140
+ isToggle = true
135
141
self . isCollapsed ? self . expandMenubar ( ) : self . collapseMenuBar ( )
142
+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.3 ) {
143
+ self . isToggle = false
144
+ }
136
145
}
137
146
138
147
private func collapseMenuBar( ) {
139
- guard self . isValidPosition && !self . isCollapsed else {
148
+ guard self . isBtnSeparateValidPosition && !self . isCollapsed else {
140
149
autoCollapseIfNeeded ( )
141
150
return
142
151
}
143
152
144
- separateStatusBar . length = self . collapseSeparateStatusBarIconLength
145
- if let button = expandCollapseStatusBar . button {
153
+ btnSeparate . length = self . btnHiddenCollapseLength
154
+ if let button = btnExpandCollapse . button {
146
155
button. image = Assets . expandImage
147
156
}
148
157
if Preferences . useFullStatusBarOnExpandEnabled {
149
158
NSApp . setActivationPolicy ( . accessory)
150
159
NSApp . deactivate ( )
151
160
}
152
161
}
153
-
154
162
private func expandMenubar( ) {
155
163
guard self . isCollapsed else { return }
156
- separateStatusBar . length = normalSeparateStatusBarIconLength
157
- if let button = expandCollapseStatusBar . button {
164
+ btnSeparate . length = btnHiddenLength
165
+ if let button = btnExpandCollapse . button {
158
166
button. image = Assets . collapseImage
159
167
}
160
168
autoCollapseIfNeeded ( )
161
169
162
170
if Preferences . useFullStatusBarOnExpandEnabled {
163
171
NSApp . setActivationPolicy ( . regular)
164
172
NSApp . activate ( ignoringOtherApps: true )
173
+
165
174
}
166
175
}
167
176
@@ -203,7 +212,7 @@ class StatusBarController {
203
212
}
204
213
205
214
private func updateAutoCollapseMenuTitle( ) {
206
- guard let toggleAutoHideItem = separateStatusBar . menu? . item ( withTag: 1 ) else { return }
215
+ guard let toggleAutoHideItem = btnSeparate . menu? . item ( withTag: 1 ) else { return }
207
216
if Preferences . isAutoHide {
208
217
toggleAutoHideItem. title = " Disable Auto Collapse " . localized
209
218
} else {
@@ -234,15 +243,15 @@ extension StatusBarController {
234
243
}
235
244
@objc private func toggleStatusBarIfNeeded( ) {
236
245
if Preferences . alwaysHiddenSectionEnabled {
237
- self . alwayHideSeparateStatusBar = NSStatusBar . system. statusItem ( withLength: 20 )
238
- if let button = alwayHideSeparateStatusBar ? . button {
246
+ self . btnAlwaysHidden = NSStatusBar . system. statusItem ( withLength: 20 )
247
+ if let button = btnAlwaysHidden ? . button {
239
248
button. image = self . imgIconLine
240
249
button. appearsDisabled = true
241
250
}
242
- self . alwayHideSeparateStatusBar ? . autosaveName = " hiddenbar_terminate " ;
251
+ self . btnAlwaysHidden ? . autosaveName = " hiddenbar_terminate " ;
243
252
244
253
} else {
245
- self . alwayHideSeparateStatusBar = nil
254
+ self . btnAlwaysHidden = nil
246
255
}
247
256
}
248
257
}
0 commit comments