EVENTD_EXPORT gint8 evhelpers_config_key_file_get_colour(GKeyFile *config_file, const gchar *section, const gchar *key, Colour *colour) { gchar *string; gint8 r; if ( ( r = evhelpers_config_key_file_get_string(config_file, section, key, &string) ) != 0 ) return r; r = 1; NkColourDouble colour_; if ( nk_colour_double_parse(string, &colour_) ) { colour->r = colour_.red; colour->g = colour_.green; colour->b = colour_.blue; colour->a = colour_.alpha; r = 0; } g_free(string); return r; }
static void _eventd_nd_wl_global_parse(EventdNdBackendContext *self, GKeyFile *config_file) { if ( ! g_key_file_has_group(config_file, "NotificationWayland") ) return; evhelpers_config_key_file_get_string(config_file, "NotificationWayland", "CursorTheme", &self->cursor.theme_name); evhelpers_config_key_file_get_string_list(config_file, "NotificationWayland", "Cursor", &self->cursor.name, NULL); }
EVENTD_EXPORT gint8 evhelpers_config_key_file_get_filename(GKeyFile *config_file, const gchar *group, const gchar *key, Filename **value) { gchar *string; gint8 r; if ( ( r = evhelpers_config_key_file_get_string(config_file, group, key, &string) ) != 0 ) return r; return _evhelpers_config_key_file_get_filename(string, value, group, key, 0); }
EVENTD_EXPORT gint8 evhelpers_config_key_file_get_string_with_default(GKeyFile *config_file, const gchar *group, const gchar *key, const gchar *default_value, gchar **ret_value) { gint8 r; r = evhelpers_config_key_file_get_string(config_file, group, key, ret_value); if ( r > 0 ) *ret_value = g_strdup(default_value); return r; }
static void _eventd_config_parse_global(EventdConfig *config, GKeyFile *config_file) { if ( g_tls_backend_supports_tls(g_tls_backend_get_default()) && g_key_file_has_group(config_file, "Server") ) { gchar *priorities; if ( ( config->gnutls_priorities_env == NULL ) && ( evhelpers_config_key_file_get_string(config_file, "Server", "GnuTLSPriority", &priorities) == 0 ) ) { g_free(config->gnutls_priorities); config->gnutls_priorities = priorities; } } }
EVENTD_EXPORT gint8 evhelpers_config_key_file_get_enum(GKeyFile *config_file, const gchar *group, const gchar *key, const gchar * const *values, guint64 size, guint64 *value) { gint8 r; gchar *string; r = evhelpers_config_key_file_get_string(config_file, group, key, &string); if ( r != 0 ) return r; if ( ! nk_enum_parse(string, values, size, TRUE, value) ) r = -1; g_free(string); return r; }
static GKeyFile * _eventd_config_process_config_file(GHashTable *files, const gchar *id, GKeyFile *file) { if ( ! g_key_file_has_group(file, "File") ) return file; gchar *parent_id; switch ( evhelpers_config_key_file_get_string(file, "File", "Extends", &parent_id) ) { case 1: return file; case -1: return NULL; case 0: break; } GKeyFile *new_file = NULL; GError *error = NULL; if ( ! g_key_file_remove_key(file, "File", "Extends", &error) ) { g_warning("Couldn't clean event file '%s': %s", id, error->message); g_clear_error(&error); goto fail; } GKeyFile *parent; parent = g_hash_table_lookup(files, parent_id); if ( parent == NULL ) { g_warning("Event file '%s' has no parent file '%s'", id, parent_id); goto fail; } if ( ( parent = _eventd_config_process_config_file(files, parent_id, parent) ) == NULL ) goto fail; GString *merged_data; gchar *data; data = g_key_file_to_data(parent, NULL, NULL); merged_data = g_string_new(data); g_free(data); data = g_key_file_to_data(file, NULL, NULL); g_string_append(merged_data, data); g_free(data); new_file = g_key_file_new(); if ( g_key_file_load_from_data(new_file, merged_data->str, -1, G_KEY_FILE_NONE, &error) ) g_hash_table_insert(files, g_strdup(id), new_file); else { g_warning("Couldn't merge '%s' and '%s': %s", id, parent_id, error->message); g_clear_error(&error); g_key_file_free(new_file); new_file = NULL; } g_string_free(merged_data, TRUE); fail: g_free(parent_id); return new_file; }