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

List:       kde-commits
Subject:    [kdepim] ea170e4: Revert 87b008b02. Using a QSharedPointer breaks a
From:       Sergio Martins <iamsergio () gmail ! com>
Date:       2011-01-02 12:19:49
Message-ID: 20110102121949.6881CA6090 () git ! kde ! org
[Download RAW message or body]

commit ea170e48c681dab5caf0f5b432b3e1e185404215
branch master
Author: Sergio Martins <iamsergio@gmail.com>
Date:   Sun Jan 2 12:13:00 2011 +0000

    Revert 87b008b02. Using a QSharedPointer breaks a signal-slot connection, and \
fixing that would mean propagating QSharedPointer to lots of places.  Instead, just \
free the settings object when the KJob emits result().

diff --git a/korganizer/actionmanager.cpp b/korganizer/actionmanager.cpp
index fc2bd8d..cda5059 100644
--- a/korganizer/actionmanager.cpp
+++ b/korganizer/actionmanager.cpp
@@ -40,6 +40,7 @@
 #include "kowindowlist.h"
 #include "reminderclient.h"
 #include "akonadicollectionview.h"
+#include "htmlexportjob.h"
 #include "htmlexportsettings.h"
 
 #include <KCalCore/FileStorage>
@@ -1179,7 +1180,8 @@ bool ActionManager::saveURL()
 
 void ActionManager::exportHTML()
 {
-  HTMLExportSettingsPtr settings( new HTMLExportSettings( "KOrganizer" ) );
+  HTMLExportSettings *settings = new HTMLExportSettings( "KOrganizer" );
+  mSettingsToFree.insert( settings );
   // Manually read in the config, because parametrized kconfigxt objects don't
   // seem to load the config theirselves
   settings->readConfig();
@@ -1197,10 +1199,10 @@ void ActionManager::exportHTML()
   exportHTML( settings );
 }
 
-void ActionManager::exportHTML( const KOrg::HTMLExportSettingsPtr &settings )
+void ActionManager::exportHTML( KOrg::HTMLExportSettings *settings )
 {
   if ( !settings || settings->outputFile().isEmpty() ) {
-    kWarning() << "Settings is null, or the output file is empty " << \
settings.data(); +    kWarning() << "Settings is null, or the output file is empty " \
<< settings;  return;
   }
 
@@ -1231,6 +1233,7 @@ void ActionManager::exportHTML( const \
KOrg::HTMLExportSettingsPtr &settings )  }
   }
 
+  connect( exportJob, SIGNAL(result(KJob*)), SLOT(handleExportJobResult(KJob*)) );
   exportJob->start();
 }
 
@@ -2112,4 +2115,16 @@ void ActionManager::openEventEditor( const QString &summary,
   kWarning() << "Not implemented in korg-desktop";
 }
 
+void ActionManager::handleExportJobResult( KJob *job )
+{
+  HtmlExportJob *htmlExportJob = qobject_cast<HtmlExportJob*>( job );
+  Q_ASSERT( htmlExportJob );
+
+  if ( mSettingsToFree.contains( htmlExportJob->settings() ) ) {
+    mSettingsToFree.remove( htmlExportJob->settings() );
+    delete htmlExportJob->settings();
+  }
+}
+
+
 #include "actionmanager.moc"
diff --git a/korganizer/actionmanager.h b/korganizer/actionmanager.h
index 07a7812..4f85265 100644
--- a/korganizer/actionmanager.h
+++ b/korganizer/actionmanager.h
@@ -30,7 +30,6 @@
 
 #include "korganizer_export.h"
 #include "korganizer/part.h"
-#include "htmlexportjob.h"
 
 #include <KCalCore/Incidence>
 
@@ -128,7 +127,7 @@ class KORGANIZERPRIVATE_EXPORT ActionManager : public QObject
     bool saveAsURL( const KUrl &kurl );
 
     void exportHTML();
-    void exportHTML( const KOrg::HTMLExportSettingsPtr & );
+    void exportHTML( KOrg::HTMLExportSettings * );
     void toggleMenubar( bool dontShowWarning = false );
 
   public:
@@ -368,6 +367,7 @@ class KORGANIZERPRIVATE_EXPORT ActionManager : public QObject
     QWidget *dialogParent();
 
   private slots:
+    void handleExportJobResult( KJob* );
     void dumpText( const QString & );  // only for debugging purposes
 
     void slotResourcesChanged(bool);
@@ -451,6 +451,7 @@ class KORGANIZERPRIVATE_EXPORT ActionManager : public QObject
     KViewStateMaintainer<Akonadi::ETMViewStateSaver> *mCollectionViewStateSaver;
     KViewStateMaintainer<Akonadi::ETMViewStateSaver> \
