From e47517cdbbf5ed3531adba668452e858335301c8 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 21 May 2003 21:23:35 +0000 Subject: Always queue a resize ... we rely on the size-allocate to do the update, Wed May 21 15:53:14 2003 Owen Taylor * 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. --- gtk/gtkprogress.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'gtk/gtkprogress.c') diff --git a/gtk/gtkprogress.c b/gtk/gtkprogress.c index 67339175f..8bb8e9ca4 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; } @@ -368,6 +373,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) @@ -503,6 +521,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); @@ -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 * -- cgit v1.2.1