diff --git a/src/common/exif.cc b/src/common/exif.cc index 5e4e20e9b911..59a9f85406d5 100644 --- a/src/common/exif.cc +++ b/src/common/exif.cc @@ -2370,6 +2370,23 @@ static bool _exif_decode_exif_data(dt_image_t *img, Exiv2::ExifData &exifData) } }; + // read user defined exif tags from metadata editor + dt_pthread_mutex_lock(&darktable.metadata_threadsafe); + for(GList *iter = dt_metadata_get_list(); iter; iter = iter->next) + { + dt_metadata_t *metadata = (dt_metadata_t *)iter->data; + gchar *tagname_lower = g_ascii_strdown(metadata->tagname, -1); + gboolean is_exif = (g_strstr_len(tagname_lower, -1, "exif") != NULL); + g_free(tagname_lower); + + if(is_exif && FIND_EXIF_TAG(metadata->tagname)) + { + std::string str = pos->print(&exifData); + dt_metadata_set_import(img->id, metadata->tagname, str.c_str()); + } + } + dt_pthread_mutex_unlock(&darktable.metadata_threadsafe); + img->exif_inited = TRUE; return true; } diff --git a/src/gui/metadata_tags.c b/src/gui/metadata_tags.c index 10061902efc8..36a8f4d49cc8 100644 --- a/src/gui/metadata_tags.c +++ b/src/gui/metadata_tags.c @@ -86,7 +86,6 @@ static void _tree_selection_change(GtkTreeSelection *selection, gpointer user_da } GtkWidget *dt_metadata_tags_dialog(GtkWidget *parent, - const gboolean user_editable_only, gpointer metadata_activated_callback, gpointer user_data) { @@ -127,34 +126,10 @@ GtkWidget *dt_metadata_tags_dialog(GtkWidget *parent, if(!taglist) taglist = (GList *) dt_exif_get_exiv2_taglist(); - // list of user-editable tagnames for the metadata editor - const char *allowed_tag_names[] = - { - "Xmp.dc.", - "Xmp.acdsee.", - "Xmp.iptc.", - "Xmp.dwc.", - "Iptc." - }; - for(GList *tag = taglist; tag; tag = g_list_next(tag)) { const char *tagname = tag->data; - if(user_editable_only) - { - // for the metadata editor we only want to expose user-editable fields - gboolean allowed = FALSE; - for(int i = 0; (i < sizeof(allowed_tag_names) / sizeof(allowed_tag_names[0])) && !allowed; i++) - { - if(g_strstr_len(tagname, -1, allowed_tag_names[i]) == tagname) - allowed = TRUE; - } - - if(!allowed) - continue; - } - char *type = g_strstr_len(tagname, -1, ","); if(type) { diff --git a/src/gui/metadata_tags.h b/src/gui/metadata_tags.h index 5cce9e1d21d8..3c3d719cd8fc 100644 --- a/src/gui/metadata_tags.h +++ b/src/gui/metadata_tags.h @@ -17,7 +17,7 @@ */ gchar *dt_metadata_tags_get_selected(); -GtkWidget *dt_metadata_tags_dialog(GtkWidget *parent, const gboolean user_editable_only, gpointer metadata_activated_callback, gpointer user_data); +GtkWidget *dt_metadata_tags_dialog(GtkWidget *parent, gpointer metadata_activated_callback, gpointer user_data); // clang-format off // modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py diff --git a/src/libs/export_metadata.c b/src/libs/export_metadata.c index a8d0e80ba329..06e2d7053c70 100644 --- a/src/libs/export_metadata.c +++ b/src/libs/export_metadata.c @@ -98,7 +98,7 @@ static void _metadata_activated(GtkTreeView *tree_view, // dialog to add metadata tag into the formula list static void _add_tag_button_clicked(GtkButton *button, dt_lib_export_metadata_t *d) { - GtkWidget *dialog = dt_metadata_tags_dialog(d->dialog, FALSE, _metadata_activated, d); + GtkWidget *dialog = dt_metadata_tags_dialog(d->dialog, _metadata_activated, d); #ifdef GDK_WINDOWING_QUARTZ dt_osx_disallow_fullscreen(dialog); diff --git a/src/libs/metadata.c b/src/libs/metadata.c index 1788ea87c6a3..d69b642dc94e 100644 --- a/src/libs/metadata.c +++ b/src/libs/metadata.c @@ -745,7 +745,7 @@ static void _metadata_activated(GtkTreeView *tree_view, // dialog to add metadata tag into the formula list static void _add_tag_button_clicked(GtkButton *button, dt_lib_metadata_t *d) { - GtkWidget *dialog = dt_metadata_tags_dialog(d->dialog, TRUE, _metadata_activated, d); + GtkWidget *dialog = dt_metadata_tags_dialog(d->dialog, _metadata_activated, d); #ifdef GDK_WINDOWING_QUARTZ dt_osx_disallow_fullscreen(dialog);