mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-09 15:08:31 -04:00
display config: fix monitor names overflowing, add identity overlay to
ease configuration fixes #1398
This commit is contained in:
@@ -0,0 +1,81 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Wayland
|
||||||
|
import qs.Common
|
||||||
|
import qs.Widgets
|
||||||
|
|
||||||
|
Variants {
|
||||||
|
model: Quickshell.screens
|
||||||
|
|
||||||
|
PanelWindow {
|
||||||
|
id: identifyWindow
|
||||||
|
|
||||||
|
required property var modelData
|
||||||
|
readonly property var outputData: DisplayConfigState.allOutputs[screen.name]
|
||||||
|
readonly property string displayName: DisplayConfigState.getOutputDisplayName(outputData, screen.name)
|
||||||
|
|
||||||
|
screen: modelData
|
||||||
|
visible: true
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
WlrLayershell.namespace: "dms:monitor-identify"
|
||||||
|
WlrLayershell.layer: WlrLayer.Overlay
|
||||||
|
WlrLayershell.exclusiveZone: -1
|
||||||
|
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: true
|
||||||
|
bottom: true
|
||||||
|
left: true
|
||||||
|
right: true
|
||||||
|
}
|
||||||
|
|
||||||
|
mask: Region {}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
opacity: 0
|
||||||
|
|
||||||
|
Component.onCompleted: opacity = 1
|
||||||
|
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: Theme.mediumDuration
|
||||||
|
easing.type: Theme.emphasizedEasing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "transparent"
|
||||||
|
border.color: Theme.primary
|
||||||
|
border.width: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
width: identifyLabel.implicitWidth + Theme.spacingL * 2
|
||||||
|
height: identifyLabel.implicitHeight + Theme.spacingS * 2
|
||||||
|
color: Theme.primary
|
||||||
|
bottomLeftRadius: Theme.cornerRadius
|
||||||
|
bottomRightRadius: Theme.cornerRadius
|
||||||
|
|
||||||
|
StyledText {
|
||||||
|
id: identifyLabel
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: {
|
||||||
|
const phys = DisplayConfigState.getPhysicalSize(identifyWindow.outputData);
|
||||||
|
const res = phys.w + "x" + phys.h;
|
||||||
|
if (identifyWindow.displayName === identifyWindow.screen.name)
|
||||||
|
return identifyWindow.displayName + " • " + res;
|
||||||
|
return identifyWindow.displayName + " (" + identifyWindow.screen.name + ") • " + res;
|
||||||
|
}
|
||||||
|
font.pixelSize: Theme.fontSizeMedium
|
||||||
|
font.weight: Font.Medium
|
||||||
|
color: Theme.primaryText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -85,6 +85,8 @@ Rectangle {
|
|||||||
color: root.isConnected ? Theme.surfaceText : Theme.surfaceVariantText
|
color: root.isConnected ? Theme.surfaceText : Theme.surfaceVariantText
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
wrapMode: Text.NoWrap
|
||||||
|
maximumLineCount: 1
|
||||||
elide: Text.ElideMiddle
|
elide: Text.ElideMiddle
|
||||||
width: Math.min(implicitWidth, root.width - 8)
|
width: Math.min(implicitWidth, root.width - 8)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -632,4 +632,17 @@ Item {
|
|||||||
onConfirmed: DisplayConfigState.confirmChanges(root.selectedProfileId)
|
onConfirmed: DisplayConfigState.confirmChanges(root.selectedProfileId)
|
||||||
onReverted: DisplayConfigState.revertChanges()
|
onReverted: DisplayConfigState.revertChanges()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readonly property bool identifyConfigured: {
|
||||||
|
if (!DisplayConfigState.hasOutputBackend || DisplayConfigState.readOnly)
|
||||||
|
return false;
|
||||||
|
if (!["niri", "hyprland", "mango"].includes(CompositorService.compositor))
|
||||||
|
return true;
|
||||||
|
return DisplayConfigState.includeStatus.included;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
active: root.visible && root.identifyConfigured
|
||||||
|
sourceComponent: MonitorIdentifyOverlay {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user