summaryrefslogtreecommitdiff
authorzecke <zecke>2004-09-12 20:31:20 (UTC)
committer zecke <zecke>2004-09-12 20:31:20 (UTC)
commitb52e2e46ec535a5307276b8fdf1e578aa5d29283 (patch) (unidiff)
treef30d0fd2faaf89c2bc982e3f8a645645bf74edd8
parent90aaa298cc69522e88e1f81ade7d5259131b1544 (diff)
downloadopie-b52e2e46ec535a5307276b8fdf1e578aa5d29283.zip
opie-b52e2e46ec535a5307276b8fdf1e578aa5d29283.tar.gz
opie-b52e2e46ec535a5307276b8fdf1e578aa5d29283.tar.bz2
-Only create configWidgets once per config dialog, properly delete them
-Delete the Widgets before we remove the plugin from our address space some random clean ups
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/today.cpp38
-rw-r--r--core/pim/today/today.h1
-rw-r--r--core/pim/today/todayconfig.cpp32
-rw-r--r--core/pim/today/todayconfig.h4
4 files changed, 43 insertions, 32 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index a8c8651..be7cbce 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -29,4 +29,5 @@
29#include <qtimer.h> 29#include <qtimer.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qmessagebox.h>
31 32
32using namespace Opie::Ui; 33using namespace Opie::Ui;
@@ -55,12 +56,10 @@ Today::Today( QWidget* parent, const char* name, WFlags fl )
55 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) ); 56 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) );
56 57
57 #if defined(Q_WS_QWS) 58#if !defined(QT_NO_COP)
58 #if !defined(QT_NO_COP)
59 59
60 QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this ); 60 QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this );
61 connect ( todayChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 61 connect ( todayChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
62 this, SLOT ( channelReceived(const QCString&,const QByteArray&) ) ); 62 this, SLOT ( channelReceived(const QCString&,const QByteArray&) ) );
63 #endif 63#endif
64 #endif
65 64
66 setOwnerField(); 65 setOwnerField();
@@ -85,5 +84,4 @@ Today::Today( QWidget* parent, const char* name, WFlags fl )
85 loadPlugins(); 84 loadPlugins();
86 initialize(); 85 initialize();
87 QPEApplication::showWidget( this );
88} 86}
89 87
@@ -180,9 +178,22 @@ void Today::loadPlugins() {
180 m_pluginLoader->setAutoDelete( true ); 178 m_pluginLoader->setAutoDelete( true );
181 179
182 OPluginItem::List lst = m_pluginLoader->allAvailable( true );
183
184 m_manager = new OPluginManager( m_pluginLoader ); 180 m_manager = new OPluginManager( m_pluginLoader );
185 m_manager->load(); 181 m_manager->load();
186 182
183 /*
184 * check if loading of Plugins crashed
185 */
186 if( m_pluginLoader->isInSafeMode() ) {
187 QMessageBox::information(this, tr("Today Error"),
188 tr("<qt>The plugin '%1' caused Today to crash."
189 " It could be that the plugin is not properly"
190 " installed.<br>Today tries to continue loading"
191 " plugins.</qt>")
192 .arg( m_manager->crashedPlugin().name()));
193 }
194
195 OPluginItem::List lst = m_pluginLoader->filtered( true );
196
197
187 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) { 198 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) {
188 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface ); 199 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface );
@@ -234,5 +245,5 @@ void Today::startConfig() {
234 conf.setUpPlugins( m_manager, m_pluginLoader ); 245 conf.setUpPlugins( m_manager, m_pluginLoader );
235 246
236 if ( conf.exec() == QDialog::Accepted ) { 247 if ( QPEApplication::execDialog(&conf) == QDialog::Accepted ) {
237 conf.writeConfig(); 248 conf.writeConfig();
238 initialize(); 249 initialize();
@@ -345,10 +356,9 @@ void Today::editCard() {
345 356
346Today::~Today() { 357Today::~Today() {
347 if (m_pluginLoader) { 358 for(QMap<QString, TodayPlugin>::Iterator it = pluginList.begin(); it != pluginList.end(); ++it )
348 delete m_pluginLoader; 359 delete it.data().guiBox;
349 } 360
350 if (m_manager) { 361 delete m_pluginLoader;
351 delete m_manager; 362 delete m_manager;
352 }
353} 363}
354 364
diff --git a/core/pim/today/today.h b/core/pim/today/today.h
index c947ae1..dfc819d 100644
--- a/core/pim/today/today.h
+++ b/core/pim/today/today.h
@@ -41,5 +41,4 @@ namespace Opie {
41 41
42class Today : public TodayBase { 42class Today : public TodayBase {
43
44 Q_OBJECT 43 Q_OBJECT
45 44
diff --git a/core/pim/today/todayconfig.cpp b/core/pim/today/todayconfig.cpp
index c9823d4..dacce8b 100644
--- a/core/pim/today/todayconfig.cpp
+++ b/core/pim/today/todayconfig.cpp
@@ -97,10 +97,9 @@ TodayConfig::TodayConfig( QWidget* parent, const char* name, bool modal )
97 previousItem = 0l; 97 previousItem = 0l;
98 readConfig(); 98 readConfig();
99 QPEApplication::showDialog( this );
100} 99}
101 100
102 101
103void TodayConfig::setUpPlugins( OPluginManager * plugManager, OPluginLoader *plugLoader ) { 102void TodayConfig::setUpPlugins( OPluginManager * plugManager, OPluginLoader *plugLoader ) {
104 103 m_configMap.clear();
105 104
106 m_pluginManager = plugManager; 105 m_pluginManager = plugManager;
@@ -114,15 +113,17 @@ void TodayConfig::setUpPlugins( OPluginManager * plugManager, OPluginLoader *plu
114 113
115 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface ); 114 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface );
115 TodayConfigWidget *widget = iface->guiPart()->configWidget( TabWidget3 );
116 116
117 if ( iface->guiPart()->configWidget(this) != 0l ) { 117 if (!widget )
118 TodayConfigWidget* widget = iface->guiPart()->configWidget( TabWidget3 ); 118 continue;
119 TabWidget3->addTab( widget, iface->guiPart()->pixmapNameConfig() 119
120 , iface->guiPart()->appName() ); 120 m_configMap.insert( iface, widget );
121 } 121 TabWidget3->addTab( widget, iface->guiPart()->pixmapNameConfig()
122 , iface->guiPart()->appName() );
122 } 123 }
123 124
124 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) { 125 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it )
125 pluginManagement( (*it) ); 126 pluginManagement( (*it) );
126 } 127
127 128
128 TabWidget3->setCurrentTab( tab_2 ); 129 TabWidget3->setCurrentTab( tab_2 );
@@ -175,8 +176,8 @@ void TodayConfig::writeConfig() {
175 176
176 QListViewItemIterator list_it( m_appletListView ); 177 QListViewItemIterator list_it( m_appletListView );
177 // 178 OPluginItem::List lst = m_pluginLoader->allAvailable( true );
179
178 // this makes sure the names get saved in the order selected 180 // this makes sure the names get saved in the order selected
179 for ( ; list_it.current(); ++list_it ) { 181 for ( ; list_it.current(); ++list_it ) {
180 OPluginItem::List lst = m_pluginLoader->allAvailable( true );
181 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) { 182 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) {
182 if ( QString::compare( (*it).name() , list_it.current()->text(0) ) == 0 ) { 183 if ( QString::compare( (*it).name() , list_it.current()->text(0) ) == 0 ) {
@@ -204,10 +205,9 @@ void TodayConfig::writeConfig() {
204 setAutoStart(); 205 setAutoStart();
205 206
206 OPluginItem::List lst = m_pluginManager->managedPlugins(); 207 OPluginItem::List managedLst = m_pluginManager->managedPlugins();
207 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) { 208 for ( OPluginItem::List::Iterator it = managedLst.begin(); it != managedLst.end(); ++it ) {
208 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface ); 209 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface );
209 if ( iface->guiPart()->configWidget(this) != 0l ) { 210 if ( m_configMap.contains( iface ) )
210 iface->guiPart()->configWidget(this)->writeConfig(); 211 m_configMap[iface]->writeConfig();
211 }
212 } 212 }
213} 213}
diff --git a/core/pim/today/todayconfig.h b/core/pim/today/todayconfig.h
index ab79f31..81120d3 100644
--- a/core/pim/today/todayconfig.h
+++ b/core/pim/today/todayconfig.h
@@ -31,4 +31,6 @@ class QLabel;
31class QSpinBox; 31class QSpinBox;
32class QTabWidget; 32class QTabWidget;
33class TodayConfigWidget;
34class TodayPluginInterface;
33 35
34namespace Opie { 36namespace Opie {
@@ -41,5 +43,4 @@ namespace Opie {
41 43
42class TodayConfig : public QDialog { 44class TodayConfig : public QDialog {
43
44 Q_OBJECT 45 Q_OBJECT
45 46
@@ -65,4 +66,5 @@ private:
65 QListView* m_appletListView; 66 QListView* m_appletListView;
66 QMap<QString,QCheckListItem*> m_applets; 67 QMap<QString,QCheckListItem*> m_applets;
68 QMap<TodayPluginInterface*,TodayConfigWidget*> m_configMap;
67 69
68 int m_autoStart; 70 int m_autoStart;