commit ea170e48c681dab5caf0f5b432b3e1e185404215 branch master Author: Sergio Martins 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 @@ -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( 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 @@ -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 *mCollectionViewStateSaver; KViewStateMaintainer *mCollectionSelectionModelStateSaver; bool mIsClosing; + QSet 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 #include -#include -#include -#include -#include +#include +#include +#include +#include #include @@ -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 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 -#include #include #include #include #include #include -#include class QTextStream; @@ -43,10 +41,9 @@ namespace CalendarSupport { class Calendar; } - namespace KOrg { + class HTMLExportSettings; -typedef QSharedPointer 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 );