diff options
| author | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
|---|---|---|
| committer | AlexanderCurl <alexc@alexc.hu> | 2026-04-18 17:46:06 +0100 |
| commit | 70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch) | |
| tree | ab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml | |
| parent | 5d94c0a7d44a2255b81815a52a7056a94a39842d (diff) | |
| download | RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip | |
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml new file mode 100644 index 0000000..8653344 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/NotificationModal.qml @@ -0,0 +1,225 @@ +import QtQuick +import Quickshell.Hyprland +import Quickshell.Io +import qs.Common +import qs.Modals.Common +import qs.Modules.Notifications.Center +import qs.Services + +DankModal { + id: notificationModal + + layerNamespace: "dms:notification-center-modal" + + HyprlandFocusGrab { + windows: [notificationModal.contentWindow] + active: notificationModal.useHyprlandFocusGrab && notificationModal.shouldHaveFocus + } + + property bool notificationModalOpen: false + property var notificationListRef: null + property var historyListRef: null + property int currentTab: 0 + + property var notificationHeaderRef: null + + function show() { + notificationModalOpen = true; + currentTab = 0; + NotificationService.onOverlayOpen(); + open(); + modalKeyboardController.reset(); + if (modalKeyboardController && notificationListRef) { + modalKeyboardController.listView = notificationListRef; + modalKeyboardController.rebuildFlatNavigation(); + + Qt.callLater(() => { + modalKeyboardController.keyboardNavigationActive = true; + modalKeyboardController.selectedFlatIndex = 0; + modalKeyboardController.updateSelectedIdFromIndex(); + if (notificationListRef) { + notificationListRef.keyboardActive = true; + notificationListRef.currentIndex = 0; + } + modalKeyboardController.selectionVersion++; + modalKeyboardController.ensureVisible(); + }); + } + } + + function hide() { + notificationModalOpen = false; + NotificationService.onOverlayClose(); + close(); + modalKeyboardController.reset(); + } + + function toggle() { + if (shouldBeVisible) { + hide(); + } else { + show(); + } + } + + function clearAll() { + NotificationService.clearAllNotifications(); + } + + function dismissAllPopups() { + NotificationService.dismissAllPopups(); + } + + modalWidth: Math.min(500, screenWidth - 48) + modalHeight: Math.min(700, screenHeight * 0.85) + backgroundColor: Theme.withAlpha(Theme.surfaceContainer, Theme.popupTransparency) + visible: false + onBackgroundClicked: hide() + onOpened: () => { + Qt.callLater(() => modalFocusScope.forceActiveFocus()); + } + onShouldBeVisibleChanged: shouldBeVisible => { + if (!shouldBeVisible) { + notificationModalOpen = false; + modalKeyboardController.reset(); + NotificationService.onOverlayClose(); + } + } + modalFocusScope.Keys.onPressed: event => { + if (event.key === Qt.Key_Escape) { + hide(); + event.accepted = true; + return; + } + + if (event.key === Qt.Key_Left) { + if (notificationHeaderRef && notificationHeaderRef.currentTab > 0) { + notificationHeaderRef.currentTab = 0; + event.accepted = true; + } + return; + } + if (event.key === Qt.Key_Right) { + if (notificationHeaderRef && notificationHeaderRef.currentTab === 0 && SettingsData.notificationHistoryEnabled) { + notificationHeaderRef.currentTab = 1; + event.accepted = true; + } + return; + } + + if (currentTab === 1 && historyListRef) { + historyListRef.handleKey(event); + return; + } + modalKeyboardController.handleKey(event); + } + + NotificationKeyboardController { + id: modalKeyboardController + + listView: null + isOpen: notificationModal.notificationModalOpen + onClose: () => notificationModal.hide() + } + + IpcHandler { + function open(): string { + notificationModal.show(); + return "NOTIFICATION_MODAL_OPEN_SUCCESS"; + } + + function close(): string { + notificationModal.hide(); + return "NOTIFICATION_MODAL_CLOSE_SUCCESS"; + } + + function toggle(): string { + notificationModal.toggle(); + return "NOTIFICATION_MODAL_TOGGLE_SUCCESS"; + } + + function toggleDoNotDisturb(): string { + SessionData.setDoNotDisturb(!SessionData.doNotDisturb); + + return "NOTIFICATION_MODAL_TOGGLE_DND_SUCCESS"; + } + + function getDoNotDisturb(): bool { + return SessionData.doNotDisturb; + } + + function clearAll(): string { + notificationModal.clearAll(); + return "NOTIFICATION_MODAL_CLEAR_ALL_SUCCESS"; + } + + function dismissAllPopups(): string { + notificationModal.dismissAllPopups(); + return "NOTIFICATION_MODAL_DISMISS_ALL_POPUPS_SUCCESS"; + } + + target: "notifications" + } + + content: Component { + Item { + id: notificationKeyHandler + + LayoutMirroring.enabled: I18n.isRtl + LayoutMirroring.childrenInherit: true + + anchors.fill: parent + + Column { + anchors.fill: parent + anchors.margins: Theme.spacingL + spacing: Theme.spacingM + + NotificationHeader { + id: notificationHeader + keyboardController: modalKeyboardController + onCurrentTabChanged: notificationModal.currentTab = currentTab + Component.onCompleted: notificationModal.notificationHeaderRef = notificationHeader + } + + NotificationSettings { + id: notificationSettings + expanded: notificationHeader.showSettings + } + + KeyboardNavigatedNotificationList { + id: notificationList + width: parent.width + height: parent.height - y + visible: notificationHeader.currentTab === 0 + keyboardController: modalKeyboardController + Component.onCompleted: { + notificationModal.notificationListRef = notificationList; + if (modalKeyboardController) { + modalKeyboardController.listView = notificationList; + modalKeyboardController.rebuildFlatNavigation(); + } + } + } + + HistoryNotificationList { + id: historyList + width: parent.width + height: parent.height - y + visible: notificationHeader.currentTab === 1 + Component.onCompleted: notificationModal.historyListRef = historyList + } + } + + NotificationKeyboardHints { + id: keyboardHints + + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: Theme.spacingL + showHints: notificationHeader.currentTab === 0 ? modalKeyboardController.showKeyboardHints : historyList.showKeyboardHints + } + } + } +} |