2005-01-22 [colin] 1.0.0cvs8.1
[claws.git] / src / summaryview.c
index 494d67fab5d002ae0dd0ed027564abfe81db15d1..76d037cffb75093ebd4ed4d2c0b4ef2710018e62 100644 (file)
@@ -798,6 +798,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
        summary_lock(summaryview);
 
        if (!prefs_common.summary_quicksearch_sticky
+        && !prefs_common.summary_quicksearch_recurse
         && !quicksearch_is_running(summaryview->quicksearch)) {
                quicksearch_set(summaryview->quicksearch, prefs_common.summary_quicksearch_type, "");
        }
@@ -852,6 +853,15 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
                gtk_clist_thaw(GTK_CLIST(ctree));
                summary_unlock(summaryview);
                inc_unlock();
+               if (item && quicksearch_is_running(summaryview->quicksearch)) {
+                       main_window_cursor_wait(summaryview->mainwin);
+                       quicksearch_reset_cur_folder_item(summaryview->quicksearch);
+                       if (quicksearch_is_active(summaryview->quicksearch))
+                               quicksearch_search_subfolders(summaryview->quicksearch, 
+                                             summaryview->folderview,
+                                             summaryview->folder_item);
+                       main_window_cursor_normal(summaryview->mainwin);
+               }                       
                return TRUE;
        }
        g_free(buf);
@@ -913,7 +923,18 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
                        else
                                procmsg_msginfo_free(msginfo);
                }
-
+               
+               if (quicksearch_is_running(summaryview->quicksearch)) {
+                       /* only scan subfolders when quicksearch changed,
+                        * not when search is the same and folder changed */
+                       main_window_cursor_wait(summaryview->mainwin);
+                       quicksearch_reset_cur_folder_item(summaryview->quicksearch);
+                       quicksearch_search_subfolders(summaryview->quicksearch, 
+                                             summaryview->folderview,
+                                             summaryview->folder_item);
+                       main_window_cursor_normal(summaryview->mainwin);
+               }
+               
                g_slist_free(mlist);
                mlist = not_killed;
        }
@@ -3295,6 +3316,7 @@ void summary_save_as(SummaryView *summaryview)
        MsgInfo *msginfo;
        gchar *filename = NULL;
        gchar *src, *dest;
+       gchar *tmp;
 
        AlertValue aval = 0;
 
@@ -3331,17 +3353,16 @@ void summary_save_as(SummaryView *summaryview)
        }
 
        src = procmsg_get_message_file(msginfo);
+       tmp = g_path_get_basename(dest);
+
        if ( aval==0 ) { /* append */
                if (append_file(src, dest, TRUE) < 0) 
-                       alertpanel_error(_("Can't save the file `%s'."),
-                                        g_basename(dest));
+                       alertpanel_error(_("Can't save the file `%s'."), tmp);
        } else { /* overwrite */
                if (copy_file(src, dest, TRUE) < 0)
-                       alertpanel_error(_("Can't save the file `%s'."),
-                                        g_basename(dest));
+                       alertpanel_error(_("Can't save the file `%s'."), tmp);
        }
        g_free(src);
-
        
        /*
         * If two or more msgs are selected,
@@ -3354,11 +3375,12 @@ void summary_save_as(SummaryView *summaryview)
                        if (!msginfo) break;
                        src = procmsg_get_message_file(msginfo);
                        if (append_file(src, dest, TRUE) < 0)
-                               alertpanel_error(_("Can't save the file `%s'."),
-                                                g_basename(dest));
+                               alertpanel_error(_("Can't save the file `%s'."), tmp);
                }
                g_free(src);
        }
+       g_free(dest);
+       g_free(tmp);
 }
 
 void summary_print(SummaryView *summaryview)
@@ -4373,6 +4395,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
        MessageView *messageview;
        TextView *textview;
        GtkAdjustment *adj;
+       gboolean mod_pressed;
 
        if (summary_is_locked(summaryview)) return TRUE;
        if (!event) return TRUE;
@@ -4457,9 +4480,16 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
                                                    summaryview->selected);
                                break;
                        }
-                       if (!textview_scroll_page(textview, FALSE))
-                               summary_select_next_unread(summaryview);
-               }                               
+                       mod_pressed = ((event->state & 
+                                       (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
+                       if (mod_pressed) {
+                               if (!textview_scroll_page(textview, TRUE))
+                                       summary_select_prev_unread(summaryview);
+                       } else {
+                               if (!textview_scroll_page(textview, FALSE))
+                                       summary_select_next_unread(summaryview);
+                       }                               
+               }
                break;
        case GDK_BackSpace:     /* Page up */
                textview_scroll_page(textview, TRUE);
@@ -4471,7 +4501,8 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
                        break;
                }
                textview_scroll_one_line
-                       (textview, (event->state & GDK_MOD1_MASK) != 0);
+                       (textview, (event->state &
+                                   (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
                break;
        case GDK_Delete:
                BREAK_ON_MODIFIER_KEY();
@@ -5336,3 +5367,18 @@ static void summary_find_answers (SummaryView *summaryview, MsgInfo *msg)
        if (node)
                summary_select_node(summaryview, node, TRUE, TRUE);
 }
+
+void summaryview_export_mbox_list(SummaryView *summaryview)
+{
+       GSList *list = summary_get_selected_msg_list(summaryview);
+       gchar *mbox = filesel_select_file_save(_("Export to mbox file"), NULL);
+       
+       if (mbox == NULL || list == NULL)
+               return;
+               
+       export_list_to_mbox(list, mbox);
+       
+       g_slist_free(list);
+       g_free(mbox);
+       
+}