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
This commit is contained in:
Jonas Ådahl 2019-10-01 11:56:34 +02:00
parent 7220f6d25b
commit f4f8982825
2 changed files with 41 additions and 1 deletions

View File

@ -60,6 +60,7 @@ struct _StSettings
gchar *font_name; gchar *font_name;
gchar *gtk_theme; gchar *gtk_theme;
gchar *gtk_icon_theme; gchar *gtk_icon_theme;
int inhibit_animations_count;
gboolean enable_animations; gboolean enable_animations;
gboolean primary_paste; gboolean primary_paste;
gboolean magnifier_active; 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]); 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 static void
st_settings_finalize (GObject *object) st_settings_finalize (GObject *object)
{ {
@ -126,7 +162,7 @@ st_settings_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_ENABLE_ANIMATIONS: case PROP_ENABLE_ANIMATIONS:
g_value_set_boolean (value, settings->enable_animations); g_value_set_boolean (value, get_enable_animations (settings));
break; break;
case PROP_PRIMARY_PASTE: case PROP_PRIMARY_PASTE:
g_value_set_boolean (value, settings->primary_paste); g_value_set_boolean (value, settings->primary_paste);

View File

@ -33,6 +33,10 @@ G_DECLARE_FINAL_TYPE (StSettings, st_settings, ST, SETTINGS, GObject)
StSettings * st_settings_get (void); StSettings * st_settings_get (void);
void st_settings_inhibit_animations (StSettings *settings);
void st_settings_uninhibit_animations (StSettings *settings);
G_END_DECLS G_END_DECLS
#endif /* __ST_SETTINGS_H__ */ #endif /* __ST_SETTINGS_H__ */