Bug 106478

Summary: No "save" or "save as" option in the separate reader window
Product: [Applications] kmail Reporter: Con Kolivas <kde>
Component: generalAssignee: kdepim bugs <kdepim-bugs>
Status: RESOLVED FIXED    
Severity: wishlist CC: vapier
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In:

Description Con Kolivas 2005-05-30 04:07:14 UTC
Version:            (using KDE KDE%203.4.0)
Compiler:          gcc%203.4.4%20
OS:                Linux

In preview windows it is possible to save an email using the "save as" option. However when actually viewing the email there is no option to save the email in any way. Optionally scrubbing the headers and converting the MIME format to plain ascii text would also be nice.
Comment 1 Andreas Gungl 2005-06-13 14:33:54 UTC
Adjusting subject to better reflect the content of the wish for those who primarily deal with the reports
Comment 2 Mike Frysinger 2006-02-14 01:50:11 UTC
kmail 3.5.1 has this option if you right click the message, however the "Save As" option does not show up under the "File" menu ...

also, while "Save As" has a shortcut of CTRL+S in the main reader, the sep e-mail viewer lacks this nifty shortcut
Comment 3 Jonathan Marten 2006-11-22 21:46:54 UTC
SVN commit 607024 by marten:

Add keyboard shortcut Ctrl+S for "Save As" action in reader window

CCBUG:106478


 M  +7 -4      branches/work/kdepim-3.5.5+/kmail/kmreadermainwin.cpp  
 M  +2 -2      branches/work/kdepim-3.5.5+/kmail/kmreadermainwin.h  


--- branches/work/kdepim-3.5.5+/kmail/kmreadermainwin.cpp #607023:607024
@@ -281,10 +281,13 @@
   //                                actionCollection() );
 
   //mSaveAsAction = new KAction( i18n("Save &As..."), "filesave",
-  //                             KStdAccel::shortcut( KStdAccel::Save ),
-  //                             this, SLOT( slotSaveMsg() ),
-  //                             actionCollection(), "file_save_as" );
+  //                            KStdAccel::shortcut( KStdAccel::Save ),
+  //                            this, SLOT( slotSaveMsg() ),
+  //                           actionCollection(), "file_save_as" );
 
+  mSaveAsAction = KStdAction::saveAs( mReaderWin, SLOT( slotSaveMsg() ),
+                                    actionCollection() );
+  mSaveAsAction->setShortcut( KStdAccel::shortcut( KStdAccel::Save ) );
   mPrintAction = KStdAction::print( this, SLOT( slotPrintMsg() ),
                                     actionCollection() );
 
@@ -462,7 +465,7 @@
     mReaderWin->toggleFixFontAction()->plug( menu );
     menu->insertSeparator();
     mPrintAction->plug( menu );
-    menu->insertItem(  SmallIcon("filesaveas"), i18n( "Save &As..." ), mReaderWin, SLOT( slotSaveMsg() ) );
+    mSaveAsAction->plug( menu );
     menu->insertItem( i18n("Save Attachments..."), mReaderWin, SLOT(slotSaveAttachments()) );
   }
   menu->exec(aPoint, 0);
--- branches/work/kdepim-3.5.5+/kmail/kmreadermainwin.h #607023:607024
@@ -65,8 +65,8 @@
   KURL mUrl;
   QMap<int,KMFolder*> mMenuToFolder;
   // a few actions duplicated from kmmainwidget
-  KAction *mTrashAction, *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
-          *mReplyListAction, *mForwardInlineAction,
+  KAction *mTrashAction, *mPrintAction, *mSaveAsAction, *mReplyAction,
+          *mReplyAllAction, *mReplyAuthorAction, *mReplyListAction, *mForwardInlineAction,
           *mForwardAttachedAction, *mForwardDigestAction, *mRedirectAction,
           *mViewSourceAction;
   KActionMenu *mReplyActionMenu;
Comment 4 Jonathan Marten 2006-11-30 16:02:17 UTC
SVN commit 609392 by marten:

Forward port 606990,607024 from work/kdepim-3.5.5+ feature branch:

