commit - d21031672beefdc05b76615346512c06d6cc62be
commit + b2d8e263d1424145d8bdf97ebca2c1d7b5f479ba
blob - ff8056081e163f6a672f4900d0f8b677bb65f741
blob + dd13ca8a62375d6936e8e8426d8aebbf6b4e6736
--- src/folderview.c
+++ src/folderview.c
static void folderview_property_cb (GtkAction *action,
gpointer data);
-static gboolean folderview_drag_motion_cb(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- FolderView *folderview);
-static void folderview_drag_leave_cb (GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- FolderView *folderview);
-static void folderview_drag_received_cb (GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- FolderView *folderview);
-static void folderview_start_drag (GtkWidget *widget, gint button, GdkEvent *event,
- FolderView *folderview);
-static void folderview_drag_data_get (GtkWidget *widget,
- GdkDragContext *drag_context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- FolderView *folderview);
-static void folderview_drag_end_cb (GtkWidget *widget,
- GdkDragContext *drag_context,
- FolderView *folderview);
-
static void folderview_create_folder_node (FolderView *folderview,
FolderItem *item);
static gboolean folderview_update_folder (gpointer source,
{"FolderViewHeaderPopup/SetDisplayedColumns", NULL, N_("Set Displayed columns"), NULL, NULL, G_CALLBACK(folderview_header_set_displayed_columns_cb) }
};
-GtkTargetEntry folderview_drag_types[] =
-{
- {"claws-mail/internal", GTK_TARGET_SAME_APP, TARGET_DUMMY},
- {"text/uri-list", 0, TARGET_MAIL_URI_LIST}
-};
-
void folderview_initialize(void)
{
FolderViewPopup *fpopup;
folderview);
g_signal_connect(G_OBJECT(ctree), "tree_select_row",
G_CALLBACK(folderview_selected), folderview);
- g_signal_connect(G_OBJECT(ctree), "start_drag",
- G_CALLBACK(folderview_start_drag), folderview);
- g_signal_connect(G_OBJECT(ctree), "drag_data_get",
- G_CALLBACK(folderview_drag_data_get),
- folderview);
g_signal_connect_after(G_OBJECT(ctree), "tree_expand",
G_CALLBACK(folderview_tree_expanded),
G_CALLBACK(folderview_col_resized),
folderview);
- /* drop callback */
- gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL & ~GTK_DEST_DEFAULT_HIGHLIGHT,
- folderview_drag_types, 2,
- GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_DEFAULT);
- g_signal_connect(G_OBJECT(ctree), "drag_motion",
- G_CALLBACK(folderview_drag_motion_cb),
- folderview);
- g_signal_connect(G_OBJECT(ctree), "drag_leave",
- G_CALLBACK(folderview_drag_leave_cb),
- folderview);
- g_signal_connect(G_OBJECT(ctree), "drag_data_received",
- G_CALLBACK(folderview_drag_received_cb),
- folderview);
- g_signal_connect(G_OBJECT(ctree), "drag_end",
- G_CALLBACK(folderview_drag_end_cb),
- folderview);
-
gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
return ctree;
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 = folderview_get_selected_item(folderview);
if (folderview->opened)
gtk_widget_show_all(scrolledwin);
- folderview->target_list = gtk_target_list_new(folderview_drag_types, 2);
folderview_list = g_list_append(folderview_list, folderview);
-
- folderview->drag_timer_id = 0;
- folderview->deferred_refresh_id = 0;
- folderview->scroll_timeout_id = 0;
- folderview->postpone_select_id = 0;
-
return folderview;
}
GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
GtkStyle *style = NULL, *prev_style;
FolderItem *item;
- GdkRGBA black = { 0, 0, 0, 1 };
GdkPixbuf *xpm, *openxpm;
static GdkPixbuf *searchicon;
gboolean mark = FALSE;
prefs_folder_item_open(item);
}
-static void folderview_recollapse_nodes(FolderView *folderview, GtkCMCTreeNode *node)
-{
- GSList *list = NULL;
- GSList *done = NULL;
- GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
-
- for (list = folderview->nodes_to_recollapse; list != NULL; list = g_slist_next(list)) {
- if (!gtkut_ctree_node_is_parent(GTK_CMCTREE_NODE(list->data), node)
- && list->data != node) {
- gtk_cmctree_collapse(ctree, GTK_CMCTREE_NODE(list->data));
- done = g_slist_append(done, GTK_CMCTREE_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);
-}
-
void folderview_move_folder(FolderView *folderview, FolderItem *from_folder,
FolderItem *to_folder, gboolean copy)
{
return g_utf8_collate(item1->name, item2->name);
}
-static void drag_state_stop(FolderView *folderview)
-{
- if (folderview->drag_timer_id)
- g_source_remove(folderview->drag_timer_id);
- folderview->drag_timer_id = 0;
- folderview->drag_node = NULL;
-}
-
-static gboolean folderview_defer_expand(FolderView *folderview)
-{
- if (folderview->drag_node) {
- folderview_recollapse_nodes(folderview, folderview->drag_node);
- if (folderview->drag_item->collapsed) {
- gtk_cmctree_expand(GTK_CMCTREE(folderview->ctree), folderview->drag_node);
- folderview->nodes_to_recollapse = g_slist_append
- (folderview->nodes_to_recollapse, folderview->drag_node);
- }
- }
- folderview->drag_item = NULL;
- folderview->drag_timer_id = 0;
- return FALSE;
-}
-
-static void drag_state_start(FolderView *folderview, GtkCMCTreeNode *node, FolderItem *item)
-{
- /* the idea is that we call drag_state_start() whenever we want expansion to
- * start after 'prefs_common.hover_time' msecs. if we want to cancel expansion,
- * we need to call drag_state_stop() */
- drag_state_stop(folderview);
- /* request expansion */
- if (0 != (folderview->drag_timer_id = g_timeout_add
- (prefs_common.hover_timeout,
- (GSourceFunc)folderview_defer_expand,
- folderview))) {
- folderview->drag_node = node;
- folderview->drag_item = item;
- }
-}
-
-static void folderview_start_drag(GtkWidget *widget, gint button, GdkEvent *event,
- FolderView *folderview)
-{
- GdkDragContext *context;
-
- cm_return_if_fail(folderview != NULL);
- if (folderview->selected == NULL) return;
- if (folderview->nodes_to_recollapse)
- g_slist_free(folderview->nodes_to_recollapse);
- folderview->nodes_to_recollapse = NULL;
- context = gtk_drag_begin_with_coordinates(widget, folderview->target_list,
- GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event,
- -1, -1);
- gtk_drag_set_icon_default(context);
-}
-
-static void folderview_drag_data_get(GtkWidget *widget,
- GdkDragContext *drag_context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- FolderView *folderview)
-{
- FolderItem *item;
- GList *sel;
- if (info == TARGET_DUMMY) {
- 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) {
- gchar *source = NULL;
- gchar *name = folder_item_get_identifier(item);
- source = g_strdup_printf ("FROM_OTHER_FOLDER%s", name);
- g_free(name);
- gtk_selection_data_set(selection_data,
- gtk_selection_data_get_target(selection_data), 8,
- source, strlen(source));
- }
- } else {
- g_warning("unknown info %d", info);
- }
-}
-
static gboolean folderview_update_folder(gpointer source, gpointer userdata)
{
FolderUpdateData *hookdata;
return TRUE;
}
-static gboolean folderview_drag_motion_cb(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- FolderView *folderview)
-{
- gint row, column;
- FolderItem *item = NULL, *src_item = NULL;
- GtkCMCTreeNode *node = NULL;
- gboolean acceptable = FALSE;
- GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
- GTK_SCROLLED_WINDOW(folderview->scrolledwin));
- int height = (int)gtk_adjustment_get_page_size(pos);
- int total_height = (int)gtk_adjustment_get_upper(pos);
- int vpos = (int)gtk_adjustment_get_value(pos);
- int offset = prefs_common.show_col_headers ? 24:0;
- int dist;
+static void free_info(gpointer stuff, gpointer data) { g_free(stuff); }
- if (gtk_cmclist_get_selection_info
- (GTK_CMCLIST(widget), x - offset, y - offset, &row, &column)) {
- GtkWidget *srcwidget;
-
- if (y > height - (48 - offset) && height + vpos < total_height) {
- dist = -(height - (48 - offset) - y);
- folderview->scroll_value = 1.41f * (1+(dist / 6));
- } else if (y < 72 - (24 - offset) && y >= 0) {
- dist = 72 - (24 - offset) - y;
- folderview->scroll_value = -1.41f * (1+(dist / 6));
- } else {
- folderview->scroll_value = 0;
- }
- if (folderview->scroll_value != 0 && folderview->scroll_timeout_id == 0) {
- folderview->scroll_timeout_id =
- g_timeout_add(30, folderview_dnd_scroll_cb,
- folderview);
- }
-
- node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
- item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
- src_item = folderview->summaryview->folder_item;
-
- srcwidget = gtk_drag_get_source_widget(context);
- if (srcwidget == summary_get_main_widget(folderview->summaryview)) {
- /* comes from summaryview */
- /* we are copying messages, so only accept folder items that are not
- the source item, are no root items and can copy messages */
- if (item && item->folder && folder_item_parent(item) != NULL && src_item &&
- src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL &&
- FOLDER_TYPE(item->folder) != F_UNKNOWN)
- acceptable = TRUE;
- } else if (srcwidget == folderview->ctree) {
- /* comes from folderview */
- /* we are moving folder items, only accept folders that are not
- the source items and can copy messages and create folder items */
- if (item && item->folder && src_item && src_item != item &&
- FOLDER_CLASS(item->folder)->copy_msg != NULL &&
- FOLDER_CLASS(item->folder)->create_folder != NULL &&
- ((FOLDER_TYPE(item->folder) != F_UNKNOWN && FOLDER_TYPE(src_item->folder) != F_UNKNOWN)
- || item->folder == src_item->folder))
- acceptable = TRUE;
- } else {
- /* comes from another app */
- /* we are adding messages, so only accept folder items that are
- no root items and can copy messages */
- if (item && item->folder && folder_item_parent(item) != NULL
- && FOLDER_CLASS(item->folder)->add_msg != NULL &&
- FOLDER_TYPE(item->folder) != F_UNKNOWN)
- acceptable = TRUE;
- }
- }
-
- if (acceptable || (src_item && src_item == item))
- drag_state_start(folderview, node, item);
-
- if (acceptable) {
- g_signal_handlers_block_by_func
- (G_OBJECT(widget),
- G_CALLBACK(folderview_selected), folderview);
- gtk_cmctree_select(GTK_CMCTREE(widget), node);
- g_signal_handlers_unblock_by_func
- (G_OBJECT(widget),
- G_CALLBACK(folderview_selected), folderview);
- gdk_drag_status(context,
- (gdk_drag_context_get_actions(context) == GDK_ACTION_COPY ?
- GDK_ACTION_COPY : GDK_ACTION_MOVE) , time);
- } else {
- if (folderview->opened)
- gtk_cmctree_select(GTK_CMCTREE(widget), folderview->opened);
- gdk_drag_status(context, 0, time);
- }
-
- return acceptable;
-}
-
-static void folderview_drag_leave_cb(GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- FolderView *folderview)
-{
- drag_state_stop(folderview);
- folderview->scroll_value = 0;
- gtk_cmctree_select(GTK_CMCTREE(widget), folderview->opened);
-}
-
-static void free_info (gpointer stuff, gpointer data)
-{
- g_free(stuff);
-}
-
-void folderview_finish_dnd(const gchar *data, GdkDragContext *drag_context,
- guint time, FolderItem *item)
-{
- GList *list, *tmp;
- GSList *msglist = NULL;
- list = uri_list_extract_filenames(data);
- if (!(item && item->folder && folder_item_parent(item) != NULL
- && FOLDER_CLASS(item->folder)->add_msg != NULL))
- {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- debug_print("item doesn't fit\n");
- return;
- }
- if (!list) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- debug_print("list is empty\n");
- return;
- }
- for (tmp = list; tmp != NULL; tmp = tmp->next) {
- MsgFileInfo *info = NULL;
-
- if (file_is_email((gchar *)tmp->data)) {
- info = g_new0(MsgFileInfo, 1);
- info->msginfo = NULL;
- info->file = (gchar *)tmp->data;
- msglist = g_slist_prepend(msglist, info);
- debug_print("file is a mail\n");
- } else {
- debug_print("file isn't a mail\n");
- }
- }
- if (msglist) {
- msglist = g_slist_reverse(msglist);
- folder_item_add_msgs(item, msglist, FALSE);
- g_slist_foreach(msglist, free_info, NULL);
- g_slist_free(msglist);
- gtk_drag_finish(drag_context, TRUE, FALSE, time);
- } else {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- }
- list_free_strings_full(list);
-}
-
-static void folderview_drag_received_cb(GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- FolderView *folderview)
-{
- gint row, column;
- FolderItem *item = NULL, *src_item;
- GtkCMCTreeNode *node;
- int offset = prefs_common.show_col_headers ? 24:0;
-
- folderview->scroll_value = 0;
-
- if (info == TARGET_DUMMY) {
- drag_state_stop(folderview);
- const gchar *ddata = (const gchar *)gtk_selection_data_get_data(data);
- if ((gchar *)strstr(ddata, "FROM_OTHER_FOLDER") != ddata) {
- /* comes from summaryview */
- if (gtk_cmclist_get_selection_info
- (GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0)
- return;
-
- node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
- item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
- src_item = folderview->summaryview->folder_item;
-
- if (item && item->no_select) {
- alertpanel_error(_("The destination folder can only be used to "
- "store subfolders."));
- return;
- }
- /* re-check (due to acceptable possibly set for folder moves */
- if (!(item && item->folder && item->path && !item->no_select &&
- src_item && src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL)) {
- return;
- }
-
- switch (gdk_drag_context_get_selected_action(drag_context)) {
- case GDK_ACTION_COPY:
- summary_copy_selected_to(folderview->summaryview, item);
- gtk_drag_finish(drag_context, TRUE, FALSE, time);
- break;
- case GDK_ACTION_MOVE:
- case GDK_ACTION_DEFAULT:
- default:
- if (FOLDER_CLASS(src_item->folder)->remove_msg == NULL)
- summary_copy_selected_to(folderview->summaryview, item);
- else
- summary_move_selected_to(folderview->summaryview, item);
- gtk_drag_finish(drag_context, TRUE, TRUE, time);
- }
- } else {
- /* comes from folderview */
- char *source;
- gboolean folder_is_normal = TRUE;
- gboolean copy = (GDK_ACTION_COPY ==
- gdk_drag_context_get_selected_action(drag_context));
-
- source = (char *)gtk_selection_data_get_data(data) + 17;
- if (gtk_cmclist_get_selection_info
- (GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0
- || *source == 0) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- return;
- }
- node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
- item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
- src_item = folder_find_item_from_identifier(source);
-
- folder_is_normal =
- src_item != NULL &&
- src_item->stype == F_NORMAL &&
- !folder_has_parent_of_type(src_item, F_OUTBOX) &&
- !folder_has_parent_of_type(src_item, F_DRAFT) &&
- !folder_has_parent_of_type(src_item, F_QUEUE) &&
- !folder_has_parent_of_type(src_item, F_TRASH);
- if (!item || !src_item || !folder_is_normal) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- return;
- }
-
- folderview_move_folder(folderview, src_item, item, copy);
- gtk_drag_finish(drag_context, TRUE, TRUE, time);
- }
- folderview->nodes_to_recollapse = NULL;
- } else if (info == TARGET_MAIL_URI_LIST) {
- if (gtk_cmclist_get_selection_info
- (GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0)
- return;
-
- node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
- if (!node) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- debug_print("no node\n");
- return;
- }
- item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
- if (!item) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- debug_print("no item\n");
- return;
- }
- folderview_finish_dnd(gtk_selection_data_get_data(data),
- drag_context, time, item);
- }
-}
-
-static void folderview_drag_end_cb(GtkWidget *widget,
- GdkDragContext *drag_context,
- FolderView *folderview)
-{
- drag_state_stop(folderview);
- folderview->scroll_value = 0;
- g_slist_free(folderview->nodes_to_recollapse);
- folderview->nodes_to_recollapse = NULL;
-}
-
-void folderview_register_popup(FolderViewPopup *fpopup)
-{
- GList *folderviews;
-
- for (folderviews = folderview_list; folderviews != NULL; folderviews = g_list_next(folderviews)) {
- FolderView *folderview = folderviews->data;
- GtkActionGroup *factory;
-
- factory = create_action_group(folderview, fpopup);
- g_hash_table_insert(folderview->popups, fpopup->klass, factory);
- }
- g_hash_table_insert(folderview_popups, fpopup->klass, fpopup);
-}
-
void folderview_unregister_popup(FolderViewPopup *fpopup)
{
GList *folderviews;
blob - f53c22b56556b0d7b3dcbd0b530677d25ece941d
blob + d446bd45917e9d7f1b6dc93e85398a5069fda99d
--- src/folderview.h
+++ src/folderview.h
gint folder_update_callback_id;
gint folder_item_update_callback_id;
- /* DND states */
- GSList *nodes_to_recollapse;
- guint drag_timer_id; /* timer id */
- FolderItem *drag_item; /* dragged item */
- GtkCMCTreeNode *drag_node; /* drag node */
-
GtkTargetList *target_list; /* DnD */
FolderColumnState col_state[N_FOLDER_COLS];
gint col_pos[N_FOLDER_COLS];
FolderItem *to_folder,
gboolean copy);
-void folderview_register_popup (FolderViewPopup *fpopup);
void folderview_unregister_popup (FolderViewPopup *fpopup);
void folderview_update_search_icon (FolderItem *item,
gboolean matches);
void folderview_set_column_order (FolderView *folderview);
-void folderview_finish_dnd (const gchar *data,
- GdkDragContext *drag_context,
- guint time,
- FolderItem *item);
+
void folderview_close_opened (FolderView *folderview,
gboolean dirty);
void folderview_remove_item(FolderView *folderview,
blob - 5b714e07687d521334c8cafd91a66e4a843db4c8
blob + d851eec71687aa85fcec1fe446520673afd08d80
--- src/imap_gtk.c
+++ src/imap_gtk.c
};
void imap_gtk_init(void)
-{
- folderview_register_popup(&imap_popup);
-}
+{ }
static void add_menuitems(GtkUIManager *ui_manager, FolderItem *item)
{
blob - 0eae0a81092673e679e9d0d3b0187bab93a15fa5
blob + b93a8de02b32944258664e6c70c5faf458d1ecc1
--- src/mh_gtk.c
+++ src/mh_gtk.c
};
void mh_gtk_init(void)
-{
- folderview_register_popup(&mh_popup);
-}
+{ }
static void add_menuitems(GtkUIManager *ui_manager, FolderItem *item)
{
blob - 9fe6840cbeb78063e7c7c729f3c3e88af7388e58
blob + 202c27f90948d88038df5403a9174178971c3b48
--- src/summaryview.c
+++ src/summaryview.c
static void summary_locked_clicked (GtkWidget *button,
SummaryView *summaryview);
-static void summary_start_drag (GtkWidget *widget,
- int button,
- GdkEvent *event,
- SummaryView *summaryview);
-static void summary_drag_data_get (GtkWidget *widget,
- GdkDragContext *drag_context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- SummaryView *summaryview);
-static void summary_drag_data_received(GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- SummaryView *summaryview);
-static gboolean summary_drag_motion_cb(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- SummaryView *summaryview);
-static void summary_drag_end(GtkWidget *widget,
- GdkDragContext *drag_context,
- SummaryView *summaryview);
-
/* custom compare functions for sorting */
static gint summary_cmp_by_mark (GtkCMCList *clist,
gconstpointer ptr1,
G_CALLBACK(summary_tree_collapsed),
summaryview);
- g_signal_connect(G_OBJECT(ctree), "start_drag",
- G_CALLBACK(summary_start_drag),
- summaryview);
- g_signal_connect(G_OBJECT(ctree), "drag_data_get",
- G_CALLBACK(summary_drag_data_get),
- summaryview);
- g_signal_connect(G_OBJECT(ctree), "drag_end",
- G_CALLBACK(summary_drag_end),
- summaryview);
-
- gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL & ~GTK_DEST_DEFAULT_HIGHLIGHT,
- summary_drag_types, 3,
- GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_DEFAULT);
-
- g_signal_connect(G_OBJECT(ctree), "drag_data_received",
- G_CALLBACK(summary_drag_data_received),
- summaryview);
-
- g_signal_connect(G_OBJECT(ctree), "drag_motion",
- G_CALLBACK(summary_drag_motion_cb),
- summaryview);
-
g_object_set (G_OBJECT(ctree), "has-tooltip", TRUE, NULL);
g_signal_connect(G_OBJECT(ctree), "query-tooltip",
G_CALLBACK(tooltip_cb),
summary_sort_by_column_click(summaryview, SORT_BY_LOCKED);
}
-static void summary_start_drag(GtkWidget *widget, gint button, GdkEvent *event,
- SummaryView *summaryview)
-{
- GdkDragContext *context;
-
- cm_return_if_fail(summaryview != NULL);
- cm_return_if_fail(summaryview->folder_item != NULL);
- cm_return_if_fail(summaryview->folder_item->folder != NULL);
-
- if (summaryview->selected == NULL) return;
-
- context = gtk_drag_begin_with_coordinates(widget, summaryview->target_list,
- GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event,
- -1, -1);
- gtk_drag_set_icon_default(context);
-}
-
-static void summary_drag_end (GtkWidget *widget,
- GdkDragContext *drag_context,
- SummaryView *summaryview)
-{}
-
-static void summary_drag_data_get(GtkWidget *widget,
- GdkDragContext *drag_context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- SummaryView *summaryview)
-{
- if (info == TARGET_MAIL_URI_LIST) {
- GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
- GList *cur;
- MsgInfo *msginfo;
- gchar *mail_list = NULL, *tmp1, *tmp2;
-
- for (cur = GTK_CMCLIST(ctree)->selection;
- cur != NULL && cur->data != NULL; cur = cur->next) {
- msginfo = gtk_cmctree_node_get_row_data
- (ctree, GTK_CMCTREE_NODE(cur->data));
- tmp2 = procmsg_get_message_file(msginfo);
- if (!tmp2) continue;
- if (msginfo->subject) {
- gchar *san_subject = g_strdup(msginfo->subject);
- gchar *dest = NULL;
- subst_for_filename(san_subject);
- dest = g_strdup_printf("%s%s%s.%d.txt",
- get_tmp_dir(),
- G_DIR_SEPARATOR_S,
- san_subject, msginfo->msgnum);
- g_free(san_subject);
- san_subject = g_filename_from_utf8(dest, -1, NULL, NULL, NULL);
- if (!san_subject) {
- g_warning("failed to convert encoding of file name: %s", dest);
- } else {
- g_free(dest);
- dest = san_subject;
- }
- if (copy_file(tmp2, dest, TRUE) < 0) {
- g_warning("summary_drag_data_get: can't copy %s to %s",
- tmp2, dest);
- }
- g_free(tmp2);
- tmp2 = dest;
- }
- tmp1 = g_filename_to_uri(tmp2, NULL, NULL);
- g_free(tmp2);
- tmp2 = g_strconcat(tmp1, "\r\n", NULL);
- g_free(tmp1);
- tmp1 = tmp2;
-
- if (!mail_list) {
- mail_list = tmp1;
- } else {
- tmp2 = g_strconcat(mail_list, tmp1, NULL);
- g_free(mail_list);
- g_free(tmp1);
- mail_list = tmp2;
- }
- }
-
- if (mail_list != NULL) {
- gtk_selection_data_set(selection_data,
- gtk_selection_data_get_target(selection_data), 8,
- mail_list, strlen(mail_list));
- g_free(mail_list);
- }
- } else if (info == TARGET_DUMMY) {
- if (GTK_CMCLIST(summaryview->ctree)->selection)
- gtk_selection_data_set(selection_data,
- gtk_selection_data_get_target(selection_data), 8,
- "Dummy-Summaryview",
- strlen("Dummy-Summaryview")+1);
- } else if (info == TARGET_MAIL_CM_PATH_LIST) {
- /* content: folder_item_identifier\nmsgid1\nmsgid2\nmsgid3 */
-
- GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
- GList *cur;
- MsgInfo *msginfo;
- gchar *path_list = NULL;
-
- /* identifier */
- if(GTK_CMCLIST(ctree)->selection != NULL) {
- msginfo = gtk_cmctree_node_get_row_data(ctree, GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->selection->data));
- if(msginfo && msginfo->folder)
- path_list = folder_item_get_identifier(msginfo->folder);
- }
-
- if (path_list != NULL) {
- for (cur = GTK_CMCLIST(ctree)->selection;
- cur != NULL && cur->data != NULL && path_list != NULL; cur = cur->next) {
- gchar *tmp;
-
- msginfo = gtk_cmctree_node_get_row_data(ctree, GTK_CMCTREE_NODE(cur->data));
- if(!msginfo)
- continue;
- tmp = path_list;
- path_list = g_strconcat(path_list, "\n", (msginfo->msgid ? msginfo->msgid : "unknown"), NULL);
- g_free(tmp);
- }
-
- if (path_list != NULL) {
- gtk_selection_data_set(selection_data,
- gtk_selection_data_get_target(selection_data), 8,
- path_list, strlen(path_list));
- g_free(path_list);
- }
- } else {
- g_warning("summary_drag_data_get: no folder item identifier");
- }
- }
-}
-
-static gboolean summary_drag_motion_cb(GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time,
- SummaryView *summaryview)
-{
- FolderItem *item = summaryview->folder_item;
- if (!(item && item->folder && folder_item_parent(item) != NULL
- && FOLDER_CLASS(item->folder)->add_msg != NULL)) {
- gdk_drag_status(context, 0, time);
- return FALSE;
- } else if (gtk_drag_get_source_widget(context) ==
- mainwindow_get_mainwindow()->folderview->ctree) {
- /* no folders */
- gdk_drag_status(context, 0, time);
- return FALSE;
- } else if (gtk_drag_get_source_widget(context) ==
- summaryview->ctree) {
- /* not from same folder */
- gdk_drag_status(context, 0, time);
- return FALSE;
- } else {
- gdk_drag_status(context, GDK_ACTION_COPY, time);
- return TRUE;
- }
-}
-
-static void summary_drag_data_received(GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- SummaryView *summaryview)
-{
- if (info == TARGET_MAIL_URI_LIST) {
- FolderItem *item = summaryview->folder_item;
- if (!item) {
- gtk_drag_finish(drag_context, FALSE, FALSE, time);
- return;
- } else {
- folderview_finish_dnd(gtk_selection_data_get_data(data),
- drag_context, time, item);
- }
- }
-}
-
-
/* custom compare functions for sorting */
static gint summary_cmp_by_date(GtkCMCList *clist,
blob - 49281071a207154175bbc7eef9b050b78d68e308
blob + c6ff6b07e30298895e5ff7679c76139d8918da52
--- src/summaryview.h
+++ src/summaryview.h
#include "folder.h"
#include "gtk/gtksctree.h"
-extern GtkTargetEntry summary_drag_types[3];
-
struct _SummaryColumnState
{
SummaryColumnType type;