diff options
| -rw-r--r-- | Swift/QtUI/QtUIFactory.cpp | 20 | ||||
| -rw-r--r-- | Swift/QtUI/QtUIFactory.h | 4 | 
2 files changed, 13 insertions, 11 deletions
| diff --git a/Swift/QtUI/QtUIFactory.cpp b/Swift/QtUI/QtUIFactory.cpp index ffbe3c0..40ce95e 100644 --- a/Swift/QtUI/QtUIFactory.cpp +++ b/Swift/QtUI/QtUIFactory.cpp @@ -86,12 +86,19 @@ MUCSearchWindow* QtUIFactory::createMUCSearchWindow() {  ChatWindow* QtUIFactory::createChatWindow(const JID& contact, UIEventStream* eventStream) {  	QtChatWindow* window = dynamic_cast<QtChatWindow*>(chatWindowFactory->createChatWindow(contact, eventStream));  	chatWindows.push_back(window); -	foreach (QtChatWindow* existingWindow, chatWindows) { -		connect(window, SIGNAL(fontResized(int)), existingWindow, SLOT(handleFontResized(int))); -		connect(existingWindow, SIGNAL(fontResized(int)), window, SLOT(handleFontResized(int))); +	std::vector<QPointer<QtChatWindow> > deletions; +	foreach (QPointer<QtChatWindow> existingWindow, chatWindows) { +		if (existingWindow.isNull()) { +			deletions.push_back(existingWindow); +		} else { +			connect(window, SIGNAL(fontResized(int)), existingWindow, SLOT(handleFontResized(int))); +			connect(existingWindow, SIGNAL(fontResized(int)), window, SLOT(handleFontResized(int))); +		} +	} +	foreach (QPointer<QtChatWindow> deletedWindow, deletions) { +		chatWindows.erase(std::remove(chatWindows.begin(), chatWindows.end(), deletedWindow), chatWindows.end());  	}  	connect(window, SIGNAL(fontResized(int)), this, SLOT(handleChatWindowFontResized(int))); -	connect(window, SIGNAL(destroyed(QObject*)), this, SLOT(handleChatWindowDestroyed(QObject*)));  	window->handleFontResized(chatFontSize);  	return window;  } @@ -101,11 +108,6 @@ void QtUIFactory::handleChatWindowFontResized(int size) {  	settings->storeInt(CHATWINDOW_FONT_SIZE, size);  } -void QtUIFactory::handleChatWindowDestroyed(QObject* window) { -	QtChatWindow* chatWindow = qobject_cast<QtChatWindow*>(window); -	chatWindows.erase(std::remove(chatWindows.begin(), chatWindows.end(), chatWindow), chatWindows.end()); -} -  UserSearchWindow* QtUIFactory::createUserSearchWindow(UserSearchWindow::Type type, UIEventStream* eventStream, const std::set<std::string>& groups) {  	return new QtUserSearchWindow(eventStream, type, groups);  }; diff --git a/Swift/QtUI/QtUIFactory.h b/Swift/QtUI/QtUIFactory.h index 828f1b4..a576ded 100644 --- a/Swift/QtUI/QtUIFactory.h +++ b/Swift/QtUI/QtUIFactory.h @@ -7,6 +7,7 @@  #pragma once  #include <QObject> +#include <QPointer>  #include <Swift/Controllers/UIInterfaces/UIFactory.h> @@ -42,7 +43,6 @@ namespace Swift {  		private slots:  			void handleLoginWindowGeometryChanged(); -			void handleChatWindowDestroyed(QObject*);  			void handleChatWindowFontResized(int);  		private: @@ -53,7 +53,7 @@ namespace Swift {  			QtChatWindowFactory* chatWindowFactory;  			QtMainWindow* lastMainWindow;  			QtLoginWindow* loginWindow; -			std::vector<QtChatWindow*> chatWindows; +			std::vector<QPointer<QtChatWindow> > chatWindows;  			bool startMinimized;  			int chatFontSize;  	}; | 
 Swift
 Swift