diff --git a/quickshell/Modals/Changelog/ChangelogContent.qml b/quickshell/Modals/Changelog/ChangelogContent.qml index 4ec658b8..72146d44 100644 --- a/quickshell/Modals/Changelog/ChangelogContent.qml +++ b/quickshell/Modals/Changelog/ChangelogContent.qml @@ -65,7 +65,7 @@ Column { StyledText { id: codenameText anchors.centerIn: parent - text: "Spicy Miso" + text: "Saffron Bloom" font.pixelSize: Theme.fontSizeSmall font.weight: Font.Medium color: Theme.primary @@ -74,7 +74,7 @@ Column { } StyledText { - text: "Desktop widgets, theme registry, native clipboard & more" + text: "New launcher, enhanced plugin system, KDE Connect, & more" font.pixelSize: Theme.fontSizeMedium color: Theme.surfaceVariantText } @@ -108,67 +108,76 @@ Column { ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "widgets" - title: "Desktop Widgets" - description: "Widgets on your desktop" - onClicked: PopoutService.openSettingsWithTab("desktop_widgets") + iconName: "space_dashboard" + title: "Dank Launcher V2" + description: "New capabilities & plugins" + onClicked: PopoutService.openDankLauncherV2() } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "palette" - title: "Theme Registry" - description: "Community themes" - onClicked: PopoutService.openSettingsWithTab("theme") + iconName: "smartphone" + title: "Phone Connect" + description: "KDE Connect & Valent" + onClicked: Qt.openUrlExternally("https://github.com/AvengeMedia/dms-plugins/tree/master/DankKDEConnect") } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "content_paste" - title: "Native Clipboard" - description: "Zero-dependency history" - onClicked: PopoutService.openSettingsWithTab("clipboard") + iconName: "monitor_heart" + title: "System Monitor" + description: "Redesigned process list" + onClicked: PopoutService.showProcessListModal() } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "display_settings" - title: "Monitor Config" - description: "Full display setup" - onClicked: PopoutService.openSettingsWithTab("display_config") + iconName: "window" + title: "Window Rules" + description: "niri window rule manager" + visible: CompositorService.isNiri + onClicked: PopoutService.openSettingsWithTab("window_rules") } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 iconName: "notifications_active" - title: "Notifications" - description: "History & gestures" + title: "Enhanced Notifications" + description: "Configurable rules & styling" + visible: !CompositorService.isNiri onClicked: PopoutService.openSettingsWithTab("notifications") } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "healing" - title: "DMS Doctor" - description: "Diagnose issues" - onClicked: FirstLaunchService.showDoctor() + iconName: "dock_to_bottom" + title: "Dock Enhancements" + description: "Bar dock widget & more" + onClicked: PopoutService.openSettingsWithTab("dock") } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "keyboard" - title: "Keybinds Editor" - description: "niri, Hyprland, & MangoWC" - visible: KeybindsService.available - onClicked: PopoutService.openSettingsWithTab("keybinds") + iconName: "volume_up" + title: "Audio Aliases" + description: "Custom device names" + onClicked: PopoutService.openSettingsWithTab("audio") } ChangelogFeatureCard { width: (parent.width - Theme.spacingS) / 2 - iconName: "search" - title: "Settings Search" - description: "Find settings fast" - onClicked: PopoutService.openSettings() + iconName: "extension" + title: "Enhanced Plugin System" + description: "Enables new types of plugins" + onClicked: PopoutService.openSettingsWithTab("plugins") + } + + ChangelogFeatureCard { + width: (parent.width - Theme.spacingS) / 2 + iconName: "light_mode" + title: "Auto Light/Dark" + description: "Automatic mode switching" + onClicked: PopoutService.openSettingsWithTab("theme") } } } @@ -221,17 +230,12 @@ Column { ChangelogUpgradeNote { width: parent.width - text: "Ghostty theme path changed to ~/.config/ghostty/themes/danktheme" + text: "Spotlight replaced by Dank Launcher V2 — check settings for new options" } ChangelogUpgradeNote { width: parent.width - text: "VS Code theme reinstall required" - } - - ChangelogUpgradeNote { - width: parent.width - text: "Clipboard history migration available from cliphist" + text: "Plugin API updated — third-party plugins may need updates" } } } diff --git a/quickshell/Modals/Changelog/ChangelogModal.qml b/quickshell/Modals/Changelog/ChangelogModal.qml index 290855b6..f8926ea0 100644 --- a/quickshell/Modals/Changelog/ChangelogModal.qml +++ b/quickshell/Modals/Changelog/ChangelogModal.qml @@ -129,7 +129,7 @@ FloatingWindow { iconName: "open_in_new" backgroundColor: Theme.surfaceContainerHighest textColor: Theme.surfaceText - onClicked: Qt.openUrlExternally("https://danklinux.com/blog/v1-2-release") + onClicked: Qt.openUrlExternally("https://danklinux.com/blog/v1-4-release") } DankButton { diff --git a/quickshell/Modals/DankLauncherV2/DankLauncherV2Modal.qml b/quickshell/Modals/DankLauncherV2/DankLauncherV2Modal.qml index cf7f3a12..e3f234a8 100644 --- a/quickshell/Modals/DankLauncherV2/DankLauncherV2Modal.qml +++ b/quickshell/Modals/DankLauncherV2/DankLauncherV2Modal.qml @@ -13,10 +13,14 @@ Item { property bool spotlightOpen: false property bool keyboardActive: false property bool contentVisible: false - property alias spotlightContent: launcherContent + property var spotlightContent: launcherContentLoader.item property bool openedFromOverview: false property bool isClosing: false property bool _windowEnabled: true + property bool _pendingInitialize: false + property string _pendingQuery: "" + property string _pendingMode: "" + readonly property bool unloadContentOnClose: SettingsData.dankLauncherV2UnloadOnClose readonly property bool useHyprlandFocusGrab: CompositorService.useHyprlandFocusGrab readonly property var effectiveScreen: launcherWindow.screen @@ -75,7 +79,22 @@ Item { signal dialogClosed + function _ensureContentLoadedAndInitialize(query, mode) { + _pendingQuery = query || ""; + _pendingMode = mode || ""; + _pendingInitialize = true; + contentVisible = true; + launcherContentLoader.active = true; + + if (spotlightContent) { + _initializeAndShow(_pendingQuery, _pendingMode); + _pendingInitialize = false; + } + } + function _initializeAndShow(query, mode) { + if (!spotlightContent) + return; contentVisible = true; spotlightContent.searchField.forceActiveFocus(); @@ -121,7 +140,7 @@ Item { if (useHyprlandFocusGrab) focusGrab.active = true; - _initializeAndShow(""); + _ensureContentLoadedAndInitialize("", ""); } function showWithQuery(query) { @@ -139,7 +158,7 @@ Item { if (useHyprlandFocusGrab) focusGrab.active = true; - _initializeAndShow(query); + _ensureContentLoadedAndInitialize(query, ""); } function hide() { @@ -176,7 +195,7 @@ Item { if (useHyprlandFocusGrab) focusGrab.active = true; - _initializeAndShow("", mode); + _ensureContentLoadedAndInitialize("", mode); } function toggleWithMode(mode) { @@ -201,6 +220,8 @@ Item { repeat: false onTriggered: { isClosing = false; + if (root.unloadContentOnClose) + launcherContentLoader.active = false; dialogClosed(); } } @@ -263,7 +284,7 @@ Item { PanelWindow { id: launcherWindow - visible: root._windowEnabled + visible: root._windowEnabled && (!root.unloadContentOnClose || spotlightOpen || isClosing) color: "transparent" exclusionMode: ExclusionMode.Ignore @@ -373,12 +394,23 @@ Item { anchors.fill: parent focus: keyboardActive - LauncherContent { - id: launcherContent + Loader { + id: launcherContentLoader anchors.fill: parent - focus: true - parentModal: root - heavyContentActive: !SettingsData.dankLauncherV2UnloadOnClose || spotlightOpen || isClosing + active: !root.unloadContentOnClose || root.spotlightOpen || root.isClosing || root.contentVisible || root._pendingInitialize + asynchronous: false + sourceComponent: LauncherContent { + focus: true + parentModal: root + heavyContentActive: !SettingsData.dankLauncherV2UnloadOnClose || spotlightOpen || isClosing + } + + onLoaded: { + if (root._pendingInitialize) { + root._initializeAndShow(root._pendingQuery, root._pendingMode); + root._pendingInitialize = false; + } + } } Keys.onEscapePressed: event => { diff --git a/quickshell/Services/ChangelogService.qml b/quickshell/Services/ChangelogService.qml index d04da2ba..d19d182a 100644 --- a/quickshell/Services/ChangelogService.qml +++ b/quickshell/Services/ChangelogService.qml @@ -10,8 +10,8 @@ import qs.Common Singleton { id: root - readonly property string currentVersion: "1.2" - readonly property bool changelogEnabled: false + readonly property string currentVersion: "1.4" + readonly property bool changelogEnabled: true readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell" readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion