/** * gobject: the object to dispose (#SeahorseContext) * * release all references * **/ static void seahorse_context_dispose (GObject *gobject) { SeahorseContext *sctx; GSList *objects, *l; sctx = SEAHORSE_CONTEXT (gobject); /* Release all the objects */ objects = NULL; g_hash_table_foreach (sctx->pv->objects_by_source, hash_to_ref_slist, &objects); for (l = objects; l; l = g_slist_next (l)) { seahorse_context_remove_object (sctx, l->data); g_object_unref (G_OBJECT (l->data)); } g_slist_free (objects); /* Gconf notification */ if (sctx->pv->notify_id) seahorse_gconf_unnotify (sctx->pv->notify_id); sctx->pv->notify_id = 0; /* Auto sources */ if (sctx->pv->auto_sources) g_hash_table_destroy (sctx->pv->auto_sources); sctx->pv->auto_sources = NULL; /* DNS-SD */ if (sctx->pv->discovery) g_object_unref (sctx->pv->discovery); sctx->pv->discovery = NULL; /* Release all the sources */ for (l = sctx->pv->sources; l; l = g_slist_next (l)) g_object_unref (SEAHORSE_SOURCE (l->data)); g_slist_free (sctx->pv->sources); sctx->pv->sources = NULL; if (sctx->pv->refresh_ops) g_object_unref (sctx->pv->refresh_ops); sctx->pv->refresh_ops = NULL; G_OBJECT_CLASS (seahorse_context_parent_class)->dispose (gobject); }
/** * gobject: The #SeahorseContext to finalize * * destroy all objects, free private vars * **/ static void seahorse_context_finalize (GObject *gobject) { SeahorseContext *sctx = SEAHORSE_CONTEXT (gobject); /* Destroy the hash table */ if (sctx->pv->objects_by_source) g_hash_table_destroy (sctx->pv->objects_by_source); if (sctx->pv->objects_by_type) g_hash_table_destroy (sctx->pv->objects_by_type); /* Other stuff already done in dispose */ g_assert (sctx->pv->sources == NULL); g_assert (sctx->pv->auto_sources == NULL); g_assert (sctx->pv->discovery == NULL); g_assert (sctx->pv->refresh_ops == NULL); g_free (sctx->pv); G_OBJECT_CLASS (seahorse_context_parent_class)->finalize (gobject); }
/** * seahorse_object_set_property: * @obj: Object to set the property in * @prop_id: the property to set * @value: the value to set * @pspec: To be used for warnings. #GParamSpec * * Sets a property in this object * */ static void seahorse_object_set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec) { SeahorseObject *self = SEAHORSE_OBJECT (obj); SeahorseLocation loc; SeahorseUsage usage; guint flags; GQuark quark; switch (prop_id) { case PROP_CONTEXT: if (self->pv->context) g_object_remove_weak_pointer (G_OBJECT (self->pv->context), (gpointer*)&self->pv->context); self->pv->context = SEAHORSE_CONTEXT (g_value_get_object (value)); if (self->pv->context != NULL) g_object_add_weak_pointer (G_OBJECT (self->pv->context), (gpointer*)&self->pv->context); g_object_notify (G_OBJECT (self), "context"); break; case PROP_SOURCE: seahorse_object_set_source (self, SEAHORSE_SOURCE (g_value_get_object (value))); break; case PROP_PREFERRED: seahorse_object_set_preferred (self, SEAHORSE_OBJECT (g_value_get_object (value))); break; case PROP_PARENT: seahorse_object_set_parent (self, SEAHORSE_OBJECT (g_value_get_object (value))); break; case PROP_ID: quark = g_value_get_uint (value); if (quark != self->pv->id) { self->pv->id = quark; g_object_freeze_notify (obj); g_object_notify (obj, "id"); recalculate_id (self); g_object_thaw_notify (obj); } break; case PROP_TAG: quark = g_value_get_uint (value); if (quark != self->pv->tag) { self->pv->tag = quark; self->pv->tag_explicit = TRUE; g_object_notify (obj, "tag"); } break; case PROP_LABEL: if (set_string_storage (g_value_get_string (value), &self->pv->label)) { g_object_freeze_notify (obj); g_object_notify (obj, "label"); recalculate_label (self); g_object_thaw_notify (obj); } break; case PROP_NICKNAME: if (set_string_storage (g_value_get_string (value), &self->pv->nickname)) { self->pv->nickname_explicit = TRUE; g_object_notify (obj, "nickname"); } break; case PROP_MARKUP: if (set_string_storage (g_value_get_string (value), &self->pv->markup)) { self->pv->markup_explicit = TRUE; g_object_notify (obj, "markup"); } break; case PROP_DESCRIPTION: if (set_string_storage (g_value_get_string (value), &self->pv->description)) { self->pv->description_explicit = TRUE; g_object_notify (obj, "description"); } break; case PROP_ICON: if (set_string_storage (g_value_get_string (value), &self->pv->icon)) g_object_notify (obj, "icon"); break; case PROP_IDENTIFIER: if (set_string_storage (g_value_get_string (value), &self->pv->identifier)) { self->pv->identifier_explicit = TRUE; g_object_notify (obj, "identifier"); } break; case PROP_LOCATION: loc = g_value_get_enum (value); if (loc != self->pv->location) { self->pv->location = loc; g_object_notify (obj, "location"); } break; case PROP_USAGE: usage = g_value_get_enum (value); if (usage != self->pv->usage) { self->pv->usage = usage; g_object_freeze_notify (obj); g_object_notify (obj, "usage"); recalculate_usage (self); g_object_thaw_notify (obj); } break; case PROP_FLAGS: flags = g_value_get_uint (value); flags &= ~SEAHORSE_FLAG_DELETABLE; if (flags != self->pv->flags) { self->pv->flags = flags; g_object_notify (obj, "flags"); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); break; } }