]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/tooltipmanager.cpp
Removed fix for negative x-coordinate again and added a TODO. We must provide a solut...
[dolphin.git] / src / tooltipmanager.cpp
index cc3c9eb5a2bbe0b3efa5f35133abf6a423145614..71c29e51b7f001c05f3cfcd23c2b8131a7d22226 100644 (file)
 
 #include "tooltipmanager.h"
 
+#include "dolphintooltip.h"
 #include "dolphinmodel.h"
 #include "dolphinsortfilterproxymodel.h"
 
-#include <kformattedballoontipdelegate.h>
 #include <kicon.h>
 #include <ktooltip.h>
 
@@ -31,7 +31,7 @@
 #include <QTimer>
 #include <QToolTip>
 
-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
@@ -117,7 +120,7 @@ void ToolTipManager::showToolTip()
     option.decorationSize = QSize(32, 32);
 
     const QSize size = g_delegate->sizeHint(&option, tip);
-    const QRect desktop = QApplication::desktop()->availableGeometry();
+    const QRect desktop = QApplication::desktop()->screenGeometry(m_itemRect.bottomRight());
 
     // m_itemRect defines the area of the item, where the tooltip should be
     // shown. Per default the tooltip is shown in the bottom right corner.
@@ -126,18 +129,14 @@ void ToolTipManager::showToolTip()
     // - the content is not drawn inside m_itemRect
     int x = m_itemRect.right();
     int y = m_itemRect.bottom();
-    const int xDiff = x + size.width()  - desktop.width();
-    const int yDiff = y + size.height() - desktop.height();
-
-    if ((xDiff > 0) && (yDiff > 0)) {
+    // TODO: handle usecase if x or y get smaller than the 
+    // desktop-left or the desktop-top
+    if (x + size.width() - 1 > desktop.right()) {
         x = m_itemRect.left() - size.width();
+    }
+    if (y + size.height() - 1 > desktop.bottom()) {
         y = m_itemRect.top() - size.height();
-    } else if (xDiff > 0) {
-        x -= xDiff;
-    } else if (yDiff > 0) {
-        y -= yDiff;
     }
-
     KToolTip::showTip(QPoint(x, y), tip);
 }