summaryrefslogtreecommitdiff
path: root/gtk/gtkprogress.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkprogress.c')
-rw-r--r--gtk/gtkprogress.c84
1 files changed, 52 insertions, 32 deletions
diff --git a/gtk/gtkprogress.c b/gtk/gtkprogress.c
index 8129bb41ce..44ed4f4e89 100644
--- a/gtk/gtkprogress.c
+++ b/gtk/gtkprogress.c
@@ -50,7 +50,7 @@ static void gtk_progress_get_arg (GtkObject *object,
GtkArg *arg,
guint arg_id);
static void gtk_progress_destroy (GtkObject *object);
-static void gtk_progress_finalize (GtkObject *object);
+static void gtk_progress_finalize (GObject *object);
static void gtk_progress_realize (GtkWidget *widget);
static gint gtk_progress_expose (GtkWidget *widget,
GdkEventExpose *event);
@@ -90,6 +90,7 @@ gtk_progress_get_type (void)
static void
gtk_progress_class_init (GtkProgressClass *class)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
@@ -97,6 +98,21 @@ gtk_progress_class_init (GtkProgressClass *class)
widget_class = (GtkWidgetClass *) class;
parent_class = gtk_type_class (GTK_TYPE_WIDGET);
+ gobject_class->finalize = gtk_progress_finalize;
+
+ object_class->set_arg = gtk_progress_set_arg;
+ object_class->get_arg = gtk_progress_get_arg;
+ object_class->destroy = gtk_progress_destroy;
+
+ widget_class->realize = gtk_progress_realize;
+ widget_class->expose_event = gtk_progress_expose;
+ widget_class->size_allocate = gtk_progress_size_allocate;
+
+ /* to be overridden */
+ class->paint = NULL;
+ class->update = NULL;
+ class->act_mode_enter = NULL;
+
gtk_object_add_arg_type ("GtkProgress::activity_mode",
GTK_TYPE_BOOL,
GTK_ARG_READWRITE,
@@ -113,20 +129,6 @@ gtk_progress_class_init (GtkProgressClass *class)
GTK_TYPE_FLOAT,
GTK_ARG_READWRITE,
ARG_TEXT_YALIGN);
-
- object_class->set_arg = gtk_progress_set_arg;
- object_class->get_arg = gtk_progress_get_arg;
- object_class->destroy = gtk_progress_destroy;
- object_class->finalize = gtk_progress_finalize;
-
- widget_class->realize = gtk_progress_realize;
- widget_class->expose_event = gtk_progress_expose;
- widget_class->size_allocate = gtk_progress_size_allocate;
-
- /* to be overridden */
- class->paint = NULL;
- class->update = NULL;
- class->act_mode_enter = NULL;
}
static void
@@ -245,32 +247,32 @@ gtk_progress_destroy (GtkObject *object)
progress = GTK_PROGRESS (object);
if (progress->adjustment)
- gtk_signal_disconnect_by_data (GTK_OBJECT (progress->adjustment),
- progress);
+ {
+ gtk_signal_disconnect_by_data (GTK_OBJECT (progress->adjustment),
+ progress);
+ gtk_object_unref (GTK_OBJECT (progress->adjustment));
+ progress->adjustment = NULL;
+ }
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
static void
-gtk_progress_finalize (GtkObject *object)
+gtk_progress_finalize (GObject *object)
{
GtkProgress *progress;
- g_return_if_fail (object != NULL);
g_return_if_fail (GTK_IS_PROGRESS (object));
progress = GTK_PROGRESS (object);
- if (progress->adjustment)
- gtk_object_unref (GTK_OBJECT (GTK_PROGRESS (object)->adjustment));
-
if (progress->offscreen_pixmap)
gdk_pixmap_unref (progress->offscreen_pixmap);
if (progress->format)
g_free (progress->format);
- GTK_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (parent_class)->finalize (object);
}
static gint
@@ -332,7 +334,7 @@ gtk_progress_create_pixmap (GtkProgress *progress)
widget->allocation.width,
widget->allocation.height,
-1);
- GTK_PROGRESS_CLASS (GTK_OBJECT (progress)->klass)->paint (progress);
+ GTK_PROGRESS_GET_CLASS (progress)->paint (progress);
}
}
@@ -340,7 +342,7 @@ static void
gtk_progress_value_changed (GtkAdjustment *adjustment,
GtkProgress *progress)
{
- GTK_PROGRESS_CLASS (GTK_OBJECT (progress)->klass)->update (progress);
+ GTK_PROGRESS_GET_CLASS (progress)->update (progress);
}
static gchar *
@@ -495,6 +497,8 @@ gtk_progress_configure (GtkProgress *progress,
g_return_if_fail (min <= max);
g_return_if_fail (value >= min && value <= max);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
adj = progress->adjustment;
if (fabs (adj->lower - min) > EPSILON || fabs (adj->upper - max) > EPSILON)
@@ -517,6 +521,8 @@ gtk_progress_set_percentage (GtkProgress *progress,
g_return_if_fail (GTK_IS_PROGRESS (progress));
g_return_if_fail (percentage >= 0 && percentage <= 1.0);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
gtk_progress_set_value (progress, progress->adjustment->lower + percentage *
(progress->adjustment->upper - progress->adjustment->lower));
}
@@ -527,8 +533,11 @@ gtk_progress_get_current_percentage (GtkProgress *progress)
g_return_val_if_fail (progress != NULL, 0);
g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0);
- return (progress->adjustment->value - progress->adjustment->lower) /
- (progress->adjustment->upper - progress->adjustment->lower);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
+
+ return ((progress->adjustment->value - progress->adjustment->lower) /
+ (progress->adjustment->upper - progress->adjustment->lower));
}
gfloat
@@ -538,6 +547,9 @@ gtk_progress_get_percentage_from_value (GtkProgress *progress,
g_return_val_if_fail (progress != NULL, 0);
g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
+
if (value >= progress->adjustment->lower &&
value <= progress->adjustment->upper)
return (value - progress->adjustment->lower) /
@@ -553,6 +565,9 @@ gtk_progress_set_value (GtkProgress *progress,
g_return_if_fail (progress != NULL);
g_return_if_fail (GTK_IS_PROGRESS (progress));
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
+
if (fabs (progress->adjustment->value - value) > EPSILON)
gtk_adjustment_set_value (progress->adjustment, value);
}
@@ -563,7 +578,7 @@ gtk_progress_get_value (GtkProgress *progress)
g_return_val_if_fail (progress != NULL, 0);
g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0);
- return progress->adjustment->value;
+ return progress->adjustment ? progress->adjustment->value : 0;
}
void
@@ -626,8 +641,11 @@ gtk_progress_get_current_text (GtkProgress *progress)
g_return_val_if_fail (progress != NULL, 0);
g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
+
return gtk_progress_build_string (progress, progress->adjustment->value,
- gtk_progress_get_current_percentage (progress));
+ gtk_progress_get_current_percentage (progress));
}
gchar *
@@ -637,8 +655,11 @@ gtk_progress_get_text_from_value (GtkProgress *progress,
g_return_val_if_fail (progress != NULL, 0);
g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0);
+ if (!progress->adjustment)
+ gtk_progress_set_adjustment (progress, NULL);
+
return gtk_progress_build_string (progress, value,
- gtk_progress_get_percentage_from_value (progress, value));
+ gtk_progress_get_percentage_from_value (progress, value));
}
void
@@ -653,8 +674,7 @@ gtk_progress_set_activity_mode (GtkProgress *progress,
progress->activity_mode = (activity_mode != 0);
if (progress->activity_mode)
- GTK_PROGRESS_CLASS
- (GTK_OBJECT (progress)->klass)->act_mode_enter (progress);
+ GTK_PROGRESS_GET_CLASS (progress)->act_mode_enter (progress);
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress)))
gtk_widget_queue_resize (GTK_WIDGET (progress));