diff --git a/test/page13.c b/test/page13.c index 7908b780..6eb19f29 100644 --- a/test/page13.c +++ b/test/page13.c @@ -78,7 +78,15 @@ static void showHide(uiButton *b, void *data) static void setIndeterminate(uiButton *b, void *data) { uiProgressBar *p = uiProgressBar(data); - uiProgressBarSetIndeterminate(p, !uiProgressBarIndeterminate(p)); + + int value = uiProgressBarValue(p); + if (value == -1) { + value = 0; + } else { + value = -1; + } + + uiProgressBarSetValue(p, value); } static void deleteFirst(uiButton *b, void *data) diff --git a/ui.h b/ui.h index 42370453..696140f1 100644 --- a/ui.h +++ b/ui.h @@ -189,8 +189,6 @@ typedef struct uiProgressBar uiProgressBar; #define uiProgressBar(this) ((uiProgressBar *) (this)) _UI_EXTERN int uiProgressBarValue(uiProgressBar *p); _UI_EXTERN void uiProgressBarSetValue(uiProgressBar *p, int n); -_UI_EXTERN int uiProgressBarIndeterminate(uiProgressBar *p); -_UI_EXTERN void uiProgressBarSetIndeterminate(uiProgressBar *p, int indeterminate); _UI_EXTERN uiProgressBar *uiNewProgressBar(void); typedef struct uiSeparator uiSeparator; diff --git a/unix/progressbar.c b/unix/progressbar.c index 4d502f34..9e3fd4a4 100644 --- a/unix/progressbar.c +++ b/unix/progressbar.c @@ -12,23 +12,16 @@ uiUnixControlAllDefaults(uiProgressBar) int uiProgressBarValue(uiProgressBar *p) { + if (p->indeterminate) + return -1; + return (int) (gtk_progress_bar_get_fraction(p->pbar) * 100); } -void uiProgressBarSetValue(uiProgressBar *p, int value) +gboolean uiProgressBarPulse(void* data) { - if (value < 0 || value > 100) - userbug("Value %d is out of range for a uiProgressBar.", value); - gtk_progress_bar_set_fraction(p->pbar, ((gdouble) value) / 100); -} + uiProgressBar *p = (uiProgressBar*) data; -int uiProgressBarIndeterminate(uiProgressBar *p) -{ - return p->indeterminate; -} - -gboolean uiProgressBarPulse(uiProgressBar *p) -{ if (!GTK_IS_WIDGET(p->pbar) || !p->indeterminate) return 0; @@ -36,12 +29,21 @@ gboolean uiProgressBarPulse(uiProgressBar *p) return 1; } -void uiProgressBarSetIndeterminate(uiProgressBar *p, int indeterminate) +void uiProgressBarSetValue(uiProgressBar *p, int value) { - p->indeterminate = indeterminate; + if (value == -1) { + if (!p->indeterminate) { + p->indeterminate = 1; + g_timeout_add(100, uiProgressBarPulse, p); + } + return; + } - if (indeterminate) - g_timeout_add(100, uiProgressBarPulse, p); + if (value < 0 || value > 100) + userbug("Value %d is out of range for a uiProgressBar.", value); + + p->indeterminate = 0; + gtk_progress_bar_set_fraction(p->pbar, ((gdouble) value) / 100); } uiProgressBar *uiNewProgressBar(void)