From c89ce9c3812fdc3a2637fd76b42a07385ad50684 Mon Sep 17 00:00:00 2001 From: Arx Cruz Date: Tue, 4 Jun 2013 16:27:48 -0300 Subject: [PATCH] Bug #653468. Fixed by Kurt Miller . Fix the broken auto-close option in progress and list dialogs. --- src/progress.c | 9 ++++----- src/tree.c | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/progress.c b/src/progress.c index c382d74..055699c 100644 --- a/src/progress.c +++ b/src/progress.c @@ -81,12 +81,13 @@ zenity_progress_handle_stdin (GIOChannel *channel, static GObject *progress_bar; static GObject *progress_label; float percentage = 0.0; + GIOStatus status = G_IO_STATUS_NORMAL; progress_data = (ZenityProgressData *) data; progress_bar = gtk_builder_get_object (builder, "zenity_progress_bar"); progress_label = gtk_builder_get_object (builder, "zenity_progress_text"); - if ((condition == G_IO_IN) || (condition == G_IO_IN + G_IO_HUP)) { + if ((condition & G_IO_IN) != 0) { GString *string; GError *error = NULL; @@ -95,8 +96,6 @@ zenity_progress_handle_stdin (GIOChannel *channel, while (channel->is_readable != TRUE) ; do { - gint status; - do { status = g_io_channel_read_line_string (channel, string, NULL, &error); @@ -175,11 +174,11 @@ zenity_progress_handle_stdin (GIOChannel *channel, } } - } while (g_io_channel_get_buffer_condition (channel) == G_IO_IN); + } while ((g_io_channel_get_buffer_condition (channel) & G_IO_IN) == G_IO_IN && status != G_IO_STATUS_EOF); g_string_free (string, TRUE); } - if ((condition != G_IO_IN) && (condition != G_IO_IN + G_IO_HUP)) { + if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF) { /* We assume that we are done, so stop the pulsating and de-sensitize the buttons */ GtkWidget *button; diff --git a/src/tree.c b/src/tree.c index 031765e..4634ba1 100644 --- a/src/tree.c +++ b/src/tree.c @@ -139,6 +139,7 @@ zenity_tree_handle_stdin (GIOChannel *channel, static gboolean editable; static gboolean toggles; static gboolean first_time = TRUE; + GIOStatus status = G_IO_STATUS_NORMAL; tree_view = GTK_TREE_VIEW (data); n_columns = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_view), "n_columns")); @@ -152,7 +153,7 @@ zenity_tree_handle_stdin (GIOChannel *channel, gtk_list_store_append (GTK_LIST_STORE (model), &iter); } - if ((condition == G_IO_IN) || (condition == G_IO_IN + G_IO_HUP)) { + if ((condition & G_IO_IN) == G_IO_IN) { GString *string; GError *error = NULL; @@ -161,8 +162,6 @@ zenity_tree_handle_stdin (GIOChannel *channel, while ((g_io_channel_get_flags(channel) & G_IO_FLAG_IS_READABLE) != G_IO_FLAG_IS_READABLE) ; do { - gint status; - do { if (g_io_channel_get_flags(channel) & G_IO_FLAG_IS_READABLE) status = g_io_channel_read_line_string (channel, string, NULL, &error); @@ -221,11 +220,11 @@ zenity_tree_handle_stdin (GIOChannel *channel, column_count++; - } while (g_io_channel_get_buffer_condition (channel) == G_IO_IN); + } while ((g_io_channel_get_buffer_condition (channel) & G_IO_IN) == G_IO_IN && status != G_IO_STATUS_EOF); g_string_free (string, TRUE); } - if ((condition != G_IO_IN) && (condition != G_IO_IN + G_IO_HUP)) { + if ((condition & G_IO_IN) != G_IO_IN || status == G_IO_STATUS_EOF) { g_io_channel_shutdown (channel, TRUE, NULL); return FALSE; }