[gnome-shell/wip/rstrode/login-screen-extensions: 99/134] st/settings: Add API to inhibit animations




commit 37189d75d1dd62ad31a74cbd9f3178d24368a494
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 17f2c466e4..ebfd28480e 100644
--- a/src/st/st-settings.c
+++ b/src/st/st-settings.c
@@ -54,6 +54,7 @@ struct _StSettings
 
   gchar *gtk_theme;
   gchar *gtk_icon_theme;
+  int inhibit_animations_count;
   gboolean enable_animations;
   gboolean primary_paste;
   gboolean magnifier_active;
@@ -62,6 +63,41 @@ struct _StSettings
 
 G_DEFINE_TYPE (StSettings, st_settings, G_TYPE_OBJECT)
 
+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)
 {
@@ -95,7 +131,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]