*mCollectionSelectionModelStateSaver;  bool mIsClosing;
+    QSet<KOrg::HTMLExportSettings*> mSettingsToFree;
 };
 
 #endif
diff --git a/korganizer/htmlexportjob.cpp b/korganizer/htmlexportjob.cpp
index 54e574e..213456c 100644
--- a/korganizer/htmlexportjob.cpp
+++ b/korganizer/htmlexportjob.cpp
@@ -26,10 +26,10 @@
 #include <calendarsupport/calendar.h>
 #include <calendarsupport/utils.h>
 
-#include <kcalcore/calendar.h>
-#include <kcalcore/event.h>
-#include <kcalcore/todo.h>
-#include <kcalutils/incidenceformatter.h>
+#include <KCalCore/Calendar>
+#include <KCalCore/Event>
+#include <KCalCore/Todo>
+#include <KCalUtils/IncidenceFormatter>
 
 #include <akonadi/contact/contactsearchjob.h>
 
@@ -54,12 +54,11 @@ using namespace KOrg;
 
 static QString cleanChars( const QString &txt );
 
-
 //@cond PRIVATE
 class KOrg::HtmlExportJob::Private
 {
   public:
-    Private( CalendarSupport::Calendar *calendar, const HTMLExportSettingsPtr \
&settings, QWidget *parent ) +    Private( CalendarSupport::Calendar *calendar, \
KOrg::HTMLExportSettings *settings, QWidget *parent )  : mCalendar( calendar ),
         mSettings( settings ),
         mParentWidget( parent ),
@@ -67,7 +66,7 @@ class KOrg::HtmlExportJob::Private
     {}
 
     CalendarSupport::Calendar *mCalendar;
-    HTMLExportSettingsPtr mSettings;
+    KOrg::HTMLExportSettings *mSettings;
     QWidget *mParentWidget;
     QMap<QDate,QString> mHolidayMap;
     qulonglong mSubJobCount;
@@ -75,7 +74,7 @@ class KOrg::HtmlExportJob::Private
 };
 //@endcond
 
-HtmlExportJob::HtmlExportJob( CalendarSupport::Calendar *calendar, const \
HTMLExportSettingsPtr &settings, QWidget *parent ) +HtmlExportJob::HtmlExportJob( \
CalendarSupport::Calendar *calendar, KOrg::HTMLExportSettings *settings, QWidget \
*parent )  : KJob( parent ), d( new Private( calendar, settings, parent ) )
 {
 }
@@ -176,7 +175,7 @@ void HtmlExportJob::finishExport()
 
   KMessageBox::information( d->mParentWidget, saveMessage,
                i18nc( "@title:window", "Export Status" ) );
-  deleteLater();
+  emitResult();
 }
 
 bool HtmlExportJob::save( const QString &fileName )
@@ -888,4 +887,9 @@ QDate HtmlExportJob::toDate() const
   return d->mSettings->dateEnd().date();
 }
 
+HTMLExportSettings* HtmlExportJob::settings() const
+{
+  return d->mSettings;
+}
+
 #include "htmlexportjob.moc"
diff --git a/korganizer/htmlexportjob.h b/korganizer/htmlexportjob.h
index aeb5aa9..ccbf560 100644
--- a/korganizer/htmlexportjob.h
+++ b/korganizer/htmlexportjob.h
@@ -24,14 +24,12 @@
 
 #include <kjob.h>
 
-#include <KCalCore/Incidence>
 #include <KCalCore/Event>
 #include <KCalCore/Todo>
 
 #include <QtCore/QDateTime>
 #include <QtCore/QString>
 #include <QtCore/QTextStream>
-#include <QSharedPointer>
 
 class QTextStream;
 
@@ -43,10 +41,9 @@ namespace CalendarSupport {
   class Calendar;
 }
 
-
 namespace KOrg {
+
 class HTMLExportSettings;
-typedef QSharedPointer<HTMLExportSettings> HTMLExportSettingsPtr;
 
 /**
   This class provides the functions to export a calendar as a HTML page.
@@ -59,13 +56,13 @@ class HtmlExportJob : public KJob
     /**
       Create new HTML exporter for calendar.
     */
-    HtmlExportJob( CalendarSupport::Calendar *calendar, const HTMLExportSettingsPtr \
                &settings,
-                   QWidget *parent = 0 );
+    HtmlExportJob( CalendarSupport::Calendar *calendar, HTMLExportSettings \
*settings, QWidget *parent = 0 );  virtual ~HtmlExportJob();
 
     void addHoliday( const QDate &date, const QString &name );
 
     virtual void start();
+    HTMLExportSettings* settings() const;
 
   protected:
     void createWeekView( QTextStream *ts );


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

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