summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/dms/Common/ModalManager.qml
blob: 75b11f79f2befc0f3f387a59d0d495034555b671 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
pragma Singleton
pragma ComponentBehavior: Bound

import Quickshell
import QtQuick

Singleton {
    id: modalManager

    signal closeAllModalsExcept(var excludedModal)
    signal modalChanged

    property var currentModalsByScreen: ({})

    function openModal(modal) {
        const screenName = modal.effectiveScreen?.name ?? "unknown";
        currentModalsByScreen[screenName] = modal;
        modalChanged();
        Qt.callLater(() => {
            if (!modal.allowStacking)
                closeAllModalsExcept(modal);
            if (!modal.keepPopoutsOpen)
                PopoutManager.closeAllPopouts();
            TrayMenuManager.closeAllMenus();
        });
    }

    function closeModal(modal) {
        const screenName = modal.effectiveScreen?.name ?? "unknown";
        if (currentModalsByScreen[screenName] === modal) {
            delete currentModalsByScreen[screenName];
            modalChanged();
        }
    }
}