FolderItem *sel_item = NULL, *op_item = NULL;
GtkWidget *scrolledwin = folderview->scrolledwin;
+ if (folderview->drag_timer_id != 0) {
+ g_source_remove(folderview->drag_timer_id);
+ folderview->drag_timer_id = 0;
+ }
+ if (folderview->deferred_refresh_id != 0) {
+ g_source_remove(folderview->deferred_refresh_id);
+ folderview->deferred_refresh_id = 0;
+ }
+ if (folderview->scroll_timeout_id != 0) {
+ g_source_remove(folderview->scroll_timeout_id);
+ folderview->scroll_timeout_id = 0;
+ }
+ if (folderview->postpone_select_id != 0) {
+ g_source_remove(folderview->postpone_select_id);
+ folderview->postpone_select_id = 0;
+ }
+
if (folderview->selected)
sel_item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(ctree), folderview->selected);
if (folderview->opened)
folderview->target_list = gtk_target_list_new(folderview_drag_types, 2);
folderview_list = g_list_append(folderview_list, folderview);
- folderview->deferred_refresh_id = -1;
- folderview->scroll_timeout_id = -1;
+
+ folderview->drag_timer_id = 0;
+ folderview->deferred_refresh_id = 0;
+ folderview->scroll_timeout_id = 0;
+ folderview->postpone_select_id = 0;
+
return folderview;
}
{
GtkWidget *ctree = folderview->ctree;
GdkColor gdk_color;
+ PangoFontDescription *normal_font;
stock_pixbuf_gdk(ctree, STOCK_PIXMAP_INBOX_CLOSE, &inboxxpm);
stock_pixbuf_gdk(ctree, STOCK_PIXMAP_INBOX_CLOSE_HRM, &inboxhrmxpm);
stock_pixbuf_gdk(ctree, STOCK_PIXMAP_QUEUE_OPEN_HRM_MARK, &m_queueopenhrmxpm);
stock_pixbuf_gdk(ctree, STOCK_PIXMAP_DRAFTS_CLOSE_MARK, &m_draftsxpm);
stock_pixbuf_gdk(ctree, STOCK_PIXMAP_DRAFTS_OPEN_MARK, &m_draftsopenxpm);
-
+
+ normal_font = pango_font_description_from_string(NORMAL_FONT);
+ if (normal_font) {
+ gtk_widget_modify_font(ctree, normal_font);
+ pango_font_description_free(normal_font);
+ }
+ gtk_cmclist_set_row_height(GTK_CMCLIST(ctree), 0);
+
if (!normal_style) {
PangoFontDescription *font_desc;
normal_style = gtk_style_copy(gtk_widget_get_style(ctree));
gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
normal_color_style = gtk_style_copy(normal_style);
normal_color_style->fg[GTK_STATE_NORMAL] = gdk_color;
-
- gtk_widget_set_style(ctree, normal_style);
}
if (!bold_style) {
gtkut_convert_int_to_gdk_color(prefs_common.color_new, &gdk_color);
bold_style = gtk_style_copy(gtk_widget_get_style(ctree));
if (prefs_common.derive_from_normal_font || !BOLD_FONT) {
+ PangoFontDescription *font_desc;
+ font_desc = pango_font_description_from_string(NORMAL_FONT);
+ if (font_desc) {
+ pango_font_description_free(bold_style->font_desc);
+ bold_style->font_desc = font_desc;
+ }
pango_font_description_set_weight
(bold_style->font_desc, PANGO_WEIGHT_BOLD);
} else {
debug_print("doing deferred folderview_set now\n");
folderview_set(folderview);
- folderview->deferred_refresh_id = -1;
+ folderview->deferred_refresh_id = 0;
return FALSE;
}
return;
if (mainwin->lock_count) {
- if (folderview->deferred_refresh_id == -1)
+ if (folderview->deferred_refresh_id == 0)
folderview->deferred_refresh_id =
g_timeout_add(500, folderview_defer_set, folderview);
debug_print("deferred folderview_set\n");
folderview->selected = folderview->opened = NULL;
}
-static GtkCMCTreeNode *folderview_find_next_marked(GtkCMCTree *ctree,
- GtkCMCTreeNode *node)
+static GtkCMCTreeNode *folderview_find_next_with_flag(GtkCMCTree *ctree,
+ GtkCMCTreeNode *node,
+ MsgPermFlags flag)
{
FolderItem *item;
for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
item = gtk_cmctree_node_get_row_data(ctree, node);
- if (item && item->marked_msgs > 0 && item->stype != F_TRASH)
- return node;
+ if (!item)
+ continue;
+ if (item->stype == F_TRASH || item->stype == F_DRAFT)
+ continue;
+ switch (flag) {
+ case MSG_UNREAD:
+ if(item->unread_msgs > 0)
+ return node;
+ break;
+ case MSG_NEW:
+ if(item->new_msgs > 0)
+ return node;
+ break;
+ case MSG_MARKED:
+ if(item->marked_msgs > 0)
+ return node;
+ break;
+ }
}
return NULL;
}
-void folderview_select_next_marked(FolderView *folderview)
+void folderview_select_next_with_flag(FolderView *folderview,
+ MsgPermFlags flag,
+ gboolean force_open)
{
GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
GtkCMCTreeNode *node = NULL;
EntryAction last_summary_select_prio = prefs_common.summary_select_prio[0];
gboolean last_open = prefs_common.always_show_msg;
- prefs_common.summary_select_prio[0] = ACTION_MARKED;
- prefs_common.always_show_msg = OPENMSG_ALWAYS;
-
- if ((node = folderview_find_next_marked(ctree, folderview->opened))
- != NULL) {
- folderview_select_node(folderview, node);
- goto out;
- }
-
- if (!folderview->opened ||
- folderview->opened == GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list)) {
- goto out;
- }
- /* search again from the first node */
- if ((node = folderview_find_next_marked(ctree, NULL)) != NULL)
- folderview_select_node(folderview, node);
-
-out:
- prefs_common.summary_select_prio[0] = last_summary_select_prio;
- prefs_common.always_show_msg = last_open;
-}
-
-static GtkCMCTreeNode *folderview_find_next_unread(GtkCMCTree *ctree,
- GtkCMCTreeNode *node)
-{
- FolderItem *item;
-
- if (node)
- node = gtkut_ctree_node_next(ctree, node);
- else
- node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
-
- for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
- item = gtk_cmctree_node_get_row_data(ctree, node);
- if (item && item->unread_msgs > 0 && item->stype != F_TRASH)
- return node;
+ switch (flag) {
+ case MSG_UNREAD:
+ prefs_common.summary_select_prio[0] = ACTION_UNREAD;
+ break;
+ case MSG_NEW:
+ prefs_common.summary_select_prio[0] = ACTION_NEW;
+ break;
+ case MSG_MARKED:
+ prefs_common.summary_select_prio[0] = ACTION_MARKED;
+ break;
}
-
- return NULL;
-}
-
-void folderview_select_next_unread(FolderView *folderview, gboolean force_open)
-{
- GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
- GtkCMCTreeNode *node = NULL;
- EntryAction last_summary_select_prio = prefs_common.summary_select_prio[0];
- gboolean last_open = prefs_common.always_show_msg;
-
- prefs_common.summary_select_prio[0] = ACTION_UNREAD;
prefs_common.always_show_msg = force_open ? OPENMSG_ALWAYS : last_open;
- if ((node = folderview_find_next_unread(ctree, folderview->opened))
- != NULL) {
+ node = folderview_find_next_with_flag(ctree, folderview->opened, flag);
+ if (node != NULL) {
folderview_select_node(folderview, node);
goto out;
}
folderview->opened == GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list)) {
goto out;
}
- /* search again from the first node */
- if ((node = folderview_find_next_unread(ctree, NULL)) != NULL)
- folderview_select_node(folderview, node);
-
-out:
- prefs_common.summary_select_prio[0] = last_summary_select_prio;
- prefs_common.always_show_msg = last_open;
-}
-
-static GtkCMCTreeNode *folderview_find_next_new(GtkCMCTree *ctree,
- GtkCMCTreeNode *node)
-{
- FolderItem *item;
-
- if (node)
- node = gtkut_ctree_node_next(ctree, node);
- else
- node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
-
- for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
- item = gtk_cmctree_node_get_row_data(ctree, node);
- if (item && item->new_msgs > 0 && item->stype != F_TRASH)
- return node;
- }
-
- return NULL;
-}
-
-void folderview_select_next_new(FolderView *folderview)
-{
- GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
- GtkCMCTreeNode *node = NULL;
- EntryAction last_summary_select_prio = prefs_common.summary_select_prio[0];
- gboolean last_open = prefs_common.always_show_msg;
-
- prefs_common.summary_select_prio[0] = ACTION_NEW;
- prefs_common.always_show_msg = OPENMSG_ALWAYS;
-
- if ((node = folderview_find_next_new(ctree, folderview->opened))
- != NULL) {
- folderview_select_node(folderview, node);
- goto out;
- }
- if (!folderview->opened ||
- folderview->opened == GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list)) {
- goto out;
- }
/* search again from the first node */
- if ((node = folderview_find_next_new(ctree, NULL)) != NULL)
+ node = folderview_find_next_with_flag(ctree, NULL, flag);
+ if (node != NULL)
folderview_select_node(folderview, node);
out:
inc_unlock();
}
-void folderview_fast_rescan_tree(Folder *folder)
-{
- GtkWidget *window;
- MainWindow *mainwin = mainwindow_get_mainwindow();
- FolderView *folderview = NULL;
- GtkAdjustment *pos = NULL;
- gint height = 0;
-
- cm_return_if_fail(folder != NULL);
-
- if (!folder->klass->scan_tree) return;
-
- inc_lock();
-
- window = label_window_create(_("Scanning folder tree..."));
-
- if (mainwin)
- folderview = mainwin->folderview;
-
- if (folderview) {
- pos = gtk_scrolled_window_get_vadjustment(
- GTK_SCROLLED_WINDOW(folderview->scrolledwin));
- height = gtk_adjustment_get_value(pos);
- }
-
- folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
- folder_fast_scan_tree(folder);
- folder_set_ui_func(folder, NULL, NULL);
-
- folderview_set_all();
-
- if (folderview) {
- pos = gtk_scrolled_window_get_vadjustment(
- GTK_SCROLLED_WINDOW(folderview->scrolledwin));
- gtk_adjustment_set_value(pos, height);
- gtk_adjustment_changed(pos);
- }
- label_window_destroy(window);
- inc_unlock();
-}
-
/** folderview_check_new()
* Scan and update the folder and return the
* count the number of new messages since last check.
break;
}
}
- } else if (folder_has_parent_of_type(item, F_DRAFT)) {
- use_bold = use_color = item->total_msgs > 0 ||
- (!GTK_CMCTREE_ROW(node)->expanded &&
- folderview_have_children(folderview, item));
+ if (!GTK_CMCTREE_ROW(node)->expanded &&
+ use_bold == FALSE &&
+ folderview_have_children(folderview, item))
+ use_bold = use_color = TRUE;
+ procmsg_msg_list_free(list);
} else {
/* if unread messages exist, print with bold font */
use_bold = (item->unread_msgs > 0|| item->new_msgs > 0)
tmp = gtk_cmctree_node_get_row_data
(ctree, sibling);
- if (tmp->stype != F_NORMAL)
+ if (tmp && tmp->stype != F_NORMAL)
sibling = GTK_CMCTREE_ROW(sibling)->sibling;
else
break;
if (folderview->opened == folderview->selected &&
(!folderview->summaryview->folder_item ||
folderview->summaryview->folder_item->total_msgs == 0))
- folderview_select_next_unread(folderview, TRUE);
+ folderview_select_next_with_flag(folderview, MSG_UNREAD, TRUE);
else
folderview_select_node(folderview,
folderview->selected);
{
PostponedSelectData *psdata = (PostponedSelectData *)data;
debug_print("trying again\n");
+
+ psdata->folderview->postpone_select_id = 0;
psdata->folderview->open_folder = TRUE;
main_window_cursor_normal(psdata->folderview->mainwin);
STATUSBAR_POP(psdata->folderview->mainwin);
item->path ? item->path:item->name);
folderview->open_folder = FALSE;
can_select = TRUE;
- g_timeout_add(500, postpone_select, data);
+ if (folderview->postpone_select_id != 0)
+ g_source_remove(folderview->postpone_select_id);
+ folderview->postpone_select_id = g_timeout_add(500, postpone_select, data);
END_TIMING();
return;
}
static void drag_state_stop(FolderView *folderview)
{
- if (folderview->drag_timer)
- g_source_remove(folderview->drag_timer);
- folderview->drag_timer = 0;
+ if (folderview->drag_timer_id)
+ g_source_remove(folderview->drag_timer_id);
+ folderview->drag_timer_id = 0;
folderview->drag_node = NULL;
}
}
}
folderview->drag_item = NULL;
- folderview->drag_timer = 0;
+ folderview->drag_timer_id = 0;
return FALSE;
}
* we need to call drag_state_stop() */
drag_state_stop(folderview);
/* request expansion */
- if (0 != (folderview->drag_timer = g_timeout_add
+ if (0 != (folderview->drag_timer_id = g_timeout_add
(prefs_common.hover_timeout,
(GSourceFunc)folderview_defer_expand,
folderview))) {
FolderView *folderview)
{
FolderItem *item;
- GList *cur;
+ GList *sel;
gchar *source = NULL;
if (info == TARGET_DUMMY) {
- for (cur = GTK_CMCLIST(folderview->ctree)->selection;
- cur != NULL; cur = cur->next) {
- item = gtk_cmctree_node_get_row_data
- (GTK_CMCTREE(folderview->ctree),
- GTK_CMCTREE_NODE(cur->data));
- if (item) {
- source = g_strdup_printf ("FROM_OTHER_FOLDER%s", folder_item_get_identifier(item));
- gtk_selection_data_set(selection_data,
- gtk_selection_data_get_target(selection_data), 8,
- source, strlen(source));
- break;
- } else
- return;
+ sel = GTK_CMCLIST(folderview->ctree)->selection;
+ if (!sel)
+ return;
+
+ item = gtk_cmctree_node_get_row_data
+ (GTK_CMCTREE(folderview->ctree),
+ GTK_CMCTREE_NODE(sel->data));
+ if (item) {
+ source = g_strdup_printf ("FROM_OTHER_FOLDER%s", folder_item_get_identifier(item));
+ gtk_selection_data_set(selection_data,
+ gtk_selection_data_get_target(selection_data), 8,
+ source, strlen(source));
}
} else {
g_warning("unknown info %d\n", info);
if (folderview->opened == node)
folderview->opened = NULL;
}
+ } else if (hookdata->update_flags & FOLDER_MOVE_FOLDERITEM) {
+ /* do nothing, it's done by the ADD and REMOVE) */
} else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDER | FOLDER_REMOVE_FOLDER))
folderview_set(folderview);
(int)gtk_adjustment_get_page_size(pos);
if (folderview->scroll_value == 0) {
- folderview->scroll_timeout_id = -1;
+ folderview->scroll_timeout_id = 0;
return FALSE;
}
} else {
folderview->scroll_value = 0;
}
- if (folderview->scroll_value != 0 && folderview->scroll_timeout_id == -1) {
+ if (folderview->scroll_value != 0 && folderview->scroll_timeout_id == 0) {
folderview->scroll_timeout_id =
g_timeout_add(30, folderview_dnd_scroll_cb,
folderview);