--- xfconf-4.6.1.orig/xfconfd/xfconf-backend-perchannel-xml.c +++ xfconf-4.6.1/xfconfd/xfconf-backend-perchannel-xml.c @@ -1643,18 +1643,27 @@ GError **error) { XfconfChannel *channel = NULL; - gchar *filename_stem, **filenames, *user_file; - gint i; + gchar *filename_stem, **xdg_filenames, **filenames, *user_file; + gint i, size; XfconfProperty *prop; TRACE("entering"); filename_stem = g_strdup_printf(CONFIG_FILE_FMT, channel_name); - filenames = xfce_resource_lookup_all(XFCE_RESOURCE_CONFIG, filename_stem); + xdg_filenames = xfce_resource_lookup_all(XFCE_RESOURCE_CONFIG, filename_stem); user_file = xfce_resource_save_location(XFCE_RESOURCE_CONFIG, filename_stem, FALSE); g_free(filename_stem); + /* reverse array, to respect xdg base dirs' priority when merging */ + for(size = 0; xdg_filenames[size]; ++size); + filenames = g_new(gchar *, size + 1); + for(i = 0; xdg_filenames[i]; ++i) { + filenames[i] = xdg_filenames[size - 1 - i]; + } + filenames[i] = NULL; + g_free(xdg_filenames); + if((!filenames || !filenames[0]) && !user_file) { if(error) { g_set_error(error, XFCONF_ERROR,