diff options
-rw-r--r-- | Swift/QtUI/QtChatWindow.cpp | 7 | ||||
-rw-r--r-- | Swift/QtUI/QtChatWindow.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/QtTabbable.h | 3 | ||||
-rw-r--r-- | Swift/QtUI/QtTextEdit.cpp | 23 | ||||
-rw-r--r-- | Swift/QtUI/QtTextEdit.h | 3 | ||||
-rw-r--r-- | Swift/QtUI/Trellis/QtDynamicGridLayout.cpp | 20 | ||||
-rw-r--r-- | Swift/QtUI/Trellis/QtDynamicGridLayout.h | 1 |
7 files changed, 56 insertions, 2 deletions
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp index a828210..0da4563 100644 --- a/Swift/QtUI/QtChatWindow.cpp +++ b/Swift/QtUI/QtChatWindow.cpp @@ -843,6 +843,13 @@ std::string QtChatWindow::getID() const { return id_; } +void QtChatWindow::setEmphasiseFocus(bool emphasise) { + input_->setAttribute(Qt::WA_MacShowFocusRect, emphasise); +#ifdef SWIFTEN_PLATFORM_WINDOWS + input_->setEmphasiseFocus(emphasise); +#endif +} + void QtChatWindow::showRoomConfigurationForm(Form::ref form) { if (mucConfigurationWindow_) { delete mucConfigurationWindow_.data(); diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h index 25a1948..08ad7ad 100644 --- a/Swift/QtUI/QtChatWindow.h +++ b/Swift/QtUI/QtChatWindow.h @@ -134,6 +134,7 @@ namespace Swift { virtual void showBookmarkWindow(const MUCBookmark& bookmark); virtual void setBookmarkState(RoomBookmarkState bookmarkState); virtual std::string getID() const; + virtual void setEmphasiseFocus(bool emphasise); public slots: void handleChangeSplitterState(QByteArray state); diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h index c2d0961..4073ab4 100644 --- a/Swift/QtUI/QtTabbable.h +++ b/Swift/QtUI/QtTabbable.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 Isode Limited. + * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -20,6 +20,7 @@ namespace Swift { virtual AlertType getWidgetAlertState() {return NoActivity;} virtual int getCount() {return 0;} virtual std::string getID() const = 0; + virtual void setEmphasiseFocus(bool /*emphasise*/) {} protected: QtTabbable(); diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp index 4ffd32a..60dac9b 100644 --- a/Swift/QtUI/QtTextEdit.cpp +++ b/Swift/QtUI/QtTextEdit.cpp @@ -17,7 +17,6 @@ #include <QTextDocument> #include <Swiften/Base/Log.h> -#include <Swiften/Base/foreach.h> #include <Swift/Controllers/SettingConstants.h> @@ -81,14 +80,36 @@ void QtTextEdit::keyPressEvent(QKeyEvent* event) { } } +void QtTextEdit::setEmphasiseFocus(bool emphasise) { + emphasiseFocus_ = emphasise; + updateEmphasisedFocus(); +} + +void QtTextEdit::updateEmphasisedFocus() { + if (emphasiseFocus_) { + if (hasFocus()) { + setStyleSheet("border: 2px solid palette(highlight);"); + } + else { + setStyleSheet(""); + } + } + else { + setStyleSheet(""); + } + handleTextChanged(); +} + void QtTextEdit::focusInEvent(QFocusEvent* event) { receivedFocus(); QTextEdit::focusInEvent(event); + updateEmphasisedFocus(); } void QtTextEdit::focusOutEvent(QFocusEvent* event) { lostFocus(); QTextEdit::focusOutEvent(event); + updateEmphasisedFocus(); } void QtTextEdit::handleTextChanged() { diff --git a/Swift/QtUI/QtTextEdit.h b/Swift/QtUI/QtTextEdit.h index 0c2b740..921c4b9 100644 --- a/Swift/QtUI/QtTextEdit.h +++ b/Swift/QtUI/QtTextEdit.h @@ -26,6 +26,7 @@ namespace Swift { QtTextEdit(SettingsProvider* settings, QWidget* parent = nullptr); virtual ~QtTextEdit(); virtual QSize sizeHint() const; + void setEmphasiseFocus(bool emphasise); signals: void wordCorrected(QString& word); @@ -52,6 +53,7 @@ namespace Swift { void setUpSpellChecker(); void spellCheckerSettingsWindow(); PositionPair getWordFromCursor(int cursorPosition); + void updateEmphasisedFocus(); private: SpellChecker* checker_; @@ -59,5 +61,6 @@ namespace Swift { std::vector<QAction*> replaceWordActions_; SettingsProvider* settings_; QPointer<QtSpellCheckerWindow> spellCheckerWindow_; + bool emphasiseFocus_ = false; }; } diff --git a/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp b/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp index 3d80d95..5600cc8 100644 --- a/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp +++ b/Swift/QtUI/Trellis/QtDynamicGridLayout.cpp @@ -48,6 +48,7 @@ int QtDynamicGridLayout::addTab(QtTabbable* tab, const QString& title) { if (tabWidget) { tabWidget->addTab(tab, title); } + tab->setEmphasiseFocus(getDimension().width() > 1 || getDimension().height() > 1); return tabWidget ? indexOf(tab) : -1; } @@ -318,6 +319,25 @@ void QtDynamicGridLayout::setDimensions(const QSize& dim) { resizing_ = false; setCurrentWidget(restoredWidget); + + updateEmphasiseFocusOnTabs(); +} + +void QtDynamicGridLayout::updateEmphasiseFocusOnTabs() { + const auto currentDimensions = getDimension(); + + for (int y = 0; y < gridLayout_->rowCount(); y++) { + for (int x = 0; x < gridLayout_->columnCount(); x++) { + QLayoutItem* layoutItem = gridLayout_->itemAtPosition(y, x); + QtTabWidget* tabWidget = dynamic_cast<QtTabWidget*>(layoutItem->widget()); + assert(tabWidget); + for (int index = 0; index < tabWidget->count(); index++) { + QtTabbable* tab = dynamic_cast<QtTabbable*>(tabWidget->widget(index)); + assert(tab); + tab->setEmphasiseFocus(currentDimensions.height() > 1 || currentDimensions.width() > 1); + } + } + } } void QtDynamicGridLayout::moveCurrentTabRight() { diff --git a/Swift/QtUI/Trellis/QtDynamicGridLayout.h b/Swift/QtUI/Trellis/QtDynamicGridLayout.h index 4aed0df..682ae41 100644 --- a/Swift/QtUI/Trellis/QtDynamicGridLayout.h +++ b/Swift/QtUI/Trellis/QtDynamicGridLayout.h @@ -70,6 +70,7 @@ namespace Swift { private: void moveTab(QtTabWidget* tabWidget, int oldIndex, int newIndex); QtTabWidget* createDNDTabWidget(QWidget* parent); + void updateEmphasiseFocusOnTabs(); private: QGridLayout *gridLayout_; |