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

List:       kde-commits
Subject:    KDE/kdenetwork/kopete/kopete
From:       Pali Rohár <pali.rohar () gmail ! com>
Date:       2013-06-02 8:56:30
Message-ID: 20130602085630.53CC8AC85D () svn ! kde ! org
[Download RAW message or body]

SVN commit 1356778 by pali:

In KopeteWindow handle destroying KopeteApplication and do not call \
slotIdentityStatusIconChanged and slotIdentityToolTipChanged when exiting - it cause \
crashing Kopete


 M  +22 -0     kopetewindow.cpp  
 M  +1 -0      kopetewindow.h  


--- trunk/KDE/kdenetwork/kopete/kopete/kopetewindow.cpp #1356777:1356778
@@ -215,6 +215,7 @@
 		QPoint position;
 		KHBox *statusBarWidget;
 		KopeteSystemTray *tray;
+		bool appDestroyed;
 		bool hidden;
 		bool autoHide;
 		unsigned int autoHideTimeout;
@@ -255,6 +256,8 @@
 KopeteWindow::KopeteWindow ( QWidget *parent )
 		: KXmlGuiWindow ( parent ), d ( new Private )
 {
+	d->appDestroyed = false;
+	connect ( kapp, SIGNAL (destroyed()), this, SLOT (slotAppDestroyed()) );
 	setAttribute ( Qt::WA_DeleteOnClose, false );
 	setAttribute ( Qt::WA_QuitOnClose, false );
 	// Applications should ensure that their StatusBar exists before calling \
createGUI() @@ -340,6 +343,11 @@
 	toolBar ( "quickSearchBar" )->installEventFilter ( this );
 }
 
+void KopeteWindow::slotAppDestroyed()
+{
+	d->appDestroyed = true;
+}
+
 void KopeteWindow::initView()
 {
 	QWidget *w = new QWidget ( this );
@@ -1001,6 +1009,13 @@
 
 void KopeteWindow::slotIdentityToolTipChanged ( Kopete::Identity *identity )
 {
+	if ( d->appDestroyed )
+		return;
+
+	KopeteApplication *app = static_cast<KopeteApplication *> ( kapp );
+	if ( app->sessionSaving() || app->isShuttingDown() )
+		return;
+
 	// Adds tooltip for each status icon, useful in case you have many accounts
 	// over one protocol
 	KopeteIdentityStatusBarIcon *i = d->identityStatusBarIcons.value ( identity, 0 );
@@ -1024,6 +1039,13 @@
 //	kDebug(14000) << "Icons: '" <<
 //		status.overlayIcons() << "'" << endl;
 
+	if ( d->appDestroyed )
+		return;
+
+	KopeteApplication *app = static_cast<KopeteApplication *> ( kapp );
+	if ( app->sessionSaving() || app->isShuttingDown() )
+		return;
+
 	if ( identity->onlineStatus() != Kopete::OnlineStatus::Connecting )
 	{
 		// FIXME: It's not global status so don't save it
--- trunk/KDE/kdenetwork/kopete/kopete/kopetewindow.h #1356777:1356778
@@ -73,6 +73,7 @@
 	void slotShowHide();
 	void slotToggleAway();
 	void slotNewInfoEvent();
+	void slotAppDestroyed();
 
 	void setOnlineStatus( uint, const Kopete::StatusMessage& );
 	void setStatusMessage( const Kopete::StatusMessage& );


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

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