mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-05 21:15:38 -05:00
controlcenter: fix trigger position via IPC
This commit is contained in:
@@ -25,7 +25,6 @@ import qs.Modules.DankBar.Popouts
|
||||
import qs.Modules.Plugins
|
||||
import qs.Services
|
||||
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
@@ -80,7 +79,8 @@ Item {
|
||||
}
|
||||
|
||||
onCurrentPositionChanged: {
|
||||
if (!initialized) return
|
||||
if (!initialized)
|
||||
return
|
||||
|
||||
const component = sourceComponent
|
||||
sourceComponent = null
|
||||
@@ -111,7 +111,8 @@ Item {
|
||||
}
|
||||
|
||||
onCurrentPositionChanged: {
|
||||
if (!initialized) return
|
||||
if (!initialized)
|
||||
return
|
||||
|
||||
console.log("DEBUG: Dock position changed to:", currentPosition, "- recreating dock")
|
||||
const comp = sourceComponent
|
||||
@@ -494,6 +495,7 @@ Item {
|
||||
dankDashPopoutLoader: dankDashPopoutLoader
|
||||
notepadSlideoutVariants: notepadSlideoutVariants
|
||||
hyprKeybindsModalLoader: hyprKeybindsModalLoader
|
||||
dankBarLoader: dankBarLoader
|
||||
}
|
||||
|
||||
Variants {
|
||||
|
||||
@@ -14,6 +14,7 @@ Item {
|
||||
required property var dankDashPopoutLoader
|
||||
required property var notepadSlideoutVariants
|
||||
required property var hyprKeybindsModalLoader
|
||||
required property var dankBarLoader
|
||||
|
||||
IpcHandler {
|
||||
function open() {
|
||||
@@ -76,9 +77,8 @@ Item {
|
||||
|
||||
IpcHandler {
|
||||
function open(): string {
|
||||
root.controlCenterLoader.active = true
|
||||
if (root.controlCenterLoader.item) {
|
||||
root.controlCenterLoader.item.open()
|
||||
if (root.dankBarLoader.item) {
|
||||
root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
|
||||
return "CONTROL_CENTER_OPEN_SUCCESS"
|
||||
}
|
||||
return "CONTROL_CENTER_OPEN_FAILED"
|
||||
@@ -93,9 +93,8 @@ Item {
|
||||
}
|
||||
|
||||
function toggle(): string {
|
||||
root.controlCenterLoader.active = true
|
||||
if (root.controlCenterLoader.item) {
|
||||
root.controlCenterLoader.item.toggle()
|
||||
if (root.dankBarLoader.item) {
|
||||
root.dankBarLoader.item.triggerControlCenterOnFocusedScreen()
|
||||
return "CONTROL_CENTER_TOGGLE_SUCCESS"
|
||||
}
|
||||
return "CONTROL_CENTER_TOGGLE_FAILED"
|
||||
|
||||
@@ -108,8 +108,7 @@ DankPopout {
|
||||
return Qt.rgba(surface.r, surface.g, surface.b, transparency)
|
||||
}
|
||||
radius: Theme.cornerRadius
|
||||
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g,
|
||||
Theme.outline.b, 0.08)
|
||||
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08)
|
||||
border.width: 0
|
||||
antialiasing: true
|
||||
smooth: true
|
||||
@@ -166,9 +165,9 @@ DankPopout {
|
||||
root.toggleSection(widgetData.id)
|
||||
}
|
||||
}
|
||||
onRemoveWidget: (index) => widgetModel.removeWidget(index)
|
||||
onRemoveWidget: index => widgetModel.removeWidget(index)
|
||||
onMoveWidget: (fromIndex, toIndex) => widgetModel.moveWidget(fromIndex, toIndex)
|
||||
onToggleWidgetSize: (index) => widgetModel.toggleWidgetSize(index)
|
||||
onToggleWidgetSize: index => widgetModel.toggleWidgetSize(index)
|
||||
onCollapseRequested: root.collapseAll()
|
||||
}
|
||||
|
||||
@@ -177,12 +176,13 @@ DankPopout {
|
||||
visible: editMode
|
||||
popoutContent: controlContent
|
||||
availableWidgets: {
|
||||
if (!editMode) return []
|
||||
if (!editMode)
|
||||
return []
|
||||
const existingIds = (SettingsData.controlCenterWidgets || []).map(w => w.id)
|
||||
const allWidgets = widgetModel.baseWidgetDefinitions.concat(widgetModel.getPluginWidgets())
|
||||
return allWidgets.filter(w => w.allowMultiple || !existingIds.includes(w.id))
|
||||
}
|
||||
onAddWidget: (widgetId) => widgetModel.addWidget(widgetId)
|
||||
onAddWidget: widgetId => widgetModel.addWidget(widgetId)
|
||||
onResetToDefault: () => widgetModel.resetToDefault()
|
||||
onClearAll: () => widgetModel.clearAll()
|
||||
}
|
||||
@@ -205,10 +205,10 @@ DankPopout {
|
||||
id: bluetoothDetailComponent
|
||||
BluetoothDetail {
|
||||
id: bluetoothDetail
|
||||
onShowCodecSelector: function(device) {
|
||||
onShowCodecSelector: function (device) {
|
||||
if (contentLoader.item && contentLoader.item.bluetoothCodecSelector) {
|
||||
contentLoader.item.bluetoothCodecSelector.show(device)
|
||||
contentLoader.item.bluetoothCodecSelector.codecSelected.connect(function(deviceAddress, codecName) {
|
||||
contentLoader.item.bluetoothCodecSelector.codecSelected.connect(function (deviceAddress, codecName) {
|
||||
bluetoothDetail.updateDeviceCodecDisplay(deviceAddress, codecName)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -20,14 +20,64 @@ import qs.Widgets
|
||||
Item {
|
||||
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 {
|
||||
id: barVariants
|
||||
model: SettingsData.getFilteredScreens("dankBar")
|
||||
|
||||
delegate: PanelWindow {
|
||||
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: {
|
||||
switch (Quickshell.env("DMS_DANKBAR_LAYER")) {
|
||||
case "bottom":
|
||||
@@ -46,32 +96,30 @@ Item {
|
||||
|
||||
property var modelData: item
|
||||
|
||||
signal colorPickerRequested()
|
||||
signal colorPickerRequested
|
||||
|
||||
onColorPickerRequested: root.colorPickerRequested()
|
||||
|
||||
|
||||
AxisContext {
|
||||
id: axis
|
||||
edge: {
|
||||
switch (SettingsData.dankBarPosition) {
|
||||
case SettingsData.Position.Top:
|
||||
return "top";
|
||||
return "top"
|
||||
case SettingsData.Position.Bottom:
|
||||
return "bottom";
|
||||
return "bottom"
|
||||
case SettingsData.Position.Left:
|
||||
return "left";
|
||||
return "left"
|
||||
case SettingsData.Position.Right:
|
||||
return "right";
|
||||
return "right"
|
||||
default:
|
||||
return "top";
|
||||
return "top"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
readonly property bool isVertical: axis.isVertical
|
||||
|
||||
|
||||
property bool gothCornersEnabled: SettingsData.dankBarGothCornersEnabled
|
||||
property real wingtipsRadius: Theme.cornerRadius
|
||||
readonly property real _wingR: Math.max(0, wingtipsRadius)
|
||||
@@ -81,11 +129,13 @@ Item {
|
||||
readonly property real _dpr: {
|
||||
if (CompositorService.isNiri && barWindow.screen) {
|
||||
const niriScale = NiriService.displayScales[barWindow.screen.name]
|
||||
if (niriScale !== undefined) return niriScale
|
||||
if (niriScale !== undefined)
|
||||
return niriScale
|
||||
}
|
||||
if (CompositorService.isHyprland && barWindow.screen) {
|
||||
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
|
||||
}
|
||||
@@ -179,7 +229,7 @@ Item {
|
||||
nativeInhibitor = Qt.createQmlObject(qmlString, barWindow, "DankBar.NativeInhibitor")
|
||||
nativeInhibitor.window = barWindow
|
||||
nativeInhibitor.enabled = Qt.binding(() => SessionService.idleInhibited)
|
||||
nativeInhibitor.enabledChanged.connect(function() {
|
||||
nativeInhibitor.enabledChanged.connect(function () {
|
||||
console.log("DankBar: Native inhibitor enabled changed to:", nativeInhibitor.enabled)
|
||||
if (SessionService.idleInhibited !== nativeInhibitor.enabled) {
|
||||
SessionService.idleInhibited = nativeInhibitor.enabled
|
||||
@@ -260,9 +310,7 @@ Item {
|
||||
|
||||
readonly property bool inOverviewWithShow: CompositorService.isNiri && NiriService.inOverview && SettingsData.dankBarOpenOnOverview
|
||||
readonly property bool effectiveVisible: SettingsData.dankBarVisible || inOverviewWithShow
|
||||
readonly property bool showing: effectiveVisible && (topBarCore.reveal
|
||||
|| inOverviewWithShow
|
||||
|| !topBarCore.autoHide)
|
||||
readonly property bool showing: effectiveVisible && (topBarCore.reveal || inOverviewWithShow || !topBarCore.autoHide)
|
||||
|
||||
readonly property int maskThickness: showing ? barThickness : 1
|
||||
|
||||
@@ -271,9 +319,12 @@ Item {
|
||||
return 0
|
||||
} else {
|
||||
switch (SettingsData.dankBarPosition) {
|
||||
case SettingsData.Position.Left: return 0
|
||||
case SettingsData.Position.Right: return parent.width - maskThickness
|
||||
default: return 0
|
||||
case SettingsData.Position.Left:
|
||||
return 0
|
||||
case SettingsData.Position.Right:
|
||||
return parent.width - maskThickness
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -282,9 +333,12 @@ Item {
|
||||
return 0
|
||||
} else {
|
||||
switch (SettingsData.dankBarPosition) {
|
||||
case SettingsData.Position.Top: return 0
|
||||
case SettingsData.Position.Bottom: return parent.height - maskThickness
|
||||
default: return 0
|
||||
case SettingsData.Position.Top:
|
||||
return 0
|
||||
case SettingsData.Position.Bottom:
|
||||
return parent.height - maskThickness
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -349,8 +403,8 @@ Item {
|
||||
"prop": "shouldBeVisible"
|
||||
}]
|
||||
return loaders.some(item => {
|
||||
if (item.loader) {
|
||||
return item.loader?.item?.[item.prop]
|
||||
if (item.loader && item.loader.item) {
|
||||
return item.loader.item[item.prop]
|
||||
}
|
||||
return false
|
||||
})
|
||||
@@ -512,7 +566,7 @@ Item {
|
||||
|
||||
readonly property var componentMap: {
|
||||
// This property depends on componentMapRevision to ensure it updates when plugins change
|
||||
componentMapRevision;
|
||||
componentMapRevision
|
||||
|
||||
let baseMap = {
|
||||
"launcherButton": launcherButtonComponent,
|
||||
@@ -554,33 +608,33 @@ Item {
|
||||
}
|
||||
|
||||
readonly property var allComponents: ({
|
||||
launcherButtonComponent: launcherButtonComponent,
|
||||
workspaceSwitcherComponent: workspaceSwitcherComponent,
|
||||
focusedWindowComponent: focusedWindowComponent,
|
||||
runningAppsComponent: runningAppsComponent,
|
||||
clockComponent: clockComponent,
|
||||
mediaComponent: mediaComponent,
|
||||
weatherComponent: weatherComponent,
|
||||
systemTrayComponent: systemTrayComponent,
|
||||
privacyIndicatorComponent: privacyIndicatorComponent,
|
||||
clipboardComponent: clipboardComponent,
|
||||
cpuUsageComponent: cpuUsageComponent,
|
||||
memUsageComponent: memUsageComponent,
|
||||
diskUsageComponent: diskUsageComponent,
|
||||
cpuTempComponent: cpuTempComponent,
|
||||
gpuTempComponent: gpuTempComponent,
|
||||
notificationButtonComponent: notificationButtonComponent,
|
||||
batteryComponent: batteryComponent,
|
||||
controlCenterButtonComponent: controlCenterButtonComponent,
|
||||
idleInhibitorComponent: idleInhibitorComponent,
|
||||
spacerComponent: spacerComponent,
|
||||
separatorComponent: separatorComponent,
|
||||
networkComponent: networkComponent,
|
||||
keyboardLayoutNameComponent: keyboardLayoutNameComponent,
|
||||
vpnComponent: vpnComponent,
|
||||
notepadButtonComponent: notepadButtonComponent,
|
||||
colorPickerComponent: colorPickerComponent,
|
||||
systemUpdateComponent: systemUpdateComponent
|
||||
"launcherButtonComponent": launcherButtonComponent,
|
||||
"workspaceSwitcherComponent": workspaceSwitcherComponent,
|
||||
"focusedWindowComponent": focusedWindowComponent,
|
||||
"runningAppsComponent": runningAppsComponent,
|
||||
"clockComponent": clockComponent,
|
||||
"mediaComponent": mediaComponent,
|
||||
"weatherComponent": weatherComponent,
|
||||
"systemTrayComponent": systemTrayComponent,
|
||||
"privacyIndicatorComponent": privacyIndicatorComponent,
|
||||
"clipboardComponent": clipboardComponent,
|
||||
"cpuUsageComponent": cpuUsageComponent,
|
||||
"memUsageComponent": memUsageComponent,
|
||||
"diskUsageComponent": diskUsageComponent,
|
||||
"cpuTempComponent": cpuTempComponent,
|
||||
"gpuTempComponent": gpuTempComponent,
|
||||
"notificationButtonComponent": notificationButtonComponent,
|
||||
"batteryComponent": batteryComponent,
|
||||
"controlCenterButtonComponent": controlCenterButtonComponent,
|
||||
"idleInhibitorComponent": idleInhibitorComponent,
|
||||
"spacerComponent": spacerComponent,
|
||||
"separatorComponent": separatorComponent,
|
||||
"networkComponent": networkComponent,
|
||||
"keyboardLayoutNameComponent": keyboardLayoutNameComponent,
|
||||
"vpnComponent": vpnComponent,
|
||||
"notepadButtonComponent": notepadButtonComponent,
|
||||
"colorPickerComponent": colorPickerComponent,
|
||||
"systemUpdateComponent": systemUpdateComponent
|
||||
})
|
||||
|
||||
Item {
|
||||
@@ -694,8 +748,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Component {
|
||||
id: clipboardComponent
|
||||
|
||||
@@ -1017,6 +1069,17 @@ Item {
|
||||
}
|
||||
parentScreen: barWindow.screen
|
||||
widgetData: parent.widgetData
|
||||
|
||||
Component.onCompleted: {
|
||||
barWindow.controlCenterButtonRef = this
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
if (barWindow.controlCenterButtonRef === this) {
|
||||
barWindow.controlCenterButtonRef = null
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
controlCenterLoader.active = true
|
||||
if (!controlCenterLoader.item) {
|
||||
@@ -1135,7 +1198,6 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user