/* Get parameter specification of stylable properties and add them to hashtable. * If requested do it recursively over all parent classes. */ static void _xfdashboard_actor_hashtable_get_all_stylable_param_specs(GHashTable *ioHashtable, GObjectClass *inClass, gboolean inRecursive) { GList *paramSpecs, *entry; GObjectClass *parentClass; /* Get list of all parameter specification registered for class */ paramSpecs=g_param_spec_pool_list_owned(_xfdashboard_actor_stylable_properties_pool, G_OBJECT_CLASS_TYPE(inClass)); for(entry=paramSpecs; entry; entry=g_list_next(entry)) { GParamSpec *paramSpec=G_PARAM_SPEC(entry->data); /* Only add parameter specification which aren't already in hashtable */ if(paramSpec && !g_hash_table_lookup_extended(ioHashtable, g_param_spec_get_name(paramSpec), NULL, NULL)) { g_hash_table_insert(ioHashtable, g_strdup(g_param_spec_get_name(paramSpec)), g_param_spec_ref(paramSpec)); } } g_list_free(paramSpecs); /* Call us recursive for parent class if it exists and requested */ parentClass=g_type_class_peek_parent(inClass); if(inRecursive && parentClass) _xfdashboard_actor_hashtable_get_all_stylable_param_specs(ioHashtable, parentClass, inRecursive); }
static void tidy_stylable_base_finalize (gpointer g_iface) { GList *list, *node; list = g_param_spec_pool_list_owned (style_property_spec_pool, G_TYPE_FROM_INTERFACE (g_iface)); for (node = list; node; node = node->next) { GParamSpec *pspec = node->data; g_param_spec_pool_remove (style_property_spec_pool, pspec); g_param_spec_unref (pspec); } g_list_free (list); }
/* Base class finalization */ void xfdashboard_actor_base_class_finalize(XfdashboardActorClass *klass) { GList *paramSpecs, *entry; paramSpecs=g_param_spec_pool_list_owned(_xfdashboard_actor_stylable_properties_pool, G_OBJECT_CLASS_TYPE(klass)); for(entry=paramSpecs; entry; entry=g_list_next(entry)) { GParamSpec *paramSpec=G_PARAM_SPEC(entry->data); if(paramSpec) { g_param_spec_pool_remove(_xfdashboard_actor_stylable_properties_pool, paramSpec); g_debug("Unregistered stylable property named '%s' for class '%s'", g_param_spec_get_name(paramSpec), G_OBJECT_CLASS_NAME(klass)); g_param_spec_unref(paramSpec); } } g_list_free(paramSpecs); }