diff options
author | Owen Taylor <otaylor@redhat.com> | 2003-05-21 21:23:35 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2003-05-21 21:23:35 +0000 |
commit | e47517cdbbf5ed3531adba668452e858335301c8 (patch) | |
tree | 59c2d19b52af8d8e46aae3575904fd70b36783aa /gtk/gtkprogress.c | |
parent | 611a2667e6215e97ecf116c0fed3ffc8a3b0f891 (diff) | |
download | gtk+-e47517cdbbf5ed3531adba668452e858335301c8.tar.gz |
Always queue a resize ... we rely on the size-allocate to do the update,
Wed May 21 15:53:14 2003 Owen Taylor <otaylor@redhat.com>
* gtk/gtkprogress.c (gtk_progress_set_format_string,
gtk_progress_set_show_text): Always queue a resize ...
we rely on the size-allocate to do the update, plus a
different format can actually change our size requisition.
(#111052)
* gtk/gtkprogress.c (gtk_progress_changed): Track
::changed as well as ::value_changed, and queue a
resize on ::changed when necessary.
* gtk/gtkprogress.c (gtk_progress_set_adjustment):
Call gtk_progress_changed() here to update or
queue a resize as necessary.
Diffstat (limited to 'gtk/gtkprogress.c')
-rw-r--r-- | gtk/gtkprogress.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/gtk/gtkprogress.c b/gtk/gtkprogress.c index 67339175fe..8bb8e9ca4a 100644 --- a/gtk/gtkprogress.c +++ b/gtk/gtkprogress.c @@ -62,6 +62,8 @@ static void gtk_progress_size_allocate (GtkWidget *widget, static void gtk_progress_create_pixmap (GtkProgress *progress); static void gtk_progress_value_changed (GtkAdjustment *adjustment, GtkProgress *progress); +static void gtk_progress_changed (GtkAdjustment *adjustment, + GtkProgress *progress); static GtkWidgetClass *parent_class = NULL; @@ -283,6 +285,9 @@ gtk_progress_destroy (GtkObject *object) g_signal_handlers_disconnect_by_func (progress->adjustment, gtk_progress_value_changed, progress); + g_signal_handlers_disconnect_by_func (progress->adjustment, + gtk_progress_changed, + progress); g_object_unref (progress->adjustment); progress->adjustment = NULL; } @@ -369,6 +374,19 @@ gtk_progress_create_pixmap (GtkProgress *progress) } static void +gtk_progress_changed (GtkAdjustment *adjustment, + GtkProgress *progress) +{ + /* A change in the value of adjustment->upper can change + * the size request + */ + if (progress->use_text_format && progress->show_text) + gtk_widget_queue_resize (progress); + else + GTK_PROGRESS_GET_CLASS (progress)->update (progress); +} + +static void gtk_progress_value_changed (GtkAdjustment *adjustment, GtkProgress *progress) { @@ -504,6 +522,9 @@ gtk_progress_set_adjustment (GtkProgress *progress, if (progress->adjustment) { g_signal_handlers_disconnect_by_func (progress->adjustment, + gtk_progress_changed, + progress); + g_signal_handlers_disconnect_by_func (progress->adjustment, gtk_progress_value_changed, progress); g_object_unref (progress->adjustment); @@ -513,10 +534,15 @@ gtk_progress_set_adjustment (GtkProgress *progress, { g_object_ref (adjustment); gtk_object_sink (GTK_OBJECT (adjustment)); + g_signal_connect (adjustment, "changed", + G_CALLBACK (gtk_progress_changed), + progress); g_signal_connect (adjustment, "value_changed", G_CALLBACK (gtk_progress_value_changed), progress); } + + gtk_progress_changed (adjustment, progress); } } @@ -622,8 +648,7 @@ gtk_progress_set_show_text (GtkProgress *progress, { progress->show_text = show_text; - if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) - gtk_widget_queue_resize (GTK_WIDGET (progress)); + gtk_widget_queue_resize (GTK_WIDGET (progress)); g_object_notify (G_OBJECT (progress), "show_text"); } @@ -680,8 +705,7 @@ gtk_progress_set_format_string (GtkProgress *progress, progress->format = g_strdup (format); g_free (old_format); - if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) - gtk_widget_queue_resize (GTK_WIDGET (progress)); + gtk_widget_queue_resize (GTK_WIDGET (progress)); } gchar * |