0.8.10claws77
[claws.git] / src / summaryview.c
index bb0ac071ec6ffa5da17b4d4065fd955a4c836ab9..b334ec98f4f4ec50b2eec6612c5352cec07f1243 100644 (file)
@@ -1934,12 +1934,16 @@ static void summary_status_show(SummaryView *summaryview)
        }
 
        if (summaryview->folder_item->folder->type == F_NEWS) {
-               gchar *group;
-               group = get_abbrev_newsgroup_name
-                       (g_basename(summaryview->folder_item->path),
-                        prefs_common.ng_abbrev_len);
-               gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), group);
-               g_free(group);
+               if (summaryview->folder_item->path != NULL) {
+                       gchar *group;
+                       group = get_abbrev_newsgroup_name
+                               (g_basename(summaryview->folder_item->path),
+                                prefs_common.ng_abbrev_len);
+                       gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), group);
+                       g_free(group);
+               } else {
+                       gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), "");
+               }
        } else {
                gtk_label_set(GTK_LABEL(summaryview->statlabel_folder),
                              summaryview->folder_item->path);
@@ -3061,6 +3065,8 @@ void summary_delete(SummaryView *summaryview)
                if (aval != G_ALERTDEFAULT) return;
        }
 
+       main_window_cursor_wait(summaryview->mainwin);
+
        /* next code sets current row focus right. We need to find a row
         * that is not deleted. */
        folder_item_update_freeze();     
@@ -3093,6 +3099,8 @@ void summary_delete(SummaryView *summaryview)
                gtk_sctree_set_anchor_row(GTK_SCTREE(ctree), node);
        } else
                summary_status_show(summaryview);
+               
+       main_window_cursor_normal(summaryview->mainwin);
 }
 
 void summary_delete_duplicated(SummaryView *summaryview)
@@ -4098,120 +4106,6 @@ void summary_filter_open(SummaryView *summaryview, PrefsFilterType type)
        prefs_filtering_open(NULL, header, key);
 }
 
