diff options
| -rw-r--r-- | src/composewindow.cpp | 18 | ||||
| -rw-r--r-- | tests/test_mainwindow.cpp | 15 |
2 files changed, 31 insertions, 2 deletions
diff --git a/src/composewindow.cpp b/src/composewindow.cpp index ccf606e..6193e1c 100644 --- a/src/composewindow.cpp +++ b/src/composewindow.cpp @@ -312,11 +312,25 @@ void ComposeWindow::buildUi() // Icon above text, at the user's choice: a big target, with the word // removing any doubt about what it does. + // + // A SQUARE of a fixed size, and vertically centred against the header + // block. Expanding was wrong in a way that only shows on screen: it + // stretched the button to the full height of the form beside it while the + // icon and the label kept their natural sizes, so the two sat apart with a + // gap between them inside a tall rectangle. Fixed removes the stretch, and + // the alignment centres the whole button rather than its contents. m_sendButton = new QToolButton(central); m_sendButton->setObjectName(QStringLiteral("sendButton")); m_sendButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - m_sendButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); - headerRow->addWidget(m_sendButton, 0); + const int sendIconSize = qMax(24, m_config.toolbarIconSize() + 8); + m_sendButton->setIconSize(QSize(sendIconSize, sendIconSize)); + // Derived from the icon rather than hardcoded, so the square still fits + // its contents if toolbar_icon_size changes. The extra covers the label + // under the icon and the style's own margins. + const int sendSide = sendIconSize + 34; + m_sendButton->setFixedSize(sendSide, sendSide); + m_sendButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + headerRow->addWidget(m_sendButton, 0, Qt::AlignVCenter); layout->addLayout(headerRow); diff --git a/tests/test_mainwindow.cpp b/tests/test_mainwindow.cpp index 35f7093..4c33302 100644 --- a/tests/test_mainwindow.cpp +++ b/tests/test_mainwindow.cpp @@ -12267,6 +12267,21 @@ void TestMainWindow::theComposerSplitsItsToolbarByScope() QVERIFY2(sendButton->defaultAction() == send, "the Send button does not carry the send action itself"); + // A SQUARE, and not a widget that stretches. An Expanding vertical policy + // grew it to the full height of the header form beside it while the icon + // and label kept their natural sizes, leaving the two marooned at either + // end of a tall rectangle with a gap between them. Nothing in the layout + // or the actions could see that, which is why it is asserted here. + QCOMPARE(sendButton->sizePolicy().verticalPolicy(), QSizePolicy::Fixed); + QCOMPARE(sendButton->width(), sendButton->height()); + + // And the icon is the larger half of the button, not a small mark with + // the label doing the work. + QVERIFY2(sendButton->iconSize().width() >= 24, + qPrintable(QStringLiteral("the Send icon is %1px, too small to " + "read as the button's subject") + .arg(sendButton->iconSize().width()))); + // Item 143: the formatting buttons carry icons, and keep their words as // the tooltip so nothing becomes unnameable in an icon-only row. for (const QString &name : { QStringLiteral("format_bold"), |
