From e963c5e939f4e1b7cd8f8d653ec2d1cadbec4a8d Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Mon, 23 Feb 2015 13:09:55 +0100 Subject: Fix chat window title showing wrong chat title Setup an application wide focus handler which updates the title if a focus change to a QtTabWidget happened. Test-Information: Tested on OS X 10.9.5 with Qt 5.4.0. Change-Id: Ib2e2f4c4a93deddb286350bdef685eb7aee504c9 diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp index 60ffbea..e869028 100644 --- a/Swift/QtUI/QtChatTabs.cpp +++ b/Swift/QtUI/QtChatTabs.cpp @@ -40,6 +40,7 @@ QtChatTabs::QtChatTabs(bool singleWindow, SettingsProvider* settingsProvider, bo #endif dynamicGrid_ = new QtDynamicGridLayout(this, trellisMode); connect(dynamicGrid_, SIGNAL(tabCloseRequested(int)), this, SLOT(handleTabCloseRequested(int))); + connect(dynamicGrid_, SIGNAL(onCurrentIndexChanged(int)), this, SLOT(handleCurrentTabIndexChanged(int))); QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(0); @@ -172,6 +173,10 @@ void QtChatTabs::handleWidgetShown() { show(); } +void QtChatTabs::handleCurrentTabIndexChanged(int newIndex) { + handleTabTitleUpdated(dynamicGrid_->widget(newIndex)); +} + void QtChatTabs::handleWantsToActivate() { QtTabbable* widget = qobject_cast(sender()); Q_ASSERT(widget); diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h index 04e9eca..bee03ec 100644 --- a/Swift/QtUI/QtChatTabs.h +++ b/Swift/QtUI/QtChatTabs.h @@ -42,6 +42,7 @@ namespace Swift { void moveEvent(QMoveEvent* event); private slots: + void handleCurrentTabIndexChanged(int newIndex); void handleTabClosing(); void handleTabTitleUpdated(); void handleTabTitleUpdated(QWidget* widget); diff --git a/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp b/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp index e0bfa33..cc3208b 100644 --- a/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp +++ b/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp @@ -8,6 +8,8 @@ #include +#include +#include #include #include #include @@ -23,6 +25,7 @@ QtDynamicGridLayout::QtDynamicGridLayout(QWidget* parent, bool enableDND) : QWid gridLayout_ = new QGridLayout(this); setContentsMargins(0,0,0,0); setDimensions(QSize(1,1)); + connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*,QWidget*))); } QtDynamicGridLayout::~QtDynamicGridLayout() { @@ -103,6 +106,17 @@ int QtDynamicGridLayout::indexOf(const QWidget* widget) const { return -1; } +void QtDynamicGridLayout::handleApplicationFocusChanged(QWidget*, QWidget* newFocus) { + if (newFocus) { + if (isAncestorOf(newFocus)) { + QtTabbable *newTab = dynamic_cast(newFocus->parentWidget()); + if (newTab) { + onCurrentIndexChanged(currentIndex()); + } + } + } +} + int QtDynamicGridLayout::currentIndex() const { return indexOf(currentWidget()); } diff --git a/Swift/QtUI/Trellis/QtDynamicGridLayout.h b/Swift/QtUI/Trellis/QtDynamicGridLayout.h index 3b798bd..616ee5e 100644 --- a/Swift/QtUI/Trellis/QtDynamicGridLayout.h +++ b/Swift/QtUI/Trellis/QtDynamicGridLayout.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -47,6 +47,7 @@ namespace Swift { signals: void tabCloseRequested(int index); + void onCurrentIndexChanged(int newIndex); public slots: void setDimensions(const QSize& dim); @@ -62,6 +63,7 @@ namespace Swift { private slots: void handleTabCloseRequested(int index); void handleTabCurrentChanged(int index); + void handleApplicationFocusChanged(QWidget* oldFocus, QWidget* newFocus); private: void moveTab(QtTabWidget* tabWidget, int oldIndex, int newIndex); -- cgit v0.10.2-6-g49f6