-void summary_reply(SummaryView *summaryview, ComposeMode mode)
-{
-       GList *sel = GTK_CLIST(summaryview->ctree)->selection;
-       MsgInfo *msginfo;
-       gchar *text;
-
-       msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
-                                             summaryview->selected);
-       if (!msginfo) return;
-
-       text = gtkut_editable_get_selection
-               (GTK_EDITABLE(summaryview->messageview->textview->text));
-
-       if (!text && summaryview->messageview->type == MVIEW_MIME
-           && summaryview->messageview->mimeview->type == MIMEVIEW_TEXT
-           && summaryview->messageview->mimeview->textview
-           && !summaryview->messageview->mimeview->textview->default_text) {
-               text = gtkut_editable_get_selection (GTK_EDITABLE 
-                        (summaryview->messageview->mimeview->textview->text));   
-       }
-       
-       switch (mode) {
-       case COMPOSE_REPLY:
-               if (prefs_common.default_reply_list)
-                       compose_reply(msginfo, prefs_common.reply_with_quote,
-                                     FALSE, TRUE, FALSE, text);
-               else
-                       compose_reply(msginfo, prefs_common.reply_with_quote,
-                                     FALSE, FALSE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_WITH_QUOTE:
-               if (prefs_common.default_reply_list)
-                       compose_reply(msginfo, TRUE, FALSE, TRUE, FALSE, text);
-               else
-                       compose_reply(msginfo, TRUE, FALSE, FALSE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_WITHOUT_QUOTE:
-               if (prefs_common.default_reply_list)
-                       compose_reply(msginfo, FALSE, FALSE, TRUE, FALSE, NULL);
-               else
-                       compose_reply(msginfo, FALSE, FALSE, FALSE, FALSE, NULL);
-               break;
-       case COMPOSE_REPLY_TO_SENDER:
-               compose_reply(msginfo, prefs_common.reply_with_quote,
-                             FALSE, FALSE, TRUE, text);
-               break;
-       case COMPOSE_FOLLOWUP_AND_REPLY_TO:
-               compose_followup_and_reply_to(msginfo,
-                                             prefs_common.reply_with_quote,
-                                             FALSE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_TO_SENDER_WITH_QUOTE:
-               compose_reply(msginfo, TRUE, FALSE, FALSE, TRUE, text);
-               break;
-       case COMPOSE_REPLY_TO_SENDER_WITHOUT_QUOTE:
-               compose_reply(msginfo, FALSE, FALSE, FALSE, TRUE, NULL);
-               break;
-       case COMPOSE_REPLY_TO_ALL:
-               compose_reply(msginfo, prefs_common.reply_with_quote,
-                             TRUE, FALSE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_TO_ALL_WITH_QUOTE:
-               compose_reply(msginfo, TRUE, TRUE, FALSE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE:
-               compose_reply(msginfo, FALSE, TRUE, FALSE, FALSE, NULL);
-               break;
-       case COMPOSE_REPLY_TO_LIST:
-               compose_reply(msginfo, prefs_common.reply_with_quote,
-                             FALSE, TRUE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_TO_LIST_WITH_QUOTE:
-               compose_reply(msginfo, TRUE, FALSE, TRUE, FALSE, text);
-               break;
-       case COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE:
-               compose_reply(msginfo, FALSE, FALSE, TRUE, FALSE, NULL);
-               break;
-       case COMPOSE_FORWARD:
-               if (prefs_common.forward_as_attachment) {
-                       summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, NULL);
-                       return;
-               } else {
-                       summary_reply_cb(summaryview, COMPOSE_FORWARD_INLINE, NULL);
-                       return;
-               }
-               break;
-       case COMPOSE_FORWARD_INLINE:
-               if (sel && !sel->next) {
-                       compose_forward(NULL, msginfo, FALSE, text);
-                       break;
-               }
-               /* if (sel->next) FALL THROUGH */
-       case COMPOSE_FORWARD_AS_ATTACH:
-               {
-                       GSList *msginfo_list = NULL;
-                       for ( ; sel != NULL; sel = sel->next)
-                               msginfo_list = g_slist_append(msginfo_list, 
-                                       gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
-                                               GTK_CTREE_NODE(sel->data)));
-                       compose_forward_multiple(NULL, msginfo_list);
-                       g_slist_free(msginfo_list);
-               }                       
-               break;
-       case COMPOSE_REDIRECT:
-               compose_redirect(NULL, msginfo);
-               break;
-       default:
-               g_warning("summary_reply_cb(): invalid action: %d\n", mode);
-       }
-
-       summary_set_marks_selected(summaryview);
-       g_free(text);
-}
-
 /* color label */
 
 #define N_COLOR_LABELS colorlabel_get_color_count()
@@ -4273,7 +4167,7 @@ void summary_set_colorlabel_color(GtkCTree *ctree, GtkCTreeNode *node,
        gtk_ctree_node_set_row_style(ctree, node, style);
 }
 
-static void summary_set_row_colorlable(SummaryView *summaryview, GtkCTreeNode *row, guint labelcolor)
+static void summary_set_row_colorlabel(SummaryView *summaryview, GtkCTreeNode *row, guint labelcolor)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        MsgInfo *msginfo;
@@ -4293,7 +4187,7 @@ void summary_set_colorlabel(SummaryView *summaryview, guint labelcolor,
        main_window_cursor_wait(summaryview->mainwin);
        folder_item_update_freeze();
        for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
-               summary_set_row_colorlable(summaryview,
+               summary_set_row_colorlabel(summaryview,
                                           GTK_CTREE_NODE(cur->data), labelcolor);
        folder_item_update_thaw();
        main_window_cursor_normal(summaryview->mainwin);
@@ -4861,10 +4755,50 @@ static void summary_col_resized(GtkCList *clist, gint column, gint width,
        prefs_common.summary_col_size[type] = width;
 }
 
+
+/*
+ * \brief get List of msginfo selected in SummaryView
+ *
+ * \param summaryview
+ *
+ * \return GSList holding MsgInfo
+ */
+GSList *summary_get_selection(SummaryView *summaryview)
+{
+       GList *sel = NULL;
+       GSList *msginfo_list = NULL;
+       
+       g_return_val_if_fail(summaryview != NULL, NULL);
+
+       sel = GTK_CLIST(summaryview->ctree)->selection;
+
+       g_return_val_if_fail(sel != NULL, NULL);
+
+       for ( ; sel != NULL; sel = sel->next)
+               msginfo_list = 
+                       g_slist_append(msginfo_list, 
+                                      gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
+                                                                  GTK_CTREE_NODE(sel->data)));
+       return msginfo_list;
+}
+
 static void summary_reply_cb(SummaryView *summaryview, guint action,
                             GtkWidget *widget)
 {
-       summary_reply(summaryview, (ComposeMode)action);
+       MessageView *msgview = (MessageView*)summaryview->messageview;
+       GSList *msginfo_list;
+       gchar *body;
+
+       g_return_if_fail(msgview != NULL);
+
+       msginfo_list = summary_get_selection(summaryview);
+       g_return_if_fail(msginfo_list != NULL);
+
+       body = messageview_get_selection(msgview);
+
+       compose_reply_mode((ComposeMode)action, msginfo_list, body);
+       g_free(body);
+       g_slist_free(msginfo_list);
 }
 
 static void summary_execute_cb(SummaryView *summaryview, guint action,