mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-05-15 16:52:47 -04:00
Compare commits
3 Commits
4d316007af
...
46bb3b613b
| Author | SHA1 | Date | |
|---|---|---|---|
| 46bb3b613b | |||
| 5839a5de30 | |||
| 535d0bb0f0 |
@@ -92,22 +92,19 @@ Item {
|
|||||||
try {
|
try {
|
||||||
const data = JSON.parse(text);
|
const data = JSON.parse(text);
|
||||||
const mainKeyboard = data.keyboards.find(kb => kb.main === true);
|
const mainKeyboard = data.keyboards.find(kb => kb.main === true);
|
||||||
|
if (!mainKeyboard) {
|
||||||
|
hyprlandCurrentLayout = "";
|
||||||
|
hyprlandLayoutCount = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
hyprlandKeyboard = mainKeyboard.name;
|
hyprlandKeyboard = mainKeyboard.name;
|
||||||
if (mainKeyboard && mainKeyboard.active_keymap) {
|
if (mainKeyboard.active_keymap) {
|
||||||
const parts = mainKeyboard.active_keymap.split(" ");
|
const parts = mainKeyboard.active_keymap.split(" ");
|
||||||
if (parts.length > 0) {
|
hyprlandCurrentLayout = parts[0].substring(0, 2).toUpperCase();
|
||||||
hyprlandCurrentLayout = parts[0].substring(0, 2).toUpperCase();
|
|
||||||
} else {
|
|
||||||
hyprlandCurrentLayout = mainKeyboard.active_keymap.substring(0, 2).toUpperCase();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
hyprlandCurrentLayout = "";
|
hyprlandCurrentLayout = "";
|
||||||
}
|
}
|
||||||
if (mainKeyboard && mainKeyboard.layout_names) {
|
hyprlandLayoutCount = mainKeyboard.layout ? mainKeyboard.layout.split(",").length : 0;
|
||||||
hyprlandLayoutCount = mainKeyboard.layout_names.length;
|
|
||||||
} else {
|
|
||||||
hyprlandLayoutCount = 0;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
hyprlandCurrentLayout = "";
|
hyprlandCurrentLayout = "";
|
||||||
hyprlandLayoutCount = 0;
|
hyprlandLayoutCount = 0;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import QtQuick.Effects
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import Quickshell
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
import Quickshell.Services.Mpris
|
import Quickshell.Services.Mpris
|
||||||
import qs.Common
|
import qs.Common
|
||||||
@@ -44,19 +45,14 @@ Item {
|
|||||||
WeatherService.addRef();
|
WeatherService.addRef();
|
||||||
UserInfoService.getUserInfo();
|
UserInfoService.getUserInfo();
|
||||||
|
|
||||||
if (CompositorService.isHyprland) {
|
if (CompositorService.isHyprland)
|
||||||
updateHyprlandLayout();
|
updateHyprlandLayout();
|
||||||
hyprlandLayoutUpdateTimer.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
lockerReadyArmed = true;
|
lockerReadyArmed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onDestruction: {
|
Component.onDestruction: {
|
||||||
WeatherService.removeRef();
|
WeatherService.removeRef();
|
||||||
if (CompositorService.isHyprland) {
|
|
||||||
hyprlandLayoutUpdateTimer.stop();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendLockerReadyOnce() {
|
function sendLockerReadyOnce() {
|
||||||
@@ -118,22 +114,19 @@ Item {
|
|||||||
try {
|
try {
|
||||||
const data = JSON.parse(text);
|
const data = JSON.parse(text);
|
||||||
const mainKeyboard = data.keyboards.find(kb => kb.main === true);
|
const mainKeyboard = data.keyboards.find(kb => kb.main === true);
|
||||||
|
if (!mainKeyboard) {
|
||||||
|
hyprlandCurrentLayout = "";
|
||||||
|
hyprlandLayoutCount = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
hyprlandKeyboard = mainKeyboard.name;
|
hyprlandKeyboard = mainKeyboard.name;
|
||||||
if (mainKeyboard && mainKeyboard.active_keymap) {
|
if (mainKeyboard.active_keymap) {
|
||||||
const parts = mainKeyboard.active_keymap.split(" ");
|
const parts = mainKeyboard.active_keymap.split(" ");
|
||||||
if (parts.length > 0) {
|
hyprlandCurrentLayout = parts[0].substring(0, 2).toUpperCase();
|
||||||
hyprlandCurrentLayout = parts[0].substring(0, 2).toUpperCase();
|
|
||||||
} else {
|
|
||||||
hyprlandCurrentLayout = mainKeyboard.active_keymap.substring(0, 2).toUpperCase();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
hyprlandCurrentLayout = "";
|
hyprlandCurrentLayout = "";
|
||||||
}
|
}
|
||||||
if (mainKeyboard && mainKeyboard.layout_names) {
|
hyprlandLayoutCount = mainKeyboard.layout ? mainKeyboard.layout.split(",").length : 0;
|
||||||
hyprlandLayoutCount = mainKeyboard.layout_names.length;
|
|
||||||
} else {
|
|
||||||
hyprlandLayoutCount = 0;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
hyprlandCurrentLayout = "";
|
hyprlandCurrentLayout = "";
|
||||||
hyprlandLayoutCount = 0;
|
hyprlandLayoutCount = 0;
|
||||||
@@ -142,12 +135,14 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Timer {
|
Connections {
|
||||||
id: hyprlandLayoutUpdateTimer
|
target: CompositorService.isHyprland ? Hyprland : null
|
||||||
interval: 1000
|
enabled: CompositorService.isHyprland
|
||||||
running: false
|
|
||||||
repeat: true
|
function onRawEvent(event) {
|
||||||
onTriggered: updateHyprlandLayout()
|
if (event.name === "activelayout")
|
||||||
|
updateHyprlandLayout();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
|
|||||||
@@ -391,8 +391,12 @@ Singleton {
|
|||||||
const filtered = filterDisconnectedOnly(parsed);
|
const filtered = filterDisconnectedOnly(parsed);
|
||||||
savedOutputs = filtered;
|
savedOutputs = filtered;
|
||||||
|
|
||||||
if (CompositorService.isHyprland)
|
if (CompositorService.isHyprland) {
|
||||||
initHyprlandSettingsFromConfig(parsed);
|
initHyprlandSettingsFromConfig(parsed);
|
||||||
|
syncHyprlandVrrFromConfig(parsed);
|
||||||
|
}
|
||||||
|
if (CompositorService.isNiri)
|
||||||
|
syncNiriVrrFromConfig(parsed);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,6 +435,44 @@ Singleton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function syncHyprlandVrrFromConfig(parsedOutputs) {
|
||||||
|
const current = JSON.parse(JSON.stringify(SettingsData.hyprlandOutputSettings));
|
||||||
|
let changed = false;
|
||||||
|
for (const outputName in parsedOutputs) {
|
||||||
|
const settings = parsedOutputs[outputName]?.hyprlandSettings;
|
||||||
|
const fromConfig = settings?.vrrFullscreenOnly ?? false;
|
||||||
|
const stored = current[outputName]?.vrrFullscreenOnly ?? false;
|
||||||
|
if (fromConfig === stored)
|
||||||
|
continue;
|
||||||
|
if (!current[outputName])
|
||||||
|
current[outputName] = {};
|
||||||
|
if (fromConfig)
|
||||||
|
current[outputName].vrrFullscreenOnly = true;
|
||||||
|
else
|
||||||
|
delete current[outputName].vrrFullscreenOnly;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if (changed) {
|
||||||
|
SettingsData.hyprlandOutputSettings = current;
|
||||||
|
SettingsData.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncNiriVrrFromConfig(parsedOutputs) {
|
||||||
|
let changed = false;
|
||||||
|
for (const outputName in parsedOutputs) {
|
||||||
|
const output = parsedOutputs[outputName];
|
||||||
|
const current = SettingsData.getNiriOutputSetting(outputName, "vrrOnDemand", false);
|
||||||
|
const fromConfig = output.vrr_on_demand ?? false;
|
||||||
|
if (current === fromConfig)
|
||||||
|
continue;
|
||||||
|
SettingsData.setNiriOutputSetting(outputName, "vrrOnDemand", fromConfig || undefined);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if (changed)
|
||||||
|
SettingsData.saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
function filterDisconnectedOnly(parsedOutputs) {
|
function filterDisconnectedOnly(parsedOutputs) {
|
||||||
const result = {};
|
const result = {};
|
||||||
const liveNames = Object.keys(outputs);
|
const liveNames = Object.keys(outputs);
|
||||||
@@ -479,7 +521,8 @@ Singleton {
|
|||||||
const posMatch = body.match(/position\s+x=(-?\d+)\s+y=(-?\d+)/);
|
const posMatch = body.match(/position\s+x=(-?\d+)\s+y=(-?\d+)/);
|
||||||
const scaleMatch = body.match(/scale\s+([\d.]+)/);
|
const scaleMatch = body.match(/scale\s+([\d.]+)/);
|
||||||
const transformMatch = body.match(/transform\s+"([^"]+)"/);
|
const transformMatch = body.match(/transform\s+"([^"]+)"/);
|
||||||
const vrrMatch = body.match(/variable-refresh-rate(?:\s+on)?/);
|
const vrrMatch = body.match(/variable-refresh-rate/);
|
||||||
|
const vrrOnDemandMatch = body.match(/variable-refresh-rate\s+on-demand=true/);
|
||||||
|
|
||||||
result[name] = {
|
result[name] = {
|
||||||
"name": name,
|
"name": name,
|
||||||
@@ -498,6 +541,7 @@ Singleton {
|
|||||||
] : [],
|
] : [],
|
||||||
"current_mode": 0,
|
"current_mode": 0,
|
||||||
"vrr_enabled": !!vrrMatch,
|
"vrr_enabled": !!vrrMatch,
|
||||||
|
"vrr_on_demand": !!vrrOnDemandMatch,
|
||||||
"vrr_supported": true
|
"vrr_supported": true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -535,7 +579,7 @@ Singleton {
|
|||||||
const name = match[1].trim();
|
const name = match[1].trim();
|
||||||
const rest = line.substring(line.indexOf(match[7]) + match[7].length);
|
const rest = line.substring(line.indexOf(match[7]) + match[7].length);
|
||||||
|
|
||||||
let transform = 0, vrr = false, bitdepth = undefined, cm = undefined;
|
let transform = 0, vrrMode = 0, bitdepth = undefined, cm = undefined;
|
||||||
let sdrBrightness = undefined, sdrSaturation = undefined;
|
let sdrBrightness = undefined, sdrSaturation = undefined;
|
||||||
|
|
||||||
const transformMatch = rest.match(/,\s*transform,\s*(\d+)/);
|
const transformMatch = rest.match(/,\s*transform,\s*(\d+)/);
|
||||||
@@ -544,7 +588,7 @@ Singleton {
|
|||||||
|
|
||||||
const vrrMatch = rest.match(/,\s*vrr,\s*(\d+)/);
|
const vrrMatch = rest.match(/,\s*vrr,\s*(\d+)/);
|
||||||
if (vrrMatch)
|
if (vrrMatch)
|
||||||
vrr = vrrMatch[1] === "1";
|
vrrMode = parseInt(vrrMatch[1]);
|
||||||
|
|
||||||
const bitdepthMatch = rest.match(/,\s*bitdepth,\s*(\d+)/);
|
const bitdepthMatch = rest.match(/,\s*bitdepth,\s*(\d+)/);
|
||||||
if (bitdepthMatch)
|
if (bitdepthMatch)
|
||||||
@@ -583,13 +627,14 @@ Singleton {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"current_mode": 0,
|
"current_mode": 0,
|
||||||
"vrr_enabled": vrr,
|
"vrr_enabled": vrrMode >= 1,
|
||||||
"vrr_supported": true,
|
"vrr_supported": true,
|
||||||
"hyprlandSettings": {
|
"hyprlandSettings": {
|
||||||
"bitdepth": bitdepth,
|
"bitdepth": bitdepth,
|
||||||
"colorManagement": cm,
|
"colorManagement": cm,
|
||||||
"sdrBrightness": sdrBrightness,
|
"sdrBrightness": sdrBrightness,
|
||||||
"sdrSaturation": sdrSaturation
|
"sdrSaturation": sdrSaturation,
|
||||||
|
"vrrFullscreenOnly": vrrMode === 2 ? true : undefined
|
||||||
},
|
},
|
||||||
"mirror": mirror
|
"mirror": mirror
|
||||||
};
|
};
|
||||||
@@ -1205,6 +1250,8 @@ Singleton {
|
|||||||
changeDescriptions.push(outputId + ": " + I18n.tr("Force HDR") + " → " + (changes.supportsHdr ? I18n.tr("Yes") : I18n.tr("No")));
|
changeDescriptions.push(outputId + ": " + I18n.tr("Force HDR") + " → " + (changes.supportsHdr ? I18n.tr("Yes") : I18n.tr("No")));
|
||||||
if (changes.supportsWideColor !== undefined)
|
if (changes.supportsWideColor !== undefined)
|
||||||
changeDescriptions.push(outputId + ": " + I18n.tr("Force Wide Color") + " → " + (changes.supportsWideColor ? I18n.tr("Yes") : I18n.tr("No")));
|
changeDescriptions.push(outputId + ": " + I18n.tr("Force Wide Color") + " → " + (changes.supportsWideColor ? I18n.tr("Yes") : I18n.tr("No")));
|
||||||
|
if (changes.vrrFullscreenOnly !== undefined)
|
||||||
|
changeDescriptions.push(outputId + ": " + I18n.tr("VRR Fullscreen Only") + " → " + (changes.vrrFullscreenOnly ? I18n.tr("Enabled") : I18n.tr("Disabled")));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CompositorService.isNiri) {
|
if (CompositorService.isNiri) {
|
||||||
@@ -1309,7 +1356,12 @@ Singleton {
|
|||||||
|
|
||||||
function generateNiriOutputsKdl(outputsData, niriSettings) {
|
function generateNiriOutputsKdl(outputsData, niriSettings) {
|
||||||
let kdlContent = `// Auto-generated by DMS - do not edit manually\n\n`;
|
let kdlContent = `// Auto-generated by DMS - do not edit manually\n\n`;
|
||||||
for (const outputName in outputsData) {
|
const sortedNames = Object.keys(outputsData).sort((a, b) => {
|
||||||
|
const la = outputsData[a].logical || {};
|
||||||
|
const lb = outputsData[b].logical || {};
|
||||||
|
return (la.x ?? 0) - (lb.x ?? 0) || (la.y ?? 0) - (lb.y ?? 0);
|
||||||
|
});
|
||||||
|
for (const outputName of sortedNames) {
|
||||||
const output = outputsData[outputName];
|
const output = outputsData[outputName];
|
||||||
const identifier = getNiriOutputIdentifier(output, outputName);
|
const identifier = getNiriOutputIdentifier(output, outputName);
|
||||||
const settings = niriSettings[identifier] || {};
|
const settings = niriSettings[identifier] || {};
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ StyledRect {
|
|||||||
DankToggle {
|
DankToggle {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
text: I18n.tr("Variable Refresh Rate")
|
text: I18n.tr("Variable Refresh Rate")
|
||||||
visible: root.isConnected && !CompositorService.isDwl && (DisplayConfigState.outputs[root.outputName]?.vrr_supported ?? false)
|
visible: root.isConnected && !CompositorService.isDwl && !CompositorService.isHyprland && !CompositorService.isNiri && (DisplayConfigState.outputs[root.outputName]?.vrr_supported ?? false)
|
||||||
checked: {
|
checked: {
|
||||||
const pendingVrr = DisplayConfigState.getPendingValue(root.outputName, "vrr");
|
const pendingVrr = DisplayConfigState.getPendingValue(root.outputName, "vrr");
|
||||||
if (pendingVrr !== undefined)
|
if (pendingVrr !== undefined)
|
||||||
@@ -261,13 +261,52 @@ StyledRect {
|
|||||||
onToggled: checked => DisplayConfigState.setPendingChange(root.outputName, "vrr", checked)
|
onToggled: checked => DisplayConfigState.setPendingChange(root.outputName, "vrr", checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
DankToggle {
|
DankDropdown {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
text: I18n.tr("VRR On-Demand")
|
text: I18n.tr("Variable Refresh Rate")
|
||||||
description: I18n.tr("VRR activates only when applications request it")
|
addHorizontalPadding: true
|
||||||
|
visible: root.isConnected && CompositorService.isHyprland && (DisplayConfigState.outputs[root.outputName]?.vrr_supported ?? false)
|
||||||
|
options: [I18n.tr("Off"), I18n.tr("On"), I18n.tr("Fullscreen Only")]
|
||||||
|
currentValue: {
|
||||||
|
DisplayConfigState.pendingHyprlandChanges;
|
||||||
|
if (DisplayConfigState.getHyprlandSetting(root.outputData, root.outputName, "vrrFullscreenOnly", false))
|
||||||
|
return I18n.tr("Fullscreen Only");
|
||||||
|
const pendingVrr = DisplayConfigState.getPendingValue(root.outputName, "vrr");
|
||||||
|
const vrrEnabled = pendingVrr !== undefined ? pendingVrr : (DisplayConfigState.outputs[root.outputName]?.vrr_enabled ?? false);
|
||||||
|
if (vrrEnabled)
|
||||||
|
return I18n.tr("On");
|
||||||
|
return I18n.tr("Off");
|
||||||
|
}
|
||||||
|
onValueChanged: value => {
|
||||||
|
const off = I18n.tr("Off");
|
||||||
|
const fullscreen = I18n.tr("Fullscreen Only");
|
||||||
|
DisplayConfigState.setPendingChange(root.outputName, "vrr", value !== off);
|
||||||
|
DisplayConfigState.setHyprlandSetting(root.outputData, root.outputName, "vrrFullscreenOnly", value === fullscreen || null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DankDropdown {
|
||||||
|
width: parent.width
|
||||||
|
text: I18n.tr("Variable Refresh Rate")
|
||||||
|
addHorizontalPadding: true
|
||||||
visible: root.isConnected && CompositorService.isNiri && (DisplayConfigState.outputs[root.outputName]?.vrr_supported ?? false)
|
visible: root.isConnected && CompositorService.isNiri && (DisplayConfigState.outputs[root.outputName]?.vrr_supported ?? false)
|
||||||
checked: DisplayConfigState.getNiriSetting(root.outputData, root.outputName, "vrrOnDemand", false)
|
options: [I18n.tr("Off"), I18n.tr("On"), I18n.tr("On-Demand")]
|
||||||
onToggled: checked => DisplayConfigState.setNiriSetting(root.outputData, root.outputName, "vrrOnDemand", checked)
|
currentValue: {
|
||||||
|
DisplayConfigState.pendingNiriChanges;
|
||||||
|
if (DisplayConfigState.getNiriSetting(root.outputData, root.outputName, "vrrOnDemand", false))
|
||||||
|
return I18n.tr("On-Demand");
|
||||||
|
const pendingVrr = DisplayConfigState.getPendingValue(root.outputName, "vrr");
|
||||||
|
const vrrEnabled = pendingVrr !== undefined ? pendingVrr : (DisplayConfigState.outputs[root.outputName]?.vrr_enabled ?? false);
|
||||||
|
if (!vrrEnabled)
|
||||||
|
return I18n.tr("Off");
|
||||||
|
return I18n.tr("On");
|
||||||
|
}
|
||||||
|
onValueChanged: value => {
|
||||||
|
const off = I18n.tr("Off");
|
||||||
|
const onDemand = I18n.tr("On-Demand");
|
||||||
|
DisplayConfigState.setPendingChange(root.outputName, "vrr", value !== off);
|
||||||
|
DisplayConfigState.setNiriSetting(root.outputData, root.outputName, "vrrOnDemand", value === onDemand || null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ Item {
|
|||||||
settingKey: "osd"
|
settingKey: "osd"
|
||||||
|
|
||||||
SettingsDropdownRow {
|
SettingsDropdownRow {
|
||||||
|
settingKey: "osdPosition"
|
||||||
text: I18n.tr("OSD Position")
|
text: I18n.tr("OSD Position")
|
||||||
description: I18n.tr("Choose where on-screen displays appear on screen")
|
description: I18n.tr("Choose where on-screen displays appear on screen")
|
||||||
currentValue: {
|
currentValue: {
|
||||||
@@ -73,6 +74,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdAlwaysShowValue"
|
||||||
text: I18n.tr("Always Show Percentage")
|
text: I18n.tr("Always Show Percentage")
|
||||||
description: I18n.tr("Display volume and brightness percentage values in OSD popups")
|
description: I18n.tr("Display volume and brightness percentage values in OSD popups")
|
||||||
checked: SettingsData.osdAlwaysShowValue
|
checked: SettingsData.osdAlwaysShowValue
|
||||||
@@ -87,6 +89,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdVolumeEnabled"
|
||||||
text: I18n.tr("Volume")
|
text: I18n.tr("Volume")
|
||||||
description: I18n.tr("Show on-screen display when volume changes")
|
description: I18n.tr("Show on-screen display when volume changes")
|
||||||
checked: SettingsData.osdVolumeEnabled
|
checked: SettingsData.osdVolumeEnabled
|
||||||
@@ -94,6 +97,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdMediaVolumeEnabled"
|
||||||
text: I18n.tr("Media Volume")
|
text: I18n.tr("Media Volume")
|
||||||
description: I18n.tr("Show on-screen display when media player volume changes")
|
description: I18n.tr("Show on-screen display when media player volume changes")
|
||||||
checked: SettingsData.osdMediaVolumeEnabled
|
checked: SettingsData.osdMediaVolumeEnabled
|
||||||
@@ -101,13 +105,15 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdMediaPlaybackEnabled"
|
||||||
text: I18n.tr("Media Playback")
|
text: I18n.tr("Media Playback")
|
||||||
description: I18n.tr("Show on-screen display when media playback status changes")
|
description: I18n.tr("Show on-screen display when media player status changes")
|
||||||
checked: SettingsData.osdMediaPlaybackEnabled
|
checked: SettingsData.osdMediaPlaybackEnabled
|
||||||
onToggled: checked => SettingsData.set("osdMediaPlaybackEnabled", checked)
|
onToggled: checked => SettingsData.set("osdMediaPlaybackEnabled", checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdBrightnessEnabled"
|
||||||
text: I18n.tr("Brightness")
|
text: I18n.tr("Brightness")
|
||||||
description: I18n.tr("Show on-screen display when brightness changes")
|
description: I18n.tr("Show on-screen display when brightness changes")
|
||||||
checked: SettingsData.osdBrightnessEnabled
|
checked: SettingsData.osdBrightnessEnabled
|
||||||
@@ -115,6 +121,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdIdleInhibitorEnabled"
|
||||||
text: I18n.tr("Idle Inhibitor")
|
text: I18n.tr("Idle Inhibitor")
|
||||||
description: I18n.tr("Show on-screen display when idle inhibitor state changes")
|
description: I18n.tr("Show on-screen display when idle inhibitor state changes")
|
||||||
checked: SettingsData.osdIdleInhibitorEnabled
|
checked: SettingsData.osdIdleInhibitorEnabled
|
||||||
@@ -122,6 +129,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdMicMuteEnabled"
|
||||||
text: I18n.tr("Microphone Mute")
|
text: I18n.tr("Microphone Mute")
|
||||||
description: I18n.tr("Show on-screen display when microphone is muted/unmuted")
|
description: I18n.tr("Show on-screen display when microphone is muted/unmuted")
|
||||||
checked: SettingsData.osdMicMuteEnabled
|
checked: SettingsData.osdMicMuteEnabled
|
||||||
@@ -129,6 +137,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdCapsLockEnabled"
|
||||||
text: I18n.tr("Caps Lock")
|
text: I18n.tr("Caps Lock")
|
||||||
description: I18n.tr("Show on-screen display when caps lock state changes")
|
description: I18n.tr("Show on-screen display when caps lock state changes")
|
||||||
checked: SettingsData.osdCapsLockEnabled
|
checked: SettingsData.osdCapsLockEnabled
|
||||||
@@ -136,6 +145,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdPowerProfileEnabled"
|
||||||
text: I18n.tr("Power Profile")
|
text: I18n.tr("Power Profile")
|
||||||
description: I18n.tr("Show on-screen display when power profile changes")
|
description: I18n.tr("Show on-screen display when power profile changes")
|
||||||
checked: SettingsData.osdPowerProfileEnabled
|
checked: SettingsData.osdPowerProfileEnabled
|
||||||
@@ -143,6 +153,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
|
settingKey: "osdAudioOutputEnabled"
|
||||||
text: I18n.tr("Audio Output Switch")
|
text: I18n.tr("Audio Output Switch")
|
||||||
description: I18n.tr("Show on-screen display when cycling audio output devices")
|
description: I18n.tr("Show on-screen display when cycling audio output devices")
|
||||||
checked: SettingsData.osdAudioOutputEnabled
|
checked: SettingsData.osdAudioOutputEnabled
|
||||||
|
|||||||
@@ -98,8 +98,10 @@ Singleton {
|
|||||||
if (transform !== 0)
|
if (transform !== 0)
|
||||||
monitorLine += ", transform, " + transform;
|
monitorLine += ", transform, " + transform;
|
||||||
|
|
||||||
if (output.vrr_supported)
|
if (output.vrr_supported) {
|
||||||
monitorLine += ", vrr, " + (output.vrr_enabled ? "1" : "0");
|
const vrrMode = outputSettings.vrrFullscreenOnly ? 2 : (output.vrr_enabled ? 1 : 0);
|
||||||
|
monitorLine += ", vrr, " + vrrMode;
|
||||||
|
}
|
||||||
|
|
||||||
if (output.mirror && output.mirror.length > 0)
|
if (output.mirror && output.mirror.length > 0)
|
||||||
monitorLine += ", mirror, " + output.mirror;
|
monitorLine += ", mirror, " + output.mirror;
|
||||||
|
|||||||
@@ -1359,7 +1359,12 @@ Singleton {
|
|||||||
return;
|
return;
|
||||||
let kdlContent = `// Auto-generated by DMS - do not edit manually\n\n`;
|
let kdlContent = `// Auto-generated by DMS - do not edit manually\n\n`;
|
||||||
|
|
||||||
for (const outputName in data) {
|
const sortedNames = Object.keys(data).sort((a, b) => {
|
||||||
|
const la = data[a].logical || {};
|
||||||
|
const lb = data[b].logical || {};
|
||||||
|
return (la.x ?? 0) - (lb.x ?? 0) || (la.y ?? 0) - (lb.y ?? 0);
|
||||||
|
});
|
||||||
|
for (const outputName of sortedNames) {
|
||||||
const output = data[outputName];
|
const output = data[outputName];
|
||||||
const identifier = getOutputIdentifier(output, outputName);
|
const identifier = getOutputIdentifier(output, outputName);
|
||||||
const niriSettings = SettingsData.getNiriOutputSettings(identifier);
|
const niriSettings = SettingsData.getNiriOutputSettings(identifier);
|
||||||
@@ -1397,7 +1402,7 @@ Singleton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output.vrr_enabled) {
|
if (output.vrr_enabled || niriSettings.vrrOnDemand) {
|
||||||
const vrrOnDemand = niriSettings.vrrOnDemand ?? false;
|
const vrrOnDemand = niriSettings.vrrOnDemand ?? false;
|
||||||
kdlContent += vrrOnDemand ? ` variable-refresh-rate on-demand=true\n` : ` variable-refresh-rate\n`;
|
kdlContent += vrrOnDemand ? ` variable-refresh-rate on-demand=true\n` : ` variable-refresh-rate\n`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -751,6 +751,21 @@
|
|||||||
],
|
],
|
||||||
"icon": "vertical_align_center"
|
"icon": "vertical_align_center"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "barShadow",
|
||||||
|
"label": "Shadow",
|
||||||
|
"tabIndex": 3,
|
||||||
|
"category": "Dank Bar",
|
||||||
|
"keywords": [
|
||||||
|
"bar",
|
||||||
|
"dank",
|
||||||
|
"panel",
|
||||||
|
"shadow",
|
||||||
|
"statusbar",
|
||||||
|
"topbar"
|
||||||
|
],
|
||||||
|
"icon": "layers"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "barSpacing",
|
"section": "barSpacing",
|
||||||
"label": "Spacing",
|
"label": "Spacing",
|
||||||
@@ -3815,31 +3830,24 @@
|
|||||||
"description": "If the field is hidden, it will appear as soon as a key is pressed."
|
"description": "If the field is hidden, it will appear as soon as a key is pressed."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"section": "lockScreenNotificationMode",
|
"section": "lockAtStartup",
|
||||||
"label": "Notification Display",
|
"label": "Lock at startup",
|
||||||
"tabIndex": 11,
|
"tabIndex": 11,
|
||||||
"category": "Lock Screen",
|
"category": "Lock Screen",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"alert",
|
"automatic",
|
||||||
"control",
|
"automatically",
|
||||||
"display",
|
"boot",
|
||||||
"information",
|
|
||||||
"lock",
|
"lock",
|
||||||
"lockscreen",
|
|
||||||
"login",
|
"login",
|
||||||
"monitor",
|
|
||||||
"notif",
|
|
||||||
"notification",
|
|
||||||
"notifications",
|
|
||||||
"output",
|
|
||||||
"password",
|
"password",
|
||||||
"privacy",
|
|
||||||
"screen",
|
"screen",
|
||||||
"security",
|
"security",
|
||||||
"shown",
|
"start",
|
||||||
"what"
|
"starts",
|
||||||
|
"startup"
|
||||||
],
|
],
|
||||||
"description": "Control what notification information is shown on the lock screen"
|
"description": "Automatically lock the screen when DMS starts"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"section": "_tab_11",
|
"section": "_tab_11",
|
||||||
@@ -4075,6 +4083,7 @@
|
|||||||
"motion",
|
"motion",
|
||||||
"popout",
|
"popout",
|
||||||
"speed",
|
"speed",
|
||||||
|
"sync",
|
||||||
"text",
|
"text",
|
||||||
"transition",
|
"transition",
|
||||||
"typography"
|
"typography"
|
||||||
@@ -4097,6 +4106,7 @@
|
|||||||
"modal",
|
"modal",
|
||||||
"motion",
|
"motion",
|
||||||
"speed",
|
"speed",
|
||||||
|
"sync",
|
||||||
"text",
|
"text",
|
||||||
"transition",
|
"transition",
|
||||||
"typography"
|
"typography"
|
||||||
@@ -4104,6 +4114,29 @@
|
|||||||
"icon": "web_asset",
|
"icon": "web_asset",
|
||||||
"description": "%1 custom animation duration"
|
"description": "%1 custom animation duration"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "customAnimationDuration",
|
||||||
|
"label": "Animation Duration",
|
||||||
|
"tabIndex": 14,
|
||||||
|
"category": "Typography & Motion",
|
||||||
|
"keywords": [
|
||||||
|
"animate",
|
||||||
|
"animation",
|
||||||
|
"animations",
|
||||||
|
"custom",
|
||||||
|
"duration",
|
||||||
|
"durations",
|
||||||
|
"fonts",
|
||||||
|
"globally",
|
||||||
|
"motion",
|
||||||
|
"scale",
|
||||||
|
"speed",
|
||||||
|
"text",
|
||||||
|
"transition",
|
||||||
|
"typography"
|
||||||
|
],
|
||||||
|
"description": "Globally scale all animation durations"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "animationSpeed",
|
"section": "animationSpeed",
|
||||||
"label": "Animation Speed",
|
"label": "Animation Speed",
|
||||||
@@ -4114,43 +4147,18 @@
|
|||||||
"animation",
|
"animation",
|
||||||
"animations",
|
"animations",
|
||||||
"duration",
|
"duration",
|
||||||
"fine",
|
"durations",
|
||||||
"fonts",
|
"fonts",
|
||||||
"milliseconds",
|
"globally",
|
||||||
"motion",
|
"motion",
|
||||||
|
"scale",
|
||||||
"speed",
|
"speed",
|
||||||
"text",
|
"text",
|
||||||
"timing",
|
|
||||||
"transition",
|
"transition",
|
||||||
"tune",
|
|
||||||
"typography"
|
"typography"
|
||||||
],
|
],
|
||||||
"icon": "animation",
|
"icon": "animation",
|
||||||
"description": "Fine-tune animation timing in milliseconds"
|
"description": "Globally scale all animation durations"
|
||||||
},
|
|
||||||
{
|
|
||||||
"section": "customAnimationDuration",
|
|
||||||
"label": "Custom Duration",
|
|
||||||
"tabIndex": 14,
|
|
||||||
"category": "Typography & Motion",
|
|
||||||
"keywords": [
|
|
||||||
"animate",
|
|
||||||
"animation",
|
|
||||||
"animations",
|
|
||||||
"custom",
|
|
||||||
"duration",
|
|
||||||
"fine",
|
|
||||||
"fonts",
|
|
||||||
"milliseconds",
|
|
||||||
"motion",
|
|
||||||
"speed",
|
|
||||||
"text",
|
|
||||||
"timing",
|
|
||||||
"transition",
|
|
||||||
"tune",
|
|
||||||
"typography"
|
|
||||||
],
|
|
||||||
"description": "Fine-tune animation timing in milliseconds"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"section": "popoutCustomAnimationDuration",
|
"section": "popoutCustomAnimationDuration",
|
||||||
@@ -4281,6 +4289,59 @@
|
|||||||
],
|
],
|
||||||
"description": "Select the font family for UI text"
|
"description": "Select the font family for UI text"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "enableRippleEffects",
|
||||||
|
"label": "Ripple Effects",
|
||||||
|
"tabIndex": 14,
|
||||||
|
"category": "Typography & Motion",
|
||||||
|
"keywords": [
|
||||||
|
"animate",
|
||||||
|
"animation",
|
||||||
|
"animations",
|
||||||
|
"design",
|
||||||
|
"effect",
|
||||||
|
"effects",
|
||||||
|
"elements",
|
||||||
|
"feedback",
|
||||||
|
"fonts",
|
||||||
|
"interactive",
|
||||||
|
"material",
|
||||||
|
"motion",
|
||||||
|
"ripple",
|
||||||
|
"show",
|
||||||
|
"text",
|
||||||
|
"transition",
|
||||||
|
"typography"
|
||||||
|
],
|
||||||
|
"icon": "radio_button_unchecked",
|
||||||
|
"description": "Show Material Design ripple animations on interactive elements"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "syncComponentAnimationSpeeds",
|
||||||
|
"label": "Sync Popouts & Modals",
|
||||||
|
"tabIndex": 14,
|
||||||
|
"category": "Typography & Motion",
|
||||||
|
"keywords": [
|
||||||
|
"animate",
|
||||||
|
"animation",
|
||||||
|
"animations",
|
||||||
|
"customize",
|
||||||
|
"follow",
|
||||||
|
"fonts",
|
||||||
|
"global",
|
||||||
|
"modal",
|
||||||
|
"modals",
|
||||||
|
"motion",
|
||||||
|
"popout",
|
||||||
|
"popouts",
|
||||||
|
"speed",
|
||||||
|
"sync",
|
||||||
|
"text",
|
||||||
|
"transition",
|
||||||
|
"typography"
|
||||||
|
],
|
||||||
|
"description": "Popouts and Modals follow global Animation Speed (disable to customize independently)"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "typography",
|
"section": "typography",
|
||||||
"label": "Typography",
|
"label": "Typography",
|
||||||
@@ -4834,6 +4895,35 @@
|
|||||||
],
|
],
|
||||||
"description": "Timeout for normal priority notifications"
|
"description": "Timeout for normal priority notifications"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "lockScreenNotificationMode",
|
||||||
|
"label": "Notification Display",
|
||||||
|
"tabIndex": 17,
|
||||||
|
"category": "Notifications",
|
||||||
|
"keywords": [
|
||||||
|
"alert",
|
||||||
|
"alerts",
|
||||||
|
"control",
|
||||||
|
"display",
|
||||||
|
"information",
|
||||||
|
"lock",
|
||||||
|
"lockscreen",
|
||||||
|
"login",
|
||||||
|
"messages",
|
||||||
|
"monitor",
|
||||||
|
"notif",
|
||||||
|
"notification",
|
||||||
|
"notifications",
|
||||||
|
"output",
|
||||||
|
"privacy",
|
||||||
|
"screen",
|
||||||
|
"security",
|
||||||
|
"shown",
|
||||||
|
"toast",
|
||||||
|
"what"
|
||||||
|
],
|
||||||
|
"description": "Control what notification information is shown on the lock screen"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "notificationOverlayEnabled",
|
"section": "notificationOverlayEnabled",
|
||||||
"label": "Notification Overlay",
|
"label": "Notification Overlay",
|
||||||
@@ -4948,6 +5038,230 @@
|
|||||||
],
|
],
|
||||||
"description": "Choose where notification popups appear on screen"
|
"description": "Choose where notification popups appear on screen"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "osdAlwaysShowValue",
|
||||||
|
"label": "Always Show Percentage",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"always",
|
||||||
|
"audio",
|
||||||
|
"backlight",
|
||||||
|
"bright",
|
||||||
|
"brightness",
|
||||||
|
"dim",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"loudness",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"percentage",
|
||||||
|
"popup",
|
||||||
|
"popups",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"sound",
|
||||||
|
"speaker",
|
||||||
|
"values",
|
||||||
|
"volume"
|
||||||
|
],
|
||||||
|
"description": "Display volume and brightness percentage values in OSD popups"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdAudioOutputEnabled",
|
||||||
|
"label": "Audio Output Switch",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"audio",
|
||||||
|
"cycling",
|
||||||
|
"devices",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"switch"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when cycling audio output devices"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdBrightnessEnabled",
|
||||||
|
"label": "Brightness",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"backlight",
|
||||||
|
"bright",
|
||||||
|
"brightness",
|
||||||
|
"changes",
|
||||||
|
"dim",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when brightness changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdCapsLockEnabled",
|
||||||
|
"label": "Caps Lock",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"caps",
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"lock",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"state"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when caps lock state changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdIdleInhibitorEnabled",
|
||||||
|
"label": "Idle Inhibitor",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"afk",
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"idle",
|
||||||
|
"inactive",
|
||||||
|
"indicator",
|
||||||
|
"inhibitor",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"screensaver",
|
||||||
|
"show",
|
||||||
|
"state",
|
||||||
|
"timeout"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when idle inhibitor state changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdMediaPlaybackEnabled",
|
||||||
|
"label": "Media Playback",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"audio",
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"media",
|
||||||
|
"monitor",
|
||||||
|
"mpris",
|
||||||
|
"music",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"playback",
|
||||||
|
"player",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when media player status changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdMediaVolumeEnabled",
|
||||||
|
"label": "Media Volume",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"audio",
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"loudness",
|
||||||
|
"media",
|
||||||
|
"monitor",
|
||||||
|
"mpris",
|
||||||
|
"music",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"playback",
|
||||||
|
"player",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"sound",
|
||||||
|
"speaker",
|
||||||
|
"volume"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when media player volume changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdMicMuteEnabled",
|
||||||
|
"label": "Microphone Mute",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"microphone",
|
||||||
|
"monitor",
|
||||||
|
"mute",
|
||||||
|
"muted",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"unmuted"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when microphone is muted/unmuted"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdPosition",
|
||||||
|
"label": "OSD Position",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"appear",
|
||||||
|
"choose",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"monitor",
|
||||||
|
"monitors",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"outputs",
|
||||||
|
"popup",
|
||||||
|
"position",
|
||||||
|
"screen",
|
||||||
|
"screens",
|
||||||
|
"where"
|
||||||
|
],
|
||||||
|
"description": "Choose where on-screen displays appear on screen"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "_tab_18",
|
"section": "_tab_18",
|
||||||
"label": "On-screen Displays",
|
"label": "On-screen Displays",
|
||||||
@@ -4990,6 +5304,57 @@
|
|||||||
"icon": "tune",
|
"icon": "tune",
|
||||||
"description": "Choose where on-screen displays appear on screen"
|
"description": "Choose where on-screen displays appear on screen"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "osdPowerProfileEnabled",
|
||||||
|
"label": "Power Profile",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"hibernate",
|
||||||
|
"indicator",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"power",
|
||||||
|
"profile",
|
||||||
|
"reboot",
|
||||||
|
"restart",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"shutdown",
|
||||||
|
"sleep",
|
||||||
|
"suspend"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when power profile changes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "osdVolumeEnabled",
|
||||||
|
"label": "Volume",
|
||||||
|
"tabIndex": 18,
|
||||||
|
"category": "On-screen Displays",
|
||||||
|
"keywords": [
|
||||||
|
"audio",
|
||||||
|
"changes",
|
||||||
|
"display",
|
||||||
|
"displays",
|
||||||
|
"indicator",
|
||||||
|
"loudness",
|
||||||
|
"monitor",
|
||||||
|
"osd",
|
||||||
|
"output",
|
||||||
|
"popup",
|
||||||
|
"screen",
|
||||||
|
"show",
|
||||||
|
"sound",
|
||||||
|
"speaker",
|
||||||
|
"volume"
|
||||||
|
],
|
||||||
|
"description": "Show on-screen display when volume changes"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "appIdSubstitutions",
|
"section": "appIdSubstitutions",
|
||||||
"label": "App ID Substitutions",
|
"label": "App ID Substitutions",
|
||||||
|
|||||||
Reference in New Issue
Block a user