diff options
Diffstat (limited to 'src-ng/nautilus-attribute.c')
-rw-r--r-- | src-ng/nautilus-attribute.c | 113 |
1 files changed, 16 insertions, 97 deletions
diff --git a/src-ng/nautilus-attribute.c b/src-ng/nautilus-attribute.c index 70b7c6df2..36890172f 100644 --- a/src-ng/nautilus-attribute.c +++ b/src-ng/nautilus-attribute.c @@ -20,18 +20,13 @@ struct _NautilusAttribute { - GRecMutex mutex; + GMutex mutex; gpointer value; NautilusAttributeState state; - NautilusTaskFunc update_func; - NautilusTask *update_task; - NautilusCopyFunc copy_func; GDestroyNotify destroy_func; - - GCancellable *cancellable; }; G_DEFINE_TYPE (NautilusAttribute, nautilus_attribute, G_TYPE_OBJECT) @@ -43,17 +38,13 @@ finalize (GObject *object) self = NAUTILUS_ATTRIBUTE (object); - g_rec_mutex_clear (&self->mutex); + g_mutex_clear (&self->mutex); if (self->value != NULL) { g_clear_pointer (&self->value, self->destroy_func); } - g_cancellable_cancel (self->cancellable); - - g_object_unref (self->cancellable); - G_OBJECT_CLASS (nautilus_attribute_parent_class)->finalize (object); } @@ -70,100 +61,26 @@ nautilus_attribute_class_init (NautilusAttributeClass *klass) static void nautilus_attribute_init (NautilusAttribute *self) { - g_rec_mutex_init (&self->mutex); - - self->update_task = NULL; - self->cancellable = g_cancellable_new (); + g_mutex_init (&self->mutex); } -typedef struct +gpointer +nautilus_attribute_get_value (NautilusAttribute *attribute) { - NautilusAttribute *attribute; - - NautilusAttributeUpdateValueCallback callback; - gpointer user_data; -} GetValueCallbackDetails; - -static void -update_task_callback (NautilusTask *task, - gpointer user_data) -{ - GetValueCallbackDetails *details; - - details = user_data; - - g_rec_mutex_lock (&attribute->mutex); - - if (attribute->update_task == task) - { - if (attribute->state == NAUTILUS_ATTRIBUTE_STATE_PENDING) - { - attribute->state = NAUTILUS_ATTRIBUTE_STATE_VALID; - } - - - - details->callback (details->attribute, nautilus_task_get_result (task), - details->user_data); - } - - g_rec_mutex_lock (&attribute->mutex); - - g_object_unref (details->attribute); - g_free (details); -} - -void -nautilus_attribute_get_value (NautilusAttribute *attribute, - NautilusAttributeUpdateValueCallback callback, - gpointer user_data) -{ - gpointer value; + gpointer value = NULL; g_return_if_fail (NAUTILUS_IS_ATTRIBUTE (attribute)); - g_rec_mutex_lock (&attribute->mutex); + g_mutex_lock (&attribute->mutex); - switch (attribute->state) + if (attribute->value != NULL) { - case NAUTILUS_ATTRIBUTE_STATE_PENDING: - { - GetValueCallbackDetails *details; - - details = g_new0 (GetValueCallbackDetails, 1); - - details->attribute = g_object_ref (attribute); - details->callback = callback; - details->user_data = user_data; - - nautilus_task_add_callback (attribute->update_task, update_task_callback, details); - } - break; - - case NAUTILUS_ATTRIBUTE_STATE_VALID: - { - callback (attribute, attribute->copy_func (attribute->value), user_data); - }; - break; - - case NAUTILUS_ATTRIBUTE_STATE_INVALID: - { - if (attribute->update_task != NULL) - { - g_object_unref (attribute->update_task); - } - - attribute->update_task = nautilus_task_new_with_func (attribute->update_func, - g_object_ref (attribute), - g_object_unref, - attribute->cancellable); - - nautilus_task_add_callback ( - } - break; + value = attribute->copy_func (attribute->value); } - g_rec_mutex_unlock (&attribute->mutex); + g_mutex_unlock (&attribute->mutex); + + return value; } void @@ -172,7 +89,7 @@ nautilus_attribute_set_value (NautilusAttribute *attribute, { g_return_if_fail (NAUTILUS_IS_ATTRIBUTE (attribute)); - g_rec_mutex_lock (&attribute->mutex); + g_mutex_lock (&attribute->mutex); if (attribute->value != NULL) { @@ -186,7 +103,7 @@ nautilus_attribute_set_value (NautilusAttribute *attribute, */ attribute->state = NAUTILUS_ATTRIBUTE_STATE_VALID; - g_rec_mutex_unlock (&attribute->mutex); + g_mutex_unlock (&attribute->mutex); } static gpointer @@ -203,6 +120,7 @@ dummy_destroy_func (gpointer data) NautilusAttribute * nautilus_attribute_new (NautilusTaskFunc update_func, + gpointer update_func_data, NautilusCopyFunc copy_func, GDestroyNotify destroy_func) { @@ -217,6 +135,7 @@ nautilus_attribute_new (NautilusTaskFunc update_func, { copy_func = dummy_copy_func; } + instance->update_func_data = update_func_data; instance->copy_func = copy_func; if (destroy_func == NULL) { |