From d3aeea774d7ad7e54e0f4958956a9003ba3a9448 Mon Sep 17 00:00:00 2001 From: lenemter Date: Mon, 31 Aug 2026 11:46:51 +0300 Subject: [PATCH] Hide Night Light on unsupported hardware --- src/DisplayPlug.vala | 13 +++++++++---- src/Interfaces/MutterDisplayConfig.vala | 2 ++ src/Interfaces/SensorManager.vala | 2 +- src/Objects/MonitorManager.vala | 3 +++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/DisplayPlug.vala b/src/DisplayPlug.vala index 9d397d33..16d0625f 100644 --- a/src/DisplayPlug.vala +++ b/src/DisplayPlug.vala @@ -51,7 +51,9 @@ public class Display.Plug : Switchboard.Plug { stack.add_titled (displays_view, "displays", _("Displays")); var interface_settings_schema = SettingsSchemaSource.get_default ().lookup ("org.gnome.settings-daemon.plugins.color", true); - if (interface_settings_schema != null && interface_settings_schema.has_key ("night-light-enabled")) { + if (interface_settings_schema != null && interface_settings_schema.has_key ("night-light-enabled") && + MonitorManager.get_default ().night_light_supported + ) { var nightlight_view = new NightLightView (); stack.add_titled (nightlight_view, "night-light", _("Night Light")); } @@ -118,9 +120,6 @@ public class Display.Plug : Switchboard.Plug { search_results.set ("%s → %s".printf (display_name, _("Screen mirroring")), "displays"); search_results.set ("%s → %s".printf (display_name, _("Screen Rotation")), "displays"); search_results.set ("%s → %s".printf (display_name, _("Scaling factor")), "displays"); - search_results.set ("%s → %s".printf (display_name, _("Night Light")), "night-light"); - search_results.set ("%s → %s → %s".printf (display_name, _("Night Light"), _("Schedule")), "night-light"); - search_results.set ("%s → %s → %s".printf (display_name, _("Night Light"), _("Color temperature")), "night-light"); search_results.set ("%s → %s → %s".printf (display_name, _("Filters"), _("Color Blindness")), "filters"); search_results.set ("%s → %s → %s".printf (display_name, _("Filters"), _("Color Vision Deficiency")), "filters"); search_results.set ("%s → %s → %s".printf (display_name, _("Filters"), _("Grayscale")), "filters"); @@ -130,6 +129,12 @@ public class Display.Plug : Switchboard.Plug { search_results.set ("%s → %s".printf (display_name, _("Rotation lock")), "displays"); } + if (MonitorManager.get_default ().night_light_supported) { + search_results.set ("%s → %s".printf (display_name, _("Night Light")), "night-light"); + search_results.set ("%s → %s → %s".printf (display_name, _("Night Light"), _("Schedule")), "night-light"); + search_results.set ("%s → %s → %s".printf (display_name, _("Night Light"), _("Color temperature")), "night-light"); + } + return search_results; } } diff --git a/src/Interfaces/MutterDisplayConfig.vala b/src/Interfaces/MutterDisplayConfig.vala index 18122981..b92982e2 100644 --- a/src/Interfaces/MutterDisplayConfig.vala +++ b/src/Interfaces/MutterDisplayConfig.vala @@ -21,6 +21,8 @@ [DBus (name = "org.gnome.Mutter.DisplayConfig")] public interface MutterDisplayConfigInterface : Object { + public abstract bool night_light_supported { get; } + public abstract void get_resources (out uint serial, out MutterReadDisplayCrtc[] crtcs, out MutterReadDisplayOutput[] outputs, out MutterReadDisplayMode[] modes, out int max_screen_width, out int max_screen_height) throws Error; public abstract void apply_configuration (uint serial, bool persistent, MutterWriteDisplayCrtc[] crtcs, MutterWriteDisplayOutput[] outputs) throws Error; public abstract int change_backlight (uint serial, uint output, int value) throws Error; diff --git a/src/Interfaces/SensorManager.vala b/src/Interfaces/SensorManager.vala index a91998ec..f097c351 100644 --- a/src/Interfaces/SensorManager.vala +++ b/src/Interfaces/SensorManager.vala @@ -16,7 +16,7 @@ public class Display.SensorManager : Object { return instance.once (() => new SensorManager ()); } - private class SensorManager () { } + private SensorManager () { } construct { try { diff --git a/src/Objects/MonitorManager.vala b/src/Objects/MonitorManager.vala index 7e04b0e4..ad2698c8 100644 --- a/src/Objects/MonitorManager.vala +++ b/src/Objects/MonitorManager.vala @@ -23,6 +23,7 @@ public class Display.MonitorManager : GLib.Object { public Gee.LinkedList virtual_monitors { get; construct; } public Gee.LinkedList monitors { get; construct; } + public bool night_light_supported { get; private set; } public bool fractional_scale_enabled { get; private set; } public bool global_scale_required { get; private set; } public bool mirroring_supported { get; private set; } @@ -68,6 +69,8 @@ public class Display.MonitorManager : GLib.Object { try { iface = Bus.get_proxy_sync (BusType.SESSION, "org.gnome.Mutter.DisplayConfig", "/org/gnome/Mutter/DisplayConfig"); iface.monitors_changed.connect (get_monitor_config); + + night_light_supported = iface.night_light_supported; } catch (Error e) { critical (e.message); }