bar: fixed kb layout+variant display in top right (#2016)

This commit is contained in:
end-4
2025-09-20 13:02:49 +02:00
committed by GitHub
3 changed files with 39 additions and 15 deletions
@@ -293,11 +293,17 @@ Item { // Bar content region
active: HyprlandXkb.layoutCodes.length > 1
visible: active
Layout.rightMargin: indicatorsRowLayout.realSpacing
sourceComponent: StyledText {
text: HyprlandXkb.currentLayoutCode
font.pixelSize: Appearance.font.pixelSize.small
color: rightSidebarButton.colText
animateChange: true
sourceComponent: Item {
implicitWidth: layoutCodeText.implicitWidth
StyledText {
id: layoutCodeText
anchors.centerIn: parent
horizontalAlignment: Text.AlignHCenter
text: HyprlandXkb.currentLayoutCode.split(":").join("\n")
font.pixelSize: text.includes("\n") ? Appearance.font.pixelSize.smaller : Appearance.font.pixelSize.small
color: rightSidebarButton.colText
animateChange: true
}
}
}
MaterialSymbol {
@@ -273,11 +273,18 @@ Item { // Bar content region
active: HyprlandXkb.layoutCodes.length > 1
visible: active
Layout.bottomMargin: indicatorsColumnLayout.realSpacing
sourceComponent: StyledText {
text: HyprlandXkb.currentLayoutCode
font.pixelSize: Appearance.font.pixelSize.small
color: rightSidebarButton.colText
animateChange: true
Layout.alignment: Qt.AlignHCenter
sourceComponent: Item {
implicitHeight: layoutCodeText.implicitHeight
StyledText {
id: layoutCodeText
anchors.centerIn: parent
horizontalAlignment: Text.AlignHCenter
text: HyprlandXkb.currentLayoutCode.split(":").join("\n")
font.pixelSize: text.includes("\n") ? Appearance.font.pixelSize.smaller : Appearance.font.pixelSize.small
color: rightSidebarButton.colText
animateChange: true
}
}
}
MaterialSymbol {
+16 -5
View File
@@ -46,13 +46,24 @@ Singleton {
if (!line.trim() || line.trim().startsWith('!'))
return false;
// Match: key + whitespace + description
const match = line.match(/^\s*(\S+)\s+(.+)$/);
if (match && match[2] === targetDescription) {
root.cachedLayoutCodes[match[2]] = match[1];
root.currentLayoutCode = match[1];
// Match layout: (whitespace + ) key + whitespace + description
const matchLayout = line.match(/^\s*(\S+)\s+(.+)$/);
if (matchLayout && matchLayout[2] === targetDescription) {
root.cachedLayoutCodes[matchLayout[2]] = matchLayout[1];
root.currentLayoutCode = matchLayout[1];
return true;
}
// Match variant: (whitespace + ) variant + whitespace + key + whitespace + description
const matchVariant = line.match(/^\s*(\S+)\s+(\S+)\s+(.+)$/);
if (matchVariant && matchVariant[3] === targetDescription) {
const complexLayout = matchVariant[2] + matchVariant[1];
root.cachedLayoutCodes[matchVariant[3]] = complexLayout;
root.currentLayoutCode = complexLayout;
return true;
}
return false;
});
// console.log("[HyprlandXkb] Found line:", foundLine);
// console.log("[HyprlandXkb] Layout:", root.currentLayoutName, "| Code:", root.currentLayoutCode);