summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2021-10-29 11:11:28 +0200
committerJonas Ådahl <jadahl@gmail.com>2021-12-07 09:42:14 +0100
commit64b9e872d7c6f38136eee86086be9fc05fe25028 (patch)
tree76395566fc357f2d9ead1640e8bfbca48501887b /plugins
parent971db479fb0f5295f9c1ddd892a11a742c77e6fd (diff)
downloadgnome-settings-daemon-64b9e872d7c6f38136eee86086be9fc05fe25028.tar.gz
color/night-light: Make sure to set target temperature
When smoothing a temperature, we practically never ended up setting the target temperature, since the throttling dropped the last few changes. For example, after night light was disabled, the temperature tended to get stuck on 6494 instead of 6500. Fix this by making sure the target temperature is forced, ignoring the throttling. Also disable throttling when not smoothing, as it's likely we want the temperature that is actually asked for.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/color/gsd-night-light.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/plugins/color/gsd-night-light.c b/plugins/color/gsd-night-light.c
index 18565898..b11f0755 100644
--- a/plugins/color/gsd-night-light.c
+++ b/plugins/color/gsd-night-light.c
@@ -168,9 +168,11 @@ update_cached_sunrise_sunset (GsdNightLight *self)
}
static void
-gsd_night_light_set_temperature_internal (GsdNightLight *self, gdouble temperature)
+gsd_night_light_set_temperature_internal (GsdNightLight *self, gdouble temperature, gboolean force)
{
- if (ABS (self->cached_temperature - temperature) <= GSD_TEMPERATURE_MAX_DELTA)
+ if (!force && ABS (self->cached_temperature - temperature) <= GSD_TEMPERATURE_MAX_DELTA)
+ return;
+ if (self->cached_temperature == temperature)
return;
self->cached_temperature = temperature;
g_object_notify (G_OBJECT (self), "temperature");
@@ -187,7 +189,8 @@ gsd_night_light_smooth_cb (gpointer user_data)
frac = g_timer_elapsed (self->smooth_timer, NULL) / GSD_NIGHT_LIGHT_SMOOTH_SMEAR;
if (frac >= 1.f) {
gsd_night_light_set_temperature_internal (self,
- self->smooth_target_temperature);
+ self->smooth_target_temperature,
+ TRUE);
self->smooth_id = 0;
return G_SOURCE_REMOVE;
}
@@ -196,7 +199,7 @@ gsd_night_light_smooth_cb (gpointer user_data)
tmp = self->smooth_target_temperature - self->cached_temperature;
tmp *= frac;
tmp += self->cached_temperature;
- gsd_night_light_set_temperature_internal (self, tmp);
+ gsd_night_light_set_temperature_internal (self, tmp, FALSE);
return G_SOURCE_CONTINUE;
}
@@ -215,7 +218,7 @@ gsd_night_light_set_temperature (GsdNightLight *self, gdouble temperature)
{
/* immediate */
if (!self->smooth_enabled) {
- gsd_night_light_set_temperature_internal (self, temperature);
+ gsd_night_light_set_temperature_internal (self, temperature, TRUE);
return;
}
@@ -224,7 +227,7 @@ gsd_night_light_set_temperature (GsdNightLight *self, gdouble temperature)
/* small jump */
if (ABS (temperature - self->cached_temperature) < GSD_TEMPERATURE_MAX_DELTA) {
- gsd_night_light_set_temperature_internal (self, temperature);
+ gsd_night_light_set_temperature_internal (self, temperature, TRUE);
return;
}