]> Pileus Git - ~andy/gtk/blobdiff - modules/other/gail/gailprogressbar.c
GailProgressBar: make value setters work
[~andy/gtk] / modules / other / gail / gailprogressbar.c
index 0523bd0e9d5e4a2a37f0433ff0e8cdfb9bc37b5d..cfa6315131a53676a88f43e959a8af18a8b9d88f 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
-#include <config.h>
+#include "config.h"
 
 #include <string.h>
+
 #include <gtk/gtk.h>
+
 #include "gailprogressbar.h"
 #include "gailadjustment.h"
 
@@ -28,8 +30,6 @@ static void    gail_progress_bar_class_init        (GailProgressBarClass *klass);
 static void     gail_progress_bar_init              (GailProgressBar *bar);
 static void      gail_progress_bar_real_initialize   (AtkObject      *obj,
                                                       gpointer       data);
-static void      gail_progress_bar_finalize          (GObject        *object);
-
 
 static void     atk_value_interface_init            (AtkValueIface  *iface);
 
@@ -43,16 +43,13 @@ static void  gail_progress_bar_get_maximum_value (AtkValue       *obj,
                                                      GValue         *value);
 static void     gail_progress_bar_get_minimum_value (AtkValue       *obj,
                                                      GValue         *value);
-static void      gail_progress_bar_value_changed     (GtkAdjustment  *adjustment,
-                                                      gpointer       data);
 
 G_DEFINE_TYPE_WITH_CODE (GailProgressBar, gail_progress_bar, GAIL_TYPE_WIDGET,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, atk_value_interface_init))
 
-static void     
+static void
 gail_progress_bar_class_init           (GailProgressBarClass *klass)
 {
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
   GailWidgetClass *widget_class;
 
@@ -61,8 +58,6 @@ gail_progress_bar_class_init          (GailProgressBarClass *klass)
   widget_class->notify_gtk = gail_progress_bar_real_notify_gtk;
 
   class->initialize = gail_progress_bar_real_initialize;
-
-  gobject_class->finalize = gail_progress_bar_finalize;
 }
 
 static void
@@ -70,51 +65,16 @@ gail_progress_bar_init (GailProgressBar *bar)
 {
 }
 
-AtkObject* 
-gail_progress_bar_new (GtkWidget *widget)
-{
-  GObject *object;
-  AtkObject *accessible;
-
-  g_return_val_if_fail (GTK_IS_PROGRESS_BAR (widget), NULL);
-
-  object = g_object_new (GAIL_TYPE_PROGRESS_BAR, NULL);
-
-  accessible = ATK_OBJECT (object);
-  atk_object_initialize (accessible, widget);
-
-  return accessible;
-}
-
 static void
 gail_progress_bar_real_initialize (AtkObject *obj,
                                    gpointer  data)
 {
-  GailProgressBar *progress_bar = GAIL_PROGRESS_BAR (obj);
-  GtkProgress *gtk_progress;
-
   ATK_OBJECT_CLASS (gail_progress_bar_parent_class)->initialize (obj, data);
 
-  gtk_progress = GTK_PROGRESS (data);
-  /*
-   * If a GtkAdjustment already exists for the spin_button,
-   * create the GailAdjustment
-   */
-  if (gtk_progress->adjustment)
-    {
-      progress_bar->adjustment = gail_adjustment_new (gtk_progress->adjustment);
-      g_signal_connect (gtk_progress->adjustment,
-                        "value-changed",
-                        G_CALLBACK (gail_progress_bar_value_changed),
-                        obj);
-    }
-  else
-    progress_bar->adjustment = NULL;
-
   obj->role = ATK_ROLE_PROGRESS_BAR;
 }
 
-static void     
+static void
 atk_value_interface_init (AtkValueIface *iface)
 {
   iface->get_current_value = gail_progress_bar_get_current_value;
@@ -122,75 +82,43 @@ atk_value_interface_init (AtkValueIface *iface)
   iface->get_minimum_value = gail_progress_bar_get_minimum_value;
 }
 
