summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2019-07-24 16:41:55 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2019-07-30 17:11:59 +0100
commitbb37613711f40ec3138f17f72c9563c8010678a0 (patch)
tree476c3ad4d2e92303c3844cb225d4feabe246f778 /gtk/gtkwindow.c
parent908ebf2b232e27ea4055764bd2b2fbdc8a6e8ef8 (diff)
downloadgtk+-wip/ebassi/animations.tar.gz
WIP: Create an animation manager for GtkWindowwip/ebassi/animations
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r--gtk/gtkwindow.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 1ee033f193..38e0ce68fd 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -283,6 +283,7 @@ typedef struct
GList *foci;
GtkConstraintSolver *constraint_solver;
+ GtkAnimationManager *animation_manager;
} GtkWindowPrivate;
#ifdef GDK_WINDOWING_X11
@@ -2367,6 +2368,23 @@ gtk_window_root_get_constraint_solver (GtkRoot *root)
return priv->constraint_solver;
}
+static GtkAnimationManager *
+gtk_window_root_get_animation_manager (GtkRoot *root)
+{
+ GtkWindow *self = GTK_WINDOW (root);
+ GtkWindowPrivate *priv = gtk_window_get_instance_private (self);
+ GdkFrameClock *frame_clock;
+
+ if (priv->animation_manager == NULL)
+ priv->animation_manager = gtk_animation_manager_new ();
+
+ frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (self));
+ if (frame_clock != NULL)
+ gtk_animation_manager_set_frame_clock (priv->animation_manager, frame_clock);
+
+ return priv->animation_manager;
+}
+
static void
gtk_window_native_get_surface_transform (GtkNative *native,
int *x,
@@ -2396,6 +2414,7 @@ gtk_window_root_interface_init (GtkRootInterface *iface)
{
iface->get_display = gtk_window_root_get_display;
iface->get_constraint_solver = gtk_window_root_get_constraint_solver;
+ iface->get_animation_manager = gtk_window_root_get_animation_manager;
}
static void
@@ -4738,6 +4757,7 @@ gtk_window_finalize (GObject *object)
priv->mnemonics_display_timeout_id = 0;
}
+ g_clear_object (&priv->animation_manager);
g_clear_object (&priv->constraint_solver);
g_clear_object (&priv->renderer);