[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdepim/certmanager
From: Marc Mutz <Marc.Mutz () uni-bielefeld ! de>
Date: 2004-10-12 7:47:50
Message-ID: 20041012074750.1852816C35 () office ! kde ! org
[Download RAW message or body]
CVS commit by mutz:
Fix Aegypten II issue 240 for good (CertManager part):
- Re-populate mItemsToDelete from the list of keys to delete (in flat
list mode, dependant items were not deleted, as they were only
discovered by the keyring analyser).
- Walk through mItemsToDelete and delete the items leafs-first, to
avoid double-deletes (triggered when mItemsToDelete contains both
item and it's parent, and the parent comes first in the list).
In other news:
- Add WFlags argument to ctor, and wire WDestructiveClose into the
passed value (fixing _the_ typical [QK]MainWindow subclass mistake)
- Add a dtor and delete a couple of things that might linger around,
but probably don't ever so often.
M +27 -3 certmanager.cpp 1.109
M +2 -1 certmanager.h 1.46
--- kdepim/certmanager/certmanager.cpp #1.108:1.109
@@ -162,6 +162,6 @@ namespace {
CertManager::CertManager( bool remote, const QString& query, const QString & import,
- QWidget* parent, const char* name )
- : KMainWindow( parent, name ),
+ QWidget* parent, const char* name, WFlags f )
+ : KMainWindow( parent, name, f|WDestructiveClose ),
mCrlView( 0 ),
mDirmngrProc( 0 ),
@@ -212,4 +212,9 @@ CertManager::CertManager( bool remote, c
}
+CertManager::~CertManager() {
+ delete mDirmngrProc; mDirmngrProc = 0;
+ delete mHierarchyAnalyser; mHierarchyAnalyser = 0;
+}
+
void CertManager::createStatusBar() {
KStatusBar * bar = statusBar();
@@ -1065,4 +1070,10 @@ void CertManager::slotDeleteCertificate(
i18n("Certificate Deletion Failed") );
}
+
+ mItemsToDelete.clear(); // re-create according to the real selection
+ for ( std::vector<GpgME::Key>::const_iterator it = keysToDelete.begin() ; it != \
keysToDelete.end() ; ++it ) + if ( Kleo::KeyListViewItem * item = \
mKeyListView->itemByFingerprint( it->primaryFingerprint() ) ) + \
mItemsToDelete.append( item ); +
Kleo::MultiDeleteJob * job = new Kleo::MultiDeleteJob( \
Kleo::CryptoBackendFactory::instance()->smime() ); assert( job );
@@ -1084,7 +1095,20 @@ void CertManager::slotDeleteResult( cons
showDeleteError( this, err );
else {
+ const int infinity = 100; // infinite loop guard...
mItemsToDelete.setAutoDelete( true );
- mItemsToDelete.clear();
+ for ( int i = 0 ; i < infinity ; ++i ) {
+ QPtrListIterator<Kleo::KeyListViewItem> it( mItemsToDelete );
+ while ( Kleo::KeyListViewItem * cur = it.current() ) {
+ ++it;
+ if ( cur->childCount() == 0 ) {
+ mItemsToDelete.remove( cur );
+ }
+ }
+ if ( mItemsToDelete.isEmpty() )
+ break;
+ }
mItemsToDelete.setAutoDelete( false );
+ Q_ASSERT( mItemsToDelete.isEmpty() );
+ mItemsToDelete.clear();
}
disconnectJobFromStatusBarProgress( err );
--- kdepim/certmanager/certmanager.h #1.45:1.46
@@ -82,5 +82,6 @@ public:
CertManager( bool remote = false, const QString& query = QString::null,
const QString& import=QString::null,
- QWidget* parent = 0, const char* name = 0);
+ QWidget * parent=0, const char * name=0, WFlags f=0 );
+ ~CertManager();
bool isRemote() const { return mRemote; }
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic