From cfe28380063eedb2f9b418215acfe369ea9da5d5 Mon Sep 17 00:00:00 2001 From: Simon Paul St James Date: Mon, 18 Aug 2008 20:33:21 +0000 Subject: Very rough initial attempt at previews-in-tooltip for Konqueror and Dolphin. Still needs extensive work in positioning, scaling/ padding items to fit, and timing things so that the previews are more likely to have been generated when the tooltip is positioned and displayed. CCBUG:161848 svn path=/trunk/KDE/kdebase/apps/; revision=848984 --- src/tooltipmanager.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/tooltipmanager.cpp') diff --git a/src/tooltipmanager.cpp b/src/tooltipmanager.cpp index 8e4ad0eba..2b41ac48f 100644 --- a/src/tooltipmanager.cpp +++ b/src/tooltipmanager.cpp @@ -19,10 +19,10 @@ #include "tooltipmanager.h" +#include "dolphintooltip.h" #include "dolphinmodel.h" #include "dolphinsortfilterproxymodel.h" -#include #include #include @@ -31,7 +31,7 @@ #include #include -K_GLOBAL_STATIC(KFormattedBalloonTipDelegate, g_delegate) +K_GLOBAL_STATIC(DolphinBalloonTooltipDelegate, g_delegate) ToolTipManager::ToolTipManager(QAbstractItemView* parent, DolphinSortFilterProxyModel* model) : @@ -103,7 +103,10 @@ void ToolTipManager::hideToolTip() void ToolTipManager::showToolTip() { - KToolTipItem* tip = new KToolTipItem(KIcon(m_item.iconName()), m_item.getToolTipText()); + // TODO - create tip during requestTip(...) - this makes it more likely that the previews + // job will have completed by the time the tooltip is shown, resulting in less flicker. + // The memory management will be more intricate, though. + DolphinToolTipItem *tip = new DolphinToolTipItem(m_item); KStyleOptionToolTip option; // TODO: get option content from KToolTip or add KToolTip::sizeHint() method @@ -127,12 +130,22 @@ void ToolTipManager::showToolTip() int x = m_itemRect.right(); int y = m_itemRect.bottom(); if (x + size.width() - 1 > desktop.right()) { - x = m_itemRect.left() - size.width(); + // Any room to the left of the item? + if (m_itemRect.left() - size.width() > desktop.left()) + { + x = m_itemRect.left() - size.width(); + } + else + { + // Move left until we are back onscreen; we'll be horizontally + // overlapping m_itemRect, but hopefully the y value will keep us + // from drawing inside it. + x = desktop.right() - size.width(); + } } if (y + size.height() - 1 > desktop.bottom()) { y = m_itemRect.top() - size.height(); } - KToolTip::showTip(QPoint(x, y), tip); } -- cgit v1.3