CVS commit by mutz: Fix Aegypten issue #269 by providing a way to save the text of the reader. Exposes a bug in KHTMLPart, see kfm-devel. A kmcommands.cpp 1.177.2.1 [POSSIBLY UNSAFE: printf] [no copyright] A kmcommands.h 1.51.2.1 [no copyright] A kmmainwidget.cpp 1.281.2.1 [POSSIBLY UNSAFE: KRun::runCommand,printf] [no copyright] A kmmainwidget.h 1.80.2.1 [UNKNOWN] A kmmainwin.rc 1.80.2.1 A kmreaderwin.h 1.200.2.1 [no copyright] M +46 -0 kmreaderwin.cpp 1.777.2.5.2.4 --- kdepim/kmail/kmreaderwin.cpp #1.777.2.5.2.3:1.777.2.5.2.4 @@ -2289,4 +2289,50 @@ QString KMReaderWin::createAtmFileLink() } +#if 1 +namespace { + class SelectionSaver { + KHTMLPart * const part; + DOM::Range oldSelection; + public: + SelectionSaver( KHTMLPart * p ) + : part( p ), + oldSelection( p->hasSelection() ? p->selection() : p->htmlDocument().createRange() ) {} + + ~SelectionSaver() { + part->setSelection( oldSelection ); + } + }; +} + +static QString selectedTextOrAll( KHTMLPart * part ) { + SelectionSaver saver( part ); + part->selectAll(); + return part->selectedText(); +} +#endif + +#if 0 +static QString bodyElementInnerText( KHTMLPart * part ) { + const DOM::HTMLDocument doc = part->htmlDocument(); + if ( doc.isNull() ) + return QString::null; + const DOM::HTMLElement body = doc.body(); + if ( body.isNull() ) + return QString::null; + return body.innerText().string(); +} + +static QString selectedTextOrAll( KHTMLPart * part ) { + if ( part->hasSelection() ) + return part->selectedText(); + else + return bodyElementInnerText( part ); +} +#endif + +void KMReaderWin::slotSaveTextAs() { + ( new KMail::SaveTextAsCommand( selectedTextOrAll( mViewer ), this ) )->start(); +} + #include "kmreaderwin.moc"