[gnome-shell] st/settings: Add API to inhibit animations



commit f4f898282598ba452d8c2aceee631cf09f361291
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Oct 1 11:56:34 2019 +0200

    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 d0fef040ab..5ce73d0153 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 c2c4fa23e0..8b25494699 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__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]