X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libspi%2Fvalue.c;h=16e64fba8398be4485b2d72e438e10b763230d97;hb=68b558bcef701bc71b1b7e53f68935f9c632fcdb;hp=cfe6f0d4f597fa3f88edfc5a0a27d7b414530bb8;hpb=f546ac72097fabd106a0cf277d4db389b811014c;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/libspi/value.c b/libspi/value.c index cfe6f0d..16e64fb 100644 --- a/libspi/value.c +++ b/libspi/value.c @@ -25,14 +25,14 @@ #include #include +#define PARENT_TYPE SPI_TYPE_BASE + /* Static function declarations */ static void spi_value_class_init (SpiValueClass *klass); static void spi_value_init (SpiValue *value); -static void -spi_value_finalize (GObject *obj); static CORBA_float impl__get_minimumValue (PortableServer_Servant _servant, CORBA_Environment * ev); @@ -48,24 +48,16 @@ impl__set_currentValue (PortableServer_Servant _servant, CORBA_Environment * ev); - -static GObjectClass *parent_class; - - BONOBO_TYPE_FUNC_FULL (SpiValue, Accessibility_Value, - BONOBO_TYPE_OBJECT, + PARENT_TYPE, spi_value); + static void spi_value_class_init (SpiValueClass *klass) { - GObjectClass * object_class = (GObjectClass *) klass; POA_Accessibility_Value__epv *epv = &klass->epv; - parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = spi_value_finalize; - /* Initialize epv table */ @@ -75,84 +67,106 @@ spi_value_class_init (SpiValueClass *klass) epv->_set_currentValue = impl__set_currentValue; } + static void spi_value_init (SpiValue *value) { } -static void -spi_value_finalize (GObject *obj) -{ - SpiValue *value = SPI_VALUE (obj); - g_object_unref (value->atko); - value->atko = NULL; - parent_class->finalize (obj); -} SpiValue * spi_value_interface_new (AtkObject *obj) { - SpiValue *new_value = - SPI_VALUE(g_object_new (SPI_VALUE_TYPE, NULL)); - new_value->atko = obj; - g_object_ref (obj); + SpiValue *new_value = g_object_new (SPI_VALUE_TYPE, NULL); + + spi_base_construct (SPI_BASE (new_value), obj); + return new_value; } +static AtkValue * +get_value_from_servant (PortableServer_Servant servant) +{ + SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant)); + + if (!object) + { + return NULL; + } + + return ATK_VALUE (object->atko); +} + static CORBA_float -impl__get_minimumValue (PortableServer_Servant _servant, - CORBA_Environment * ev) +impl__get_minimumValue (PortableServer_Servant servant, + CORBA_Environment *ev) { - SpiValue *value = SPI_VALUE (bonobo_object_from_servant (_servant)); - GValue gvalue = {0, }; + GValue gvalue = {0, }; + AtkValue *value = get_value_from_servant (servant); + + g_return_val_if_fail (value != NULL, 0.0); + + /* + * FIXME: ahem, there's no guarantee that + * atk_value_get_minimum_value returns a float. + * What we really need is a generic value API here + */ g_value_init (&gvalue, G_TYPE_FLOAT); - atk_value_get_minimum_value (ATK_VALUE(value->atko), &gvalue); + atk_value_get_minimum_value (value, &gvalue); + return (CORBA_float) g_value_get_float (&gvalue); } - -static CORBA_float -impl__get_maximumValue (PortableServer_Servant _servant, - CORBA_Environment * ev) +static CORBA_float +impl__get_maximumValue (PortableServer_Servant servant, + CORBA_Environment *ev) { - SpiValue *value = SPI_VALUE (bonobo_object_from_servant (_servant)); - GValue gvalue = {0, }; + GValue gvalue = {0, }; + AtkValue *value = get_value_from_servant (servant); + + g_return_val_if_fail (value != NULL, 0.0); g_value_init (&gvalue, G_TYPE_FLOAT); - atk_value_get_maximum_value (ATK_VALUE(value->atko), &gvalue); + atk_value_get_maximum_value (value, &gvalue); + return (CORBA_float) g_value_get_float (&gvalue); } - static CORBA_float -impl__get_currentValue (PortableServer_Servant _servant, - CORBA_Environment * ev) +impl__get_currentValue (PortableServer_Servant servant, + CORBA_Environment *ev) { - SpiValue *value = SPI_VALUE (bonobo_object_from_servant (_servant)); - GValue gvalue = {0, }; + GValue gvalue = {0, }; + AtkValue *value = get_value_from_servant (servant); + + g_return_val_if_fail (value != NULL, 0.0); g_value_init (&gvalue, G_TYPE_FLOAT); - atk_value_get_current_value (ATK_VALUE(value->atko), &gvalue); + atk_value_get_current_value (value, &gvalue); + return (CORBA_float) g_value_get_float (&gvalue); } static void -impl__set_currentValue (PortableServer_Servant _servant, - const CORBA_float value, - CORBA_Environment * ev) +impl__set_currentValue (PortableServer_Servant servant, + const CORBA_float value, + CORBA_Environment *ev) { - SpiValue *val = SPI_VALUE (bonobo_object_from_servant (_servant)); - GValue gvalue = {0, }; + GValue gvalue = {0, }; + AtkValue *avalue = get_value_from_servant (servant); + + g_return_if_fail (avalue != NULL); g_value_init (&gvalue, G_TYPE_FLOAT); g_value_set_float (&gvalue, (gfloat) value); - atk_value_set_current_value (ATK_VALUE(val->atko), &gvalue); + + atk_value_set_current_value (avalue, &gvalue); }