summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.co.uk>2013-11-11 16:38:35 -0500
committerXavier Claessens <xavier.claessens@collabora.co.uk>2013-11-12 10:27:45 -0500
commit9223e3c25a7a4c3aabc904b0e81573bd61d62d1a (patch)
tree969303697f8394827284f4009be2b9f3efe49e22 /gtk
parent82acc05cba84eeb11cbfc97e9b5cb4c8763bb39b (diff)
downloadgtk+-9223e3c25a7a4c3aabc904b0e81573bd61d62d1a.tar.gz
GtkStack: add transition-running property
This is useful to know when the transition is done we can remove the child from the stack. https://bugzilla.gnome.org/show_bug.cgi?id=711494
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkstack.c33
-rw-r--r--gtk/gtkstack.h2
2 files changed, 35 insertions, 0 deletions
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c
index 830b3c6e70..1f0da9e3d4 100644
--- a/gtk/gtkstack.c
+++ b/gtk/gtkstack.c
@@ -85,6 +85,7 @@ enum {
PROP_VISIBLE_CHILD_NAME,
PROP_TRANSITION_DURATION,
PROP_TRANSITION_TYPE,
+ PROP_TRANSITION_RUNNING,
LAST_PROP
};
@@ -237,6 +238,9 @@ gtk_stack_get_property (GObject *object,
case PROP_TRANSITION_TYPE:
g_value_set_enum (value, gtk_stack_get_transition_type (stack));
break;
+ case PROP_TRANSITION_RUNNING:
+ g_value_set_boolean (value, gtk_stack_get_transition_running (stack));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -394,6 +398,11 @@ gtk_stack_class_init (GtkStackClass *klass)
GTK_TYPE_STACK_TRANSITION_TYPE,
GTK_STACK_TRANSITION_TYPE_NONE,
GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+ stack_props[PROP_TRANSITION_RUNNING] = g_param_spec_boolean ("transition-running",
+ P_("Transition running"),
+ P_("Whether or not the transition is currently running"),
+ FALSE,
+ GTK_PARAM_READABLE);
g_object_class_install_properties (object_class, LAST_PROP, stack_props);
@@ -780,6 +789,7 @@ gtk_stack_transition_cb (GtkStack *stack,
{
gtk_widget_set_opacity (GTK_WIDGET (stack), 1.0);
priv->tick_id = 0;
+ g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
return FALSE;
}
@@ -796,6 +806,7 @@ gtk_stack_schedule_ticks (GtkStack *stack)
{
priv->tick_id =
gtk_widget_add_tick_callback (GTK_WIDGET (stack), (GtkTickCallback)gtk_stack_transition_cb, stack, NULL);
+ g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
}
}
@@ -808,6 +819,7 @@ gtk_stack_unschedule_ticks (GtkStack *stack)
{
gtk_widget_remove_tick_callback (GTK_WIDGET (stack), priv->tick_id);
priv->tick_id = 0;
+ g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
}
}
@@ -1269,6 +1281,27 @@ gtk_stack_set_transition_type (GtkStack *stack,
}
/**
+ * gtk_stack_get_transition_running:
+ * @stack: a #GtkStack
+ *
+ * Returns whether the @stack is currently in a transition from one page to
+ * another.
+ *
+ * Return value: %TRUE if the transition is currently running, %FALSE otherwise.
+ *
+ * Since: 3.12
+ */
+gboolean
+gtk_stack_get_transition_running (GtkStack *stack)
+{
+ GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
+
+ g_return_val_if_fail (GTK_IS_STACK (stack), FALSE);
+
+ return (priv->tick_id != 0);
+}
+
+/**
* gtk_stack_get_visible_child:
* @stack: a #GtkStack
*
diff --git a/gtk/gtkstack.h b/gtk/gtkstack.h
index 82e527c459..d0bb47188a 100644
--- a/gtk/gtkstack.h
+++ b/gtk/gtkstack.h
@@ -108,6 +108,8 @@ void gtk_stack_set_transition_type (GtkStack
GtkStackTransitionType transition);
GDK_AVAILABLE_IN_3_10
GtkStackTransitionType gtk_stack_get_transition_type (GtkStack *stack);
+GDK_AVAILABLE_IN_3_12
+gboolean gtk_stack_get_transition_running (GtkStack *stack);
G_END_DECLS