settings: Add API to manipulate output luminance
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4271>
This commit is contained in:
parent
b7a6689941
commit
db2376cb84
@ -81,6 +81,10 @@ gboolean meta_settings_is_privacy_screen_enabled (MetaSettings *settings);
|
||||
void meta_settings_set_privacy_screen_enabled (MetaSettings *settings,
|
||||
gboolean enabled);
|
||||
|
||||
gboolean meta_settings_has_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode);
|
||||
|
||||
double meta_settings_get_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode);
|
||||
@ -88,3 +92,12 @@ double meta_settings_get_output_luminance (MetaSettings *settings,
|
||||
double meta_settings_get_default_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode);
|
||||
|
||||
void meta_settings_set_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode,
|
||||
double luminance);
|
||||
|
||||
void meta_settings_reset_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode);
|
||||
|
@ -401,6 +401,14 @@ find_luminance_entry (MetaSettings *settings,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_settings_has_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode)
|
||||
{
|
||||
return !!find_luminance_entry (settings, monitor_spec, color_mode);
|
||||
}
|
||||
|
||||
double
|
||||
meta_settings_get_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
@ -425,6 +433,76 @@ meta_settings_get_default_output_luminance (MetaSettings *settings,
|
||||
return 100.0;
|
||||
}
|
||||
|
||||
static void
|
||||
sync_luminance_settings (MetaSettings *settings)
|
||||
{
|
||||
GVariantBuilder builder;
|
||||
size_t i;
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssssud)"));
|
||||
|
||||
for (i = 0; i < settings->output_luminance->len; i++)
|
||||
{
|
||||
LuminanceEntry *entry =
|
||||
g_ptr_array_index (settings->output_luminance, i);
|
||||
|
||||
g_variant_builder_add (&builder, "(ssssud)",
|
||||
entry->monitor_spec->connector,
|
||||
entry->monitor_spec->vendor,
|
||||
entry->monitor_spec->product,
|
||||
entry->monitor_spec->serial,
|
||||
entry->color_mode,
|
||||
entry->luminance);
|
||||
}
|
||||
|
||||
g_settings_set_value (settings->mutter_settings,
|
||||
"output-luminance",
|
||||
g_variant_builder_end (&builder));
|
||||
}
|
||||
|
||||
void
|
||||
meta_settings_set_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode,
|
||||
double luminance)
|
||||
{
|
||||
LuminanceEntry *entry;
|
||||
|
||||
entry = find_luminance_entry (settings, monitor_spec, color_mode);
|
||||
if (entry)
|
||||
{
|
||||
entry->luminance = luminance;
|
||||
}
|
||||
else
|
||||
{
|
||||
entry = luminance_entry_new (monitor_spec, color_mode, luminance);
|
||||
g_ptr_array_add (settings->output_luminance, entry);
|
||||
}
|
||||
|
||||
sync_luminance_settings (settings);
|
||||
}
|
||||
|
||||
void
|
||||
meta_settings_reset_output_luminance (MetaSettings *settings,
|
||||
const MetaMonitorSpec *monitor_spec,
|
||||
MetaColorMode color_mode)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < settings->output_luminance->len; i++)
|
||||
{
|
||||
LuminanceEntry *entry = g_ptr_array_index (settings->output_luminance, i);
|
||||
|
||||
if (luminance_entry_matches (entry, monitor_spec, color_mode))
|
||||
{
|
||||
g_ptr_array_remove_index (settings->output_luminance, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sync_luminance_settings (settings);
|
||||
}
|
||||
|
||||
static void
|
||||
update_output_luminance_settings (MetaSettings *settings)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user