gboolean collapse_unchecked;
gboolean hide_unchecked;
- guint idle_id; /* event source id */
+ guint idle_id; /* event source id */
FileData *fd;
gchar *key;
};
gboolean edit_existing;
};
-//static GList *bar_list = NULL;
-
static void bar_pane_keywords_write(PaneKeywordsData *pkd)
{
if (pkd->collapse_unchecked) gtk_tree_model_foreach(model, bar_keyword_tree_collapse_if_unset_cb, pkd);
}
-#if 0
-static void bar_pane_keywords_keyword_update_all(void)
-{
- GList *work;
-
- work = bar_list;
- while (work)
- {
- PaneKeywordsData *pkd;
-// GList *keywords;
-
- pkd = work->data;
- work = work->next;
-
- bar_keyword_tree_sync(pkd);
- }
-}
-#endif
-
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);
- 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);
+ 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);
+ 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)
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;
}
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter);
list = keyword_list_pull(pkd->keyword_view);
- if (active)
+ if (active)
keyword_tree_set(keyword_tree, &child_iter, &list);
else
keyword_tree_reset(keyword_tree, &child_iter, &list);
/* call this just once in the end */
bar_pane_keywords_changed(keyword_buffer, pkd);
- /*
- bar_pane_keywords_change calls bar_keyword_tree_sync, no need to do it again
- bar_keyword_tree_sync(pkd);
- */
}
void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GValue *value, gint column, gpointer data)
static void bar_pane_keywords_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
PaneKeywordsData *pkd = data;
- if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd)
+ if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd)
{
DEBUG_1("Notify pane_keywords: %s %04x", fd->path, type);
bar_pane_keywords_update(pkd);
{
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;
}
GtkTreeIter child_iter;
GtkTreeModel *keyword_tree;
- GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
+ GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
if (!gtk_tree_selection_get_selected(sel, &model, &iter)) return;
GtkTreeModel *keyword_tree;
gchar *name;
- GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
+ GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
if (!gtk_tree_selection_get_selected(sel, &model, &iter)) return;
gchar *src_name;
GtkTreeIter parent;
- if (dest_kw_iter && keyword_same_parent(keyword_tree, src_kw_iter, dest_kw_iter))
+ if (dest_kw_iter && keyword_same_parent(keyword_tree, src_kw_iter, dest_kw_iter))
{
return TRUE; /* reordering of siblings is ok */
}
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);
}
}
-static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
-{
+static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
PaneKeywordsData *pkd = data;
if (bevent->button == MOUSE_BUTTON_RIGHT)
{
return TRUE;
}
return FALSE;
-}
+}
/*
*-------------------------------------------------------------------
g_signal_connect(G_OBJECT(pkd->keyword_treeview), "drag_motion",
G_CALLBACK(bar_pane_keywords_dnd_motion), pkd);
- g_signal_connect(G_OBJECT(pkd->keyword_treeview), "button_release_event",
+ g_signal_connect(G_OBJECT(pkd->keyword_treeview), "button_release_event",
G_CALLBACK(bar_pane_keywords_menu_cb), pkd);
gtk_container_add(GTK_CONTAINER(scrolled), pkd->keyword_treeview);