diff --git a/.config/quickshell/ii/modules/bar/BarContent.qml b/.config/quickshell/ii/modules/bar/BarContent.qml index 7e1e885c0..b17fda1e9 100644 --- a/.config/quickshell/ii/modules/bar/BarContent.qml +++ b/.config/quickshell/ii/modules/bar/BarContent.qml @@ -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 { diff --git a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml index bfcd0c6fb..5b4053e64 100644 --- a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml +++ b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml @@ -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 { diff --git a/.config/quickshell/ii/services/HyprlandXkb.qml b/.config/quickshell/ii/services/HyprlandXkb.qml index cace0d29e..1aa52ec54 100644 --- a/.config/quickshell/ii/services/HyprlandXkb.qml +++ b/.config/quickshell/ii/services/HyprlandXkb.qml @@ -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);