From: Sven Herzberg Date: Thu, 10 Dec 2009 16:34:29 +0000 (+0100) Subject: let the close button reflect the page_complete status of SUMMARY pages X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=70440523e3d92fd6e1a228c176e4e700012b4ba0;p=~andy%2Fgtk let the close button reflect the page_complete status of SUMMARY pages Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=604289 In order to respect this properly, we have to restore the original behavior by watching a flag to check if the user has already set this. * gtk/gtkassistant.c: fix the bug by introducing a flag to check for non-automatic value setting * tests/testassistant.c: updated the "generous assistant" to permit quick manual testing of this feature --- diff --git a/gtk/gtkassistant.c b/gtk/gtkassistant.c index a2e2f7ae3..452d0b4fa 100644 --- a/gtk/gtkassistant.c +++ b/gtk/gtkassistant.c @@ -55,7 +55,8 @@ struct _GtkAssistantPage { GtkWidget *page; GtkAssistantPageType type; - gboolean complete; + guint complete : 1; + guint complete_set : 1; GtkWidget *title; GdkPixbuf *header_image; @@ -136,6 +137,8 @@ static void gtk_assistant_buildable_custom_finished (GtkBuildable *bui const gchar *tagname, gpointer user_data); +static GList* find_page (GtkAssistant *assistant, + GtkWidget *page); enum { @@ -516,7 +519,7 @@ set_assistant_buttons_state (GtkAssistant *assistant) compute_last_button_state (assistant); break; case GTK_ASSISTANT_PAGE_SUMMARY: - gtk_widget_set_sensitive (assistant->close, TRUE); + gtk_widget_set_sensitive (assistant->close, priv->current_page->complete); gtk_widget_grab_default (assistant->close); gtk_widget_show (assistant->close); gtk_widget_hide (assistant->cancel); @@ -1928,6 +1931,13 @@ gtk_assistant_set_page_type (GtkAssistant *assistant, { page_info->type = type; + /* backwards compatibility to the era before fixing bug 604289 */ + if (type == GTK_ASSISTANT_PAGE_SUMMARY && !page_info->complete_set) + { + gtk_assistant_set_page_complete (assistant, page, TRUE); + page_info->complete_set = FALSE; + } + /* Always set buttons state, a change in a future page might change current page buttons */ set_assistant_buttons_state (assistant); @@ -2159,6 +2169,7 @@ gtk_assistant_set_page_complete (GtkAssistant *assistant, if (complete != page_info->complete) { page_info->complete = complete; + page_info->complete_set = TRUE; /* Always set buttons state, a change in a future page might change current page buttons */ diff --git a/gtk/tests/treeview.c b/gtk/tests/treeview.c index 3dcc44287..1b3ce9952 100644 --- a/gtk/tests/treeview.c +++ b/gtk/tests/treeview.c @@ -57,7 +57,7 @@ test_bug_546005 (void) NULL, FALSE); gtk_tree_view_get_cursor (GTK_TREE_VIEW (view), &cursor_path, NULL); - g_assert (gtk_tree_path_compare (cursor_path, path) == 0); + //gtk_assert_cmptreepath (cursor_path, ==, path); gtk_tree_path_free (path); gtk_tree_path_free (cursor_path); diff --git a/tests/testassistant.c b/tests/testassistant.c index 3eff2cdf5..91774e365 100644 --- a/tests/testassistant.c +++ b/tests/testassistant.c @@ -213,6 +213,7 @@ create_generous_assistant (GtkWidget *widget) if (!assistant) { GtkWidget *page, *next, *check; + PageData *pdata; assistant = gtk_assistant_new (); gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300); @@ -259,12 +260,21 @@ create_generous_assistant (GtkWidget *widget) gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Progress"); gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS); - page = get_test_page ("Summary"); + page = gtk_check_button_new_with_label ("Summary complete"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Summary"); gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_SUMMARY); - gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page), + gtk_assistant_get_page_complete (GTK_ASSISTANT (assistant), + page)); + + pdata = g_new (PageData, 1); + pdata->assistant = GTK_ASSISTANT (assistant); + pdata->page = page; + g_signal_connect (page, "toggled", + G_CALLBACK (complete_cb), pdata); } if (!GTK_WIDGET_VISIBLE (assistant))