Some changes to make menubar and popup menus more consistent (but still some way to go):
Menubar - Message has same "Mark Thread" submenu as popup
All popups with "Print", "Save" and "Save Attachments" in consistent order
Message window popup (when selected text) has same "Reply" menu as preview popup
Menubar - Folder - Mailing List Management has "..."
Folder list popup has "Empty" and "Delete" in consistent order
Add keyboard shortcut Ctrl+S for "Save As" action in reader window

GUI:
CCBUG:92905
CCBUG:106478



 M  +2 -6      kmail_part.rc  
 M  +2 -4      kmfoldertree.cpp  
 M  +1 -6      kmheaders.cpp  
 M  +5 -1      kmmainwidget.cpp  
 M  +2 -6      kmmainwin.rc  
 M  +9 -4      kmreadermainwin.cpp  
 M  +3 -3      kmreadermainwin.h  


--- trunk/KDE/kdepim/kmail/kmail_part.rc #609391:609392
@@ -2,7 +2,7 @@
      the same menu entries at the same place in KMail and Kontact  -->
 
 <!DOCTYPE kpartgui>
-<kpartgui version="6" name="kmail_part" >
+<kpartgui version="7" name="kmail_part" >
  <MenuBar>
   <Menu noMerge="1" name="file" >
    <text>&amp;File</text>
@@ -125,11 +125,7 @@
    <Action name="move_to" />
    <Separator/> 
    <Action name="set_status" />
-   <Menu name="menubar_message_mark_thread_as">
-     <text>Mark Thread as</text>
-     <Action name="thread_watched" />
-     <Action name="thread_ignored" />
-   </Menu>
+   <Action name="thread_status" />
    <Separator/>
    <Action name="create_filter"/>
    <Menu name="apply_filter_actions" >
--- trunk/KDE/kdepim/kmail/kmfoldertree.cpp #609391:609392
@@ -1034,11 +1034,9 @@
       folderMenu->addAction( mMainWidget->action("compact") );
 
       folderMenu->addSeparator();
-      if ( !fti->folder()->isSystemFolder() ) {
-        folderMenu->addAction( mMainWidget->action("delete_folder") );
-        folderMenu->addSeparator();
-      }
       folderMenu->addAction( mMainWidget->action("empty") );
+      if ( !fti->folder()->isSystemFolder() )
+        folderMenu->addAction( mMainWidget->action("delete_folder") );
       folderMenu->addSeparator();
     }
   }
--- trunk/KDE/kdepim/kmail/kmheaders.cpp #609391:609392
@@ -2363,11 +2363,6 @@
     menu->addAction( mOwner->threadStatusMenu() ); // Mark Thread menu
   }
 
-  if (!out_folder && !mFolder->isSent() && mOwner->watchThreadAction()->isEnabled() ) {
-    menu->addAction( mOwner->watchThreadAction() );
-    menu->addAction( mOwner->ignoreThreadAction() );
-  }
-
   if ( !out_folder ) {
     menu->addSeparator();
     menu->addAction( mOwner->filterMenu() ); // Create Filter menu
@@ -2375,9 +2370,9 @@
   }
 
   menu->addSeparator();
+  menu->addAction( mOwner->printAction() );
   menu->addAction( mOwner->saveAsAction() );
   menu->addAction( mOwner->saveAttachmentsAction() );
