Skip to content

Commit fc4ec0c

Browse files
Bugs/fix separated bar disappeared on aways hidden enable (#189)
* Refactor status bar buttons name * Fix show Preferences Window in Use Full menu mode * Fix rapid trigger cause many App icons appeared in Dock * Add letter for Spacer to set Hotkey * Reduce Menubar icon width to save some space * Regenarate icons remove white background * Bump version
1 parent 7c591c6 commit fc4ec0c

23 files changed

+93
-85
lines changed

Hidden Bar.xcodeproj/project.pbxproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@
605605
CODE_SIGN_IDENTITY = "Mac Developer";
606606
CODE_SIGN_STYLE = Automatic;
607607
COMBINE_HIDPI_IMAGES = YES;
608-
CURRENT_PROJECT_VERSION = 12;
608+
CURRENT_PROJECT_VERSION = 13;
609609
DEVELOPMENT_TEAM = W777S7V8TN;
610610
ENABLE_HARDENED_RUNTIME = YES;
611611
INFOPLIST_FILE = hidden/Info.plist;
@@ -630,7 +630,7 @@
630630
CODE_SIGN_IDENTITY = "Mac Developer";
631631
CODE_SIGN_STYLE = Automatic;
632632
COMBINE_HIDPI_IMAGES = YES;
633-
CURRENT_PROJECT_VERSION = 12;
633+
CURRENT_PROJECT_VERSION = 13;
634634
DEVELOPMENT_TEAM = W777S7V8TN;
635635
ENABLE_HARDENED_RUNTIME = YES;
636636
INFOPLIST_FILE = hidden/Info.plist;

hidden/AppDelegate.swift

-7
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,6 @@ class AppDelegate: NSObject, NSApplicationDelegate{
5959
hotKey = HotKey(keyCombo: KeyCombo(carbonKeyCode: globalKey.keyCode, carbonModifiers: globalKey.carbonFlags))
6060
}
6161

62-
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
63-
// Handle open preferences window
64-
Util.showPrefWindow()
65-
66-
return true
67-
}
68-
6962
func detectLTRLang() {
7063
// Languages like Arabic uses right to left (RTL) writing direction,
7164
// so some behavier of the app needs to be changed in these cases
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,68 @@
11
{
22
"images" : [
33
{
4-
"size" : "16x16",
4+
"filename" : "icon_16@1x.png",
55
"idiom" : "mac",
6-
"filename" : "hidden-16.png",
7-
"scale" : "1x"
6+
"scale" : "1x",
7+
"size" : "16x16"
88
},
99
{
10-
"size" : "16x16",
10+
"filename" : "icon_16@2x.png",
1111
"idiom" : "mac",
12-
"filename" : "hidden-32.png",
13-
"scale" : "2x"
12+
"scale" : "2x",
13+
"size" : "16x16"
1414
},
1515
{
16-
"size" : "32x32",
16+
"filename" : "icon_32@1x.png",
1717
"idiom" : "mac",
18-
"filename" : "hidden-32.png",
19-
"scale" : "1x"
18+
"scale" : "1x",
19+
"size" : "32x32"
2020
},
2121
{
22-
"size" : "32x32",
22+
"filename" : "icon_32@2x.png",
2323
"idiom" : "mac",
24-
"filename" : "hidden-64.png",
25-
"scale" : "2x"
24+
"scale" : "2x",
25+
"size" : "32x32"
2626
},
2727
{
28-
"size" : "128x128",
28+
"filename" : "icon_128@1x.png",
2929
"idiom" : "mac",
30-
"filename" : "hidden-128.png",
31-
"scale" : "1x"
30+
"scale" : "1x",
31+
"size" : "128x128"
3232
},
3333
{
34-
"size" : "128x128",
34+
"filename" : "icon_128@2x.png",
3535
"idiom" : "mac",
36-
"filename" : "hidden-256.png",
37-
"scale" : "2x"
36+
"scale" : "2x",
37+
"size" : "128x128"
3838
},
3939
{
40-
"size" : "256x256",
40+
"filename" : "icon_256@1x.png",
4141
"idiom" : "mac",
42-
"filename" : "hidden-256.png",
43-
"scale" : "1x"
42+
"scale" : "1x",
43+
"size" : "256x256"
4444
},
4545
{
46-
"size" : "256x256",
46+
"filename" : "icon_256@2x.png",
4747
"idiom" : "mac",
48-
"filename" : "hidden-512.png",
49-
"scale" : "2x"
48+
"scale" : "2x",
49+
"size" : "256x256"
5050
},
5151
{
52-
"size" : "512x512",
52+
"filename" : "icon_512@1x.png",
5353
"idiom" : "mac",
54-
"filename" : "hidden-512.png",
55-
"scale" : "1x"
54+
"scale" : "1x",
55+
"size" : "512x512"
5656
},
5757
{
58-
"size" : "512x512",
58+
"filename" : "icon_512@2x.png",
5959
"idiom" : "mac",
60-
"filename" : "hidden-1024.png",
61-
"scale" : "2x"
60+
"scale" : "2x",
61+
"size" : "512x512"
6262
}
6363
],
6464
"info" : {
65-
"version" : 1,
66-
"author" : "xcode"
65+
"author" : "xcode",
66+
"version" : 1
6767
}
68-
}
68+
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

hidden/Base.lproj/Main.storyboard

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
2+
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="19142.2" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
33
<dependencies>
44
<deployment identifier="macosx"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19142.2"/>
66
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
77
</dependencies>
88
<scenes>

hidden/Features/StatusBar/StatusBarController.swift

+50-41
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,52 @@ class StatusBarController {
1515

1616
//MARK: - BarItems
1717

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
2121

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
2424

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
2727

2828
private let imgIconLine = NSImage(named:NSImage.Name("ic_line"))
2929

3030
private var isCollapsed: Bool {
31-
return self.separateStatusBar.length == self.collapseSeparateStatusBarIconLength
31+
return self.btnSeparate.length == self.btnHiddenCollapseLength
3232
}
3333

34-
private var isValidPosition: Bool {
34+
private var isBtnSeparateValidPosition: Bool {
3535
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
3838
else {return false}
3939

4040
if Constant.isUsingLTRLanguage {
41-
return expandBarButtonX >= separateBarButtonX
41+
return btnExpandCollapseX >= btnSeparateX
4242
} else {
43-
return expandBarButtonX <= separateBarButtonX
43+
return btnExpandCollapseX <= btnSeparateX
4444
}
4545
}
46-
private var isValidTogglablePosition: Bool {
46+
47+
private var isBtnAlwaysHiddenValidPosition: Bool {
4748
if !Preferences.alwaysHiddenSectionEnabled { return true }
4849

4950
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
5253
else {return false}
5354

5455
if Constant.isUsingLTRLanguage {
55-
return separateBarButtonX >= terminateBarButtonX
56+
return btnSeparateX >= btnAlwaysHiddenX
5657
} else {
57-
return separateBarButtonX <= terminateBarButtonX
58+
return btnSeparateX <= btnAlwaysHiddenX
5859
}
5960
}
6061

62+
private var isToggle = false
63+
6164
//MARK: - Methods
6265
init() {
6366

@@ -72,27 +75,27 @@ class StatusBarController {
7275
}
7376

7477
private func setupUI() {
75-
if let button = separateStatusBar.button {
78+
if let button = btnSeparate.button {
7679
button.image = self.imgIconLine
7780
}
7881
let menu = self.getContextMenu()
79-
separateStatusBar.menu = menu
82+
btnSeparate.menu = menu
8083

8184
updateAutoCollapseMenuTitle()
8285

83-
if let button = expandCollapseStatusBar.button {
86+
if let button = btnExpandCollapse.button {
8487
button.image = Assets.collapseImage
8588
button.target = self
8689

87-
button.action = #selector(self.expandCollapseButtonPressed(sender:))
90+
button.action = #selector(self.btnExpandCollapsePressed(sender:))
8891
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
8992
}
9093

91-
expandCollapseStatusBar.autosaveName = "hiddenbar_expandcollapse";
92-
separateStatusBar.autosaveName = "hiddenbar_separate";
94+
btnExpandCollapse.autosaveName = "hiddenbar_expandcollapse";
95+
btnSeparate.autosaveName = "hiddenbar_separate";
9396
}
9497

95-
@objc func expandCollapseButtonPressed(sender: NSStatusBarButton) {
98+
@objc func btnExpandCollapsePressed(sender: NSStatusBarButton) {
9699
if let event = NSApp.currentEvent {
97100

98101
let isOptionKeyPressed = event.modifierFlags.contains(NSEvent.ModifierFlags.option)
@@ -115,53 +118,59 @@ class StatusBarController {
115118
Preferences.areSeparatorsHidden = false
116119

117120
if !self.isCollapsed {
118-
self.separateStatusBar.length = self.normalSeparateStatusBarIconLength
121+
self.btnSeparate.length = self.btnHiddenLength
119122
}
120-
self.alwayHideSeparateStatusBar?.length = self.normalTerminateStatusBarIconLength
123+
self.btnAlwaysHidden?.length = self.btnAlwaysHiddenLength
121124
}
122125

123126
private func hideSeparators() {
124-
guard self.isValidTogglablePosition else {return}
127+
guard self.isBtnAlwaysHiddenValidPosition else {return}
125128

126129
Preferences.areSeparatorsHidden = true
127130

128131
if !self.isCollapsed {
129-
self.separateStatusBar.length = self.normalSeparateStatusBarIconLength
132+
self.btnSeparate.length = self.btnHiddenLength
130133
}
131-
self.alwayHideSeparateStatusBar?.length = self.collapseTerminateStatusBarIconLength
134+
self.btnAlwaysHidden?.length = self.btnAlwaysHiddenEnableExpandCollapseLength
132135
}
133136

134137
func expandCollapseIfNeeded() {
138+
//prevented rapid click cause icon show many in Dock
139+
if isToggle {return}
140+
isToggle = true
135141
self.isCollapsed ? self.expandMenubar() : self.collapseMenuBar()
142+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
143+
self.isToggle = false
144+
}
136145
}
137146

138147
private func collapseMenuBar() {
139-
guard self.isValidPosition && !self.isCollapsed else {
148+
guard self.isBtnSeparateValidPosition && !self.isCollapsed else {
140149
autoCollapseIfNeeded()
141150
return
142151
}
143152

144-
separateStatusBar.length = self.collapseSeparateStatusBarIconLength
145-
if let button = expandCollapseStatusBar.button {
153+
btnSeparate.length = self.btnHiddenCollapseLength
154+
if let button = btnExpandCollapse.button {
146155
button.image = Assets.expandImage
147156
}
148157
if Preferences.useFullStatusBarOnExpandEnabled {
149158
NSApp.setActivationPolicy(.accessory)
150159
NSApp.deactivate()
151160
}
152161
}
153-
154162
private func expandMenubar() {
155163
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 {
158166
button.image = Assets.collapseImage
159167
}
160168
autoCollapseIfNeeded()
161169

162170
if Preferences.useFullStatusBarOnExpandEnabled {
163171
NSApp.setActivationPolicy(.regular)
164172
NSApp.activate(ignoringOtherApps: true)
173+
165174
}
166175
}
167176

@@ -203,7 +212,7 @@ class StatusBarController {
203212
}
204213

205214
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 }
207216
if Preferences.isAutoHide {
208217
toggleAutoHideItem.title = "Disable Auto Collapse".localized
209218
} else {
@@ -234,15 +243,15 @@ extension StatusBarController {
234243
}
235244
@objc private func toggleStatusBarIfNeeded() {
236245
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 {
239248
button.image = self.imgIconLine
240249
button.appearsDisabled = true
241250
}
242-
self.alwayHideSeparateStatusBar?.autosaveName = "hiddenbar_terminate";
251+
self.btnAlwaysHidden?.autosaveName = "hiddenbar_terminate";
243252

244253
}else {
245-
self.alwayHideSeparateStatusBar = nil
254+
self.btnAlwaysHidden = nil
246255
}
247256
}
248257
}

hidden/Models/GlobalKeybindingPreferences.swift

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ struct GlobalKeybindPreferences: Codable, CustomStringConvertible {
2020
let keyCode : UInt32
2121

2222
var description: String {
23+
print(keyCode)
2324
var stringBuilder = ""
2425
if self.function {
2526
stringBuilder += "Fn"
@@ -49,6 +50,11 @@ struct GlobalKeybindPreferences: Codable, CustomStringConvertible {
4950
return stringBuilder
5051
}
5152

53+
if keyCode == 49 { // spacer
54+
stringBuilder += ""
55+
return stringBuilder
56+
}
57+
5258
if let characters = self.characters {
5359
stringBuilder += characters.uppercased()
5460
}

0 commit comments

Comments
 (0)