From 0689518c541e72526a8384637dcb1c7733aa336f Mon Sep 17 00:00:00 2001 From: Denis Garaev Date: Sat, 25 Apr 2026 21:36:46 +0300 Subject: [PATCH 1/2] Vapi: small fixup --- vapi/Meta-18.metadata | 3 +++ vapi/libmutter.vapi | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/vapi/Meta-18.metadata b/vapi/Meta-18.metadata index 05cf306ee..d85250716 100644 --- a/vapi/Meta-18.metadata +++ b/vapi/Meta-18.metadata @@ -12,6 +12,7 @@ BackgroundContent cheader_filename="meta/meta-background-content.h" BackgroundGroup cheader_filename="meta/meta-background-group.h" BackgroundImage cheader_filename="meta/meta-background-image.h" BackgroundImageCache cheader_filename="meta/meta-background-image.h" +Backlight cheader_filename="meta/meta-backlight.h" Barrier cheader_filename="meta/barrier.h" BarrierDirection cheader_filename="meta/barrier.h" BarrierEvent cheader_filename="meta/barrier.h" @@ -56,6 +57,7 @@ KeyHandlerFunc.window nullable LaunchContext cheader_filename="meta/meta-launch-context.h" Laters cheader_filename="meta/types.h" LaterType cheader_filename="meta/util.h" +LogicalMonitor cheader_filename="meta/meta-logical-monitor.h" MaximizeFlags cheader_filename="meta/window.h" MultiTexture cheader_filename="meta/meta-multi-texture.h" MultiTextureAlphaMode.n_meta_multi_texture_alpha_modes name="N_MODES" @@ -67,6 +69,7 @@ MultiTextureCoefficients cheader_filename="meta/meta-multi-texture-format.h" cpr MultiTextureFormat.n_meta_multi_texture_formats name="N_FORMATS" MultiTextureFormat.meta_multi_texture_format_* name="meta_multi_texture_format_(.+)" MultiTextureFormat cheader_filename="meta/meta-multi-texture-format.h" cprefix="META_MULTI_TEXTURE_FORMAT_" +Monitor cheader_filename="meta/meta-monitor.h" MonitorManager cheader_filename="meta/meta-monitor-manager.h" MonitorSwitchConfigType cheader_filename="meta/meta-monitor-manager.h" MotionDirection cheader_filename="meta/common.h" diff --git a/vapi/libmutter.vapi b/vapi/libmutter.vapi index c474aadf4..c8c56e704 100644 --- a/vapi/libmutter.vapi +++ b/vapi/libmutter.vapi @@ -294,7 +294,7 @@ namespace Meta { public void purge (GLib.File file); } #if HAS_MUTTER49 - [CCode (cheader_filename = "meta/main.h", type_id = "meta_backlight_get_type ()")] + [CCode (cheader_filename = "meta/meta-backlight.h", type_id = "meta_backlight_get_type ()")] public abstract class Backlight : GLib.Object { [CCode (has_construct_function = false)] protected Backlight (); @@ -691,14 +691,14 @@ namespace Meta { public Meta.Workspace workspace { owned get; set; } } #if HAS_MUTTER49 - [CCode (cheader_filename = "meta/main.h", type_id = "meta_logical_monitor_get_type ()")] + [CCode (cheader_filename = "meta/meta-logical-monitor.h", type_id = "meta_logical_monitor_get_type ()")] public class LogicalMonitor : GLib.Object { [CCode (has_construct_function = false)] protected LogicalMonitor (); public unowned GLib.List get_monitors (); public int get_number (); } - [CCode (cheader_filename = "meta/main.h", type_id = "meta_monitor_get_type ()")] + [CCode (cheader_filename = "meta/meta-monitor.h", type_id = "meta_monitor_get_type ()")] public class Monitor : GLib.Object { [CCode (has_construct_function = false)] protected Monitor (); From 1053aae9dc0a7ca2c57da212f9df41129f907926 Mon Sep 17 00:00:00 2001 From: Denis Garaev Date: Sat, 25 Apr 2026 21:37:05 +0300 Subject: [PATCH 2/2] BrightnessManager: add basic dbus interface --- src/BrightnessManager.vala | 42 ++++++++++++++++++++++++++++++++++++++ src/DBus.vala | 3 +++ src/meson.build | 4 ++++ 3 files changed, 49 insertions(+) create mode 100644 src/BrightnessManager.vala diff --git a/src/BrightnessManager.vala b/src/BrightnessManager.vala new file mode 100644 index 000000000..41a5aa5ec --- /dev/null +++ b/src/BrightnessManager.vala @@ -0,0 +1,42 @@ +[DBus (name = "io.elementary.gala.BrightnessManager")] +public class Gala.BrightnessManager : GLib.Object { + public int brightness { + get { + if (backlight == null) { + return -1; + } + int min, max; + int value; + backlight.get_brightness_info (out min, out max); + value = backlight.get_brightness (); + return ((value - min) * 100) / (max - min); + } + set { + if (brightness == value || backlight == null) { + return; + } + int min, max; + backlight.get_brightness_info (out min, out max); + backlight.set_brightness ((int) (value * (max - min) / 100) + min); + } + } + + private unowned Meta.MonitorManager monitor_manager; + private unowned Meta.Backlight? backlight; + + public BrightnessManager (WindowManagerGala wm) { + monitor_manager = wm.get_display ().get_context ().get_backend ().get_monitor_manager (); + monitor_manager.monitors_changed.connect (update_available_backlights); + update_available_backlights (); + } + + private void update_available_backlights () { + backlight = null; + unowned var monitors = monitor_manager.get_monitors (); + foreach (unowned var monitor in monitors) { + if (monitor.is_primary () && monitor.is_active ()) { + backlight = monitor.get_backlight (); + } + } + } +} diff --git a/src/DBus.vala b/src/DBus.vala index d02a7595c..a7142a97a 100644 --- a/src/DBus.vala +++ b/src/DBus.vala @@ -19,6 +19,9 @@ public class Gala.DBus { (connection, name) => { try { connection.register_object ("/io/elementary/gala", WindowDragProvider.get_instance ()); +#if HAS_MUTTER50 + connection.register_object ("/io/elementary/gala/BrightnessManager", new BrightnessManager (wm)); +#endif } catch (Error e) { warning (e.message); } diff --git a/src/meson.build b/src/meson.build index aa42ee15e..ed50498be 100644 --- a/src/meson.build +++ b/src/meson.build @@ -72,6 +72,10 @@ gala_bin_sources = files( 'Widgets/WindowSwitcher/WindowSwitcherIcon.vala', ) +if mutter50_dep.found() + gala_bin_sources+=files('BrightnessManager.vala') +endif + gala_bin = executable( 'gala', gala_bin_sources,