--- geeqie-1.1/src/bar_keywords.c 2012-08-12 22:13:40.000000000 +0200 +++ geeqie-geeqie/src/bar_keywords.c 2012-08-21 22:31:05.000000000 +0200 @@ -216,17 +216,33 @@ static void bar_pane_keywords_update(PaneKeywordsData *pkd) { GList *keywords = NULL; + GList *orig_keywords = NULL; + GList *work1, *work2; GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view)); - g_signal_handlers_block_by_func(keyword_buffer, bar_pane_keywords_changed, pkd); - keywords = metadata_read_list(pkd->fd, KEYWORD_KEY, METADATA_PLAIN); + orig_keywords = keyword_list_pull(pkd->keyword_view); + + /* compare the lists */ + work1 = keywords; + work2 = orig_keywords; + + while (work1 && work2) + { + if (strcmp(work1->data, work2->data) != 0) break; + work1 = work1->next; + work2 = work2->next; + } + + if (work1 || work2) /* lists differs */ + { + g_signal_handlers_block_by_func(keyword_buffer, bar_pane_keywords_changed, pkd); keyword_list_push(pkd->keyword_view, keywords); bar_keyword_tree_sync(pkd); - string_list_free(keywords); - g_signal_handlers_unblock_by_func(keyword_buffer, bar_pane_keywords_changed, pkd); - + } + string_list_free(keywords); + string_list_free(orig_keywords); } void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd) @@ -264,11 +280,7 @@ pkd = g_object_get_data(G_OBJECT(bar), "pane_data"); if (!pkd) return FALSE; -#if GTK_CHECK_VERSION(2,20,0) if (gtk_widget_has_focus(pkd->keyword_view)) return gtk_widget_event(pkd->keyword_view, event); -#else - if (GTK_WIDGET_HAS_FOCUS(pkd->keyword_view)) return gtk_widget_event(pkd->keyword_view, event); -#endif return FALSE; } @@ -430,10 +442,8 @@ { PaneKeywordsData *pkd = data; - file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd); bar_pane_keywords_write(pkd); bar_keyword_tree_sync(pkd); - file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW); pkd->idle_id = 0; return FALSE; } @@ -490,7 +500,7 @@ case TARGET_APP_KEYWORD_PATH: { GList *path = keyword_tree_get_path(keyword_tree, &child_iter); - gtk_selection_data_set(selection_data, selection_data->target, + gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data), 8, (gpointer) &path, sizeof(path)); break; } @@ -611,13 +621,13 @@ { case TARGET_APP_KEYWORD_PATH: { - GList *path = *(gpointer *)selection_data->data; + GList *path = *(gpointer *)gtk_selection_data_get_data(selection_data); src_valid = keyword_tree_get_iter(keyword_tree, &src_kw_iter, path); string_list_free(path); break; } default: - new_keywords = string_to_keywords_list((gchar *)selection_data->data); + new_keywords = string_to_keywords_list((gchar *)gtk_selection_data_get_data(selection_data)); break; } @@ -966,12 +976,7 @@ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter); - file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd); - meta_data_connect_mark_with_keyword(keyword_tree, &kw_iter, mark); - - file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW); -// bar_pane_keywords_update(pkd); }