[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    Re: Kcontrol memory leak (patches included)
From:       Albert Astals Cid <astals11 () terra ! es>
Date:       2004-07-15 18:08:03
Message-ID: 200407152008.03162.astals11 () terra ! es
[Download RAW message or body]

Following Waldo's recommendations i changed the function to 
setAboutData(KAboutData *)

What do you think about the patches now?

I attach the kcmodule changes and three kcontrol modules that i have ported to 
the new system.

Albert

A Dimecres 14 Juliol 2004 21:46, Waldo Bastian va escriure:
> On Wed July 14 2004 20:17, Albert Astals Cid wrote:
> > Ok then i attach two patches.
> >
> > KCMdiff is a patch to kcmodule.cpp and .h to add the functions Frans
> > suggested.
> > artsKCMdiff is a patch to port arts kcontrol module to the new functions.
> >
> > I think they are fine, but for some strange reason i don't get the about
> > option all i get in kcontrol Help is a disabled entry saying "About
> > Current Module".
> >
> > Can someone please test the patches and tell me if they see the
> > personalitzed about in arts module or they get "About Current Module" in
> > grey ? (i think my kde stable version may be interfering)
>
> KAboutData is doesn't have a proper copy constructor (unless it was
> recently added) so new KAboutData( aboutData ) doesn't exactly work. Why
> not change the function from setAboutData(const KAboutData&) to
> setAboutData(KAboutData *)?
>
> Cheers,
> Waldo

["KCMdiff" (text/x-diff)]

? KCMdiff
Index: kcmodule.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kcmodule.cpp,v
retrieving revision 1.25
diff -u -r1.25 kcmodule.cpp
--- kcmodule.cpp	13 Jul 2004 14:37:47 -0000	1.25
+++ kcmodule.cpp	15 Jul 2004 18:01:43 -0000
@@ -23,6 +23,7 @@
 
 #include <qlayout.h>
 
+#include <kaboutdata.h> 
 #include <kconfigskeleton.h> 
 #include <kconfigdialogmanager.h>
 #include <kdebug.h>
@@ -37,11 +38,13 @@
 {
 public:
     KCModulePrivate():
+        _about( 0 ),
         _useRootOnlyMsg( true ),
         _hasOwnInstance( true )
         { }
 
     KInstance *_instance;
+    KAboutData *_about;
     QString _rootOnlyMsg;
     bool _useRootOnlyMsg;
     bool _hasOwnInstance;
@@ -90,6 +93,7 @@
 {
     if (d->_hasOwnInstance)
        delete d->_instance;
+    delete d->_about;
     delete d;
 }
 
@@ -114,6 +118,16 @@
         manager->updateWidgetsDefault();
 }
 
