Mercurial > geeqie
changeset 1219:86fcbd0fcb7b
added change notification to bar_info.c
author | nadvornik |
---|---|
date | Tue, 23 Dec 2008 20:53:44 +0000 |
parents | 46e4fda574dd |
children | a0c249bcc4ff |
files | src/bar_info.c src/metadata.c |
diffstat | 2 files changed, 38 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/bar_info.c Tue Dec 23 19:15:12 2008 +0000 +++ b/src/bar_info.c Tue Dec 23 20:53:44 2008 +0000 @@ -680,11 +680,19 @@ bar_info_set_selection(bd, FALSE, TRUE, FALSE); } +static void bar_info_notify_cb(FileData *fd, NotifyType type, gpointer data) +{ + BarInfoData *bd = data; + if (fd == bd->fd) bar_info_update(bd); +} + static void bar_info_changed(GtkTextBuffer *buffer, gpointer data) { BarInfoData *bd = data; + file_data_unregister_notify_func(bar_info_notify_cb, bd); bar_info_write(bd); + file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); } void bar_info_close(GtkWidget *bar) @@ -701,6 +709,7 @@ { BarInfoData *bd = data; + file_data_unregister_notify_func(bar_info_notify_cb, bd); bar_list = g_list_remove(bar_list, bd); file_data_unref(bd->fd); @@ -897,6 +906,8 @@ bar_list = g_list_append(bar_list, bd); + file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); + return bd->vbox; }
--- a/src/metadata.c Tue Dec 23 19:15:12 2008 +0000 +++ b/src/metadata.c Tue Dec 23 20:53:44 2008 +0000 @@ -546,30 +546,37 @@ * and the only way to get all keywords is to iterate through * the item list. */ - for (item = exif_get_first_item(exif); - item; - item = exif_get_next_item(exif)) + /* Read IPTC keywords only if there are no XMP keywords + * IPTC does not have standard charset, thus the encoding may differ + * from XMP and keyword merging is not reliable. + */ + if (!*keywords) { - guint tag; - - tag = exif_item_get_tag_id(item); - if (tag == 0x0019) + for (item = exif_get_first_item(exif); + item; + item = exif_get_next_item(exif)) { - gchar *tag_name = exif_item_get_tag_name(item); - - if (strcmp(tag_name, "Iptc.Application2.Keywords") == 0) + guint tag; + + tag = exif_item_get_tag_id(item); + if (tag == 0x0019) { - gchar *kw; - gchar *utf8_kw; - - kw = exif_item_get_data_as_text(item); - if (!kw) continue; - - utf8_kw = utf8_validate_or_convert(kw); - *keywords = g_list_append(*keywords, (gpointer) utf8_kw); - g_free(kw); + gchar *tag_name = exif_item_get_tag_name(item); + + if (strcmp(tag_name, "Iptc.Application2.Keywords") == 0) + { + gchar *kw; + gchar *utf8_kw; + + kw = exif_item_get_data_as_text(item); + if (!kw) continue; + + utf8_kw = utf8_validate_or_convert(kw); + *keywords = g_list_append(*keywords, (gpointer) utf8_kw); + g_free(kw); + } + g_free(tag_name); } - g_free(tag_name); } } }