Skip to content

Commit 775ec99

Browse files
committed
interfaceHidden will now update itself on changes
- Removed need for interfaceHidden bool - Removed need for resetting stored interface state - Added function isInterfaceStillHidden, checking whether "at least" the previous elements are visible again, taking other elements into account - Hidden animation for lastpanel
1 parent 52df185 commit 775ec99

3 files changed

Lines changed: 35 additions & 22 deletions

File tree

CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
1313
@Published var navigatorCollapsed: Bool = false
1414
@Published var inspectorCollapsed: Bool = false
1515
@Published var toolbarCollapsed: Bool = false
16-
@Published var interfaceHidden: Bool = false
1716

1817
// These variables store the state of the windows when using "Hide interface"
1918
@Published var prevNavigatorCollapsed: Bool?
@@ -211,13 +210,31 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
211210
return true
212211
}
213212

213+
var utilityAreaCollapsed: Bool {
214+
workspace?.utilityAreaModel?.isCollapsed ?? true
215+
}
216+
217+
/// Returns `true` if at least one panel that was visible is still collapsed, meaning the interface is still hidden
218+
func isInterfaceStillHidden() -> Bool {
219+
// If the interface is already un-hidden, we can short-circuit.
220+
guard let prevNav = prevNavigatorCollapsed,
221+
let prevInsp = prevInspectorCollapsed,
222+
let prevUtil = prevUtilityAreaCollapsed,
223+
let prevTool = prevToolbarCollapsed
224+
else { return false }
225+
226+
// True when any panel that was previously visible is collapsed
227+
return (!prevNav && navigatorCollapsed) ||
228+
(!prevInsp && inspectorCollapsed) ||
229+
(!prevUtil && utilityAreaCollapsed) ||
230+
(!prevTool && toolbarCollapsed)
231+
}
232+
214233
/// Function for toggling the interface elements on or off
215234
///
216235
/// - Parameter shouldHide: Pass `true` to hide all interface panels (and remember their current states),
217236
/// or `false` to restore them to how they were before hiding.
218237
func toggleInterface(shouldHide: Bool) {
219-
interfaceHidden = shouldHide
220-
221238
// When hiding, store how the interface looks now
222239
if shouldHide {
223240
storeInterfaceCollapseState()
@@ -236,7 +253,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
236253
)
237254
let utilityAreaTargetState = determineDesiredCollapseState(
238255
shouldHide: shouldHide,
239-
currentlyCollapsed: workspace?.utilityAreaModel?.isCollapsed ?? true,
256+
currentlyCollapsed: utilityAreaCollapsed,
240257
previouslyCollapsed: prevUtilityAreaCollapsed,
241258
)
242259
let toolbarTargetState = determineDesiredCollapseState(
@@ -250,19 +267,14 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
250267
toggleFirstPanel(shouldAnimate: false)
251268
}
252269
if inspectorCollapsed != inspectorTargetState {
253-
toggleLastPanel()
270+
toggleLastPanel(shouldAnimate: false)
254271
}
255272
if workspace?.utilityAreaModel?.isCollapsed != utilityAreaTargetState {
256273
CommandManager.shared.executeCommand("open.drawer")
257274
}
258275
if toolbarCollapsed != toolbarTargetState {
259276
toggleToolbar()
260277
}
261-
262-
// If enabling interface, reset the visibility states
263-
if !shouldHide {
264-
resetStoredInterfaceCollapseState()
265-
}
266278
}
267279

268280
/// Calculates the collapse state an interface element should have after a hide / show toggle.
@@ -292,12 +304,4 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
292304
prevUtilityAreaCollapsed = workspace?.utilityAreaModel?.isCollapsed
293305
prevToolbarCollapsed = toolbarCollapsed
294306
}
295-
296-
/// Function for resetting the stored interface visibility states
297-
func resetStoredInterfaceCollapseState() {
298-
prevNavigatorCollapsed = nil
299-
prevInspectorCollapsed = nil
300-
prevUtilityAreaCollapsed = nil
301-
prevToolbarCollapsed = nil
302-
}
303307
}

CodeEdit/Features/Documents/Controllers/CodeEditWindowControllerExtensions.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,22 @@ extension CodeEditWindowController {
3131

3232
@objc
3333
func toggleLastPanel() {
34+
toggleLastPanel(shouldAnimate: true)
35+
}
36+
37+
func toggleLastPanel(shouldAnimate: Bool = true) {
3438
guard let lastSplitView = splitViewController?.splitViewItems.last else {
3539
return
3640
}
3741

38-
NSAnimationContext.runAnimationGroup { _ in
39-
lastSplitView.animator().isCollapsed.toggle()
42+
if shouldAnimate {
43+
// Standard animated toggle
44+
NSAnimationContext.runAnimationGroup { _ in
45+
lastSplitView.animator().isCollapsed.toggle()
46+
}
47+
} else {
48+
// Instant toggle (no animation)
49+
lastSplitView.isCollapsed.toggle()
4050
}
4151

4252
splitViewController?.saveInspectorCollapsedState(isCollapsed: lastSplitView.isCollapsed)

CodeEdit/Features/WindowCommands/ViewCommands.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ extension ViewCommands {
112112
}
113113

114114
var isInterfaceHidden: Bool {
115-
return windowController?.interfaceHidden ?? false
116-
//navigatorCollapsed && inspectorCollapsed && utilityAreaCollapsed && toolbarCollapsed
115+
return windowController?.isInterfaceStillHidden() ?? false
117116
}
118117

119118
var body: some View {

0 commit comments

Comments
 (0)