diff options
author | Tobias Markmann <tm@ayena.de> | 2015-11-30 17:27:05 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2015-11-30 17:27:05 (GMT) |
commit | 6c7c1411080dceed313f8d50e43454a160707121 (patch) | |
tree | 4795ed2438f7da8897838923449c229234d4fbb9 | |
parent | d5f073592e1d2ea5f57e12d5c2ddcae57c05f96f (diff) | |
download | swift-6c7c1411080dceed313f8d50e43454a160707121.zip swift-6c7c1411080dceed313f8d50e43454a160707121.tar.bz2 |
Workaround QTabBar early eliding bug on OS X
The issue is visible when having two chat windows with the
same label. One of them is elided even though enough horizontal
space is available.
Test-Information:
Tested multiple chats including some with the same tab
label.
Tested many open chat windows overflowing the horizontal space
of the tab bar to test scroll behavior on overflow.
Verified that the code stops the early eliding bug on
OS X 10.10.5 with Qt 5.4.2.
Verified that workaround is not needed on Debian 8.2 with
Qt 5.4.2.
Change-Id: I2dc0d417fb6f402dda2f7575a83ca3faf4eb63cf
-rw-r--r-- | Swift/QtUI/Trellis/QtDNDTabBar.cpp | 16 | ||||
-rw-r--r-- | Swift/QtUI/Trellis/QtDNDTabBar.h | 9 |
2 files changed, 19 insertions, 6 deletions
diff --git a/Swift/QtUI/Trellis/QtDNDTabBar.cpp b/Swift/QtUI/Trellis/QtDNDTabBar.cpp index a6806c6..dbe397b 100644 --- a/Swift/QtUI/Trellis/QtDNDTabBar.cpp +++ b/Swift/QtUI/Trellis/QtDNDTabBar.cpp @@ -8,10 +8,10 @@ #include <cassert> -#include <QMouseEvent> -#include <QDropEvent> #include <QDrag> +#include <QDropEvent> #include <QMimeData> +#include <QMouseEvent> #include <QPainter> #include <QTabWidget> @@ -50,6 +50,18 @@ QSize QtDNDTabBar::sizeHint() const { return hint; } +QSize QtDNDTabBar::tabSizeHint(int index) const { + QSize tabSize = QTabBar::tabSizeHint(index); +#if defined(Q_OS_MAC) + // With multiple tabs having the same label in a QTabBar, the size hint computed by + // Qt on OS X is too small and it is elided even though there is enough horizontal + // space available. We work around this issue by adding the width of a letter to the + // size hint. + tabSize += QSize(QFontMetrics(font()).width("I"), 0); +#endif + return tabSize; +} + void QtDNDTabBar::dragEnterEvent(QDragEnterEvent* dragEnterEvent) { QtDNDTabBar* sourceTabBar = dynamic_cast<QtDNDTabBar*>(dragEnterEvent->source()); if (sourceTabBar) { diff --git a/Swift/QtUI/Trellis/QtDNDTabBar.h b/Swift/QtUI/Trellis/QtDNDTabBar.h index 194cce8..71ca94b 100644 --- a/Swift/QtUI/Trellis/QtDNDTabBar.h +++ b/Swift/QtUI/Trellis/QtDNDTabBar.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. */ @@ -26,9 +26,10 @@ class QtDNDTabBar : public QTabBar { void onDropSucceeded(); protected: - void dragEnterEvent(QDragEnterEvent* dragEnterEvent); - void dropEvent(QDropEvent* dropEvent); - bool event(QEvent* event); + virtual void dragEnterEvent(QDragEnterEvent* dragEnterEvent); + virtual void dropEvent(QDropEvent* dropEvent); + virtual bool event(QEvent* event); + virtual QSize tabSizeHint(int index) const; private: int defaultTabHeight; |