-static void     
+static void
 gail_progress_bar_get_current_value (AtkValue   *obj,
                                      GValue     *value)
 {
-  GailProgressBar *progress_bar;
+  GtkWidget *widget;
 
   g_return_if_fail (GAIL_IS_PROGRESS_BAR (obj));
 
-  progress_bar = GAIL_PROGRESS_BAR (obj);
-  if (progress_bar->adjustment == NULL)
-    /*
-     * Adjustment has not been specified
-     */
-    return;
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
 
-  atk_value_get_current_value (ATK_VALUE (progress_bar->adjustment), value);
+  memset (value, 0, sizeof (GValue));
+  g_value_init (value, G_TYPE_DOUBLE);
+  g_value_set_double (value, gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (widget)));
 }
 
-static void     
+static void
 gail_progress_bar_get_maximum_value (AtkValue   *obj,
                                      GValue     *value)
 {
-  GailProgressBar *progress_bar;
-
   g_return_if_fail (GAIL_IS_PROGRESS_BAR (obj));
 
-  progress_bar = GAIL_PROGRESS_BAR (obj);
-  if (progress_bar->adjustment == NULL)
-    /*
-     * Adjustment has not been specified
-     */
-    return;
-
-  atk_value_get_maximum_value (ATK_VALUE (progress_bar->adjustment), value);
+  memset (value, 0, sizeof (GValue));
+  g_value_init (value, G_TYPE_DOUBLE);
+  g_value_set_double (value, 1.0);
 }
 
 static void     
 gail_progress_bar_get_minimum_value (AtkValue    *obj,
                                     GValue      *value)
 {
-  GailProgressBar *progress_bar;
-
   g_return_if_fail (GAIL_IS_PROGRESS_BAR (obj));
 
-  progress_bar = GAIL_PROGRESS_BAR (obj);
-  if (progress_bar->adjustment == NULL)
-    /*
-     * Adjustment has not been specified
-     */
-    return;
-
-  atk_value_get_minimum_value (ATK_VALUE (progress_bar->adjustment), value);
-}
-
-static void
-gail_progress_bar_finalize (GObject            *object)
-{
-  GailProgressBar *progress_bar = GAIL_PROGRESS_BAR (object);
-
-  if (progress_bar->adjustment)
-    {
-      g_object_unref (progress_bar->adjustment);
-      progress_bar->adjustment = NULL;
-    }
-
-  G_OBJECT_CLASS (gail_progress_bar_parent_class)->finalize (object);
+  memset (value, 0, sizeof (GValue));
+  g_value_init (value, G_TYPE_DOUBLE);
+  g_value_set_double (value, 0.0);
 }
 
-
 static void
 gail_progress_bar_real_notify_gtk (GObject           *obj,
                                    GParamSpec        *pspec)
@@ -198,41 +126,8 @@ gail_progress_bar_real_notify_gtk (GObject           *obj,
   GtkWidget *widget = GTK_WIDGET (obj);
   GailProgressBar *progress_bar = GAIL_PROGRESS_BAR (gtk_widget_get_accessible (widget));
 
-  if (strcmp (pspec->name, "adjustment") == 0)
-    {
-      /*
-       * Get rid of the GailAdjustment for the GtkAdjustment
-       * which was associated with the progress_bar.
-       */
-      if (progress_bar->adjustment)
-        {
-          g_object_unref (progress_bar->adjustment);
-          progress_bar->adjustment = NULL;
-        }
-      /*
-       * Create the GailAdjustment when notify for "adjustment" property
-       * is received
-       */
-      progress_bar->adjustment = gail_adjustment_new (GTK_PROGRESS (widget)->adjustment);
-      g_signal_connect (GTK_PROGRESS (widget)->adjustment,
-                        "value-changed",
-                        G_CALLBACK (gail_progress_bar_value_changed),
-                        progress_bar);
-    }
+  if (strcmp (pspec->name, "fraction") == 0)
+    g_object_notify (G_OBJECT (progress_bar), "accessible-value");
   else
     GAIL_WIDGET_CLASS (gail_progress_bar_parent_class)->notify_gtk (obj, pspec);
 }
-
-static void
-gail_progress_bar_value_changed (GtkAdjustment    *adjustment,
-                                 gpointer         data)
-{
-  GailProgressBar *progress_bar;
-
-  g_return_if_fail (adjustment != NULL);
-  g_return_if_fail (data != NULL);
-
-  progress_bar = GAIL_PROGRESS_BAR (data);
-
-  g_object_notify (G_OBJECT (progress_bar), "accessible-value");
-}