void ide_file_load_settings_async (IdeFile *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; g_autoptr(IdeFileSettings) file_settings = NULL; IDE_ENTRY; g_return_if_fail (IDE_IS_FILE (self)); g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); /* Use shared instance if available */ if (self->file_settings != NULL) { g_task_return_pointer (task, g_object_ref (self->file_settings), g_object_unref); IDE_EXIT; } /* Create our new settings instance, races are okay */ file_settings = ide_file_settings_new (self); /* If this is settled immediately (not using editorconfig), then we can use this now * and cache the result for later */ if (ide_file_settings_get_settled (file_settings)) { self->file_settings = g_steal_pointer (&file_settings); g_task_return_pointer (task, g_object_ref (self->file_settings), g_object_unref); IDE_EXIT; } /* * We need to wait until the settings have settled. editorconfig may need to * background load a bunch of .editorconfig files off of disk/sshfs/etc to * determine the settings. */ g_signal_connect (file_settings, "notify::settled", G_CALLBACK (ide_file__file_settings_settled_cb), g_object_ref (task)); g_task_set_task_data (task, g_steal_pointer (&file_settings), g_object_unref); IDE_EXIT; }
static void ide_file_settings_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IdeFileSettings *self = IDE_FILE_SETTINGS (object); switch (prop_id) { case PROP_FILE: g_value_set_object (value, ide_file_settings_get_file (self)); break; case PROP_LANGUAGE: g_value_set_static_string (value, ide_file_settings_get_language (self)); break; case PROP_SETTLED: g_value_set_boolean (value, ide_file_settings_get_settled (self)); break; #define IDE_FILE_SETTINGS_PROPERTY(NAME, name, _2, _3, _4, _5, _6, value_type) \ case PROP_##NAME: \ g_value_set_##value_type (value, ide_file_settings_get_##name (self)); \ break; # include "ide-file-settings.defs" #undef IDE_FILE_SETTINGS_PROPERTY #define IDE_FILE_SETTINGS_PROPERTY(NAME, name, _1, _2, _pname, _3, _4, _5) \ case PROP_##NAME##_SET: \ g_value_set_boolean (value, ide_file_settings_get_##name##_set (self)); \ break; # include "ide-file-settings.defs" #undef IDE_FILE_SETTINGS_PROPERTY default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }