diff --git a/DockDoor.xcodeproj/project.pbxproj b/DockDoor.xcodeproj/project.pbxproj index e7b2c50f..e42e6acc 100644 --- a/DockDoor.xcodeproj/project.pbxproj +++ b/DockDoor.xcodeproj/project.pbxproj @@ -216,8 +216,9 @@ 3A105FD42C1BED5B0015EC66 /* Components */ = { isa = PBXGroup; children = ( - BBE153BF2D21FA2300CD3D4A /* StyledGroupBox.swift */, + 3A105FD82C1C049E0015EC66 /* dockStyle.swift */, BBE153BD2D2126C000CD3D4A /* MaterialPill.swift */, + BBE153BF2D21FA2300CD3D4A /* StyledGroupBox.swift */, BBE692182D17AD9C0093B4A5 /* DangerButton.swift */, 3A1622C62C8D5A5C00D318EE /* EnabledActionRowView.swift */, BBF383962C94A25B00B39A23 /* sliderSetting.swift */, @@ -247,7 +248,6 @@ 3A1622B32C8C099200D318EE /* Button Styles */, BB04405F2C77AD27009F1D33 /* CodableColor.swift */, 05C0C7172C60629C000ADAC6 /* AXUIElement.swift */, - 3A105FD82C1C049E0015EC66 /* dockStyle.swift */, ); path = Extensions; sourceTree = ""; diff --git a/DockDoor/Extensions/dockStyle.swift b/DockDoor/Components/dockStyle.swift similarity index 86% rename from DockDoor/Extensions/dockStyle.swift rename to DockDoor/Components/dockStyle.swift index 6fa42360..970b8392 100644 --- a/DockDoor/Extensions/dockStyle.swift +++ b/DockDoor/Components/dockStyle.swift @@ -14,9 +14,8 @@ struct DockStyleModifier: ViewModifier { .blendMode(.plusLighter) } .overlay { - RoundedRectangle(cornerRadius: cornerRadius + 1, style: .continuous) - .stroke(.black.opacity(0.2), lineWidth: 1) - .padding(-1) + RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) + .strokeBorder(Color.primary.opacity(0.1), lineWidth: 0.5) } } .padding(2) diff --git a/DockDoor/Extensions/Button Styles/AccentButton.swift b/DockDoor/Extensions/Button Styles/AccentButton.swift index 6d5fd5cf..c0a70ec1 100644 --- a/DockDoor/Extensions/Button Styles/AccentButton.swift +++ b/DockDoor/Extensions/Button Styles/AccentButton.swift @@ -17,7 +17,6 @@ struct AccentButtonStyle: ButtonStyle { .onHover { newHovering in hovering = newHovering } - .foregroundStyle(.white) .font(.system(size: small ? 10 : 14, weight: .medium)) } } diff --git a/DockDoor/Localizable.xcstrings b/DockDoor/Localizable.xcstrings index 9ad34d99..928f0074 100644 --- a/DockDoor/Localizable.xcstrings +++ b/DockDoor/Localizable.xcstrings @@ -19465,6 +19465,9 @@ } } } + }, + "Minimize All" : { + }, "Minimum number of colors reached." : { "localizations" : { diff --git a/DockDoor/Views/Hover Window/WindowPreviewHoverContainer.swift b/DockDoor/Views/Hover Window/WindowPreviewHoverContainer.swift index 0fa1775a..ec28c24e 100644 --- a/DockDoor/Views/Hover Window/WindowPreviewHoverContainer.swift +++ b/DockDoor/Views/Hover Window/WindowPreviewHoverContainer.swift @@ -149,13 +149,7 @@ struct WindowPreviewHoverContainer: View { } hoverTitleLabelView(labelSize: labelSize) - if hoveringAppIcon { - Button("Close All") { - closeAllWindows() - } - .buttonStyle(AccentButtonStyle(color: .red, small: true)) - .transition(.opacity) - } + massOperations(hoveringAppIcon) } .padding(.top, 10) .padding(.leading) @@ -175,13 +169,7 @@ struct WindowPreviewHoverContainer: View { } hoverTitleLabelView(labelSize: labelSize) - if hoveringAppIcon { - Button("Close All") { - closeAllWindows() - } - .buttonStyle(AccentButtonStyle(color: .red, small: true)) - .transition(.opacity) - } + massOperations(hoveringAppIcon) } .padding(EdgeInsets(top: -11.5, leading: 15, bottom: -1.5, trailing: 1.5)) .animation(.spring(response: 0.3), value: hoveringAppIcon) @@ -202,13 +190,7 @@ struct WindowPreviewHoverContainer: View { } hoverTitleLabelView(labelSize: labelSize) - if hoveringAppIcon { - Button("Close All") { - closeAllWindows() - } - .buttonStyle(AccentButtonStyle(color: .red, small: true)) - .transition(.opacity) - } + massOperations(hoveringAppIcon) } .padding(.vertical, 5) .padding(.horizontal, 10) @@ -225,6 +207,24 @@ struct WindowPreviewHoverContainer: View { } } + @ViewBuilder + func massOperations(_ shouldDisplay: Bool) -> some View { + if shouldDisplay { + Group { + Button("Close All") { + closeAllWindows() + } + .buttonStyle(AccentButtonStyle(small: true)) + + Button("Minimize All") { + minimizeAllWindows() + } + .buttonStyle(AccentButtonStyle(small: true)) + } + .transition(.opacity) + } + } + @ViewBuilder private func hoverTitleLabelView(labelSize: CGSize) -> some View { switch appNameStyle { @@ -409,6 +409,11 @@ struct WindowPreviewHoverContainer: View { windows.forEach { WindowUtil.closeWindow(windowInfo: $0) } } + private func minimizeAllWindows() { + windowStates.removeAll() + windows.forEach { _ = WindowUtil.toggleMinimize(windowInfo: $0) } + } + private func handleWindowAction(_ action: WindowAction, at index: Int) { guard index < windowStates.count else { return } var window = windowStates[index] diff --git a/DockDoor/consts.swift b/DockDoor/consts.swift index 2d25ad9e..39946e2d 100644 --- a/DockDoor/consts.swift +++ b/DockDoor/consts.swift @@ -24,9 +24,6 @@ extension Defaults.Keys { static let fadeOutDuration = Key("fadeOutDuration", default: 0.4) static let previewHoverAction = Key("previewHoverAction", default: .none) - static let maxColumns = Key("maxColumns", default: 0) - static let maxRows = Key("maxRows", default: 0) - static let showAnimations = Key("showAnimations", default: true) static let gradientColorPalette = Key("gradientColorPalette", default: .init()) static let enableWindowSwitcher = Key("enableWindowSwitcher", default: true) @@ -54,6 +51,9 @@ extension Defaults.Keys { static let trafficLightButtonsVisibility = Key("trafficLightButtonsVisibility", default: .dimmedOnPreviewHover) static let trafficLightButtonsPosition = Key("trafficLightButtonsPosition", default: .topLeft) + static let maxColumns = Key("maxColumns", default: 2) + static let maxRows = Key("maxRows", default: 2) + static let windowSwitcherPlacementStrategy = Key("windowSwitcherPlacementStrategy", default: .screenWithMouse) static let windowSwitcherControlPosition = Key("windowSwitcherControlPosition", default: .topTrailing) static let dimInSwitcherUntilSelected = Key("dimInSwitcherUntilSelected", default: false)