summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-08-22 13:11:51 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-08-22 13:11:51 (GMT)
commit9bd0d4220e8b8e7a1714536d9e4d6c6e61727d85 (patch)
tree3d45cbd12b1ef310711fea4b93c85f36eab6b178
parentd786e1aeff062ef4f0a962d55ddce7d41c5f512e (diff)
downloadswift-9bd0d4220e8b8e7a1714536d9e4d6c6e61727d85.zip
swift-9bd0d4220e8b8e7a1714536d9e4d6c6e61727d85.tar.bz2
Don't incorrectly mark all messages read in most recently opened chat when a different chat is selected
-rw-r--r--Swift/QtUI/QtChatTabs.cpp4
-rw-r--r--Swift/QtUI/QtChatTabs.h1
-rw-r--r--Swift/QtUI/QtChatWindow.cpp3
-rw-r--r--Swift/QtUI/QtTabbable.cpp8
4 files changed, 13 insertions, 3 deletions
diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp
index 48c882f..c14f9ad 100644
--- a/Swift/QtUI/QtChatTabs.cpp
+++ b/Swift/QtUI/QtChatTabs.cpp
@@ -52,6 +52,10 @@ void QtChatTabs::closeEvent(QCloseEvent* event) {
event->accept();
}
+QtTabbable* QtChatTabs::getCurrentTab() {
+ return qobject_cast<QtTabbable*>(tabs_->currentWidget());
+}
+
void QtChatTabs::addTab(QtTabbable* tab) {
QSizePolicy policy = sizePolicy();
/* Chat windows like to grow - don't let them */
diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h
index 69dd8d1..807b3c1 100644
--- a/Swift/QtUI/QtChatTabs.h
+++ b/Swift/QtUI/QtChatTabs.h
@@ -20,6 +20,7 @@ namespace Swift {
QtChatTabs();
void addTab(QtTabbable* tab);
void minimise();
+ QtTabbable* getCurrentTab();
signals:
void geometryChanged();
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index 5b73fec..de681d5 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -82,7 +82,6 @@ QtChatWindow::QtChatWindow(const QString &contact, UIEventStream* eventStream) :
connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(qAppFocusChanged(QWidget*, QWidget*)));
connect(messageLog_, SIGNAL(gotFocus()), input_, SLOT(setFocus()));
resize(400,300);
- input_->setFocus();
}
QtChatWindow::~QtChatWindow() {
@@ -194,6 +193,7 @@ void QtChatWindow::qAppFocusChanged(QWidget *old, QWidget *now) {
Q_UNUSED(old);
Q_UNUSED(now);
if (isWidgetSelected()) {
+ input_->setFocus();
onAllMessagesRead();
}
@@ -351,7 +351,6 @@ void QtChatWindow::handleInputChanged() {
void QtChatWindow::show() {
QWidget::show();
emit windowOpening();
- input_->setFocus();
}
void QtChatWindow::activate() {
diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp
index 227a975..07a17c1 100644
--- a/Swift/QtUI/QtTabbable.cpp
+++ b/Swift/QtUI/QtTabbable.cpp
@@ -8,6 +8,8 @@
#include <QApplication>
+#include "QtChatTabs.h"
+
namespace Swift {
QtTabbable::~QtTabbable() {
@@ -16,7 +18,11 @@ QtTabbable::~QtTabbable() {
bool QtTabbable::isWidgetSelected() {
/*isActiveWindow() shouldn't be necessary, but I don't trust it as far as I can throw it*/
- return isActiveWindow() && isAncestorOf(QApplication::focusWidget());
+ if (!isActiveWindow()) {
+ return false;
+ }
+ QtChatTabs* parent = qobject_cast<QtChatTabs*>(window());
+ return parent ? parent->getCurrentTab() == this : isAncestorOf(QApplication::focusWidget());
}
}