mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-05 21:15:38 -05:00
387 lines
13 KiB
QML
387 lines
13 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import Quickshell.Hyprland
|
|
import qs.Common
|
|
import qs.Services
|
|
|
|
Item {
|
|
id: root
|
|
|
|
required property var powerMenuModalLoader
|
|
required property var processListModalLoader
|
|
required property var controlCenterLoader
|
|
required property var dankDashPopoutLoader
|
|
required property var notepadSlideoutVariants
|
|
required property var hyprKeybindsModalLoader
|
|
required property var dankBarLoader
|
|
required property var hyprlandOverviewLoader
|
|
|
|
IpcHandler {
|
|
function open() {
|
|
root.powerMenuModalLoader.active = true
|
|
if (root.powerMenuModalLoader.item)
|
|
root.powerMenuModalLoader.item.openCentered()
|
|
|
|
return "POWERMENU_OPEN_SUCCESS"
|
|
}
|
|
|
|
function close() {
|
|
if (root.powerMenuModalLoader.item)
|
|
root.powerMenuModalLoader.item.close()
|
|
|
|
return "POWERMENU_CLOSE_SUCCESS"
|
|
}
|
|
|
|
function toggle() {
|
|
root.powerMenuModalLoader.active = true
|
|
if (root.powerMenuModalLoader.item) {
|
|
if (root.powerMenuModalLoader.item.shouldBeVisible) {
|
|
root.powerMenuModalLoader.item.close()
|
|
} else {
|
|
root.powerMenuModalLoader.item.openCentered()
|
|
}
|
|
}
|
|
|
|
return "POWERMENU_TOGGLE_SUCCESS"
|
|
}
|
|
|
|
target: "powermenu"
|
|
}
|
|
|
|
IpcHandler {
|
|
function open(): string {
|
|
root.processListModalLoader.active = true
|
|
if (root.processListModalLoader.item)
|
|
root.processListModalLoader.item.show()
|
|
|
|
return "PROCESSLIST_OPEN_SUCCESS"
|
|
}
|
|
|
|
function close(): string {
|
|
if (root.processListModalLoader.item)
|
|
root.processListModalLoader.item.hide()
|
|
|
|
return "PROCESSLIST_CLOSE_SUCCESS"
|
|
}
|
|
|
|
function toggle(): string {
|
|
root.processListModalLoader.active = true
|
|
if (root.processListModalLoader.item)
|
|
root.processListModalLoader.item.toggle()
|
|
|
|
return "PROCESSLIST_TOGGLE_SUCCESS"
|
|
}
|
|
|
|
target: "processlist"
|
|
}
|
|
|
|
IpcHandler {
|
|
function open(): string {
|
|
if (root.dankBarLoader.item) {
|
|
root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
|
|
return "CONTROL_CENTER_OPEN_SUCCESS"
|
|
}
|
|
return "CONTROL_CENTER_OPEN_FAILED"
|
|
}
|
|
|
|
function close(): string {
|
|
if (root.controlCenterLoader.item) {
|
|
root.controlCenterLoader.item.close()
|
|
return "CONTROL_CENTER_CLOSE_SUCCESS"
|
|
}
|
|
return "CONTROL_CENTER_CLOSE_FAILED"
|
|
}
|
|
|
|
function toggle(): string {
|
|
if (root.dankBarLoader.item) {
|
|
root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
|
|
return "CONTROL_CENTER_TOGGLE_SUCCESS"
|
|
}
|
|
return "CONTROL_CENTER_TOGGLE_FAILED"
|
|
}
|
|
|
|
target: "control-center"
|
|
}
|
|
|
|
IpcHandler {
|
|
function open(tab: string): string {
|
|
root.dankDashPopoutLoader.active = true
|
|
if (root.dankDashPopoutLoader.item) {
|
|
switch (tab.toLowerCase()) {
|
|
case "media":
|
|
root.dankDashPopoutLoader.item.currentTabIndex = 1
|
|
break
|
|
case "weather":
|
|
root.dankDashPopoutLoader.item.currentTabIndex = SettingsData.weatherEnabled ? 2 : 0
|
|
break
|
|
default:
|
|
root.dankDashPopoutLoader.item.currentTabIndex = 0
|
|
break
|
|
}
|
|
root.dankDashPopoutLoader.item.setTriggerPosition(Screen.width / 2, Theme.barHeight + Theme.spacingS, 100, "center", Screen)
|
|
root.dankDashPopoutLoader.item.dashVisible = true
|
|
return "DASH_OPEN_SUCCESS"
|
|
}
|
|
return "DASH_OPEN_FAILED"
|
|
}
|
|
|
|
function close(): string {
|
|
if (root.dankDashPopoutLoader.item) {
|
|
root.dankDashPopoutLoader.item.dashVisible = false
|
|
return "DASH_CLOSE_SUCCESS"
|
|
}
|
|
return "DASH_CLOSE_FAILED"
|
|
}
|
|
|
|
function toggle(tab: string): string {
|
|
if (root.dankBarLoader.item && root.dankBarLoader.item.triggerWallpaperBrowserOnFocusedScreen()) {
|
|
if (root.dankDashPopoutLoader.item) {
|
|
switch (tab.toLowerCase()) {
|
|
case "media":
|
|
root.dankDashPopoutLoader.item.currentTabIndex = 1
|
|
break
|
|
case "wallpaper":
|
|
root.dankDashPopoutLoader.item.currentTabIndex = 2
|
|
break
|
|
case "weather":
|
|
root.dankDashPopoutLoader.item.currentTabIndex = SettingsData.weatherEnabled ? 3 : 0
|
|
break
|
|
default:
|
|
root.dankDashPopoutLoader.item.currentTabIndex = 0
|
|
break
|
|
}
|
|
}
|
|
return "DASH_TOGGLE_SUCCESS"
|
|
}
|
|
return "DASH_TOGGLE_FAILED"
|
|
}
|
|
|
|
target: "dash"
|
|
}
|
|
|
|
IpcHandler {
|
|
function getFocusedScreenName() {
|
|
if (CompositorService.isHyprland && Hyprland.focusedWorkspace && Hyprland.focusedWorkspace.monitor) {
|
|
return Hyprland.focusedWorkspace.monitor.name
|
|
}
|
|
if (CompositorService.isNiri && NiriService.currentOutput) {
|
|
return NiriService.currentOutput
|
|
}
|
|
return ""
|
|
}
|
|
|
|
function getActiveNotepadInstance() {
|
|
if (root.notepadSlideoutVariants.instances.length === 0) {
|
|
return null
|
|
}
|
|
|
|
if (root.notepadSlideoutVariants.instances.length === 1) {
|
|
return root.notepadSlideoutVariants.instances[0]
|
|
}
|
|
|
|
var focusedScreen = getFocusedScreenName()
|
|
if (focusedScreen && root.notepadSlideoutVariants.instances.length > 0) {
|
|
for (var i = 0; i < root.notepadSlideoutVariants.instances.length; i++) {
|
|
var slideout = root.notepadSlideoutVariants.instances[i]
|
|
if (slideout.modelData && slideout.modelData.name === focusedScreen) {
|
|
return slideout
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < root.notepadSlideoutVariants.instances.length; i++) {
|
|
var slideout = root.notepadSlideoutVariants.instances[i]
|
|
if (slideout.isVisible) {
|
|
return slideout
|
|
}
|
|
}
|
|
|
|
return root.notepadSlideoutVariants.instances[0]
|
|
}
|
|
|
|
function open(): string {
|
|
var instance = getActiveNotepadInstance()
|
|
if (instance) {
|
|
instance.show()
|
|
return "NOTEPAD_OPEN_SUCCESS"
|
|
}
|
|
return "NOTEPAD_OPEN_FAILED"
|
|
}
|
|
|
|
function close(): string {
|
|
var instance = getActiveNotepadInstance()
|
|
if (instance) {
|
|
instance.hide()
|
|
return "NOTEPAD_CLOSE_SUCCESS"
|
|
}
|
|
return "NOTEPAD_CLOSE_FAILED"
|
|
}
|
|
|
|
function toggle(): string {
|
|
var instance = getActiveNotepadInstance()
|
|
if (instance) {
|
|
instance.toggle()
|
|
return "NOTEPAD_TOGGLE_SUCCESS"
|
|
}
|
|
return "NOTEPAD_TOGGLE_FAILED"
|
|
}
|
|
|
|
target: "notepad"
|
|
}
|
|
|
|
IpcHandler {
|
|
function toggle(): string {
|
|
SessionService.toggleIdleInhibit()
|
|
return SessionService.idleInhibited ? "Idle inhibit enabled" : "Idle inhibit disabled"
|
|
}
|
|
|
|
function enable(): string {
|
|
SessionService.enableIdleInhibit()
|
|
return "Idle inhibit enabled"
|
|
}
|
|
|
|
function disable(): string {
|
|
SessionService.disableIdleInhibit()
|
|
return "Idle inhibit disabled"
|
|
}
|
|
|
|
function status(): string {
|
|
return SessionService.idleInhibited ? "Idle inhibit is enabled" : "Idle inhibit is disabled"
|
|
}
|
|
|
|
function reason(newReason: string): string {
|
|
if (!newReason) {
|
|
return `Current reason: ${SessionService.inhibitReason}`
|
|
}
|
|
|
|
SessionService.setInhibitReason(newReason)
|
|
return `Inhibit reason set to: ${newReason}`
|
|
}
|
|
|
|
target: "inhibit"
|
|
}
|
|
|
|
IpcHandler {
|
|
function list(): string {
|
|
return MprisController.availablePlayers.map(p => p.identity).join("\n")
|
|
}
|
|
|
|
function play(): void {
|
|
if (MprisController.activePlayer && MprisController.activePlayer.canPlay) {
|
|
MprisController.activePlayer.play()
|
|
}
|
|
}
|
|
|
|
function pause(): void {
|
|
if (MprisController.activePlayer && MprisController.activePlayer.canPause) {
|
|
MprisController.activePlayer.pause()
|
|
}
|
|
}
|
|
|
|
function playPause(): void {
|
|
if (MprisController.activePlayer && MprisController.activePlayer.canTogglePlaying) {
|
|
MprisController.activePlayer.togglePlaying()
|
|
}
|
|
}
|
|
|
|
function previous(): void {
|
|
if (MprisController.activePlayer && MprisController.activePlayer.canGoPrevious) {
|
|
MprisController.activePlayer.previous()
|
|
}
|
|
}
|
|
|
|
function next(): void {
|
|
if (MprisController.activePlayer && MprisController.activePlayer.canGoNext) {
|
|
MprisController.activePlayer.next()
|
|
}
|
|
}
|
|
|
|
function stop(): void {
|
|
if (MprisController.activePlayer) {
|
|
MprisController.activePlayer.stop()
|
|
}
|
|
}
|
|
|
|
target: "mpris"
|
|
}
|
|
|
|
IpcHandler {
|
|
function openBinds(): string {
|
|
if (!CompositorService.isHyprland) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
root.hyprKeybindsModalLoader.active = true
|
|
if (root.hyprKeybindsModalLoader.item) {
|
|
root.hyprKeybindsModalLoader.item.open()
|
|
return "HYPR_KEYBINDS_OPEN_SUCCESS"
|
|
}
|
|
return "HYPR_KEYBINDS_OPEN_FAILED"
|
|
}
|
|
|
|
function closeBinds(): string {
|
|
if (!CompositorService.isHyprland) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
if (root.hyprKeybindsModalLoader.item) {
|
|
root.hyprKeybindsModalLoader.item.close()
|
|
return "HYPR_KEYBINDS_CLOSE_SUCCESS"
|
|
}
|
|
return "HYPR_KEYBINDS_CLOSE_FAILED"
|
|
}
|
|
|
|
function toggleBinds(): string {
|
|
if (!CompositorService.isHyprland) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
root.hyprKeybindsModalLoader.active = true
|
|
if (root.hyprKeybindsModalLoader.item) {
|
|
if (root.hyprKeybindsModalLoader.item.shouldBeVisible) {
|
|
root.hyprKeybindsModalLoader.item.close()
|
|
} else {
|
|
root.hyprKeybindsModalLoader.item.open()
|
|
}
|
|
return "HYPR_KEYBINDS_TOGGLE_SUCCESS"
|
|
}
|
|
return "HYPR_KEYBINDS_TOGGLE_FAILED"
|
|
}
|
|
|
|
function toggleOverview(): string {
|
|
if (!CompositorService.isHyprland || !root.hyprlandOverviewLoader.item) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
root.hyprlandOverviewLoader.item.overviewOpen = !root.hyprlandOverviewLoader.item.overviewOpen
|
|
return root.hyprlandOverviewLoader.item.overviewOpen ? "OVERVIEW_OPEN_SUCCESS" : "OVERVIEW_CLOSE_SUCCESS"
|
|
}
|
|
|
|
function closeOverview(): string {
|
|
if (!CompositorService.isHyprland || !root.hyprlandOverviewLoader.item) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
root.hyprlandOverviewLoader.item.overviewOpen = false
|
|
return "OVERVIEW_CLOSE_SUCCESS"
|
|
}
|
|
|
|
function openOverview(): string {
|
|
if (!CompositorService.isHyprland || !root.hyprlandOverviewLoader.item) {
|
|
return "HYPR_NOT_AVAILABLE"
|
|
}
|
|
root.hyprlandOverviewLoader.item.overviewOpen = true
|
|
return "OVERVIEW_OPEN_SUCCESS"
|
|
}
|
|
|
|
target: "hypr"
|
|
}
|
|
|
|
IpcHandler {
|
|
function wallpaper(): string {
|
|
if (root.dankBarLoader.item && root.dankBarLoader.item.triggerWallpaperBrowserOnFocusedScreen()) {
|
|
return "SUCCESS: Toggled wallpaper browser"
|
|
}
|
|
return "ERROR: Failed to toggle wallpaper browser"
|
|
}
|
|
|
|
target: "dankdash"
|
|
}
|
|
}
|