+const KAboutData *KCModule::aboutData() const
+{
+    return d->_about;
+}
+
+void KCModule::setAboutData( KAboutData* about )
+{
+    delete d->_about;
+    d->_about = about;
+}
 
 void KCModule::setRootOnlyMsg(const QString& msg)
 {
Index: kcmodule.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kcmodule.h,v
retrieving revision 1.43
diff -u -r1.43 kcmodule.h
--- kcmodule.h	13 Jul 2004 14:37:47 -0000	1.43
+++ kcmodule.h	15 Jul 2004 18:01:43 -0000
@@ -174,13 +174,17 @@
 
   /**
    * This is generally only called for the KBugReport.
-   * Override and have it return a pointer to a constant.
+   * If you override you should  have it return a pointer to a constant.
    *
-   * @note it is mandatory to implement this function.
    *
-   * @returns the KAboutData for this module
+   * @return the KAboutData for this module
    */
-  virtual const KAboutData *aboutData() const { return 0; }
+  virtual const KAboutData *aboutData() const;
+  
+  /**
+   * This sets the KAboutData returned by aboutData()
+   */
+   void setAboutData( KAboutData* about );
 
   /**
    * Indicate which buttons will be used.

["artsKCMdiff" (text/x-diff)]

? artsKCMdiff
Index: arts.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/arts/arts.cpp,v
retrieving revision 1.104
diff -u -r1.104 arts.cpp
--- arts.cpp	8 May 2004 22:13:08 -0000	1.104
+++ arts.cpp	15 Jul 2004 18:01:12 -0000
@@ -217,6 +217,12 @@
 	connect(hardware->midiMapper, SIGNAL( textChanged( const QString& ) ),
 			this, SLOT( slotChanged() ) );
 
+	KAboutData *about =  new KAboutData(I18N_NOOP("kcmarts"),
+                  I18N_NOOP("The Sound Server Control Module"),
+                  0, 0, KAboutData::License_GPL,
+                  I18N_NOOP("(c) 1999 - 2001, Stefan Westerfeld"));
+	about->addAuthor("Stefan Westerfeld",I18N_NOOP("aRts Author") , "stw@kde.org");
+	setAboutData(about);
 }
 
 void KArtsModule::GetSettings( void )
@@ -449,19 +455,6 @@
 		    " an easy way to achieve sound support.");
 }
 
-const KAboutData* KArtsModule::aboutData() const
-{
-   KAboutData *about =
-   new KAboutData(I18N_NOOP("kcmarts"),
-                  I18N_NOOP("The Sound Server Control Module"),
-                  0, 0, KAboutData::License_GPL,
-                  I18N_NOOP("(c) 1999 - 2001, Stefan Westerfeld"));
-
-   about->addAuthor("Stefan Westerfeld",I18N_NOOP("aRts Author") , "stw@kde.org");
-
-   return about;
-}
-
 void KArtsModule::calculateLatency()
 {
 	int latencyInBytes, latencyInMs;
Index: arts.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/arts/arts.h,v
retrieving revision 1.31
diff -u -r1.31 arts.h
--- arts.h	20 Aug 2003 11:30:39 -0000	1.31
+++ arts.h	15 Jul 2004 18:01:12 -0000
@@ -59,7 +59,6 @@
   void defaults();
 
   QString quickHelp() const;
-  const KAboutData* aboutData() const;
 
 private slots:
 

["bellKCM.diff" (text/x-diff)]

? bellKCM.diff
Index: bell.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/bell/bell.cpp,v
retrieving revision 1.50
diff -u -r1.50 bell.cpp
--- bell.cpp	19 May 2004 12:52:11 -0000	1.50
+++ bell.cpp	15 Jul 2004 18:00:55 -0000
@@ -126,6 +126,17 @@
   connect(m_volume, SIGNAL(valueChanged(int)), SLOT(configChanged()));
   connect(m_pitch, SIGNAL(valueChanged(int)), SLOT(configChanged()));
   connect(m_duration, SIGNAL(valueChanged(int)), SLOT(configChanged()));
+  
+  KAboutData *about =
+    new KAboutData(I18N_NOOP("kcmbell"), I18N_NOOP("KDE Bell Control Module"),
+                  0, 0, KAboutData::License_GPL,
+                  I18N_NOOP("(c) 1997 - 2001 Christian Czezatke, Matthias Elter"));
+
+  about->addAuthor("Christian Czezatke", I18N_NOOP("Original author"), \
"e9025461@student.tuwien.ac.at"); +  about->addAuthor("Bernd Wuebben", 0, \
"wuebben@kde.org"); +  about->addAuthor("Matthias Elter", I18N_NOOP("Current \
maintainer"), "elter@kde.org"); +  about->addAuthor("Carsten Pfeiffer", 0, \
"pfeiffer@kde.org"); +  setAboutData(about);
 
   load();
 }
@@ -235,22 +246,6 @@
     " a sound file to be played instead of the standard bell.");
 }
 
-const KAboutData* KBellConfig::aboutData() const
-{
-
-    KAboutData *about =
-    new KAboutData(I18N_NOOP("kcmbell"), I18N_NOOP("KDE Bell Control Module"),
-                  0, 0, KAboutData::License_GPL,
-                  I18N_NOOP("(c) 1997 - 2001 Christian Czezatke, Matthias Elter"));
-
-    about->addAuthor("Christian Czezatke", I18N_NOOP("Original author"), \
                "e9025461@student.tuwien.ac.at");
-    about->addAuthor("Bernd Wuebben", 0, "wuebben@kde.org");
-    about->addAuthor("Matthias Elter", I18N_NOOP("Current maintainer"), \
                "elter@kde.org");
-    about->addAuthor("Carsten Pfeiffer", 0, "pfeiffer@kde.org");
-
-    return about;
-}
-
 void KBellConfig::useBell( bool on )
 {
   m_volume->setEnabled( on );
Index: bell.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/bell/bell.h,v
retrieving revision 1.20
diff -u -r1.20 bell.h
--- bell.h	8 Nov 2003 23:43:50 -0000	1.20
+++ bell.h	15 Jul 2004 18:00:55 -0000
@@ -38,7 +38,6 @@
   void save();
   void defaults();
   QString quickHelp() const;
-  const KAboutData* aboutData() const;
 
  protected slots:
   void ringBell();



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic