- const QRect screen = QApplication::desktop()->screenGeometry(QCursor::pos());
-
- // Restrict tooltip size to current screen size when needed.
- // Because layout controlling widget doesn't respect widget's maximumSize property
- // (correct me if I'm wrong), we need to let layout do its work, then manually change
- // geometry if resulting widget doesn't fit the screen.
-
- // Step #1 - make sizeHint return calculated tooltip size
- m_fileMetaDataToolTip->layout()->setSizeConstraint(QLayout::SetFixedSize);
- m_fileMetaDataToolTip->adjustSize();
- QSize size = m_fileMetaDataToolTip->sizeHint();
-
- // Step #2 - correct tooltip size when needed
- if (size.width() > screen.width()) {
- size.setWidth(screen.width());
- }
- if (size.height() > screen.height()) {
- size.setHeight(screen.height());
- }
-
- // m_itemRect defines the area of the item, where the tooltip should be
- // shown. Per default the tooltip is shown centered at the bottom.
- // It must be assured that:
- // - the content is fully visible
- // - the content is not drawn inside m_itemRect
- const bool hasRoomToLeft = (m_itemRect.left() - size.width() - m_margin >= screen.left());
- const bool hasRoomToRight = (m_itemRect.right() + size.width() + m_margin <= screen.right());
- const bool hasRoomAbove = (m_itemRect.top() - size.height() - m_margin >= screen.top());
- const bool hasRoomBelow = (m_itemRect.bottom() + size.height() + m_margin <= screen.bottom());
- if (!hasRoomAbove && !hasRoomBelow && !hasRoomToLeft && !hasRoomToRight) {
- return;
+ // Adjust the size to get a proper sizeHint()
+ m_fileMetaDataWidget->adjustSize();
+ if (!m_tooltipWidget) {
+ m_tooltipWidget.reset(new KToolTipWidget());