-  menu->addAction( mOwner->printAction() );
   menu->addSeparator();
   if ( mFolder->isTrash() ) {
     menu->addAction( mOwner->deleteAction() );
--- trunk/KDE/kdepim/kmail/kmmainwidget.cpp #609391:609392
@@ -2465,7 +2465,7 @@
   mModifyFolderAction = new KAction(KIcon("configure"),  i18n("&Properties"), actionCollection(), "modify" );
   connect(mModifyFolderAction, SIGNAL(triggered(bool)), SLOT(slotModifyFolder()));
 
-  mFolderMailingListPropertiesAction = new KAction( i18n("&Mailing List Management"),
+  mFolderMailingListPropertiesAction = new KAction( i18n("&Mailing List Management..."),
                                                     actionCollection(), "folder_mailinglist_properties" );
   connect(mFolderMailingListPropertiesAction, SIGNAL(triggered(bool)), SLOT( slotFolderMailingListProperties()));
   // mFolderMailingListPropertiesAction->setIcon(KIcon("folder_mailinglist_properties"));
@@ -2674,6 +2674,10 @@
   mIgnoreThreadAction = new KToggleAction(KIcon("mail_ignore"), i18n("&Ignore Thread"), actionCollection(), "thread_ignored");
   connect(mIgnoreThreadAction, SIGNAL(triggered(bool) ), SLOT(slotSetThreadStatusIgnored()));
 
+  mThreadStatusMenu->addAction( new KSeparatorAction( actionCollection() ) );
+  mThreadStatusMenu->addAction( mWatchThreadAction ); 
+  mThreadStatusMenu->addAction( mIgnoreThreadAction ); 
+
   mSaveAttachmentsAction = new KAction(KIcon("attach"),  i18n("Save A&ttachments..."), actionCollection(), "file_save_attachments" );
   connect(mSaveAttachmentsAction, SIGNAL(triggered(bool) ), SLOT(slotSaveAttachments()));
 
--- trunk/KDE/kdepim/kmail/kmmainwin.rc #609391:609392
@@ -2,7 +2,7 @@
      the same menu entries at the same place in KMail and Kontact  -->
 
 <!DOCTYPE kpartgui>
-<kpartgui version="88" name="kmmainwin" >
+<kpartgui version="89" name="kmmainwin" >
  <MenuBar>
   <Menu noMerge="1" name="file" >
    <text>&amp;File</text>
@@ -128,11 +128,7 @@
    <Action name="move_to" />
    <Separator/> 
    <Action name="set_status" />
-   <Menu name="menubar_message_mark_thread_as">
-     <text>Mark Thread as</text>
-     <Action name="thread_watched" />
-     <Action name="thread_ignored" />
-   </Menu>
+   <Action name="thread_status" />
    <Separator/>
    <Action name="create_filter"/>
    <Menu name="apply_filter_actions" >
--- trunk/KDE/kdepim/kmail/kmreadermainwin.cpp #609391:609392
@@ -234,6 +234,10 @@
   //                             this, SLOT( slotSaveMsg() ),
   //                             actionCollection(), "file_save_as" );
 
+  mSaveAsAction = KStdAction::saveAs( mReaderWin, SLOT( slotSaveMsg() ), 
+				      actionCollection() ); 
+  mSaveAsAction->setShortcut( KStdAccel::shortcut( KStdAccel::Save ) ); 
+
   mPrintAction = KStdAction::print( this, SLOT( slotPrintMsg() ),
                                     actionCollection() );
 
@@ -350,6 +354,9 @@
   if(!mReaderWin->copyText().isEmpty()) {
     if ( urlMenuAdded )
       menu->addSeparator();
+    menu->addAction( mReplyActionMenu ); 
+    menu->insertSeparator(); 
+
     menu->addAction( mReaderWin->copyAction() );
     menu->addAction( mReaderWin->selectAllAction() );
   } else if ( !urlMenuAdded )
@@ -381,11 +388,9 @@
     menu->addAction( mReaderWin->toggleFixFontAction() );
     menu->addSeparator();
     menu->addAction( mPrintAction );
-    QAction* act = menu->addAction( SmallIcon("filesaveas"), i18n( "Save &As..." ) );
+    menu->addAction( mSaveAsAction );
+    QAction* act = menu->addAction( i18n("Save Attachments...") );
     connect(act, SIGNAL(triggered(QAction*)),
-            mReaderWin, SLOT( slotSaveMsg() ) );
-    act = menu->addAction( i18n("Save Attachments...") );
-    connect(act, SIGNAL(triggered(QAction*)),
             mReaderWin, SLOT(slotSaveAttachments()) );
   }
   menu->exec(aPoint, 0);
--- trunk/KDE/kdepim/kmail/kmreadermainwin.h #609391:609392
@@ -59,9 +59,9 @@
   KUrl mUrl;
   QMap<QAction*,KMFolder*> mMenuToFolder;
   // a few actions duplicated from kmmainwidget
-  KAction *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
-          *mReplyListAction, *mForwardAction,
-          *mForwardAttachedAction, *mRedirectAction,
+  KAction *mPrintAction, *mSaveAsAction,
+          *mReplyAction, *mReplyAllAction, *mReplyAuthorAction, *mReplyListAction,
+          *mForwardAction, *mForwardAttachedAction, *mRedirectAction,
           *mViewSourceAction;
   KActionMenu *mReplyActionMenu;
   KActionMenu *mForwardActionMenu;
Comment 5 Jonathan Marten 2006-11-30 16:04:14 UTC
SVN commit 609393 by marten:

Port 606990,607024 from work/kdepim-3.5.5+ feature branch:

Some changes to make menubar and popup menus more consistent (but still some way to go): 
Menubar - Message has same "Mark Thread" submenu as popup 
All popups with "Print", "Save" and "Save Attachments" in consistent order 
Message window popup (when selected text) has same "Reply" menu as preview popup 
Menubar - Folder - Mailing List Management has "..." 
Folder list popup has "Empty" and "Delete" in consistent order 
Add keyboard shortcut Ctrl+S for "Save As" action in reader window 

GUI:
CCBUG:92905
BUG:106478



 M  +2 -6      kmail_part.rc  
 M  +1 -2      kmfoldertree.cpp  
 M  +1 -6      kmheaders.cpp  
 M  +5 -1      kmmainwidget.cpp  
 M  +2 -6      kmmainwin.rc  
 M  +7 -1      kmreadermainwin.cpp  
 M  +2 -2      kmreadermainwin.h  


--- branches/KDE/3.5/kdepim/kmail/kmail_part.rc #609392:609393
@@ -2,7 +2,7 @@
      the same menu entries at the same place in KMail and Kontact  -->
 
 <!DOCTYPE kpartgui>
-<kpartgui version="7" name="kmail_part" >
+<kpartgui version="8" name="kmail_part" >
  <MenuBar>
   <Menu noMerge="1" name="file" >
    <text>&amp;File</text>
@@ -126,11 +126,7 @@
    <Action name="move_to" />
    <Separator/> 
    <Action name="set_status" />
-   <Menu name="menubar_message_mark_thread_as">
-     <text>Mark Thread as</text>
-     <Action name="thread_watched" />
-     <Action name="thread_ignored" />
-   </Menu>
+   <Action name="thread_status" />
    <Separator/>
    <Action name="create_filter"/>
    <Menu name="apply_filter_actions" >
--- branches/KDE/3.5/kdepim/kmail/kmfoldertree.cpp #609392:609393
@@ -1020,11 +1020,10 @@
       mMainWidget->action("compact")->plug(folderMenu);
 
       folderMenu->insertSeparator();
+      mMainWidget->action("empty")->plug(folderMenu);
       if ( !fti->folder()->isSystemFolder() ) {
         mMainWidget->action("delete_folder")->plug(folderMenu);
-        folderMenu->insertSeparator();
       }
-      mMainWidget->action("empty")->plug(folderMenu);
       folderMenu->insertSeparator();
     }
   }
