diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2006-06-12 01:54:54 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2006-06-12 01:54:54 +0000 |
commit | df882a32794bfd49a2c4b038d801957617872c38 (patch) | |
tree | 11c639794bdd17a8f1ae18003a53cdf5731bb08f | |
parent | adb725eadcd7792ab96d1fbc21cae9f7aa357c3f (diff) | |
download | gdk-pixbuf-df882a32794bfd49a2c4b038d801957617872c38.tar.gz |
Fix #344543
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 6 | ||||
-rw-r--r-- | gtk/gtkprogress.c | 4 | ||||
-rw-r--r-- | gtk/gtkprogressbar.c | 25 | ||||
-rw-r--r-- | gtk/gtkprogressbar.h | 1 |
5 files changed, 38 insertions, 4 deletions
@@ -1,3 +1,9 @@ +2006-06-11 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkprogressbar.h: Add a dirty flag to GtkProgressBar.n/ + * gtk/gtkprogressbar.c: Defer updating of the offscreen + pixmap until expose. (#344543, Chris Wilson) + 2006-06-11 Emmanuele Bassi <ebassi@gnome.org> * gtk/gtkrecentchooserdefault.c diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index c5aefd337..c49d33b8b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2006-06-11 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkprogressbar.h: Add a dirty flag to GtkProgressBar.n/ + * gtk/gtkprogressbar.c: Defer updating of the offscreen + pixmap until expose. (#344543, Chris Wilson) + 2006-06-11 Emmanuele Bassi <ebassi@gnome.org> * gtk/gtkrecentchooserdefault.c diff --git a/gtk/gtkprogress.c b/gtk/gtkprogress.c index 969ab7f80..ba403a655 100644 --- a/gtk/gtkprogress.c +++ b/gtk/gtkprogress.c @@ -56,7 +56,7 @@ static void gtk_progress_get_property (GObject *object, static void gtk_progress_destroy (GtkObject *object); static void gtk_progress_finalize (GObject *object); static void gtk_progress_realize (GtkWidget *widget); -static gint gtk_progress_expose (GtkWidget *widget, +static gboolean gtk_progress_expose (GtkWidget *widget, GdkEventExpose *event); static void gtk_progress_size_allocate (GtkWidget *widget, GtkAllocation *allocation); @@ -283,7 +283,7 @@ gtk_progress_finalize (GObject *object) G_OBJECT_CLASS (gtk_progress_parent_class)->finalize (object); } -static gint +static gboolean gtk_progress_expose (GtkWidget *widget, GdkEventExpose *event) { diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index 0bf8661f2..a37ad3b4d 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -73,6 +73,8 @@ static void gtk_progress_bar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static gboolean gtk_progress_bar_expose (GtkWidget *widget, + GdkEventExpose *event); static void gtk_progress_bar_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_progress_bar_real_update (GtkProgress *progress); @@ -105,6 +107,7 @@ gtk_progress_bar_class_init (GtkProgressBarClass *class) gobject_class->set_property = gtk_progress_bar_set_property; gobject_class->get_property = gtk_progress_bar_get_property; + widget_class->expose_event = gtk_progress_bar_expose; widget_class->size_request = gtk_progress_bar_size_request; progress_class->paint = gtk_progress_bar_paint; @@ -438,7 +441,7 @@ gtk_progress_bar_real_update (GtkProgress *progress) } } } - gtk_progress_bar_paint (progress); + pbar->dirty = TRUE; gtk_widget_queue_draw (GTK_WIDGET (progress)); } else @@ -451,12 +454,28 @@ gtk_progress_bar_real_update (GtkProgress *progress) if (pbar->in_block != in_block) { pbar->in_block = in_block; - gtk_progress_bar_paint (progress); + pbar->dirty = TRUE; gtk_widget_queue_draw (GTK_WIDGET (progress)); } } } +static gboolean +gtk_progress_bar_expose (GtkWidget *widget, + GdkEventExpose *event) +{ + GtkProgressBar *pbar; + + g_return_val_if_fail (GTK_IS_PROGRESS_BAR (widget), FALSE); + + pbar = GTK_PROGRESS_BAR (widget); + + if (GTK_WIDGET_DRAWABLE (widget) && pbar->dirty) + gtk_progress_bar_paint (GTK_PROGRESS (pbar)); + + return GTK_WIDGET_CLASS (gtk_progress_bar_parent_class)->expose_event (widget, event); +} + static void gtk_progress_bar_size_request (GtkWidget *widget, GtkRequisition *requisition) @@ -870,6 +889,8 @@ gtk_progress_bar_paint (GtkProgress *progress) else gtk_progress_bar_paint_discrete (pbar, orientation); } + + pbar->dirty = FALSE; } } diff --git a/gtk/gtkprogressbar.h b/gtk/gtkprogressbar.h index 2eb3360c1..1e5561647 100644 --- a/gtk/gtkprogressbar.h +++ b/gtk/gtkprogressbar.h @@ -77,6 +77,7 @@ struct _GtkProgressBar guint activity_dir : 1; guint ellipsize : 3; + guint dirty : 1; }; struct _GtkProgressBarClass |