diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-06-02 16:00:16 -0400 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2010-06-03 17:03:14 -0400 |
commit | bb5c585777cede12bd1a7cf9fd1c5082e2debc22 (patch) | |
tree | 29be4003ef2493c5e29fbe9a223c469a93a39627 /demos | |
parent | 112d97d498ddf0d9b652cfd8b8fb6cf8686e18f1 (diff) | |
download | gtk+-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.c | 55 |
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); |