--- branches/KDE/3.5/kdepim/kmail/kmheaders.cpp #609392:609393
@@ -2325,11 +2325,6 @@
     mOwner->threadStatusMenu()->plug( menu ); // Mark Thread menu
   }
 
-  if (!out_folder && !mFolder->isSent() && mOwner->watchThreadAction()->isEnabled() ) {
-    mOwner->watchThreadAction()->plug(menu);
-    mOwner->ignoreThreadAction()->plug(menu);
-  }
-
   if ( !out_folder ) {
     menu->insertSeparator();
     mOwner->filterMenu()->plug( menu ); // Create Filter menu
@@ -2337,9 +2332,9 @@
   }
 
   menu->insertSeparator();
+  mOwner->printAction()->plug(menu);
   mOwner->saveAsAction()->plug(menu);
   mOwner->saveAttachmentsAction()->plug(menu);
-  mOwner->printAction()->plug(menu);
   menu->insertSeparator();
   if ( mFolder->isTrash() ) {
     mOwner->deleteAction()->plug(menu);
--- branches/KDE/3.5/kdepim/kmail/kmmainwidget.cpp #609392:609393
@@ -2428,7 +2428,7 @@
   mModifyFolderAction = new KAction( i18n("&Properties"), "configure", 0, this,
 		      SLOT(slotModifyFolder()), actionCollection(), "modify" );
 
-  mFolderMailingListPropertiesAction = new KAction( i18n("&Mailing List Management"),
+  mFolderMailingListPropertiesAction = new KAction( i18n("&Mailing List Management..."),
       /*"folder_mailinglist_properties",*/ 0, this, SLOT( slotFolderMailingListProperties() ),
       actionCollection(), "folder_mailinglist_properties" );
 
@@ -2655,6 +2655,10 @@
                                        0, this, SLOT(slotSetThreadStatusIgnored()),
                                        actionCollection(), "thread_ignored");
 
+  mThreadStatusMenu->insert( new KActionSeparator( this ) ); 
+  mThreadStatusMenu->insert( mWatchThreadAction ); 
+  mThreadStatusMenu->insert( mIgnoreThreadAction ); 
+
   mSaveAttachmentsAction = new KAction( i18n("Save A&ttachments..."), "attach",
                                 0, this, SLOT(slotSaveAttachments()),
                                 actionCollection(), "file_save_attachments" );
--- branches/KDE/3.5/kdepim/kmail/kmmainwin.rc #609392:609393
@@ -2,7 +2,7 @@
      the same menu entries at the same place in KMail and Kontact  -->
 
 <!DOCTYPE kpartgui>
-<kpartgui version="89" name="kmmainwin" >
+<kpartgui version="90" name="kmmainwin" >
  <MenuBar>
   <Menu noMerge="1" name="file" >
    <text>&amp;File</text>
@@ -129,11 +129,7 @@
    <Action name="move_to" />
    <Separator/> 
    <Action name="set_status" />
-   <Menu name="menubar_message_mark_thread_as">
-     <text>Mark Thread as</text>
-     <Action name="thread_watched" />
-     <Action name="thread_ignored" />
-   </Menu>
+   <Action name="thread_status" />
    <Separator/>
    <Action name="create_filter"/>
    <Menu name="apply_filter_actions" >
--- branches/KDE/3.5/kdepim/kmail/kmreadermainwin.cpp #609392:609393
@@ -285,6 +285,9 @@
   //                             this, SLOT( slotSaveMsg() ),
   //                             actionCollection(), "file_save_as" );
 
+  mSaveAsAction = KStdAction::saveAs( mReaderWin, SLOT( slotSaveMsg() ), 
+				      actionCollection() ); 
+  mSaveAsAction->setShortcut( KStdAccel::shortcut( KStdAccel::Save ) );
   mPrintAction = KStdAction::print( this, SLOT( slotPrintMsg() ),
                                     actionCollection() );
 
@@ -423,6 +426,9 @@
   if(mReaderWin && !mReaderWin->copyText().isEmpty()) {
     if ( urlMenuAdded )
       menu->insertSeparator();
+    mReplyActionMenu->plug( menu ); 
+    menu->insertSeparator(); 
+
     mReaderWin->copyAction()->plug( menu );
     mReaderWin->selectAllAction()->plug( menu );
   } else if ( !urlMenuAdded )
@@ -454,7 +460,7 @@
     mReaderWin->toggleFixFontAction()->plug( menu );
     menu->insertSeparator();
     mPrintAction->plug( menu );
-    menu->insertItem(  SmallIcon("filesaveas"), i18n( "Save &As..." ), mReaderWin, SLOT( slotSaveMsg() ) );
+    mSaveAsAction->plug( menu );
     menu->insertItem( i18n("Save Attachments..."), mReaderWin, SLOT(slotSaveAttachments()) );
   }
   menu->exec(aPoint, 0);
--- branches/KDE/3.5/kdepim/kmail/kmreadermainwin.h #609392:609393
@@ -65,8 +65,8 @@
   KURL mUrl;
   QMap<int,KMFolder*> mMenuToFolder;
   // a few actions duplicated from kmmainwidget
-  KAction *mTrashAction, *mPrintAction, *mReplyAction, *mReplyAllAction, *mReplyAuthorAction,
-          *mReplyListAction, *mForwardInlineAction,
+  KAction *mTrashAction, *mPrintAction, *mSaveAsAction, *mReplyAction,
+          *mReplyAllAction, *mReplyAuthorAction, *mReplyListAction, *mForwardInlineAction,
           *mForwardAttachedAction, *mForwardDigestAction, *mRedirectAction,
           *mViewSourceAction;
   KActionMenu *mReplyActionMenu;