On Mon, Aug 04, 2008 at 08:46:17PM +0200, Ralf Schlatterbeck wrote:
So either QtWengoPhone::currentUserProfileWillDieEventHandlerSlot is not
the right spot to call closeAllTabs for the ChatWindow or this isn't the
right approach altogether.
I'm now closing the chat windows in the Qt method that is called when
the disconnect method is selected from the menu. This already has a
dialog box that asks for confirmation when there is an active call and
seems the right place. Works for us in Kvats.
Have you seen my earlier patch for the problem when pressing "Connect"
while already connecting
http://article.gmane.org/gmane.comp.voip.qutecom.devel/191
this probably should be applied first.
# HG changeset patch
# User Ralf Schlatterbeck <[EMAIL PROTECTED]>
# Date 1218534845 -7200
# Node ID 6c7f2639cbd8199327352ea75d454930ec164c29
# Parent f2ee82624dba46f951970756e8129b63aab098dc
Fix crash when disconnecting/reconnecting with open chat window.
The client would crash when reopening the same chat window after
reconnect that was open before disconnecting. Fixes Kvats issue99.
This is implemented by closing all chat windows in the QT disconnect
routine.
diff -r f2ee82624dba -r 6c7f2639cbd8
wengophone/src/presentation/qt/QtToolBar.cpp
--- a/wengophone/src/presentation/qt/QtToolBar.cpp Tue Aug 12 11:19:27
2008 +0200
+++ b/wengophone/src/presentation/qt/QtToolBar.cpp Tue Aug 12 11:54:05
2008 +0200
@@ -426,6 +426,8 @@ void QtToolBar::logOff() {
}
}
////
+ // Close Chat
+ _qtWengoPhone.closeChatWindow ();
// disable menubar and toolbar to avoid crashes
_ui->menuBar->setEnabled(false);
diff -r f2ee82624dba -r 6c7f2639cbd8
wengophone/src/presentation/qt/QtWengoPhone.cpp
--- a/wengophone/src/presentation/qt/QtWengoPhone.cpp Tue Aug 12 11:19:27
2008 +0200
+++ b/wengophone/src/presentation/qt/QtWengoPhone.cpp Tue Aug 12 11:54:05
2008 +0200
@@ -22,6 +22,7 @@
#include "ui_WengoPhoneWindow.h"
#include <presentation/PFactory.h>
+#include <presentation/qt/chat/QtChatWindow.h>
#include <cutil/global.h>
@@ -307,6 +308,7 @@ QtCallBar & QtWengoPhone::getQtCallBar()
void QtWengoPhone::setChatWindow(QWidget * chatWindow) {
if (!chatWindow) {
+ _chatWindow = NULL;
_ui->actionOpenChatWindow->setEnabled(false);
}
else {
@@ -317,6 +319,13 @@ void QtWengoPhone::setChatWindow(QWidget
QWidget * QtWengoPhone::getChatWindow() const {
return _chatWindow;
+}
+
+void QtWengoPhone::closeChatWindow() {
+ if (_chatWindow)
+ {
+ ((QtChatWindow *)_chatWindow)->closeAllTabs ();
+ }
}
void QtWengoPhone::setQtContactList(QtContactList * qtContactList) {
diff -r f2ee82624dba -r 6c7f2639cbd8
wengophone/src/presentation/qt/QtWengoPhone.h
--- a/wengophone/src/presentation/qt/QtWengoPhone.h Tue Aug 12 11:19:27
2008 +0200
+++ b/wengophone/src/presentation/qt/QtWengoPhone.h Tue Aug 12 11:54:05
2008 +0200
@@ -132,6 +132,7 @@ public:
void setChatWindow(QWidget * chatWindow);
QWidget * getChatWindow() const;
+ void closeChatWindow ();
void showHistory();
diff -r f2ee82624dba -r 6c7f2639cbd8 wengophone/src/presentation/qt/chat/QtChatWindow.cpp
--- a/wengophone/src/presentation/qt/chat/QtChatWindow.cpp Tue Aug 12
11:19:27 2008 +0200
+++ b/wengophone/src/presentation/qt/chat/QtChatWindow.cpp Tue Aug 12
11:54:05 2008 +0200
@@ -435,19 +435,32 @@ void QtChatWindow::updateToolBarActions(
if (widget) {
contactId = widget->getContactId();
qtContactList = _qtWengoPhone.getQtContactList();
- contactProfile =
qtContactList->getCContactList().getContactProfile(contactId.toStdString());
-
- _ui->actionCallContact->setEnabled(contactProfile.hasCall()
- && contactProfile.isAvailable());
- _ui->actionSendSms->setEnabled(!contactProfile.getMobilePhone().empty()
&& !config.getSmsFeatureUseSip());
- _ui->actionSendFile->setEnabled(widget->canDoFileTransfer());
-
- _ui->actionCreateChatConf->setEnabled(widget->canDoMultiChat());
- _ui->actionContactInfo->setEnabled(true);
- //TODO: uncomment when block a contact will be implemented
-
//_ui->actionBlockContact->setEnabled(!contactProfile.isBlocked());
- _ui->actionBlockContact->setEnabled(false);
- ////
+ if (qtContactList)
+ {
+ contactProfile =
qtContactList->getCContactList().getContactProfile(contactId.toStdString());
+
+ _ui->actionCallContact->setEnabled(contactProfile.hasCall()
+ && contactProfile.isAvailable());
+
_ui->actionSendSms->setEnabled(!contactProfile.getMobilePhone().empty() &&
!config.getSmsFeatureUseSip());
+
_ui->actionSendFile->setEnabled(widget->canDoFileTransfer());
+
+
_ui->actionCreateChatConf->setEnabled(widget->canDoMultiChat());
+ _ui->actionContactInfo->setEnabled(true);
+ //TODO: uncomment when block a contact will be implemented
+
//_ui->actionBlockContact->setEnabled(!contactProfile.isBlocked());
+ _ui->actionBlockContact->setEnabled(false);
+ ////
+ }
+ else
+ {
+ _ui->actionCallContact->setEnabled(false);
+ _ui->actionSendSms->setEnabled(false);
+ _ui->actionSendFile->setEnabled(false);
+
+ _ui->actionCreateChatConf->setEnabled(false);
+ _ui->actionContactInfo->setEnabled(false);
+ _ui->actionBlockContact->setEnabled(false);
+ }
}
}
@@ -763,10 +776,14 @@ void QtChatWindow::saveActiveTabChatHist
}
void QtChatWindow::closeEvent(QCloseEvent *event) {
- //LOG_DEBUG(" femeture des sessions ");
- //while(_tabWidget->count()>0) {
- // closeActiveTab();
- //}
+ //closeAllTabs();
+}
+
+void QtChatWindow::closeAllTabs() {
+ LOG_DEBUG("closing all Chat tabs");
+ while(_tabWidget->count()>0) {
+ closeActiveTab();
+ }
}
static QTextEdit* getActiveTextEdit() {
diff -r f2ee82624dba -r 6c7f2639cbd8
wengophone/src/presentation/qt/chat/QtChatWindow.h
--- a/wengophone/src/presentation/qt/chat/QtChatWindow.h Tue Aug 12
11:19:27 2008 +0200
+++ b/wengophone/src/presentation/qt/chat/QtChatWindow.h Tue Aug 12
11:54:05 2008 +0200
@@ -89,6 +89,8 @@ public Q_SLOTS:
void closeActiveTab();
+ void closeAllTabs();
+
void statusChangedSlot(QString contactId);
void saveActiveTabChatHistory();