summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-06-02 16:00:16 -0400
committerMatthew Barnes <mbarnes@redhat.com>2010-06-03 17:03:14 -0400
commitbb5c585777cede12bd1a7cf9fd1c5082e2debc22 (patch)
tree29be4003ef2493c5e29fbe9a223c469a93a39627 /demos
parent112d97d498ddf0d9b652cfd8b8fb6cf8686e18f1 (diff)
downloadgtk+-bb5c585777cede12bd1a7cf9fd1c5082e2debc22.tar.gz
Bug 596428 - GtkAssistant: Support ending with a progress page
- Add gtk_assistant_commit() This function discards the visited pages list so the back button is not shown on the current page, and removes the cancel button from subsequent pages. Use this when information provided thus far cannot be revisited. - Don't show the Forward button on a GTK_ASSISTANT_PAGE_PROGRESS if it's the last page (according to the forward page function). - Append a progress page to the GtkAssistant demo.
Diffstat (limited to 'demos')
-rw-r--r--demos/gtk-demo/assistant.c55
1 files changed, 53 insertions, 2 deletions
diff --git a/demos/gtk-demo/assistant.c b/demos/gtk-demo/assistant.c
index 6cb5399f6b..a00c595370 100644
--- a/demos/gtk-demo/assistant.c
+++ b/demos/gtk-demo/assistant.c
@@ -9,12 +9,35 @@
#include "demo-common.h"
static GtkWidget *assistant = NULL;
+static GtkWidget *progress_bar = NULL;
+
+static gboolean
+apply_changes_gradually (gpointer data)
+{
+ gdouble fraction;
+
+ /* Work, work, work... */
+ fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
+ fraction += 0.05;
+
+ if (fraction < 1.0)
+ {
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);
+ return TRUE;
+ }
+ else
+ {
+ /* Close automatically once changes are fully applied. */
+ gtk_widget_destroy (assistant);
+ return FALSE;
+ }
+}
static void
on_assistant_apply (GtkWidget *widget, gpointer data)
{
- /* Apply here changes, this is a fictional
- example, so we just do nothing here */
+ /* Start a timer to simulate changes taking a few seconds to apply. */
+ g_timeout_add (100, apply_changes_gradually, NULL);
}
static void
@@ -38,6 +61,13 @@ on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data)
title = g_strdup_printf ("Sample assistant (%d of %d)", current_page + 1, n_pages);
gtk_window_set_title (GTK_WINDOW (widget), title);
g_free (title);
+
+ /* The fourth page (counting from zero) is the progress page. The
+ * user clicked Apply to get here so we tell the assistant to commit,
+ * which means the changes up to this point are permanent and cannot
+ * be cancelled or revisited. */
+ if (current_page == 3)
+ gtk_assistant_commit (GTK_ASSISTANT (widget));
}
static void
@@ -127,6 +157,26 @@ create_page3 (GtkWidget *assistant)
g_object_unref (pixbuf);
}
+static void
+create_page4 (GtkWidget *assistant)
+{
+ GtkWidget *page;
+
+ page = gtk_alignment_new (0.5, 0.5, 0.5, 0.0);
+
+ progress_bar = gtk_progress_bar_new ();
+ gtk_container_add (GTK_CONTAINER (page), progress_bar);
+
+ gtk_widget_show_all (page);
+ gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
+ gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS);
+ gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Applying changes");
+
+ /* This prevents the assistant window from being
+ * closed while we're "busy" applying changes. */
+ gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, FALSE);
+}
+
GtkWidget*
do_assistant (GtkWidget *do_widget)
{
@@ -142,6 +192,7 @@ do_assistant (GtkWidget *do_widget)
create_page1 (assistant);
create_page2 (assistant);
create_page3 (assistant);
+ create_page4 (assistant);
g_signal_connect (G_OBJECT (assistant), "cancel",
G_CALLBACK (on_assistant_close_cancel), &assistant);