Group :: Graphics
RPM: geeqie
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: geeqie-1.1-bar_keywords.c.diff
Download
Download
--- 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);
}