diff --git a/src/widget/form/chatform.cpp b/src/widget/form/chatform.cpp index b7442b91c..bb6051e36 100644 --- a/src/widget/form/chatform.cpp +++ b/src/widget/form/chatform.cpp @@ -901,6 +901,11 @@ QString ChatForm::secondsToDHMS(quint32 duration) return cD + res.sprintf("%dd%02dh %02dm %02ds", days, hours, minutes, seconds); } +bool ChatForm::getIsTyping() +{ + return isTyping; +} + void ChatForm::setFriendTyping(bool isTyping) { chatWidget->setTypingNotificationVisible(isTyping); diff --git a/src/widget/form/chatform.h b/src/widget/form/chatform.h index ea211fdcf..239642818 100644 --- a/src/widget/form/chatform.h +++ b/src/widget/form/chatform.h @@ -44,6 +44,7 @@ public: void loadHistory(QDateTime since, bool processUndelivered = false); void dischargeReceipt(int receipt); + bool getIsTyping(); void setFriendTyping(bool isTyping); OfflineMsgEngine* getOfflineMsgEngine(); diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index 093531b63..162b9f842 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -683,7 +683,9 @@ void Widget::onFriendStatusChanged(int friendId, Status status) case Status::Busy: fStatus = tr("busy", "contact status"); break; case Status::Offline: - fStatus = tr("offline", "contact status"); break; + fStatus = tr("offline", "contact status"); + f->getChatForm()->setFriendTyping(false); // Hide the "is typing" message when a friend goes offline + break; default: fStatus = tr("online", "contact status"); break; } @@ -695,6 +697,10 @@ void Widget::onFriendStatusChanged(int friendId, Status status) if (isActualChange && status != Status::Offline) { // wait a little QTimer::singleShot(250, f->getChatForm()->getOfflineMsgEngine(), SLOT(deliverOfflineMsgs())); + + // Send another typing notification if the contact comes back online + if (f->getChatForm()->getIsTyping() && Settings::getInstance().isTypingNotificationEnabled()) + Core::getInstance()->sendTyping(f->getFriendID(), true); } }