[Knode-devel] kdepim/knode

Volker Krause volker.krause at rwth-aachen.de
Fri Apr 16 18:07:22 CEST 2004


CVS commit by vkrause: 

Convert the static member object i_nstances into a static member pointer.
As a static member object it seems to be recreated as soon as a shared object linked against libknodecommon (e.g. a KCM) is loaded.


  M +22 -10    knarticlewidget.cpp   1.172
  M +2 -1      knarticlewidget.h   1.59


--- kdepim/knode/knarticlewidget.cpp  #1.171:1.172
@@ -139,5 +139,5 @@ KNArticleWidget::KNArticleWidget(KAction
       emuKMail(false), f_inddialog(0), a_ctions(actColl)
 {
-  i_nstances.append(this);
+  instances()->append(this);
   setNotifyClick( true );
 
@@ -226,5 +226,9 @@ KNArticleWidget::~KNArticleWidget()
     delete a_rticle; //don't leak orphant articles
 
-  i_nstances.removeRef(this);
+  instances()->removeRef(this);
+  if(instances()->count() == 0) {
+    delete i_nstances;
+    i_nstances = 0;
+  }
   delete a_tt;
   delete a_ttPopup;
@@ -1878,9 +1882,17 @@ void KNArticleWidget::slotVerify()
 
 
-QPtrList<KNArticleWidget> KNArticleWidget::i_nstances;
+QPtrList<KNArticleWidget>* KNArticleWidget::i_nstances = 0;
+
+QPtrList<KNArticleWidget>* KNArticleWidget::instances()
+{
+  if(!i_nstances)
+    i_nstances = new QPtrList<KNArticleWidget>();
+  return i_nstances;
+}
+
 
 void KNArticleWidget::configChanged()
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     i->applyConfig();
 }
@@ -1889,5 +1901,5 @@ void KNArticleWidget::configChanged()
 bool KNArticleWidget::articleVisible(KNArticle *a)
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     if(a==i->article())
       return true;
@@ -1898,5 +1910,5 @@ bool KNArticleWidget::articleVisible(KNA
 void KNArticleWidget::articleRemoved(KNArticle *a)
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     if(a==i->article())
       i->showBlankPage();
@@ -1906,5 +1918,5 @@ void KNArticleWidget::articleRemoved(KNA
 void KNArticleWidget::articleChanged(KNArticle *a)
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     if(a==i->article())
       i->updateContents();
@@ -1914,5 +1926,5 @@ void KNArticleWidget::articleChanged(KNA
 void KNArticleWidget::articleLoadError(KNArticle *a, const QString &error)
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     if(a==i->article())
       i->showErrorMessage(error);
@@ -1922,5 +1934,5 @@ void KNArticleWidget::articleLoadError(K
 void KNArticleWidget::collectionRemoved(KNArticleCollection *c)
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     if(i->article() && i->article()->collection()==c)
       i->showBlankPage();
@@ -1930,5 +1942,5 @@ void KNArticleWidget::collectionRemoved(
 void KNArticleWidget::cleanup()
 {
-  for(KNArticleWidget *i=i_nstances.first(); i; i=i_nstances.next())
+  for(KNArticleWidget *i=instances()->first(); i; i=instances()->next())
     i->setArticle(0); //delete orphant articles => avoid crash in destructor
 }

--- kdepim/knode/knarticlewidget.h  #1.58:1.59
@@ -207,5 +207,6 @@ class KNArticleWidget : public KTextBrow
 
   protected:
-    static QPtrList<KNArticleWidget> i_nstances;
+    static QPtrList<KNArticleWidget> *i_nstances;
+    static QPtrList<KNArticleWidget> *instances();
 
 };




More information about the Knode-devel mailing list