KMBroadcastStatus cleanup discussed with Till: move "abortRequested"

to kmkernel, renaming it "mailCheckAborted", since it's now only used for this.

Reimplemented the real "abort all" code (that used to be for the littleprogress' cross button)
in ProgressManager, so that Key_Escape calls it, like it used to. It simply acts as
if the 'abort' button of any running job had been clicked.

svn path=/trunk/kdepim/; revision=314224
wilder-work
David Faure 22 years ago
parent 1634a06fe1
commit 90b666f740
  1. 2
      kmacctexppop.cpp
  2. 6
      kmacctlocal.cpp
  3. 6
      kmacctmaildir.cpp
  4. 23
      kmbroadcaststatus.cpp
  5. 21
      kmbroadcaststatus.h
  6. 2
      kmfoldercachedimap.cpp
  7. 18
      kmkernel.cpp
  8. 25
      kmkernel.h
  9. 9
      kmmainwidget.cpp
  10. 5
      kmmainwin.cpp
  11. 10
      progressmanager.cpp
  12. 5
      progressmanager.h

@ -613,7 +613,7 @@ void KMAcctExpPop::slotJobFinished() {
mSlave = 0;
stage = Idle;
if( mMailCheckProgressItem ) { // do this only once...
bool canceled = KMBroadcastStatus::instance()->abortRequested() || mMailCheckProgressItem->canceled();
bool canceled = kmkernel->mailCheckAborted() || mMailCheckProgressItem->canceled();
int numMessages = canceled ? indexOfCurrentMsg : idsOfMsgs.count();
KMBroadcastStatus::instance()->setStatusMsgTransmissionCompleted(
numMessages, numBytes, numBytesRead, numBytesToRead, mLeaveOnServer, mMailCheckProgressItem );

@ -95,7 +95,7 @@ void KMAcctLocal::processNewMail(bool)
return;
}
KMBroadcastStatus::instance()->reset();
//KMBroadcastStatus::instance()->reset();
KMBroadcastStatus::instance()->setStatusMsg(
i18n("Preparing transmission from \"%1\"...").arg(mName));
@ -150,7 +150,7 @@ void KMAcctLocal::processNewMail(bool)
if (!addedOk) break;
/* This causes mail eating
if (KMBroadcastStatus::instance()->abortRequested()) break; */
if (kmkernel->mailCheckAborted()) break; */
QString statusMsg = statusMsgStub.arg(i);
KMBroadcastStatus::instance()->setStatusMsg( statusMsg );
@ -193,7 +193,7 @@ void KMAcctLocal::processNewMail(bool)
}
KMBroadcastStatus::instance()->setStatusProgressEnable( "L" + mName, false );
KMBroadcastStatus::instance()->reset();
//KMBroadcastStatus::instance()->reset();
if (addedOk)
{

@ -100,7 +100,7 @@ void KMAcctMaildir::processNewMail(bool)
return;
}
KMBroadcastStatus::instance()->reset();
//KMBroadcastStatus::instance()->reset();
KMBroadcastStatus::instance()->setStatusMsg(
i18n("Preparing transmission from \"%1\"...").arg(mName));
@ -149,7 +149,7 @@ void KMAcctMaildir::processNewMail(bool)
for (i=0; i<num; i++)
{
if( KMBroadcastStatus::instance()->abortRequested() ) {
if( kmkernel->mailCheckAborted() ) {
KMBroadcastStatus::instance()->setStatusMsg( i18n("Transmission aborted.") );
num = i;
addedOk = false;
@ -181,7 +181,7 @@ void KMAcctMaildir::processNewMail(bool)
}
KMBroadcastStatus::instance()->setStatusProgressEnable( "M" + mName, false );
KMBroadcastStatus::instance()->reset();
//KMBroadcastStatus::instance()->reset();
if (addedOk)
{

@ -31,7 +31,6 @@ KMBroadcastStatus* KMBroadcastStatus::instance()
KMBroadcastStatus::KMBroadcastStatus()
{
reset();
}
void KMBroadcastStatus::setStatusMsg( const QString& message )
@ -159,26 +158,4 @@ void KMBroadcastStatus::setStatusProgressPercent( const QString &id,
emit statusProgressPercent( count ? (sum / count) : sum );
}
void KMBroadcastStatus::reset()
{
abortRequested_ = false;
if (ids.isEmpty())
emit resetRequested();
}
bool KMBroadcastStatus::abortRequested()
{
return abortRequested_;
}
void KMBroadcastStatus::setAbortRequested()
{
abortRequested_ = true;
}
void KMBroadcastStatus::requestAbort()
{
abortRequested_ = true;
}
#include "kmbroadcaststatus.moc"

@ -56,19 +56,6 @@ public:
/** Emit an update progress widget(s) percent completed signal */
void setStatusProgressPercent( const QString& id, unsigned long percent );
/** Returns true IFF the user has requested the current operation
(the one whose progress is being shown) should be aborted.
Needs to be periodically polled in the implementation of the
operation. */
bool abortRequested();
/** Set the state of the abort requested variable to false */
void reset();
/** Set the state of the abort requested variable to true,
* without emitting the signal.
* (to let the current jobs run, but stop when possible).
* This is only for exiting gracefully, don't use.
*/
void setAbortRequested();
signals:
/** Emitted when setStatusMsg is called. */
@ -77,19 +64,11 @@ signals:
void statusProgressEnable( bool );
/** Emitted when setStatusProgressPercent is called. */
void statusProgressPercent( unsigned long );
/** Emitted when reset is called. */
void resetRequested();
public slots:
/** Set the state of the abort requested variable to return */
void requestAbort();
protected:
KMBroadcastStatus();
static KMBroadcastStatus* instance_;
bool abortRequested_;
QMap<QString,unsigned long> ids;
};

@ -530,7 +530,7 @@ void KMFolderCachedImap::serverSyncInternal()
// This is used to stop processing when we're about to exit
// and the current job wasn't cancellable.
// For user-requested abort, we'll use signalAbortRequested instead.
if( KMBroadcastStatus::instance()->abortRequested() ) {
if( kmkernel->mailCheckAborted() ) {
resetSyncState();
emit folderComplete( this, false );
return;

@ -114,6 +114,7 @@ KMKernel::KMKernel (QObject *parent, const char *name) :
the_filterActionDict = 0;
the_msgSender = 0;
mWin = 0;
mMailCheckAborted = false;
// make sure that we check for config updates before doing anything else
KMKernel::config();
@ -175,7 +176,7 @@ KMKernel::~KMKernel ()
mMailService = 0;
delete mKIMProxy;
mKIMProxy = 0;
GlobalSettings::writeConfig();
mySelf = 0;
kdDebug(5006) << "KMKernel::~KMKernel" << endl;
@ -1798,4 +1799,19 @@ KMFolder* KMKernel::findFolderById( const QString& idString )
return mKIMProxy;
}
void KMKernel::enableMailCheck()
{
mMailCheckAborted = false;
}
bool KMKernel::mailCheckAborted() const
{
return mMailCheckAborted;
}
void KMKernel::abortMailCheck()
{
mMailCheckAborted = true;
}
#include "kmkernel.moc"

@ -220,16 +220,32 @@ public:
// ### again.
void setContextMenuShown( bool flag ) { mContextMenuShown = flag; }
bool contextMenuShown() const { return mContextMenuShown; }
/**
* Get a reference to KMail's KIMProxy instance
* @return a pointer to a valid KIMProxy
* @return a pointer to a valid KIMProxy
*/
::KIMProxy* imProxy();
/**
* Returns true IFF the user has requested that the current mail checks
* should be aborted. Needs to be periodically polled.
*/
bool mailCheckAborted() const;
/** Set the state of the abort requested variable to false,
* i.e. enable mail checking again
*/
void enableMailCheck();
/**
* Set the state of the abort requested variable to true,
* (to let the current jobs run, but stop when possible).
* This is used to cancel mail checks when closing the last mainwindow
*/
void abortMailCheck();
public slots:
//Save contents of all open composer widnows to ~/dead.letter
/// Save contents of all open composer widnows to ~/dead.letter
void dumpDeadLetters();
/** Call this slot instead of directly @ref KConfig::sync() to
@ -299,6 +315,7 @@ private:
/** true unles kmail is closed by session management */
bool closed_by_user;
bool the_firstInstance;
bool mMailCheckAborted;
static KMKernel *mySelf;
KSharedConfig::Ptr mConfig;
QTextCodec *netCodec;
@ -316,7 +333,7 @@ private:
// temporary mainwin
KMMainWin *mWin;
MailServiceImpl *mMailService;
// KIMProxy provides access to up to date instant messaging presence data
::KIMProxy *mKIMProxy;
// true if the context menu of KMFolderTree or KMHeaders is shown

@ -94,6 +94,9 @@ using KMail::HeaderListQuickSearch;
using namespace KMime;
using KMime::Types::AddrSpecList;
#include "progressmanager.h"
using KMail::ProgressManager;
#include "kmmainwidget.moc"
QPtrList<KMMainWidget>* KMMainWidget::s_mainWidgetList = 0;
@ -584,10 +587,10 @@ void KMMainWidget::createWidgets(void)
mFolderTree, SLOT(incCurrentFolder()));
new KAction(
i18n("Abort Current Operation"), Key_Escape, KMBroadcastStatus::instance(),
SLOT(requestAbort()), actionCollection(), "cancel" );
i18n("Abort Current Operation"), Key_Escape, ProgressManager::instance(),
SLOT(slotAbortAll()), actionCollection(), "cancel" );
accel->connectItem(accel->insertItem(Key_Escape),
KMBroadcastStatus::instance(), SLOT(requestAbort()));
ProgressManager::instance(), SLOT(slotAbortAll()));
new KAction(
i18n("Focus on Previous Folder"), CTRL+Key_Left, mFolderTree,

@ -7,7 +7,6 @@
#include "kstatusbar.h"
#include "kmkernel.h"
#include "kmsender.h"
#include "kmbroadcaststatus.h"
#include "statusbarprogresswidget.h"
#include "kmglobal.h"
#include "kmacctmgr.h"
@ -56,7 +55,7 @@ KMMainWin::KMMainWin(QWidget *)
SLOT(slotUpdateToolbars()) );
// Enable mail checks again (see destructor)
KMBroadcastStatus::instance()->reset();
kmkernel->enableMailCheck();
}
KMMainWin::~KMMainWin()
@ -82,7 +81,7 @@ KMMainWin::~KMMainWin()
kdDebug(5006) << "Closing last KMMainWin: stopping mail check" << endl;
// Running KIO jobs prevent kapp from exiting, so we need to kill them
// if they are only about checking mail (not important stuff like moving messages)
KMBroadcastStatus::instance()->setAbortRequested();
kmkernel->abortMailCheck();
kmkernel->acctMgr()->cancelMailCheck();
}
}

@ -87,7 +87,7 @@ void ProgressItem::removeChild( ProgressItem *kiddo )
void ProgressItem::cancel()
{
if ( mCanceled ) return;
if ( mCanceled || !mCanBeCanceled ) return;
kdDebug(5006) << "ProgressItem::cancel() - " << label() << endl;
mCanceled = true;
// Cancel all children.
@ -206,6 +206,14 @@ ProgressItem* ProgressManager::singleItem() const
return 0;
}
void ProgressManager::slotAbortAll()
{
QDictIterator< ProgressItem > it( mTransactions );
for ( ; it.current(); ++it ) {
it.current()->cancel();
}
}
} // namespace
#include "progressmanager.moc"

@ -352,6 +352,11 @@ class ProgressManager : public QObject
*/
void slotStandardCancelHandler( ProgressItem* item );
/**
* Aborts all running jobs. Bound to "Esc"
*/
void slotAbortAll();
private slots:
void slotTransactionCompleted( ProgressItem *item );

Loading…
Cancel
Save