Do not attempt to show detailed tooltips without torrent metadata. Closes #6768.

Computations for detailed tooltips are not protected against unavailable
metadata, that leads to asserts or crashes. But since those tooltips are
useless in this case, do not show them at all. Inform user that detailed
tooltip becomes available once torrent metadata are fetched.
This commit is contained in:
Eugene Shalygin 2017-05-10 22:15:22 +02:00 committed by sledgehammer999
parent f19854c054
commit ceed9b468e
No known key found for this signature in database
GPG key ID: 6E4A2D025B7CC9A2

View file

@ -251,8 +251,8 @@ void PiecesBar::showToolTip(const QHelpEvent *e)
QString toolTipText; QString toolTipText;
QTextStream stream(&toolTipText, QIODevice::WriteOnly); QTextStream stream(&toolTipText, QIODevice::WriteOnly);
bool showDetailedInformation = QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier); const bool showDetailedInformation = QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier);
if (showDetailedInformation) { if (showDetailedInformation && m_torrent->hasMetadata()) {
const int imagePos = e->pos().x() - borderWidth; const int imagePos = e->pos().x() - borderWidth;
if ((imagePos >=0) && (imagePos < m_image.width())) { if ((imagePos >=0) && (imagePos < m_image.width())) {
stream << "<html><body>"; stream << "<html><body>";
@ -286,7 +286,10 @@ void PiecesBar::showToolTip(const QHelpEvent *e)
} }
else { else {
stream << simpleToolTipText(); stream << simpleToolTipText();
stream << '\n' << tr("Hold Shift key for detailed information"); if (showDetailedInformation) // metadata are not available at this point
stream << '\n' << tr("Wait until metadata become available to see detailed information");
else
stream << '\n' << tr("Hold Shift key for detailed information");
} }
stream.flush(); stream.flush();
@ -296,7 +299,7 @@ void PiecesBar::showToolTip(const QHelpEvent *e)
void PiecesBar::highlightFile(int imagePos) void PiecesBar::highlightFile(int imagePos)
{ {
if (!m_torrent || (imagePos < 0) || (imagePos >= m_image.width())) if (!m_torrent || !m_torrent->hasMetadata() || (imagePos < 0) || (imagePos >= m_image.width()))
return; return;
PieceIndexToImagePos transform {m_torrent->info(), m_image}; PieceIndexToImagePos transform {m_torrent->info(), m_image};