1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-12 08:42:13 -04:00

controlcenter: fix trigger position via IPC

This commit is contained in:
bbedward
2025-10-16 22:03:02 -04:00
parent b9d5deb2ae
commit c0d110cde0
4 changed files with 1415 additions and 1352 deletions

View File

@@ -25,7 +25,6 @@ import qs.Modules.DankBar.Popouts
import qs.Modules.Plugins import qs.Modules.Plugins
import qs.Services import qs.Services
Item { Item {
id: root id: root
@@ -80,7 +79,8 @@ Item {
} }
onCurrentPositionChanged: { onCurrentPositionChanged: {
if (!initialized) return if (!initialized)
return
const component = sourceComponent const component = sourceComponent
sourceComponent = null sourceComponent = null
@@ -111,7 +111,8 @@ Item {
} }
onCurrentPositionChanged: { onCurrentPositionChanged: {
if (!initialized) return if (!initialized)
return
console.log("DEBUG: Dock position changed to:", currentPosition, "- recreating dock") console.log("DEBUG: Dock position changed to:", currentPosition, "- recreating dock")
const comp = sourceComponent const comp = sourceComponent
@@ -494,6 +495,7 @@ Item {
dankDashPopoutLoader: dankDashPopoutLoader dankDashPopoutLoader: dankDashPopoutLoader
notepadSlideoutVariants: notepadSlideoutVariants notepadSlideoutVariants: notepadSlideoutVariants
hyprKeybindsModalLoader: hyprKeybindsModalLoader hyprKeybindsModalLoader: hyprKeybindsModalLoader
dankBarLoader: dankBarLoader
} }
Variants { Variants {

View File

@@ -14,6 +14,7 @@ Item {
required property var dankDashPopoutLoader required property var dankDashPopoutLoader
required property var notepadSlideoutVariants required property var notepadSlideoutVariants
required property var hyprKeybindsModalLoader required property var hyprKeybindsModalLoader
required property var dankBarLoader
IpcHandler { IpcHandler {
function open() { function open() {
@@ -76,9 +77,8 @@ Item {
IpcHandler { IpcHandler {
function open(): string { function open(): string {
root.controlCenterLoader.active = true if (root.dankBarLoader.item) {
if (root.controlCenterLoader.item) { root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
root.controlCenterLoader.item.open()
return "CONTROL_CENTER_OPEN_SUCCESS" return "CONTROL_CENTER_OPEN_SUCCESS"
} }
return "CONTROL_CENTER_OPEN_FAILED" return "CONTROL_CENTER_OPEN_FAILED"
@@ -93,9 +93,8 @@ Item {
} }
function toggle(): string { function toggle(): string {
root.controlCenterLoader.active = true if (root.dankBarLoader.item) {
if (root.controlCenterLoader.item) { root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
root.controlCenterLoader.item.toggle()
return "CONTROL_CENTER_TOGGLE_SUCCESS" return "CONTROL_CENTER_TOGGLE_SUCCESS"
} }
return "CONTROL_CENTER_TOGGLE_FAILED" return "CONTROL_CENTER_TOGGLE_FAILED"

View File

@@ -108,8 +108,7 @@ DankPopout {
return Qt.rgba(surface.r, surface.g, surface.b, transparency) return Qt.rgba(surface.r, surface.g, surface.b, transparency)
} }
radius: Theme.cornerRadius radius: Theme.cornerRadius
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08)
Theme.outline.b, 0.08)
border.width: 0 border.width: 0
antialiasing: true antialiasing: true
smooth: true smooth: true
@@ -166,9 +165,9 @@ DankPopout {
root.toggleSection(widgetData.id) root.toggleSection(widgetData.id)
} }
} }
onRemoveWidget: (index) => widgetModel.removeWidget(index) onRemoveWidget: index => widgetModel.removeWidget(index)
onMoveWidget: (fromIndex, toIndex) => widgetModel.moveWidget(fromIndex, toIndex) onMoveWidget: (fromIndex, toIndex) => widgetModel.moveWidget(fromIndex, toIndex)
onToggleWidgetSize: (index) => widgetModel.toggleWidgetSize(index) onToggleWidgetSize: index => widgetModel.toggleWidgetSize(index)
onCollapseRequested: root.collapseAll() onCollapseRequested: root.collapseAll()
} }
@@ -177,12 +176,13 @@ DankPopout {
visible: editMode visible: editMode
popoutContent: controlContent popoutContent: controlContent
availableWidgets: { availableWidgets: {
if (!editMode) return [] if (!editMode)
return []
const existingIds = (SettingsData.controlCenterWidgets || []).map(w => w.id) const existingIds = (SettingsData.controlCenterWidgets || []).map(w => w.id)
const allWidgets = widgetModel.baseWidgetDefinitions.concat(widgetModel.getPluginWidgets()) const allWidgets = widgetModel.baseWidgetDefinitions.concat(widgetModel.getPluginWidgets())
return allWidgets.filter(w => w.allowMultiple || !existingIds.includes(w.id)) return allWidgets.filter(w => w.allowMultiple || !existingIds.includes(w.id))
} }
onAddWidget: (widgetId) => widgetModel.addWidget(widgetId) onAddWidget: widgetId => widgetModel.addWidget(widgetId)
onResetToDefault: () => widgetModel.resetToDefault() onResetToDefault: () => widgetModel.resetToDefault()
onClearAll: () => widgetModel.clearAll() onClearAll: () => widgetModel.clearAll()
} }

View File

@@ -20,14 +20,64 @@ import qs.Widgets
Item { Item {
id: root id: root
signal colorPickerRequested() signal colorPickerRequested
property alias barVariants: barVariants
function triggerControlCenterOnFocusedScreen() {
let focusedScreenName = ""
if (CompositorService.isHyprland && Hyprland.focusedWorkspace && Hyprland.focusedWorkspace.monitor) {
focusedScreenName = Hyprland.focusedWorkspace.monitor.name
} else if (CompositorService.isNiri && NiriService.currentOutput) {
focusedScreenName = NiriService.currentOutput
}
if (!focusedScreenName && barVariants.instances.length > 0) {
const firstBar = barVariants.instances[0]
firstBar.triggerControlCenter()
return true
}
for (var i = 0; i < barVariants.instances.length; i++) {
const barInstance = barVariants.instances[i]
if (barInstance.modelData && barInstance.modelData.name === focusedScreenName) {
barInstance.triggerControlCenter()
return true
}
}
return false
}
Variants { Variants {
id: barVariants
model: SettingsData.getFilteredScreens("dankBar") model: SettingsData.getFilteredScreens("dankBar")
delegate: PanelWindow { delegate: PanelWindow {
id: barWindow id: barWindow
property var controlCenterButtonRef: null
function triggerControlCenter() {
controlCenterLoader.active = true
if (!controlCenterLoader.item) {
return
}
if (controlCenterButtonRef && controlCenterLoader.item.setTriggerPosition) {
const globalPos = controlCenterButtonRef.mapToGlobal(0, 0)
const pos = SettingsData.getPopupTriggerPosition(globalPos, barWindow.screen, barWindow.effectiveBarThickness, controlCenterButtonRef.width)
const section = controlCenterButtonRef.section || "right"
controlCenterLoader.item.setTriggerPosition(pos.x, pos.y, pos.width, section, barWindow.screen)
} else {
controlCenterLoader.item.triggerScreen = barWindow.screen
}
controlCenterLoader.item.toggle()
if (controlCenterLoader.item.shouldBeVisible && NetworkService.wifiEnabled) {
NetworkService.scanWifi()
}
}
readonly property var dBarLayer: { readonly property var dBarLayer: {
switch (Quickshell.env("DMS_DANKBAR_LAYER")) { switch (Quickshell.env("DMS_DANKBAR_LAYER")) {
case "bottom": case "bottom":
@@ -46,32 +96,30 @@ Item {
property var modelData: item property var modelData: item
signal colorPickerRequested() signal colorPickerRequested
onColorPickerRequested: root.colorPickerRequested() onColorPickerRequested: root.colorPickerRequested()
AxisContext { AxisContext {
id: axis id: axis
edge: { edge: {
switch (SettingsData.dankBarPosition) { switch (SettingsData.dankBarPosition) {
case SettingsData.Position.Top: case SettingsData.Position.Top:
return "top"; return "top"
case SettingsData.Position.Bottom: case SettingsData.Position.Bottom:
return "bottom"; return "bottom"
case SettingsData.Position.Left: case SettingsData.Position.Left:
return "left"; return "left"
case SettingsData.Position.Right: case SettingsData.Position.Right:
return "right"; return "right"
default: default:
return "top"; return "top"
} }
} }
} }
readonly property bool isVertical: axis.isVertical readonly property bool isVertical: axis.isVertical
property bool gothCornersEnabled: SettingsData.dankBarGothCornersEnabled property bool gothCornersEnabled: SettingsData.dankBarGothCornersEnabled
property real wingtipsRadius: Theme.cornerRadius property real wingtipsRadius: Theme.cornerRadius
readonly property real _wingR: Math.max(0, wingtipsRadius) readonly property real _wingR: Math.max(0, wingtipsRadius)
@@ -81,11 +129,13 @@ Item {
readonly property real _dpr: { readonly property real _dpr: {
if (CompositorService.isNiri && barWindow.screen) { if (CompositorService.isNiri && barWindow.screen) {
const niriScale = NiriService.displayScales[barWindow.screen.name] const niriScale = NiriService.displayScales[barWindow.screen.name]
if (niriScale !== undefined) return niriScale if (niriScale !== undefined)
return niriScale
} }
if (CompositorService.isHyprland && barWindow.screen) { if (CompositorService.isHyprland && barWindow.screen) {
const hyprlandMonitor = Hyprland.monitors.values.find(m => m.name === barWindow.screen.name) const hyprlandMonitor = Hyprland.monitors.values.find(m => m.name === barWindow.screen.name)
if (hyprlandMonitor?.scale !== undefined) return hyprlandMonitor.scale if (hyprlandMonitor?.scale !== undefined)
return hyprlandMonitor.scale
} }
return (barWindow.screen?.devicePixelRatio) || 1 return (barWindow.screen?.devicePixelRatio) || 1
} }
@@ -260,9 +310,7 @@ Item {
readonly property bool inOverviewWithShow: CompositorService.isNiri && NiriService.inOverview && SettingsData.dankBarOpenOnOverview readonly property bool inOverviewWithShow: CompositorService.isNiri && NiriService.inOverview && SettingsData.dankBarOpenOnOverview
readonly property bool effectiveVisible: SettingsData.dankBarVisible || inOverviewWithShow readonly property bool effectiveVisible: SettingsData.dankBarVisible || inOverviewWithShow
readonly property bool showing: effectiveVisible && (topBarCore.reveal readonly property bool showing: effectiveVisible && (topBarCore.reveal || inOverviewWithShow || !topBarCore.autoHide)
|| inOverviewWithShow
|| !topBarCore.autoHide)
readonly property int maskThickness: showing ? barThickness : 1 readonly property int maskThickness: showing ? barThickness : 1
@@ -271,9 +319,12 @@ Item {
return 0 return 0
} else { } else {
switch (SettingsData.dankBarPosition) { switch (SettingsData.dankBarPosition) {
case SettingsData.Position.Left: return 0 case SettingsData.Position.Left:
case SettingsData.Position.Right: return parent.width - maskThickness return 0
default: return 0 case SettingsData.Position.Right:
return parent.width - maskThickness
default:
return 0
} }
} }
} }
@@ -282,9 +333,12 @@ Item {
return 0 return 0
} else { } else {
switch (SettingsData.dankBarPosition) { switch (SettingsData.dankBarPosition) {
case SettingsData.Position.Top: return 0 case SettingsData.Position.Top:
case SettingsData.Position.Bottom: return parent.height - maskThickness return 0
default: return 0 case SettingsData.Position.Bottom:
return parent.height - maskThickness
default:
return 0
} }
} }
} }
@@ -349,8 +403,8 @@ Item {
"prop": "shouldBeVisible" "prop": "shouldBeVisible"
}] }]
return loaders.some(item => { return loaders.some(item => {
if (item.loader) { if (item.loader && item.loader.item) {
return item.loader?.item?.[item.prop] return item.loader.item[item.prop]
} }
return false return false
}) })
@@ -512,7 +566,7 @@ Item {
readonly property var componentMap: { readonly property var componentMap: {
// This property depends on componentMapRevision to ensure it updates when plugins change // This property depends on componentMapRevision to ensure it updates when plugins change
componentMapRevision; componentMapRevision
let baseMap = { let baseMap = {
"launcherButton": launcherButtonComponent, "launcherButton": launcherButtonComponent,
@@ -554,33 +608,33 @@ Item {
} }
readonly property var allComponents: ({ readonly property var allComponents: ({
launcherButtonComponent: launcherButtonComponent, "launcherButtonComponent": launcherButtonComponent,
workspaceSwitcherComponent: workspaceSwitcherComponent, "workspaceSwitcherComponent": workspaceSwitcherComponent,
focusedWindowComponent: focusedWindowComponent, "focusedWindowComponent": focusedWindowComponent,
runningAppsComponent: runningAppsComponent, "runningAppsComponent": runningAppsComponent,
clockComponent: clockComponent, "clockComponent": clockComponent,
mediaComponent: mediaComponent, "mediaComponent": mediaComponent,
weatherComponent: weatherComponent, "weatherComponent": weatherComponent,
systemTrayComponent: systemTrayComponent, "systemTrayComponent": systemTrayComponent,
privacyIndicatorComponent: privacyIndicatorComponent, "privacyIndicatorComponent": privacyIndicatorComponent,
clipboardComponent: clipboardComponent, "clipboardComponent": clipboardComponent,
cpuUsageComponent: cpuUsageComponent, "cpuUsageComponent": cpuUsageComponent,
memUsageComponent: memUsageComponent, "memUsageComponent": memUsageComponent,
diskUsageComponent: diskUsageComponent, "diskUsageComponent": diskUsageComponent,
cpuTempComponent: cpuTempComponent, "cpuTempComponent": cpuTempComponent,
gpuTempComponent: gpuTempComponent, "gpuTempComponent": gpuTempComponent,
notificationButtonComponent: notificationButtonComponent, "notificationButtonComponent": notificationButtonComponent,
batteryComponent: batteryComponent, "batteryComponent": batteryComponent,
controlCenterButtonComponent: controlCenterButtonComponent, "controlCenterButtonComponent": controlCenterButtonComponent,
idleInhibitorComponent: idleInhibitorComponent, "idleInhibitorComponent": idleInhibitorComponent,
spacerComponent: spacerComponent, "spacerComponent": spacerComponent,
separatorComponent: separatorComponent, "separatorComponent": separatorComponent,
networkComponent: networkComponent, "networkComponent": networkComponent,
keyboardLayoutNameComponent: keyboardLayoutNameComponent, "keyboardLayoutNameComponent": keyboardLayoutNameComponent,
vpnComponent: vpnComponent, "vpnComponent": vpnComponent,
notepadButtonComponent: notepadButtonComponent, "notepadButtonComponent": notepadButtonComponent,
colorPickerComponent: colorPickerComponent, "colorPickerComponent": colorPickerComponent,
systemUpdateComponent: systemUpdateComponent "systemUpdateComponent": systemUpdateComponent
}) })
Item { Item {
@@ -694,8 +748,6 @@ Item {
} }
} }
Component { Component {
id: clipboardComponent id: clipboardComponent
@@ -1017,6 +1069,17 @@ Item {
} }
parentScreen: barWindow.screen parentScreen: barWindow.screen
widgetData: parent.widgetData widgetData: parent.widgetData
Component.onCompleted: {
barWindow.controlCenterButtonRef = this
}
Component.onDestruction: {
if (barWindow.controlCenterButtonRef === this) {
barWindow.controlCenterButtonRef = null
}
}
onClicked: { onClicked: {
controlCenterLoader.active = true controlCenterLoader.active = true
if (!controlCenterLoader.item) { if (!controlCenterLoader.item) {
@@ -1135,7 +1198,6 @@ Item {
} }
} }
} }
} }
} }
} }