From f5b92b13dfe983286e48263036b20d79742aca51 Mon Sep 17 00:00:00 2001 From: Henning Geinitz Date: Sat, 6 Apr 2002 10:31:23 +0000 Subject: [PATCH] Don't remove imput tags that haven't been added. Don't hang when EOF and non-blocking. Henning Meier-Geinitz --- Changelog | 5 +++++ src/preview.c | 27 +++++++++++++++++++++++---- src/xscanimage.c | 26 ++++++++++++++++++++++---- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/Changelog b/Changelog index f00c746..8bb6e36 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,8 @@ +2002-04-06 Henning Meier-Geinitz + + * src/preview.c src/xscanimage.c: Don't remove imput tags that + haven't been added. Don't hang when EOF and non-blocking. + 2002-04-02 Henning Meier-Geinitz * src/preview.c: Used guint types instead of u_int. Set order of pixels diff --git a/src/preview.c b/src/preview.c index 0f73856..7110d4c 100644 --- a/src/preview.c +++ b/src/preview.c @@ -542,8 +542,17 @@ input_available (gpointer data, gint source, GdkInputCondition cond) display_image (p); else { - gdk_input_remove (p->input_tag); - p->input_tag = -1; + if (p->input_tag < 0) + { + display_maybe (p); + while (gtk_events_pending ()) + gtk_main_iteration (); + } + else + { + gdk_input_remove (p->input_tag); + p->input_tag = -1; + } scan_start (p); break; } @@ -557,8 +566,18 @@ input_available (gpointer data, gint source, GdkInputCondition cond) scan_done (p); return; } - if (!len) - break; /* out of data for now */ + if (!len) /* out of data for now */ + { + if (p->input_tag < 0) + { + display_maybe (p); + while (gtk_events_pending ()) + gtk_main_iteration (); + continue; + } + else + break; + } switch (p->params.format) { diff --git a/src/xscanimage.c b/src/xscanimage.c index 2399c26..7f91bc0 100644 --- a/src/xscanimage.c +++ b/src/xscanimage.c @@ -602,8 +602,16 @@ input_available (gpointer data, gint source, GdkInputCondition cond) { if (!scan_win.param.last_frame) { - gdk_input_remove (scan_win.input_tag); - scan_win.input_tag = -1; + if (scan_win.input_tag < 0) + { + while (gtk_events_pending ()) + gtk_main_iteration (); + } + else + { + gdk_input_remove (scan_win.input_tag); + scan_win.input_tag = -1; + } scan_start (); break; } @@ -617,8 +625,18 @@ input_available (gpointer data, gint source, GdkInputCondition cond) scan_done (); return; } - if (!len) - break; /* out of data for now */ + if (!len) /* out of data for now */ + { + if (scan_win.input_tag < 0) + { + while (gtk_events_pending ()) + gtk_main_iteration (); + continue; + } + else + break; + } + scan_win.bytes_read += len; progress_update (scan_win.progress, scan_win.bytes_read / (gfloat) scan_win.num_bytes);