mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-05-31 17:54:41 +00:00
DisplayTab: toggle ddcutil, disabled by default
This commit is contained in:
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "Mindesthelligkeit erzwingen (1%)",
|
||||
"description": "Löst das Problem, dass die Hintergrundbeleuchtung auf einigen Displays bei 0% Helligkeit vollständig ausgeschaltet wird."
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "Externe Helligkeitsunterstützung",
|
||||
"description": "DDCUtil-Unterstützung zum Steuern der Helligkeit externer Displays über das DDC/CI-Protokoll aktivieren."
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "Helligkeitssteuerung nicht verfügbar. Aktivieren Sie \"Externe Helligkeitsunterstützung\", um die Helligkeit dieses Displays zu steuern.",
|
||||
"generic": "Die Helligkeitssteuerung ist für dieses Display nicht verfügbar."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "Enforce minimum brightness (1%)",
|
||||
"description": "Solves the problem of backlight completely turning off on some displays at 0% brightness."
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "External brightness support",
|
||||
"description": "Enable DDCUtil support for controlling brightness on external displays via DDC/CI protocol."
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "Brightness control unavailable. Enable \"External brightness support\" to control this display's brightness.",
|
||||
"generic": "Brightness control is not available for this display."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "Forzar brillo mínimo (1%)",
|
||||
"description": "Resuelve el problema de la retroiluminación que se apaga completamente en algunas pantallas al 0% de brillo."
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "Soporte de brillo externo",
|
||||
"description": "Habilitar soporte DDCUtil para controlar el brillo en pantallas externas mediante el protocolo DDC/CI."
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "Control de brillo no disponible. Habilita \"Soporte de brillo externo\" para controlar el brillo de esta pantalla.",
|
||||
"generic": "El control de brillo no está disponible para esta pantalla."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "Imposer une luminosité minimale (1%)",
|
||||
"description": "Résout le problème de l'extinction complète du rétroéclairage sur certains écrans à 0% de luminosité."
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "Prise en charge de la luminosité externe",
|
||||
"description": "Activer le support DDCUtil pour contrôler la luminosité des écrans externes via le protocole DDC/CI."
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "Contrôle de la luminosité indisponible. Activez \"Prise en charge de la luminosité externe\" pour contrôler la luminosité de cet écran.",
|
||||
"generic": "Le contrôle de la luminosité n'est pas disponible pour cet écran."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "Forçar brilho mínimo (1%)",
|
||||
"description": "Resolve o problema da retroiluminação apagar completamente em alguns monitores com brilho em 0%."
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "Suporte de brilho externo",
|
||||
"description": "Ativar suporte DDCUtil para controlar o brilho em monitores externos através do protocolo DDC/CI."
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "Controle de brilho indisponível. Ative \"Suporte de brilho externo\" para controlar o brilho desta tela.",
|
||||
"generic": "O controle de brilho não está disponível para esta tela."
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -166,6 +166,14 @@
|
||||
"enforce-minimum": {
|
||||
"label": "限制最小亮度为 1%",
|
||||
"description": "解决亮度为 0% 时部分显示器背光完全关闭的问题。"
|
||||
},
|
||||
"external-brightness": {
|
||||
"label": "外部亮度支持",
|
||||
"description": "启用 DDCUtil 支持,通过 DDC/CI 协议控制外部显示器的亮度。"
|
||||
},
|
||||
"brightness-unavailable": {
|
||||
"ddc-disabled": "亮度控制不可用。启用“外部亮度支持”以控制此显示器的亮度。",
|
||||
"generic": "此显示器无法使用亮度控制。"
|
||||
}
|
||||
},
|
||||
"night-light": {
|
||||
|
||||
@@ -227,7 +227,8 @@
|
||||
},
|
||||
"brightness": {
|
||||
"brightnessStep": 5,
|
||||
"enforceMinimum": true
|
||||
"enforceMinimum": true,
|
||||
"enableDdcSupport": false
|
||||
},
|
||||
"colorSchemes": {
|
||||
"useWallpaperColors": false,
|
||||
|
||||
@@ -370,6 +370,7 @@ Singleton {
|
||||
property JsonObject brightness: JsonObject {
|
||||
property int brightnessStep: 5
|
||||
property bool enforceMinimum: true
|
||||
property bool enableDdcSupport: false
|
||||
}
|
||||
|
||||
property JsonObject colorSchemes: JsonObject {
|
||||
|
||||
@@ -113,12 +113,17 @@ ColumnLayout {
|
||||
to: 1
|
||||
value: brightnessMonitor ? brightnessMonitor.brightness : 0.5
|
||||
stepSize: 0.01
|
||||
enabled: brightnessMonitor ? brightnessMonitor.brightnessControlAvailable : false
|
||||
onMoved: value => {
|
||||
if (brightnessMonitor.method === "internal") {
|
||||
if (brightnessMonitor && brightnessMonitor.brightnessControlAvailable) {
|
||||
brightnessMonitor.setBrightness(value)
|
||||
}
|
||||
}
|
||||
onPressedChanged: (pressed, value) => brightnessMonitor.setBrightness(value)
|
||||
onPressedChanged: (pressed, value) => {
|
||||
if (brightnessMonitor && brightnessMonitor.brightnessControlAvailable) {
|
||||
brightnessMonitor.setBrightness(value)
|
||||
}
|
||||
}
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
@@ -127,17 +132,29 @@ ColumnLayout {
|
||||
Layout.preferredWidth: 55
|
||||
horizontalAlignment: Text.AlignRight
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
opacity: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable ? 0.5 : 1.0
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: 30
|
||||
Layout.fillHeight: true
|
||||
NIcon {
|
||||
icon: brightnessMonitor.method == "internal" ? "device-laptop" : "device-desktop"
|
||||
icon: brightnessMonitor && brightnessMonitor.method == "internal" ? "device-laptop" : "device-desktop"
|
||||
anchors.centerIn: parent
|
||||
opacity: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable ? 0.5 : 1.0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Show message when brightness control is not available
|
||||
NText {
|
||||
visible: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable
|
||||
text: !Settings.data.brightness.enableDdcSupport ? I18n.tr("settings.display.monitors.brightness-unavailable.ddc-disabled") : I18n.tr("settings.display.monitors.brightness-unavailable.generic")
|
||||
pointSize: Style.fontSizeS
|
||||
color: Color.mOnSurfaceVariant
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,6 +180,18 @@ ColumnLayout {
|
||||
checked: Settings.data.brightness.enforceMinimum
|
||||
onToggled: checked => Settings.data.brightness.enforceMinimum = checked
|
||||
}
|
||||
|
||||
NToggle {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("settings.display.monitors.external-brightness.label")
|
||||
description: I18n.tr("settings.display.monitors.external-brightness.description")
|
||||
checked: Settings.data.brightness.enableDdcSupport
|
||||
onToggled: checked => {
|
||||
Settings.data.brightness.enableDdcSupport = checked
|
||||
// DDC detection will run on next monitor change when enabled
|
||||
// Monitors will stop using DDC immediately when disabled
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NDivider {
|
||||
|
||||
@@ -21,7 +21,7 @@ Singleton {
|
||||
|
||||
function getAvailableMethods(): list<string> {
|
||||
var methods = []
|
||||
if (monitors.some(m => m.isDdc))
|
||||
if (Settings.data.brightness.enableDdcSupport && monitors.some(m => m.isDdc))
|
||||
methods.push("ddcutil")
|
||||
if (monitors.some(m => !m.isDdc))
|
||||
methods.push("internal")
|
||||
@@ -47,11 +47,30 @@ Singleton {
|
||||
|
||||
Component.onCompleted: {
|
||||
Logger.i("Brightness", "Service started")
|
||||
if (Settings.data.brightness.enableDdcSupport) {
|
||||
ddcProc.running = true
|
||||
}
|
||||
}
|
||||
|
||||
onMonitorsChanged: {
|
||||
ddcMonitors = []
|
||||
ddcProc.running = true
|
||||
if (Settings.data.brightness.enableDdcSupport) {
|
||||
ddcProc.running = true
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Settings.data.brightness
|
||||
function onEnableDdcSupportChanged() {
|
||||
if (Settings.data.brightness.enableDdcSupport) {
|
||||
// Re-detect DDC monitors when enabled
|
||||
ddcMonitors = []
|
||||
ddcProc.running = true
|
||||
} else {
|
||||
// Clear DDC monitors when disabled
|
||||
ddcMonitors = []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Variants {
|
||||
@@ -101,11 +120,21 @@ Singleton {
|
||||
id: monitor
|
||||
|
||||
required property ShellScreen modelData
|
||||
readonly property bool isDdc: root.ddcMonitors.some(m => m.model === modelData.model)
|
||||
readonly property bool isDdc: Settings.data.brightness.enableDdcSupport && root.ddcMonitors.some(m => m.model === modelData.model)
|
||||
readonly property string busNum: root.ddcMonitors.find(m => m.model === modelData.model)?.busNum ?? ""
|
||||
readonly property bool isAppleDisplay: root.appleDisplayPresent && modelData.model.startsWith("StudioDisplay")
|
||||
readonly property string method: isAppleDisplay ? "apple" : (isDdc ? "ddcutil" : "internal")
|
||||
|
||||
// Check if brightness control is available for this monitor
|
||||
readonly property bool brightnessControlAvailable: {
|
||||
if (isAppleDisplay)
|
||||
return true
|
||||
if (isDdc)
|
||||
return true
|
||||
// For internal displays, check if we have a brightness path
|
||||
return brightnessPath !== ""
|
||||
}
|
||||
|
||||
property real brightness
|
||||
property real lastBrightness: 0
|
||||
property real queuedBrightness: NaN
|
||||
|
||||
Reference in New Issue
Block a user