summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/AppDrawer
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/AppDrawer')
-rw-r--r--raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/AppDrawer/AppDrawerPopout.qml166
1 files changed, 166 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/AppDrawer/AppDrawerPopout.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/AppDrawer/AppDrawerPopout.qml
new file mode 100644
index 0000000..ba07d37
--- /dev/null
+++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/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;
+ }
+ }
+ }
+ }
+}