[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