monitor-manager: Move backlight API to MetaOutput
It's now a signal emitted when `meta_output_set_backlight()` is called. It is also no longer normalized between 1 and 100; that is now handled done via the D-Bus API layer. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
This commit is contained in:
parent
c4f1396570
commit
68dd168e33
6 changed files with 67 additions and 68 deletions
|
@ -183,9 +183,6 @@ struct _MetaMonitorManager
|
|||
*
|
||||
* @set_power_save_mode: Sets the #MetaPowerSave mode (for all displays).
|
||||
*
|
||||
* @change_backlight: Changes the backlight intensity to the given value (in
|
||||
* percent).
|
||||
*
|
||||
* @tiled_monitor_added: Should be called by a #MetaMonitor when it is created.
|
||||
*
|
||||
* @tiled_monitor_removed: Should be called by a #MetaMonitor when it is
|
||||
|
@ -223,10 +220,6 @@ struct _MetaMonitorManagerClass
|
|||
void (* set_power_save_mode) (MetaMonitorManager *manager,
|
||||
MetaPowerSave power_save);
|
||||
|
||||
void (* change_backlight) (MetaMonitorManager *manager,
|
||||
MetaOutput *output,
|
||||
int backlight);
|
||||
|
||||
void (* tiled_monitor_added) (MetaMonitorManager *manager,
|
||||
MetaMonitor *monitor);
|
||||
|
||||
|
|
|
@ -1610,6 +1610,26 @@ meta_monitor_manager_maybe_emit_privacy_screen_change (MetaMonitorManager *manag
|
|||
manager->privacy_screen_change_state = META_PRIVACY_SCREEN_CHANGE_STATE_NONE;
|
||||
}
|
||||
|
||||
static int
|
||||
normalize_backlight (MetaOutput *output,
|
||||
int value)
|
||||
{
|
||||
const MetaOutputInfo *output_info = meta_output_get_info (output);
|
||||
|
||||
return (int) round ((double) (value - output_info->backlight_min) /
|
||||
(output_info->backlight_max - output_info->backlight_min) * 100.0);
|
||||
}
|
||||
|
||||
static int
|
||||
denormalize_backlight (MetaOutput *output,
|
||||
int normalized_value)
|
||||
{
|
||||
const MetaOutputInfo *output_info = meta_output_get_info (output);
|
||||
|
||||
return (int) round ((double) normalized_value / 100.0 *
|
||||
(output_info->backlight_max + output_info->backlight_min));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
||||
GDBusMethodInvocation *invocation,
|
||||
|
@ -1689,6 +1709,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
|||
MetaCrtc *crtc;
|
||||
int crtc_index;
|
||||
int backlight;
|
||||
int normalized_backlight;
|
||||
int min_backlight_step;
|
||||
gboolean is_primary;
|
||||
gboolean is_presentation;
|
||||
|
@ -1730,6 +1751,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
|||
}
|
||||
|
||||
backlight = meta_output_get_backlight (output);
|
||||
normalized_backlight = normalize_backlight (output, backlight);
|
||||
min_backlight_step =
|
||||
output_info->backlight_max - output_info->backlight_min
|
||||
? 100 / (output_info->backlight_max - output_info->backlight_min)
|
||||
|
@ -1758,7 +1780,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
|||
g_variant_builder_add (&properties, "{sv}", "display-name",
|
||||
g_variant_new_string (output_info->name));
|
||||
g_variant_builder_add (&properties, "{sv}", "backlight",
|
||||
g_variant_new_int32 (backlight));
|
||||
g_variant_new_int32 (normalized_backlight));
|
||||
g_variant_builder_add (&properties, "{sv}", "min-backlight-step",
|
||||
g_variant_new_int32 (min_backlight_step));
|
||||
g_variant_builder_add (&properties, "{sv}", "primary",
|
||||
|
@ -2835,13 +2857,14 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
|||
GDBusMethodInvocation *invocation,
|
||||
guint serial,
|
||||
guint output_index,
|
||||
gint value,
|
||||
gint normalized_value,
|
||||
MetaMonitorManager *manager)
|
||||
{
|
||||
GList *combined_outputs;
|
||||
MetaOutput *output;
|
||||
const MetaOutputInfo *output_info;
|
||||
int new_backlight;
|
||||
int value;
|
||||
int renormalized_value;
|
||||
|
||||
if (serial != manager->serial)
|
||||
{
|
||||
|
@ -2864,7 +2887,7 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
|||
output = g_list_nth_data (combined_outputs, output_index);
|
||||
g_list_free (combined_outputs);
|
||||
|
||||
if (value < 0 || value > 100)
|
||||
if (normalized_value < 0 || normalized_value > 100)
|
||||
{
|
||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||
G_DBUS_ERROR_INVALID_ARGS,
|
||||
|
@ -2883,12 +2906,14 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
|||
return G_DBUS_METHOD_INVOCATION_HANDLED;
|
||||
}
|
||||
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager)->change_backlight (manager, output, value);
|
||||
value = denormalize_backlight (output, normalized_value);
|
||||
meta_output_set_backlight (output, value);
|
||||
renormalized_value = normalize_backlight (output, value);
|
||||
|
||||
new_backlight = meta_output_get_backlight (output);
|
||||
meta_dbus_display_config_complete_change_backlight (skeleton,
|
||||
invocation,
|
||||
new_backlight);
|
||||
renormalized_value);
|
||||
|
||||
return G_DBUS_METHOD_INVOCATION_HANDLED;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ enum
|
|||
{
|
||||
COLOR_SPACE_CHANGED,
|
||||
HDR_METADATA_CHANGED,
|
||||
BACKLIGHT_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
};
|
||||
|
@ -216,7 +217,12 @@ meta_output_set_backlight (MetaOutput *output,
|
|||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_return_if_fail (backlight >= priv->info->backlight_min);
|
||||
g_return_if_fail (backlight <= priv->info->backlight_max);
|
||||
|
||||
priv->backlight = backlight;
|
||||
|
||||
g_signal_emit (output, signals[BACKLIGHT_CHANGED], 0);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -676,6 +682,13 @@ meta_output_class_init (MetaOutputClass *klass)
|
|||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
signals[BACKLIGHT_CHANGED] =
|
||||
g_signal_new ("backlight-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
|
|
@ -661,14 +661,6 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_monitor_manager_xrandr_change_backlight (MetaMonitorManager *manager,
|
||||
MetaOutput *output,
|
||||
gint value)
|
||||
{
|
||||
meta_output_xrandr_change_backlight (META_OUTPUT_XRANDR (output), value);
|
||||
}
|
||||
|
||||
static MetaMonitorXrandrData *
|
||||
meta_monitor_xrandr_data_from_monitor (MetaMonitor *monitor)
|
||||
{
|
||||
|
@ -966,7 +958,6 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
|
|||
manager_class->ensure_initial_config = meta_monitor_manager_xrandr_ensure_initial_config;
|
||||
manager_class->apply_monitors_config = meta_monitor_manager_xrandr_apply_monitors_config;
|
||||
manager_class->set_power_save_mode = meta_monitor_manager_xrandr_set_power_save_mode;
|
||||
manager_class->change_backlight = meta_monitor_manager_xrandr_change_backlight;
|
||||
manager_class->tiled_monitor_added = meta_monitor_manager_xrandr_tiled_monitor_added;
|
||||
manager_class->tiled_monitor_removed = meta_monitor_manager_xrandr_tiled_monitor_removed;
|
||||
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_xrandr_calculate_monitor_mode_scale;
|
||||
|
|
|
@ -189,41 +189,6 @@ meta_output_xrandr_apply_mode (MetaOutputXrandr *output_xrandr)
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
normalize_backlight (MetaOutput *output,
|
||||
int hw_value)
|
||||
{
|
||||
const MetaOutputInfo *output_info = meta_output_get_info (output);
|
||||
|
||||
return (int) round ((double) (hw_value - output_info->backlight_min) /
|
||||
(output_info->backlight_max - output_info->backlight_min) * 100.0);
|
||||
}
|
||||
|
||||
void
|
||||
meta_output_xrandr_change_backlight (MetaOutputXrandr *output_xrandr,
|
||||
int value)
|
||||
{
|
||||
MetaOutput *output = META_OUTPUT (output_xrandr);
|
||||
const MetaOutputInfo *output_info = meta_output_get_info (output);
|
||||
Display *xdisplay = xdisplay_from_output (output);
|
||||
Atom atom;
|
||||
int hw_value;
|
||||
|
||||
hw_value = (int) round ((double) value / 100.0 * output_info->backlight_max +
|
||||
output_info->backlight_min);
|
||||
|
||||
atom = XInternAtom (xdisplay, "Backlight", False);
|
||||
|
||||
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
|
||||
(XID) meta_output_get_id (output),
|
||||
atom, XCB_ATOM_INTEGER, 32,
|
||||
XCB_PROP_MODE_REPLACE,
|
||||
1, &hw_value);
|
||||
|
||||
/* We're not selecting for property notifies, so update the value immediately */
|
||||
meta_output_set_backlight (output, normalize_backlight (output, hw_value));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ctm_is_equal (const MetaOutputCtm *ctm1,
|
||||
const MetaOutputCtm *ctm2)
|
||||
|
@ -510,7 +475,6 @@ static int
|
|||
output_get_backlight_xrandr (MetaOutput *output)
|
||||
{
|
||||
Display *xdisplay = xdisplay_from_output (output);
|
||||
int value = -1;
|
||||
Atom atom, actual_type;
|
||||
int actual_format;
|
||||
unsigned long nitems, bytes_after;
|
||||
|
@ -527,11 +491,7 @@ output_get_backlight_xrandr (MetaOutput *output)
|
|||
if (actual_type != XA_INTEGER || actual_format != 32 || nitems < 1)
|
||||
return -1;
|
||||
|
||||
value = ((int*)buffer)[0];
|
||||
if (value >= 0)
|
||||
return normalize_backlight (output, value);
|
||||
else
|
||||
return -1;
|
||||
return ((int *) buffer)[0];
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -954,6 +914,22 @@ find_assigned_crtc (MetaGpu *gpu,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
on_backlight_changed (MetaOutput *output)
|
||||
{
|
||||
Display *xdisplay = xdisplay_from_output (output);
|
||||
int value = meta_output_get_backlight (output);
|
||||
Atom atom;
|
||||
|
||||
atom = XInternAtom (xdisplay, "Backlight", False);
|
||||
|
||||
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
|
||||
(XID) meta_output_get_id (output),
|
||||
atom, XCB_ATOM_INTEGER, 32,
|
||||
XCB_PROP_MODE_REPLACE,
|
||||
1, &value);
|
||||
}
|
||||
|
||||
MetaOutputXrandr *
|
||||
meta_output_xrandr_new (MetaGpuXrandr *gpu_xrandr,
|
||||
XRROutputInfo *xrandr_output,
|
||||
|
@ -1062,7 +1038,11 @@ meta_output_xrandr_new (MetaGpuXrandr *gpu_xrandr,
|
|||
}
|
||||
|
||||
if (!(output_info->backlight_min == 0 && output_info->backlight_max == 0))
|
||||
meta_output_set_backlight (output, output_get_backlight_xrandr (output));
|
||||
{
|
||||
meta_output_set_backlight (output, output_get_backlight_xrandr (output));
|
||||
g_signal_connect (output, "backlight-changed",
|
||||
G_CALLBACK (on_backlight_changed), NULL);
|
||||
}
|
||||
|
||||
if (output_info->n_modes == 0 || output_info->n_possible_crtcs == 0)
|
||||
{
|
||||
|
|
|
@ -33,9 +33,6 @@ G_DECLARE_FINAL_TYPE (MetaOutputXrandr, meta_output_xrandr,
|
|||
|
||||
void meta_output_xrandr_apply_mode (MetaOutputXrandr *output_xrandr);
|
||||
|
||||
void meta_output_xrandr_change_backlight (MetaOutputXrandr *output_xrandr,
|
||||
int value);
|
||||
|
||||
void meta_output_xrandr_set_ctm (MetaOutputXrandr *output_xrandr,
|
||||
const MetaOutputCtm *ctm);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue