summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2006-06-12 01:54:54 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-06-12 01:54:54 +0000
commitdf882a32794bfd49a2c4b038d801957617872c38 (patch)
tree11c639794bdd17a8f1ae18003a53cdf5731bb08f
parentadb725eadcd7792ab96d1fbc21cae9f7aa357c3f (diff)
downloadgdk-pixbuf-df882a32794bfd49a2c4b038d801957617872c38.tar.gz
Fix #344543
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--gtk/gtkprogress.c4
-rw-r--r--gtk/gtkprogressbar.c25
-rw-r--r--gtk/gtkprogressbar.h1
5 files changed, 38 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index c5aefd337..c49d33b8b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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