diff options
author | Arno <am@disconnect.de> | 2010-10-23 15:09:49 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-10-23 15:09:49 +0200 |
commit | 7e0abc7cde4a9c02fabc27cc2b6506bd41f0588d (patch) | |
tree | dff223d42a9515f961ded35eaae9ceba77824580 /fileview.cpp | |
parent | 9092371858356efde3e2d6d002f692308127389c (diff) | |
download | SheMov-7e0abc7cde4a9c02fabc27cc2b6506bd41f0588d.tar.gz SheMov-7e0abc7cde4a9c02fabc27cc2b6506bd41f0588d.tar.bz2 SheMov-7e0abc7cde4a9c02fabc27cc2b6506bd41f0588d.zip |
Fix hover issues
Hopefully this commit fixes all issues with hovering over items.
First, only use QCursor::pos() to determine the position of the hover
window and fix position calculation accordingly. For that SmGlobals now
return a QSize of the actual cursor size. Introduced a hoverOffeset to
HoverWindow defaulting to SmGlobals::cursorSize() + 30 to prevent a
HoverLeave event on showing the HoverWindow.
Also fixed Qt::WindowFlags of HoverWindow. We don't want the HoverWindow
to show in the taskbar or get sent to background when clicking on an
item.
Diffstat (limited to 'fileview.cpp')
-rw-r--r-- | fileview.cpp | 122 |
1 files changed, 57 insertions, 65 deletions
diff --git a/fileview.cpp b/fileview.cpp index fdd51e4..cbdd8e0 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -40,6 +40,9 @@ FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { mCreateFolderDialog = new MessageDialog(tr("Enter folder name"), folderTitle, this); connect(mCreateFolderDialog, SIGNAL(accepted()), this, SLOT(doCreateFolder())); mHoverWin = new HoverWindow; + QSize curSize = SmGlobals::instance()->cursorSize(); + mHoverWin->setHoverOffset(QPoint(curSize.width() + 30, 0)); + readConfig(); } void FileView::markFiles(){ @@ -147,78 +150,67 @@ void FileView::resizeEvent(QResizeEvent *e){ bool FileView::event(QEvent *e){ QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if((hEvent->type() == QEvent::HoverEnter) || (hEvent->type() == QEvent::HoverLeave) || (hEvent->type() == QEvent::HoverMove)){ - if(!mHover){ - return true; - } - if(e->type() == QEvent::HoverLeave){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - return true; - } - QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorOffset()); - QModelIndex curIdx = indexAt(hotSpot); - if(!curIdx.isValid()){ - return true; - } - if(curIdx.column() != 0){ - mHoverWin->setVisible(false); - return true; - } - QFileInfo fi(curIdx.data(QFileSystemModel::FilePathRole).toString()); - if(!fi.exists()){ - return true; + if(!hEvent){ + return QTreeView::event(e); + } + if(!mHover){ + return true; + } + if(e->type() == QEvent::HoverLeave){ + return exitHover(); + } + QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() - SmGlobals::instance()->cursorSize().height()); + QModelIndex curIdx = indexAt(hotSpot); + if((e->type() == QEvent::HoverEnter) || (e->type() == QEvent::HoverMove)){ + if(!curIdx.isValid() || (curIdx.column() != 0)){ + return exitHover(); } - QList<QVariant> hoverData; - if(fi.isDir()){ - hoverData << fi.fileName(); - QDir curDir(fi.absoluteFilePath()); - QStringList files = curDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Name); - hoverData << files; - }else if(fi.isFile()){ - QString mimeType = Helper::mimeType(fi.absoluteFilePath()); - if(mimeType.startsWith("image")){ - QPixmap pm(fi.absoluteFilePath()); - hoverData << pm; - }else{ - mHoverWin->setVisible(false); - return true; - } + } + QFileInfo fi(curIdx.data(QFileSystemModel::FilePathRole).toString()); + if(!fi.exists()){ + return true; + } + QList<QVariant> hoverData; + if(fi.isDir()){ + hoverData << fi.fileName(); + QDir curDir(fi.absoluteFilePath()); + QStringList files = curDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Name); + hoverData << files; + }else if(fi.isFile()){ + QString mimeType = Helper::mimeType(fi.absoluteFilePath()); + if(mimeType.startsWith("image")){ + QPixmap pm(fi.absoluteFilePath()); + hoverData << pm; }else{ - mHoverWin->setVisible(false); - return true; + return exitHover(); } - QPoint globalPos = mapToGlobal(hotSpot); - QPoint where = globalPos + QPoint(30, 0); - if(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; + }else{ + return exitHover(); + } + if(e->type() == QEvent::HoverEnter){ + mCurHover = curIdx; + mHoverWin->setData(hoverData); + mHoverWin->setPos(); + mHoverWin->setVisible(true); + return true; + } + if(e->type() == QEvent::HoverMove){ + if(curIdx != mCurHover){ mHoverWin->setData(hoverData); - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setPos(where); + mCurHover = curIdx; + mHoverWin->setPos(); mHoverWin->setVisible(true); return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ - mCurHover = curIdx; - mHoverWin->setData(hoverData); - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setVisible(false); - mHoverWin->setPos(where); - mHoverWin->setVisible(true); - return true; - }else{ - if(mHoverWin->pixmapHeight()){ - where = QPoint(where.x(), where.y() - mHoverWin->pixmapHeight() / 2); - } - mHoverWin->setPos(where); - return true; - } + }else{ + mHoverWin->setPos(); + return true; } } return QTreeView::event(e); } + +bool FileView::exitHover(bool exitVal){ + mHoverWin->setVisible(false); + mCurHover = QModelIndex(); + return exitVal; +} |