From f4f898282598ba452d8c2aceee631cf09f361291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 1 Oct 2019 11:56:34 +0200 Subject: [PATCH] st/settings: Add API to inhibit animations There may be situations where we shouldn't enable animations. Make it possible for the Shell to decide when there are such situations and in when needed inhibit animations. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/757 --- src/st/st-settings.c | 38 +++++++++++++++++++++++++++++++++++++- src/st/st-settings.h | 4 ++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/st/st-settings.c b/src/st/st-settings.c index d0fef040a..5ce73d015 100644 --- a/src/st/st-settings.c +++ b/src/st/st-settings.c @@ -60,6 +60,7 @@ struct _StSettings gchar *font_name; gchar *gtk_theme; gchar *gtk_icon_theme; + int inhibit_animations_count; gboolean enable_animations; gboolean primary_paste; gboolean magnifier_active; @@ -82,6 +83,41 @@ st_settings_set_slow_down_factor (StSettings *settings, g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_SLOW_DOWN_FACTOR]); } +static gboolean +get_enable_animations (StSettings *settings) +{ + if (settings->inhibit_animations_count > 0) + return FALSE; + else + return settings->enable_animations; +} + +void +st_settings_inhibit_animations (StSettings *settings) +{ + gboolean enable_animations; + + enable_animations = get_enable_animations (settings); + settings->inhibit_animations_count++; + + if (enable_animations != get_enable_animations (settings)) + g_object_notify_by_pspec (G_OBJECT (settings), + props[PROP_ENABLE_ANIMATIONS]); +} + +void +st_settings_uninhibit_animations (StSettings *settings) +{ + gboolean enable_animations; + + enable_animations = get_enable_animations (settings); + settings->inhibit_animations_count--; + + if (enable_animations != get_enable_animations (settings)) + g_object_notify_by_pspec (G_OBJECT (settings), + props[PROP_ENABLE_ANIMATIONS]); +} + static void st_settings_finalize (GObject *object) { @@ -126,7 +162,7 @@ st_settings_get_property (GObject *object, switch (prop_id) { case PROP_ENABLE_ANIMATIONS: - g_value_set_boolean (value, settings->enable_animations); + g_value_set_boolean (value, get_enable_animations (settings)); break; case PROP_PRIMARY_PASTE: g_value_set_boolean (value, settings->primary_paste); diff --git a/src/st/st-settings.h b/src/st/st-settings.h index c2c4fa23e..8b2549469 100644 --- a/src/st/st-settings.h +++ b/src/st/st-settings.h @@ -33,6 +33,10 @@ G_DECLARE_FINAL_TYPE (StSettings, st_settings, ST, SETTINGS, GObject) StSettings * st_settings_get (void); +void st_settings_inhibit_animations (StSettings *settings); + +void st_settings_uninhibit_animations (StSettings *settings); + G_END_DECLS #endif /* __ST_SETTINGS_H__ */