1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-07 14:08:29 -04:00

fix(Bluetooth): update codec selection and error handling

Fixes #2240
This commit is contained in:
purian23
2026-07-04 21:48:34 -04:00
parent 8f100960cf
commit c5c3105469
5 changed files with 138 additions and 119 deletions
@@ -314,6 +314,7 @@ DankPopout {
id: bluetoothDetailComponent id: bluetoothDetailComponent
BluetoothDetail { BluetoothDetail {
id: bluetoothDetail id: bluetoothDetail
bluetoothCodecModalRef: contentLoader.item ? contentLoader.item.bluetoothCodecSelector : null
onShowCodecSelector: function (device) { onShowCodecSelector: function (device) {
if (contentLoader.item && contentLoader.item.bluetoothCodecSelector) { if (contentLoader.item && contentLoader.item.bluetoothCodecSelector) {
contentLoader.item.bluetoothCodecSelector.show(device); contentLoader.item.bluetoothCodecSelector.show(device);
@@ -15,6 +15,8 @@ Item {
property var availableCodecs: [] property var availableCodecs: []
property string currentCodec: "" property string currentCodec: ""
property bool isLoading: false property bool isLoading: false
property string statusMessage: ""
property bool statusIsError: false
readonly property bool deviceValid: device !== null && device.connected && BluetoothService.isAudioDevice(device) readonly property bool deviceValid: device !== null && device.connected && BluetoothService.isAudioDevice(device)
@@ -29,6 +31,8 @@ Item {
isLoading = true; isLoading = true;
availableCodecs = []; availableCodecs = [];
currentCodec = ""; currentCodec = "";
statusMessage = "";
statusIsError = false;
visible = true; visible = true;
modalVisible = true; modalVisible = true;
queryCodecs(); queryCodecs();
@@ -60,6 +64,16 @@ Item {
availableCodecs = codecs; availableCodecs = codecs;
currentCodec = current; currentCodec = current;
isLoading = false; isLoading = false;
if (BluetoothService.pactlChecked && !BluetoothService.pactlAvailable) {
statusMessage = I18n.tr("Codec switching is unavailable because pactl was not found");
statusIsError = true;
} else if (codecs.length === 0) {
statusMessage = I18n.tr("No codecs found");
statusIsError = false;
} else {
statusMessage = "";
statusIsError = false;
}
}); });
} }
@@ -123,7 +137,7 @@ Item {
Rectangle { Rectangle {
id: modalBackground id: modalBackground
anchors.fill: parent anchors.fill: parent
color: Qt.rgba(0, 0, 0, 0.5) color: Qt.rgba(0, 0, 0, BlurService.enabled ? 0.72 : 0.5)
opacity: modalVisible ? 1 : 0 opacity: modalVisible ? 1 : 0
Behavior on opacity { Behavior on opacity {
@@ -141,7 +155,7 @@ Item {
focus: root.visible focus: root.visible
enabled: root.visible enabled: root.visible
Keys.onEscapePressed: { Keys.onEscapePressed: event => {
root.hide(); root.hide();
event.accepted = true; event.accepted = true;
} }
@@ -153,9 +167,9 @@ Item {
width: 320 width: 320
height: contentColumn.implicitHeight + Theme.spacingL * 2 height: contentColumn.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.floatingSurface color: Theme.withAlpha(Theme.surfaceContainer, BlurService.enabled ? 0.96 : Theme.popupTransparency)
border.color: Theme.outlineMedium border.color: BlurService.enabled ? BlurService.borderColor : Theme.outlineMedium
border.width: Theme.layerOutlineWidth border.width: BlurService.enabled ? BlurService.borderWidth : Theme.layerOutlineWidth
opacity: modalVisible ? 1 : 0 opacity: modalVisible ? 1 : 0
scale: modalVisible ? 1 : 0.9 scale: modalVisible ? 1 : 0.9
@@ -221,16 +235,24 @@ Item {
} }
StyledText { StyledText {
text: isLoading ? I18n.tr("Loading codecs...") : I18n.tr("Current: %1").arg(currentCodec) text: {
if (isLoading)
return I18n.tr("Loading codecs...");
if (statusMessage.length > 0)
return statusMessage;
return I18n.tr("Current: %1").arg(currentCodec);
}
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: isLoading ? Theme.primary : Theme.surfaceTextMedium color: statusIsError ? Theme.error : (isLoading ? Theme.primary : Theme.surfaceTextMedium)
font.weight: Font.Medium font.weight: Font.Medium
wrapMode: Text.WordWrap
width: parent.width
} }
Column { Column {
width: parent.width width: parent.width
spacing: Theme.spacingXS spacing: Theme.spacingXS
visible: !isLoading visible: !isLoading && availableCodecs.length > 0
Repeater { Repeater {
model: availableCodecs model: availableCodecs
@@ -23,12 +23,47 @@ Rectangle {
color: Theme.nestedSurface color: Theme.nestedSurface
border.color: Theme.outlineMedium border.color: Theme.outlineMedium
border.width: Theme.layerOutlineWidth border.width: Theme.layerOutlineWidth
focus: true
property var bluetoothCodecModalRef: null property var bluetoothCodecModalRef: null
property var devicesBeingPaired: new Set() property var devicesBeingPaired: new Set()
signal showCodecSelector(var device) signal showCodecSelector(var device)
Component.onDestruction: closeTransientSurfaces()
onVisibleChanged: {
if (!visible)
closeTransientSurfaces();
}
Connections {
target: PopoutService.controlCenterPopout
function onShouldBeVisibleChanged() {
const popout = PopoutService.controlCenterPopout;
if (!popout || !popout.shouldBeVisible)
root.closeTransientSurfaces();
}
}
Keys.onPressed: event => {
if (event.key !== Qt.Key_Escape)
return;
if (bluetoothContextMenu.visible) {
bluetoothContextMenu.close();
event.accepted = true;
return;
}
PopoutService.closeControlCenter();
event.accepted = true;
}
function closeTransientSurfaces() {
if (bluetoothContextMenu.visible)
bluetoothContextMenu.close();
if (bluetoothCodecModalRef?.modalVisible)
bluetoothCodecModalRef.hide();
}
function isDeviceBeingPaired(deviceAddress) { function isDeviceBeingPaired(deviceAddress) {
return devicesBeingPaired.has(deviceAddress); return devicesBeingPaired.has(deviceAddress);
} }
@@ -600,6 +635,8 @@ Rectangle {
width: 150 width: 150
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
onClosed: Qt.callLater(() => root.forceActiveFocus())
property var currentDevice: null property var currentDevice: null
readonly property bool hasDevice: currentDevice !== null readonly property bool hasDevice: currentDevice !== null
@@ -607,10 +644,10 @@ Rectangle {
readonly property bool showCodecOption: hasDevice && deviceConnected && BluetoothService.isAudioDevice(currentDevice) readonly property bool showCodecOption: hasDevice && deviceConnected && BluetoothService.isAudioDevice(currentDevice)
background: Rectangle { background: Rectangle {
color: BlurService.enabled ? Theme.surfaceContainer : Theme.withAlpha(Theme.surfaceContainer, Theme.popupTransparency) color: Theme.withAlpha(Theme.surfaceContainer, BlurService.enabled ? 0.96 : Theme.popupTransparency)
radius: Theme.cornerRadius radius: Theme.cornerRadius
border.width: 0 border.width: BlurService.enabled ? BlurService.borderWidth : 0
border.color: Theme.outlineStrong border.color: BlurService.enabled ? BlurService.borderColor : Theme.outlineStrong
} }
MenuItem { MenuItem {
+65
View File
@@ -14,6 +14,9 @@ Singleton {
readonly property bool available: adapter !== null readonly property bool available: adapter !== null
readonly property bool enabled: (adapter && adapter.enabled) ?? false readonly property bool enabled: (adapter && adapter.enabled) ?? false
readonly property bool discovering: (adapter && adapter.discovering) ?? false readonly property bool discovering: (adapter && adapter.discovering) ?? false
property bool pactlAvailable: false
property bool pactlChecked: false
property var pendingPactlActions: []
readonly property var devices: adapter ? adapter.devices : null readonly property var devices: adapter ? adapter.devices : null
readonly property bool enhancedPairingAvailable: DMSService.dmsAvailable && DMSService.apiVersion >= 9 && DMSService.capabilities.includes("bluetooth") readonly property bool enhancedPairingAvailable: DMSService.dmsAvailable && DMSService.apiVersion >= 9 && DMSService.capabilities.includes("bluetooth")
readonly property bool connected: { readonly property bool connected: {
@@ -61,6 +64,23 @@ Singleton {
}); });
} }
Component.onCompleted: {
detectPactlProcess.running = true;
}
function whenPactlChecked(action) {
if (pactlChecked) {
action();
return;
}
const actions = pendingPactlActions.slice();
actions.push(action);
pendingPactlActions = actions;
if (!detectPactlProcess.running)
detectPactlProcess.running = true;
}
function sortDevices(devices) { function sortDevices(devices) {
return devices.sort((a, b) => { return devices.sort((a, b) => {
const aName = a.name || a.deviceName || ""; const aName = a.name || a.deviceName || "";
@@ -305,6 +325,13 @@ Singleton {
if (!device || !device.connected || !isAudioDevice(device)) { if (!device || !device.connected || !isAudioDevice(device)) {
return; return;
} }
if (!pactlChecked) {
whenPactlChecked(() => root.refreshDeviceCodec(device));
return;
}
if (!pactlAvailable) {
return;
}
const cardName = getCardName(device); const cardName = getCardName(device);
codecQueryProcess.cardName = cardName; codecQueryProcess.cardName = cardName;
@@ -320,6 +347,14 @@ Singleton {
callback(""); callback("");
return; return;
} }
if (!pactlChecked) {
whenPactlChecked(() => root.getCurrentCodec(device, callback));
return;
}
if (!pactlAvailable) {
callback("");
return;
}
const cardName = getCardName(device); const cardName = getCardName(device);
codecQueryProcess.cardName = cardName; codecQueryProcess.cardName = cardName;
@@ -335,6 +370,14 @@ Singleton {
callback([], ""); callback([], "");
return; return;
} }
if (!pactlChecked) {
whenPactlChecked(() => root.getAvailableCodecs(device, callback));
return;
}
if (!pactlAvailable) {
callback([], "");
return;
}
const cardName = getCardName(device); const cardName = getCardName(device);
codecFullQueryProcess.cardName = cardName; codecFullQueryProcess.cardName = cardName;
@@ -350,6 +393,14 @@ Singleton {
callback(false, "Invalid device"); callback(false, "Invalid device");
return; return;
} }
if (!pactlChecked) {
whenPactlChecked(() => root.switchCodec(device, profileName, callback));
return;
}
if (!pactlAvailable) {
callback(false, I18n.tr("Codec switching is unavailable because pactl was not found"));
return;
}
const cardName = getCardName(device); const cardName = getCardName(device);
codecSwitchProcess.cardName = cardName; codecSwitchProcess.cardName = cardName;
@@ -358,6 +409,20 @@ Singleton {
codecSwitchProcess.running = true; codecSwitchProcess.running = true;
} }
Process {
id: detectPactlProcess
running: false
command: ["sh", "-c", "command -v pactl"]
onExited: function (exitCode) {
root.pactlAvailable = (exitCode === 0);
root.pactlChecked = true;
const actions = root.pendingPactlActions.slice();
root.pendingPactlActions = [];
actions.forEach(action => action());
}
}
Process { Process {
id: codecQueryProcess id: codecQueryProcess
+2 -108
View File
@@ -112,8 +112,6 @@
"AUR helpers are interactive — see the terminal window for prompts. This popout will return to idle when the upgrade exits.", "AUR helpers are interactive — see the terminal window for prompts. This popout will return to idle when the upgrade exits.",
"Aborted", "Aborted",
"About", "About",
"Accent Color",
"Accept",
"Accept Jobs", "Accept Jobs",
"Accepting", "Accepting",
"Access clipboard history", "Access clipboard history",
@@ -127,7 +125,6 @@
"Activate", "Activate",
"Activate Greeter", "Activate Greeter",
"Activate the DMS greeter? A terminal will open for sudo authentication. Run Sync after activation to apply your settings.", "Activate the DMS greeter? A terminal will open for sudo authentication. Run Sync after activation to apply your settings.",
"Activation",
"Active", "Active",
"Active Color", "Active Color",
"Active VPN", "Active VPN",
@@ -182,7 +179,6 @@
"Also group repeated application icons on the active workspace", "Also group repeated application icons on the active workspace",
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close", "Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close",
"Alternative (OR)", "Alternative (OR)",
"Always Active",
"Always Show Percentage", "Always Show Percentage",
"Always blur against the wallpaper, even with Xray off", "Always blur against the wallpaper, even with Xray off",
"Always hide the dock and reveal it when hovering near the dock area", "Always hide the dock and reveal it when hovering near the dock area",
@@ -321,7 +317,6 @@
"Available Plugins", "Available Plugins",
"Available Screens (%1)", "Available Screens (%1)",
"Available Updates (%1)", "Available Updates (%1)",
"Available in Detailed and Forecast view modes",
"Available.", "Available.",
"BSSID", "BSSID",
"Back", "Back",
@@ -332,7 +327,6 @@
"Background Blur", "Background Blur",
"Background Color", "Background Color",
"Background Effect", "Background Effect",
"Background Opacity",
"Background authentication sync failed. Trying terminal mode.", "Background authentication sync failed. Trying terminal mode.",
"Background image", "Background image",
"Backlight device", "Backlight device",
@@ -411,7 +405,6 @@
"Brightness Value", "Brightness Value",
"Brightness control not available", "Brightness control not available",
"Browse", "Browse",
"Browse Files",
"Browse Plugins", "Browse Plugins",
"Browse Themes", "Browse Themes",
"Browse and set wallpapers", "Browse and set wallpapers",
@@ -477,7 +470,6 @@
"Choose a color", "Choose a color",
"Choose a power profile", "Choose a power profile",
"Choose colors from palette", "Choose colors from palette",
"Choose how the weather widget is displayed",
"Choose how this bar resolves shadow direction", "Choose how this bar resolves shadow direction",
"Choose how to be notified about critical battery alerts.", "Choose how to be notified about critical battery alerts.",
"Choose how to be notified about low battery alerts.", "Choose how to be notified about low battery alerts.",
@@ -495,7 +487,6 @@
"Choose which action buttons appear on clipboard entries", "Choose which action buttons appear on clipboard entries",
"Choose which displays show this widget", "Choose which displays show this widget",
"Choose which monitors show the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.", "Choose which monitors show the lock screen interface. Other monitors will display a solid color for OLED burn-in protection.",
"Chroma Style",
"Cipher", "Cipher",
"Circle", "Circle",
"Class regex", "Class regex",
@@ -523,7 +514,6 @@
"Clipboard History", "Clipboard History",
"Clipboard Manager", "Clipboard Manager",
"Clipboard Saved", "Clipboard Saved",
"Clipboard sent",
"Clipboard works but nothing saved to disk", "Clipboard works but nothing saved to disk",
"Clock", "Clock",
"Clock Style", "Clock Style",
@@ -532,6 +522,7 @@
"Close All Windows", "Close All Windows",
"Close Overview on Launch", "Close Overview on Launch",
"Close Window", "Close Window",
"Codec switching is unavailable because pactl was not found",
"Color", "Color",
"Color %1 copied", "Color %1 copied",
"Color Gamut", "Color Gamut",
@@ -545,8 +536,6 @@
"Color shown for areas not covered by wallpaper", "Color shown for areas not covered by wallpaper",
"Color temperature for day time", "Color temperature for day time",
"Color temperature for night mode", "Color temperature for night mode",
"Color theme for syntax highlighting.",
"Color theme for syntax highlighting. %1 themes available.",
"Color theme from DMS registry", "Color theme from DMS registry",
"Colorful", "Colorful",
"Colorful mix of bright contrasting accents.", "Colorful mix of bright contrasting accents.",
@@ -603,7 +592,6 @@
"Connection failed", "Connection failed",
"Contains", "Contains",
"Content", "Content",
"Content copied",
"Contrast", "Contrast",
"Contributor", "Contributor",
"Control Center", "Control Center",
@@ -629,13 +617,9 @@
"Convenience options for the login screen. Sync to apply.", "Convenience options for the login screen. Sync to apply.",
"Convert to DMS", "Convert to DMS",
"Cooldown", "Cooldown",
"Copied GIF",
"Copied MP4",
"Copied WebP",
"Copied to clipboard", "Copied to clipboard",
"Copied!", "Copied!",
"Copy", "Copy",
"Copy Content",
"Copy Full Command", "Copy Full Command",
"Copy HTML", "Copy HTML",
"Copy Name", "Copy Name",
@@ -789,7 +773,6 @@
"Desktop Widget", "Desktop Widget",
"Desktop Widgets", "Desktop Widgets",
"Desktop background images", "Desktop background images",
"Detailed",
"Details for \"%1\"", "Details for \"%1\"",
"Detected backends: %1", "Detected backends: %1",
"Development", "Development",
@@ -798,7 +781,6 @@
"Device list scroll volume", "Device list scroll volume",
"Device names updated", "Device names updated",
"Device paired", "Device paired",
"Device unpaired",
"Diff", "Diff",
"Digital", "Digital",
"Direction Source", "Direction Source",
@@ -838,7 +820,6 @@
"Display brightness control", "Display brightness control",
"Display configuration is not available. WLR output management protocol not supported.", "Display configuration is not available. WLR output management protocol not supported.",
"Display currently focused application title", "Display currently focused application title",
"Display hourly weather predictions",
"Display line numbers in editor", "Display line numbers in editor",
"Display name for this entry", "Display name for this entry",
"Display only workspaces that contain windows", "Display only workspaces that contain windows",
@@ -946,7 +927,6 @@
"Enter 6-digit passkey", "Enter 6-digit passkey",
"Enter PIN", "Enter PIN",
"Enter PIN for ", "Enter PIN for ",
"Enter URI or text to share",
"Enter a new name for session \"%1\"", "Enter a new name for session \"%1\"",
"Enter a new name for this workspace", "Enter a new name for this workspace",
"Enter command or script path", "Enter command or script path",
@@ -995,7 +975,6 @@
"Fade", "Fade",
"Fade to lock screen", "Fade to lock screen",
"Fade to monitor off", "Fade to monitor off",
"Failed to accept pairing",
"Failed to activate configuration", "Failed to activate configuration",
"Failed to add binds include", "Failed to add binds include",
"Failed to add printer to class", "Failed to add printer to class",
@@ -1003,7 +982,6 @@
"Failed to apply Qt colors", "Failed to apply Qt colors",
"Failed to apply charge limit to system", "Failed to apply charge limit to system",
"Failed to apply profile", "Failed to apply profile",
"Failed to browse device",
"Failed to cancel all jobs", "Failed to cancel all jobs",
"Failed to cancel selected job", "Failed to cancel selected job",
"Failed to check pin limit", "Failed to check pin limit",
@@ -1029,7 +1007,6 @@
"Failed to generate systemd override", "Failed to generate systemd override",
"Failed to hold job", "Failed to hold job",
"Failed to import VPN", "Failed to import VPN",
"Failed to launch SMS app",
"Failed to load VPN config", "Failed to load VPN config",
"Failed to load clipboard configuration.", "Failed to load clipboard configuration.",
"Failed to move job", "Failed to move job",
@@ -1041,7 +1018,6 @@
"Failed to pin entry", "Failed to pin entry",
"Failed to print test page", "Failed to print test page",
"Failed to read theme file: %1", "Failed to read theme file: %1",
"Failed to reject pairing",
"Failed to reload plugin: %1", "Failed to reload plugin: %1",
"Failed to remove QR code at %1: %2", "Failed to remove QR code at %1: %2",
"Failed to remove device", "Failed to remove device",
@@ -1050,17 +1026,12 @@
"Failed to restart audio system", "Failed to restart audio system",
"Failed to restart job", "Failed to restart job",
"Failed to resume printer", "Failed to resume printer",
"Failed to ring device",
"Failed to run 'dms greeter status'. Ensure DMS is installed and dms is in PATH.", "Failed to run 'dms greeter status'. Ensure DMS is installed and dms is in PATH.",
"Failed to save VPN credentials", "Failed to save VPN credentials",
"Failed to save audio config", "Failed to save audio config",
"Failed to save clipboard setting", "Failed to save clipboard setting",
"Failed to save keybind", "Failed to save keybind",
"Failed to save profile", "Failed to save profile",
"Failed to send SMS",
"Failed to send clipboard",
"Failed to send file",
"Failed to send ping",
"Failed to set brightness", "Failed to set brightness",
"Failed to set night mode location", "Failed to set night mode location",
"Failed to set night mode schedule", "Failed to set night mode schedule",
@@ -1068,7 +1039,6 @@
"Failed to set power profile", "Failed to set power profile",
"Failed to set profile image", "Failed to set profile image",
"Failed to set profile image: %1", "Failed to set profile image: %1",
"Failed to share",
"Failed to start connection to %1", "Failed to start connection to %1",
"Failed to unpin entry", "Failed to unpin entry",
"Failed to update %1: %2", "Failed to update %1: %2",
@@ -1083,7 +1053,6 @@
"Failed to write temp file for validation", "Failed to write temp file for validation",
"Failed: %1", "Failed: %1",
"Features", "Features",
"Feels",
"Feels Like", "Feels Like",
"Feels Like %1°", "Feels Like %1°",
"Fidelity", "Fidelity",
@@ -1094,7 +1063,6 @@
"File Manager", "File Manager",
"File changed on disk", "File changed on disk",
"File manager used to open the trash. Pick \"custom\" to enter your own command.", "File manager used to open the trash. Pick \"custom\" to enter your own command.",
"File received from",
"File search requires dsearch\nInstall from github.com/AvengeMedia/danksearch", "File search requires dsearch\nInstall from github.com/AvengeMedia/danksearch",
"File search unavailable", "File search unavailable",
"Files", "Files",
@@ -1165,8 +1133,6 @@
"Force RGBX", "Force RGBX",
"Force Wide Color", "Force Wide Color",
"Force terminal applications to always use dark color schemes", "Force terminal applications to always use dark color schemes",
"Forecast",
"Forecast Days",
"Forecast Not Available", "Forecast Not Available",
"Forecast and conditions", "Forecast and conditions",
"Foreground Layers", "Foreground Layers",
@@ -1177,7 +1143,6 @@
"Forget Network", "Forget Network",
"Forgot network %1", "Forgot network %1",
"Format Legend", "Format Legend",
"Forward 10s",
"Frame", "Frame",
"Frame Blur", "Frame Blur",
"Frame Blur follows Background Blur in Theme & Colors", "Frame Blur follows Background Blur in Theme & Colors",
@@ -1315,7 +1280,6 @@
"Hotkey overlay title (optional)", "Hotkey overlay title (optional)",
"Hour", "Hour",
"Hourly", "Hourly",
"Hourly Forecast Count",
"Hover Popouts", "Hover Popouts",
"How often the server polls for new updates.", "How often the server polls for new updates.",
"How often to change wallpaper", "How often to change wallpaper",
@@ -1428,10 +1392,7 @@
"Keeping Awake", "Keeping Awake",
"Kernel", "Kernel",
"Key", "Key",
"Keybind Sources",
"Keybinds", "Keybinds",
"Keybinds Search Settings",
"Keybinds shown alongside regular search results",
"Keyboard Layout Name", "Keyboard Layout Name",
"Keyboard Shortcuts", "Keyboard Shortcuts",
"Keys", "Keys",
@@ -1487,7 +1448,6 @@
"Load Average", "Load Average",
"Loading codecs...", "Loading codecs...",
"Loading keybinds...", "Loading keybinds...",
"Loading trending...",
"Loading...", "Loading...",
"Local", "Local",
"Local Weather", "Local Weather",
@@ -1525,7 +1485,6 @@
"MTU", "MTU",
"Mail", "Mail",
"Make admin", "Make admin",
"Make sure KDE Connect or Valent is running on your other devices",
"Make the bar background fully transparent", "Make the bar background fully transparent",
"Manage and configure plugins for extending DMS functionality", "Manage and configure plugins for extending DMS functionality",
"Manage up to 4 independent bar configurations. Each bar has its own position, widgets, styling, and display assignment.", "Manage up to 4 independent bar configurations. Each bar has its own position, widgets, styling, and display assignment.",
@@ -1607,7 +1566,6 @@
"Memory usage indicator", "Memory usage indicator",
"Merge indexed file results into the All tab (requires dsearch).", "Merge indexed file results into the All tab (requires dsearch).",
"Merge indexed folder results into the All tab (requires dsearch).", "Merge indexed folder results into the All tab (requires dsearch).",
"Message",
"Message Content", "Message Content",
"Microphone", "Microphone",
"Microphone Mute", "Microphone Mute",
@@ -1677,7 +1635,6 @@
"Network Name (SSID)", "Network Name (SSID)",
"Network Speed Monitor", "Network Speed Monitor",
"Network Status", "Network Status",
"Network Type",
"Network download and upload speed display", "Network download and upload speed display",
"Network not found", "Network not found",
"Neutral", "Neutral",
@@ -1722,7 +1679,6 @@
"No Shadow", "No Shadow",
"No VPN profiles", "No VPN profiles",
"No Weather", "No Weather",
"No Weather Data",
"No Weather Data Available", "No Weather Data Available",
"No action", "No action",
"No active %1 sessions", "No active %1 sessions",
@@ -1740,6 +1696,7 @@
"No calendar source available", "No calendar source available",
"No changes", "No changes",
"No checks passed", "No checks passed",
"No codecs found",
"No custom theme file", "No custom theme file",
"No devices", "No devices",
"No devices found", "No devices found",
@@ -1755,7 +1712,6 @@
"No folders found", "No folders found",
"No hidden apps.", "No hidden apps.",
"No human user accounts found.", "No human user accounts found.",
"No images found",
"No info items", "No info items",
"No information available", "No information available",
"No input device", "No input device",
@@ -1821,7 +1777,6 @@
"Not connected", "Not connected",
"Not detected", "Not detected",
"Not listed?", "Not listed?",
"Not paired",
"Not set", "Not set",
"Notepad", "Notepad",
"Notepad Settings", "Notepad Settings",
@@ -1851,7 +1806,6 @@
"Occupied Color", "Occupied Color",
"Off", "Off",
"Office", "Office",
"Offline",
"Offline Report", "Offline Report",
"Older", "Older",
"On", "On",
@@ -1868,7 +1822,6 @@
"Opacity", "Opacity",
"Opaque", "Opaque",
"Open", "Open",
"Open App",
"Open Delay", "Open Delay",
"Open Dir", "Open Dir",
"Open Frame", "Open Frame",
@@ -1880,14 +1833,11 @@
"Open a terminal and run a custom command instead of the in-shell upgrade flow.", "Open a terminal and run a custom command instead of the in-shell upgrade flow.",
"Open as window", "Open as window",
"Open folder", "Open folder",
"Open in Browser",
"Open in terminal", "Open in terminal",
"Open search bar to find text", "Open search bar to find text",
"Open the launcher by hovering the emerge edge (when free of bar and dock)", "Open the launcher by hovering the emerge edge (when free of bar and dock)",
"Open widget popouts by hovering over the bar. Moving to another widget switches the popout.", "Open widget popouts by hovering over the bar. Moving to another widget switches the popout.",
"Open with...", "Open with...",
"Opening SMS app",
"Opening file browser",
"Opening terminal: ", "Opening terminal: ",
"Opens a picker of other active sessions on this seat", "Opens a picker of other active sessions on this seat",
"Opens image files", "Opens image files",
@@ -1937,11 +1887,7 @@
"Pair", "Pair",
"Pair Bluetooth Device", "Pair Bluetooth Device",
"Paired", "Paired",
"Pairing",
"Pairing failed", "Pairing failed",
"Pairing request from",
"Pairing request sent",
"Pairing requested",
"Pairing...", "Pairing...",
"Partly Cloudy", "Partly Cloudy",
"Passkey:", "Passkey:",
@@ -1970,8 +1916,6 @@
"Permanently delete %1 item(s)? This cannot be undone.", "Permanently delete %1 item(s)? This cannot be undone.",
"Permission denied to set profile image.", "Permission denied to set profile image.",
"Personalization", "Personalization",
"Phone Connect Not Available",
"Phone number",
"Pick a different file manager in Settings → Dock → Trash.", "Pick a different file manager in Settings → Dock → Trash.",
"Pick a different random video each time from the same folder", "Pick a different random video each time from the same folder",
"Pick a terminal in Settings → Launcher (or set $TERMINAL).", "Pick a terminal in Settings → Launcher (or set $TERMINAL).",
@@ -1979,8 +1923,6 @@
"Pictures", "Pictures",
"Pin", "Pin",
"Pin to Dock", "Pin to Dock",
"Ping",
"Ping sent to",
"Pinned", "Pinned",
"Pinned and running apps with drag-and-drop", "Pinned and running apps with drag-and-drop",
"Pixelate", "Pixelate",
@@ -1989,7 +1931,6 @@
"Place plugins in %1", "Place plugins in %1",
"Place the bar on the Wayland overlay layer", "Place the bar on the Wayland overlay layer",
"Place the dock on the Wayland overlay layer", "Place the dock on the Wayland overlay layer",
"Play",
"Play a video when the screen locks.", "Play a video when the screen locks.",
"Play sound after logging in", "Play sound after logging in",
"Play sound when new notification arrives", "Play sound when new notification arrives",
@@ -2049,7 +1990,6 @@
"Power source", "Power source",
"Pre-fill the last successful username on the greeter", "Pre-fill the last successful username on the greeter",
"Pre-select the last used session on the greeter", "Pre-select the last used session on the greeter",
"Precip",
"Precipitation", "Precipitation",
"Precipitation Chance", "Precipitation Chance",
"Preference", "Preference",
@@ -2063,7 +2003,6 @@
"Prevent specific applications from displaying in the media controllers (e.g., browser audio streams, background tools). Matches player identity or desktop file name case-insensitively.", "Prevent specific applications from displaying in the media controllers (e.g., browser audio streams, background tools). Matches player identity or desktop file name case-insensitively.",
"Preview", "Preview",
"Preview: %1", "Preview: %1",
"Previous",
"Previous page", "Previous page",
"Primary", "Primary",
"Primary Container", "Primary Container",
@@ -2126,7 +2065,6 @@
"Reboot", "Reboot",
"Recent", "Recent",
"Recent Colors", "Recent Colors",
"Recent Images",
"Recently Used Apps", "Recently Used Apps",
"Recommended available", "Recommended available",
"Refresh", "Refresh",
@@ -2134,7 +2072,6 @@
"Refreshing...", "Refreshing...",
"Regex", "Regex",
"Regular", "Regular",
"Reject",
"Reject Jobs", "Reject Jobs",
"Related: %1", "Related: %1",
"Release", "Release",
@@ -2171,7 +2108,6 @@
"Repeat", "Repeat",
"Replacement", "Replacement",
"Report", "Report",
"Request Pairing",
"Require holding button/key to confirm power off, restart, suspend, hibernate and logout", "Require holding button/key to confirm power off, restart, suspend, hibernate and logout",
"Required plugin: ", "Required plugin: ",
"Requires %1", "Requires %1",
@@ -2204,7 +2140,6 @@
"Reverse Scrolling Direction", "Reverse Scrolling Direction",
"Reverse workspace switch direction when scrolling over the bar", "Reverse workspace switch direction when scrolling over the bar",
"Revert", "Revert",
"Rewind 10s",
"Right", "Right",
"Right Center", "Right Center",
"Right Section", "Right Section",
@@ -2212,8 +2147,6 @@
"Right-click and drag anywhere on the widget", "Right-click and drag anywhere on the widget",
"Right-click and drag the bottom-right corner", "Right-click and drag the bottom-right corner",
"Right-click bar widget to cycle", "Right-click bar widget to cycle",
"Ring",
"Ringing",
"Ripple Effects", "Ripple Effects",
"Root Filesystem", "Root Filesystem",
"Rounded corners for windows", "Rounded corners for windows",
@@ -2233,8 +2166,6 @@
"Running in terminal", "Running in terminal",
"SDR Brightness", "SDR Brightness",
"SDR Saturation", "SDR Saturation",
"SMS",
"SMS sent successfully",
"Saturation", "Saturation",
"Save", "Save",
"Save Notepad File", "Save Notepad File",
@@ -2277,12 +2208,10 @@
"Search App Actions", "Search App Actions",
"Search Options", "Search Options",
"Search applications...", "Search applications...",
"Search by key combo, description, or action name.\n\nDefault action copies the keybind to clipboard.\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.",
"Search devices...", "Search devices...",
"Search for a location...", "Search for a location...",
"Search installed plugins...", "Search installed plugins...",
"Search keybinds...", "Search keybinds...",
"Search keyboard shortcuts from your compositor and applications",
"Search plugins...", "Search plugins...",
"Search processes...", "Search processes...",
"Search sessions...", "Search sessions...",
@@ -2290,7 +2219,6 @@
"Search widgets...", "Search widgets...",
"Search...", "Search...",
"Searching", "Searching",
"Searching...",
"Second Factor (AND)", "Second Factor (AND)",
"Secondary", "Secondary",
"Secondary Container", "Secondary Container",
@@ -2305,7 +2233,6 @@
"Select Bar", "Select Bar",
"Select Custom Theme", "Select Custom Theme",
"Select Dock Launcher Logo", "Select Dock Launcher Logo",
"Select File to Send",
"Select Launcher Logo", "Select Launcher Logo",
"Select Profile Image", "Select Profile Image",
"Select Video or Folder", "Select Video or Folder",
@@ -2318,7 +2245,6 @@
"Select a window...", "Select a window...",
"Select an active session to switch to. The current session stays running in the background.", "Select an active session to switch to. The current session stays running in the background.",
"Select an image file...", "Select an image file...",
"Select at least one provider",
"Select background image", "Select background image",
"Select device", "Select device",
"Select device...", "Select device...",
@@ -2333,14 +2259,9 @@
"Select the font family for UI text", "Select the font family for UI text",
"Select the palette algorithm used for wallpaper-based colors", "Select the palette algorithm used for wallpaper-based colors",
"Select user...", "Select user...",
"Select which keybind providers to include",
"Select which transitions to include in randomization", "Select which transitions to include in randomization",
"Select...", "Select...",
"Selected image file not found.", "Selected image file not found.",
"Send",
"Send Clipboard",
"Send SMS",
"Sending",
"Separate", "Separate",
"Separate Appearance for Unfocused Display(s)", "Separate Appearance for Unfocused Display(s)",
"Separate Light & Dark Themes", "Separate Light & Dark Themes",
@@ -2375,9 +2296,7 @@
"Shadow elevation on modals and dialogs", "Shadow elevation on modals and dialogs",
"Shadow elevation on popouts, OSDs, and dropdowns", "Shadow elevation on popouts, OSDs, and dropdowns",
"Shadows", "Shadows",
"Share",
"Share Gamma Control Settings", "Share Gamma Control Settings",
"Shared",
"Shell", "Shell",
"Shift+Enter to copy", "Shift+Enter to copy",
"Shift+Enter to paste", "Shift+Enter to paste",
@@ -2397,20 +2316,15 @@
"Show Date", "Show Date",
"Show Disk", "Show Disk",
"Show Dock", "Show Dock",
"Show Feels Like Temperature",
"Show Flatpak, Snap, AppImage, or Nix badge icons on launcher items.", "Show Flatpak, Snap, AppImage, or Nix badge icons on launcher items.",
"Show Footer", "Show Footer",
"Show Forecast",
"Show GPU Temperature", "Show GPU Temperature",
"Show Header", "Show Header",
"Show Hibernate", "Show Hibernate",
"Show Hour Numbers", "Show Hour Numbers",
"Show Hourly Forecast",
"Show Humidity",
"Show Icon", "Show Icon",
"Show Launcher Button", "Show Launcher Button",
"Show Line Numbers", "Show Line Numbers",
"Show Location",
"Show Lock", "Show Lock",
"Show Log Out", "Show Log Out",
"Show Material Design ripple animations on interactive elements", "Show Material Design ripple animations on interactive elements",
@@ -2428,15 +2342,12 @@
"Show Percentage", "Show Percentage",
"Show Power Actions", "Show Power Actions",
"Show Power Off", "Show Power Off",
"Show Precipitation Probability",
"Show Pressure",
"Show Profile Image", "Show Profile Image",
"Show Reboot", "Show Reboot",
"Show Remaining Time", "Show Remaining Time",
"Show Restart DMS", "Show Restart DMS",
"Show Saved Items", "Show Saved Items",
"Show Seconds", "Show Seconds",
"Show Sunrise/Sunset",
"Show Suspend", "Show Suspend",
"Show Swap", "Show Swap",
"Show Switch User", "Show Switch User",
@@ -2445,10 +2356,8 @@
"Show System Time", "Show System Time",
"Show Top Processes", "Show Top Processes",
"Show Trash in Dock", "Show Trash in Dock",
"Show Weather Condition",
"Show Week Number", "Show Week Number",
"Show Welcome", "Show Welcome",
"Show Wind Speed",
"Show Workspace Apps", "Show Workspace Apps",
"Show a bar that drains as the popup's auto-dismiss timer runs", "Show a bar that drains as the popup's auto-dismiss timer runs",
"Show a notification when battery reaches the charge limit.", "Show a notification when battery reaches the charge limit.",
@@ -2498,7 +2407,6 @@
"Shrink the media widget to fit shorter song titles while still respecting the configured maximum size", "Shrink the media widget to fit shorter song titles while still respecting the configured maximum size",
"Shutdown", "Shutdown",
"Signal", "Signal",
"Signal Strength",
"Signal:", "Signal:",
"Silence for a while", "Silence for a while",
"Silence notifications", "Silence notifications",
@@ -2542,7 +2450,6 @@
"Standard", "Standard",
"Standard: Classic Material Design 3 — panels rise from below with a subtle scale. The DMS default.", "Standard: Classic Material Design 3 — panels rise from below with a subtle scale. The DMS default.",
"Start", "Start",
"Start KDE Connect or Valent to use this plugin",
"Start typing your notes here...", "Start typing your notes here...",
"State", "State",
"Status", "Status",
@@ -2732,10 +2639,7 @@
"Trash", "Trash",
"Trash command failed (exit %1)", "Trash command failed (exit %1)",
"Tray Icon Fix", "Tray Icon Fix",
"Trending GIFs",
"Trending Stickers",
"Trigger", "Trigger",
"Trigger Prefix",
"Trigger: %1", "Trigger: %1",
"Trust", "Trust",
"Try a different search", "Try a different search",
@@ -2749,11 +2653,9 @@
"Type", "Type",
"Type at least 2 characters", "Type at least 2 characters",
"Type at least 2 characters to search files.", "Type at least 2 characters to search files.",
"Type this prefix to search keybinds",
"Type to search files", "Type to search files",
"Typography", "Typography",
"Typography & Motion", "Typography & Motion",
"URI",
"Unavailable", "Unavailable",
"Uncategorized", "Uncategorized",
"Unfocused Color", "Unfocused Color",
@@ -2782,8 +2684,6 @@
"Unmute", "Unmute",
"Unmute popups for %1", "Unmute popups for %1",
"Unnamed Rule", "Unnamed Rule",
"Unpair",
"Unpair failed",
"Unpin", "Unpin",
"Unpin from Dock", "Unpin from Dock",
"Unsaved Changes", "Unsaved Changes",
@@ -2807,7 +2707,6 @@
"Uptime:", "Uptime:",
"Urgent", "Urgent",
"Urgent Color", "Urgent Color",
"Usage Tips",
"Use 24-hour time format instead of 12-hour AM/PM", "Use 24-hour time format instead of 12-hour AM/PM",
"Use Custom Command", "Use Custom Command",
"Use Grid Layout", "Use Grid Layout",
@@ -2842,9 +2741,7 @@
"Use the extended surface for launcher content", "Use the extended surface for launcher content",
"Use the overlay layer when opening the launcher", "Use the overlay layer when opening the launcher",
"Use the same position and size on all displays", "Use the same position and size on all displays",
"Use trigger prefix to activate",
"Used for xdg-terminal-exec", "Used for xdg-terminal-exec",
"Used when accent color is set to Custom",
"User", "User",
"User Window Rules (%1)", "User Window Rules (%1)",
"User already exists", "User already exists",
@@ -2878,7 +2775,6 @@
"VRR Fullscreen Only", "VRR Fullscreen Only",
"VRR On-Demand", "VRR On-Demand",
"Variable Refresh Rate", "Variable Refresh Rate",
"Verification",
"Version", "Version",
"Vertical Deck", "Vertical Deck",
"Vertical Grid", "Vertical Grid",
@@ -2891,7 +2787,6 @@
"Video Player", "Video Player",
"Video Screensaver", "Video Screensaver",
"Videos", "Videos",
"View Mode",
"Visibility", "Visibility",
"Visible Entry Actions", "Visible Entry Actions",
"Visual Effects", "Visual Effects",
@@ -3002,7 +2897,6 @@
"days", "days",
"deprecated", "deprecated",
"detached", "detached",
"device",
"dgop not available", "dgop not available",
"direct", "direct",
"discuss", "discuss",