prefs_common.display_folder_unread) {
if (item->unread > 0)
- str = g_strdup_printf("%s (%d%s)", name, item->unread,
- add_unread_mark ? "+" : "");
+ str = g_strdup_printf("%s (%d%s%s)", name, item->unread,
+ add_unread_mark ? "+" : "",
+ item->unreadmarked > 0 ? "!":"");
else
str = g_strdup_printf("%s (+)", name);
gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
xpm, mask, openxpm, openmask,
FALSE, GTK_CTREE_ROW(node)->expanded);
g_free(str);
- } else
- gtk_ctree_set_node_info(ctree, node, name, FOLDER_SPACING,
+ } else {
+ str = g_strdup_printf("%s%s", name,
+ item->unreadmarked > 0 ? " (!)":"");
+
+ gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
xpm, mask, openxpm, openmask,
FALSE, GTK_CTREE_ROW(node)->expanded);
+ g_free(str);
+ }
g_free(name);
if (!item->parent) {
use_color =
(item->new > 0) ||
(add_unread_mark &&
- folderview_have_new_children(folderview, node));
+ folderview_have_new_children(folderview, node));
}
gtk_ctree_node_set_foreground(ctree, node, NULL);
#endif
}
+static void folderview_recollapse_nodes(FolderView *folderview, GtkCTreeNode *node)
+{
+ GSList *list = NULL;
+ GSList *done = NULL;
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ for (list = folderview->nodes_to_recollapse; list != NULL; list = g_slist_next(list)) {
+ if (!gtkut_ctree_node_is_parent(GTK_CTREE_NODE(list->data), node)
+ && list->data != node) {
+ gtk_ctree_collapse(ctree, GTK_CTREE_NODE(list->data));
+ done = g_slist_append(done, GTK_CTREE_NODE(list->data));
+ }
+ }
+ for (list = done; list != NULL; list = g_slist_next(list)) {
+ folderview->nodes_to_recollapse = g_slist_remove(folderview->nodes_to_recollapse,
+ list->data);
+ }
+ g_slist_free(done);
+}
+
static gboolean folderview_drag_motion_cb(GtkWidget *widget,
GdkDragContext *context,
gint x,
}
+ if (acceptable || (src_item && src_item == item)) {
+ folderview_recollapse_nodes(folderview, node);
+ if (item->collapsed) {
+ gtk_ctree_expand(GTK_CTREE(widget), node);
+ folderview->nodes_to_recollapse = g_slist_append(
+ folderview->nodes_to_recollapse,
+ node);
+ }
+ }
+
if (acceptable) {
gtk_signal_handler_block_by_func
(GTK_OBJECT(widget),
}
node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
- src_item = folder_find_item_from_path(source);
+ src_item = folder_find_item_from_identifier(source);
- if (!src_item || src_item->stype != F_NORMAL) {
+ if (!item || !src_item || src_item->stype != F_NORMAL) {
gtk_drag_finish(drag_context, FALSE, FALSE, time);
return;
}
inc_unlock();
gtk_widget_set_sensitive(folderview->ctree, TRUE);
}
+ folderview->nodes_to_recollapse = NULL;
}
static gint folderview_clist_compare(GtkCList *clist,
list = gtk_target_list_new(folderview_drag_types, 1);
+ folderview->nodes_to_recollapse = NULL; /* in case the last drag has been cancelled */
+
context = gtk_drag_begin(widget, list,
GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event);
gtk_drag_set_icon_default(context);
(GTK_CTREE(folderview->ctree),
GTK_CTREE_NODE(cur->data));
if (item) {
- source = g_strdup_printf ("FROM_OTHER_FOLDER%s", item->path);
+ source = g_strdup_printf ("FROM_OTHER_FOLDER%s", folder_item_get_identifier(item));
gtk_selection_data_set(selection_data,
selection_data->target, 8,
source, strlen(source));