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

List:       kde-commits
Subject:    KDE/kdepim/kalarm
From:       David Jarvie <software () astrojar ! org ! uk>
Date:       2009-06-23 21:56:00
Message-ID: 1245794160.670185.9668.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 986011 by djarvie:

Use QPointers to hold pointers to more modal dialogues


 M  +33 -17    functions.cpp  
 M  +2 -0      lib/autoqpointer.h  


--- trunk/KDE/kdepim/kalarm/functions.cpp #986010:986011
@@ -851,9 +851,11 @@
 */
 void editNewAlarm(EditAlarmDlg::Type type, QWidget* parent)
 {
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(false, type, true, parent);
+	// Use AutoQPointer to guard against crash on application exit while
+	// the dialogue is still open. It prevents double deletion (both on
+	// deletion of parent, and on return from this function).
+	AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(false, type, true, \
parent);  doEditNewAlarm(editDlg);
-	delete editDlg;
 }
 
 /******************************************************************************
@@ -879,11 +881,13 @@
 		default:
 			return;
 	}
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(false, type, true, parent);
+	// Use AutoQPointer to guard against crash on application exit while
+	// the dialogue is still open. It prevents double deletion (both on
+	// deletion of parent, and on return from this function).
+	AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(false, type, true, \
parent);  if (setAction  ||  text)
 		editDlg->setAction(action, *text);
 	doEditNewAlarm(editDlg);
-	delete editDlg;
 }
 
 /******************************************************************************
@@ -892,9 +896,11 @@
 */
 void editNewAlarm(const KAEvent* preset, QWidget* parent)
 {
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(false, preset, true, parent);
+	// Use AutoQPointer to guard against crash on application exit while
+	// the dialogue is still open. It prevents double deletion (both on
+	// deletion of parent, and on return from this function).
+	AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(false, preset, true, \
parent);  doEditNewAlarm(editDlg);
-	delete editDlg;
 }
 
 /******************************************************************************
@@ -978,7 +984,10 @@
 		KMessageBox::sorry(parent, i18nc("@info", "You must enable a template calendar to \
save the template in"));  return;
 	}
-	EditAlarmDlg* editDlg;
+	// Use AutoQPointer to guard against crash on application exit while
+	// the dialogue is still open. It prevents double deletion (both on
+	// deletion of parent, and on return from this function).
+	AutoQPointer<EditAlarmDlg> editDlg;
 	if (preset)
 		editDlg = EditAlarmDlg::create(true, preset, true, parent);
 	else
@@ -993,7 +1002,6 @@
 		KAlarm::addTemplate(event, resource, editDlg);
 		Undo::saveAdd(event, resource);
 	}
-	delete editDlg;
 }
 
 } // namespace
@@ -1012,7 +1020,10 @@
 		return;
 	}
 	QString id = event->id();
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(false, event, false, parent, \
EditAlarmDlg::RES_USE_EVENT_ID); +	// Use AutoQPointer to guard against crash on \
application exit while +	// the dialogue is still open. It prevents double deletion \
(both on +	// deletion of parent, and on return from this function).
+	AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(false, event, false, \
parent, EditAlarmDlg::RES_USE_EVENT_ID);  if (editDlg->exec() == QDialog::Accepted)
 	{
 		if (!AlarmCalendar::resources()->event(id))
@@ -1044,7 +1055,6 @@
 
 		outputAlarmWarnings(editDlg, &newEvent);
 	}
-	delete editDlg;
 }
 
 /******************************************************************************
@@ -1085,13 +1095,18 @@
 {
 	if (AlarmCalendar::resources()->eventReadOnly(event->id()))
 	{
-		// The template is read-only, so make the dialogue read-only
-		EditAlarmDlg* editDlg = EditAlarmDlg::create(true, event, false, parent, \
EditAlarmDlg::RES_PROMPT, true); +		// The template is read-only, so make the \
dialogue read-only. +                // Use AutoQPointer to guard against crash on \
application exit while +                // the dialogue is still open. It prevents \
double deletion (both on +                // deletion of parent, and on return from \
this function). +                AutoQPointer<EditAlarmDlg> editDlg = \
EditAlarmDlg::create(true, event, false, parent, EditAlarmDlg::RES_PROMPT, true);  \
                editDlg->exec();
-		delete editDlg;
 		return;
 	}
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(true, event, false, parent, \
EditAlarmDlg::RES_USE_EVENT_ID); +        // Use AutoQPointer to guard against crash \
on application exit while +        // the dialogue is still open. It prevents double \
deletion (both on +        // deletion of parent, and on return from this function).
+        AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(true, event, \
false, parent, EditAlarmDlg::RES_USE_EVENT_ID);  if (editDlg->exec() == \
QDialog::Accepted)  {
 		KAEvent newEvent;
@@ -1105,7 +1120,6 @@
 		updateTemplate(newEvent, editDlg);
 		Undo::saveEdit(undo, newEvent);
 	}
-	delete editDlg;
 }
 
 /******************************************************************************
@@ -1113,9 +1127,11 @@
 */
 void viewAlarm(const KAEvent* event, QWidget* parent)
 {
-	EditAlarmDlg* editDlg = EditAlarmDlg::create(false, event, false, parent, \
EditAlarmDlg::RES_PROMPT, true); +        // Use AutoQPointer to guard against crash \
on application exit while +        // the dialogue is still open. It prevents double \
deletion (both on +        // deletion of parent, and on return from this function).
+        AutoQPointer<EditAlarmDlg> editDlg = EditAlarmDlg::create(false, event, \
false, parent, EditAlarmDlg::RES_PROMPT, true);  editDlg->exec();
-	delete editDlg;
 }
 
 /******************************************************************************
--- trunk/KDE/kdepim/kalarm/lib/autoqpointer.h #986010:986011
@@ -37,6 +37,8 @@
 		AutoQPointer(T* p) : QPointer<T>(p) {}
 		AutoQPointer(const QPointer<T>& p) : QPointer<T>(p) {}
 		~AutoQPointer()  { delete this->data(); }
+		AutoQPointer<T>& operator=(const AutoQPointer<T>& p) { QPointer<T>::operator=(p); \
return *this; } +		AutoQPointer<T>& operator=(T* p) { QPointer<T>::operator=(p); \
return *this; }  };
 
 #endif // AUTOQPOINTER_H


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

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