diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Modules/AppDrawer')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/Modules/AppDrawer/AppDrawerPopout.qml | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Modules/AppDrawer/AppDrawerPopout.qml b/raveos-hyprland-theme/theme-data/dms/Modules/AppDrawer/AppDrawerPopout.qml new file mode 100644 index 0000000..ba07d37 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/Modules/AppDrawer/AppDrawerPopout.qml @@ -0,0 +1,166 @@ +import QtQuick +import qs.Common +import qs.Modals.DankLauncherV2 +import qs.Widgets + +DankPopout { + id: appDrawerPopout + + layerNamespace: "dms:app-launcher" + + readonly property real screenWidth: screen?.width ?? 1920 + readonly property real screenHeight: screen?.height ?? 1080 + + property string _pendingMode: "" + property string _pendingQuery: "" + + function show() { + open(); + } + + function openWithMode(mode) { + _pendingMode = mode || ""; + open(); + } + + function toggleWithMode(mode) { + if (shouldBeVisible) { + close(); + return; + } + openWithMode(mode); + } + + function openWithQuery(query) { + _pendingQuery = query || ""; + open(); + } + + function toggleWithQuery(query) { + if (shouldBeVisible) { + close(); + return; + } + openWithQuery(query); + } + + readonly property int _baseWidth: { + switch (SettingsData.dankLauncherV2Size) { + case "micro": + return 500; + case "medium": + return 720; + case "large": + return 860; + default: + return 620; + } + } + + readonly property int _baseHeight: { + switch (SettingsData.dankLauncherV2Size) { + case "micro": + return 480; + case "medium": + return 720; + case "large": + return 860; + default: + return 600; + } + } + + popupWidth: Math.min(_baseWidth, screenWidth - 100) + popupHeight: Math.min(_baseHeight, screenHeight - 100) + + triggerWidth: 40 + positioning: "" + contentHandlesKeys: contentLoader.item?.launcherContent?.editMode ?? false + + onBackgroundClicked: { + if (contentLoader.item?.launcherContent?.editMode) { + contentLoader.item.launcherContent.closeEditMode(); + return; + } + close(); + } + + onOpened: { + var lc = contentLoader.item?.launcherContent; + if (!lc) + return; + + const query = _pendingQuery || (SettingsData.rememberLastQuery ? SessionData.launcherLastQuery : "") || ""; + const mode = _pendingMode || SessionData.appDrawerLastMode || "apps"; + _pendingMode = ""; + _pendingQuery = ""; + + if (lc.searchField) { + lc.searchField.text = query; + lc.searchField.forceActiveFocus(); + } + if (lc.controller) { + lc.controller.searchMode = mode; + lc.controller.pluginFilter = ""; + lc.controller.searchQuery = query; + + lc.controller.performSearch(); + } + lc.resetScroll?.(); + lc.actionPanel?.hide(); + } + + Connections { + target: contentLoader.item?.launcherContent?.controller ?? null + function onModeChanged(mode) { + if (contentLoader.item.launcherContent.controller.autoSwitchedToFiles) + return; + SessionData.setAppDrawerLastMode(mode); + } + } + + content: Component { + Rectangle { + id: contentContainer + + LayoutMirroring.enabled: I18n.isRtl + LayoutMirroring.childrenInherit: true + + property alias launcherContent: launcherContent + + color: "transparent" + + QtObject { + id: modalAdapter + property bool spotlightOpen: appDrawerPopout.shouldBeVisible + readonly property bool isClosing: !appDrawerPopout.shouldBeVisible + + function hide() { + appDrawerPopout.close(); + } + } + + FocusScope { + anchors.fill: parent + focus: true + + LauncherContent { + id: launcherContent + anchors.fill: parent + parentModal: modalAdapter + viewModeContext: "appDrawer" + } + + Keys.onEscapePressed: event => { + if (launcherContent.editMode) { + launcherContent.closeEditMode(); + event.accepted = true; + return; + } + appDrawerPopout.close(); + event.accepted = true; + } + } + } + } +} |