X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6751f6a52a25857aeafc8ca2db809895663c24bd..c8d8556950005dfd96ebdb41d2f43ad90356367c:/src/panels/information/informationpanel.cpp diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 56810d9af..3b4747b77 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2009 by Peter Penz * + * Copyright (C) 2006-2009 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -20,8 +20,8 @@ #include "informationpanel.h" #include "informationpanelcontent.h" -#include -#include +#include +#include #include #include #include @@ -46,30 +46,15 @@ InformationPanel::~InformationPanel() { } -QSize InformationPanel::sizeHint() const -{ - QSize size = Panel::sizeHint(); - size.setWidth(minimumSizeHint().width()); - return size; -} - void InformationPanel::setSelection(const KFileItemList& selection) { - if (!isVisible()) { - return; - } + m_selection = selection; + m_fileItem = KFileItem(); - if ((selection.count() == 0) && (m_selection.count() == 0)) { - // The selection has not really changed, only the current index. - // QItemSelectionModel emits a signal in this case and it is less - // expensive doing the check this way instead of patching - // DolphinView::emitSelectionChanged(). + if (!isVisible()) { return; } - m_selection = selection; - m_fileItem = KFileItem(); - const int count = selection.count(); if (count == 0) { if (!isEqualToShownUrl(url())) { @@ -96,17 +81,17 @@ void InformationPanel::requestDelayedItemInfo(const KFileItem& item) return; } + cancelRequest(); + if (item.isNull()) { // The cursor is above the viewport. If files are selected, // show information regarding the selection. if (m_selection.size() > 0) { - cancelRequest(); + m_fileItem = KFileItem(); m_infoTimer->start(); } } else if (item.url().isValid() && !isEqualToShownUrl(item.url())) { // The cursor is above an item that is not shown currently - cancelRequest(); - m_urlCandidate = item.url(); m_fileItem = item; m_infoTimer->start(); @@ -167,7 +152,8 @@ void InformationPanel::resizeEvent(QResizeEvent* event) void InformationPanel::contextMenuEvent(QContextMenuEvent* event) { - m_content->configureSettings(); + // TODO: Move code from InformationPanelContent::configureSettings() here + m_content->configureSettings(customContextMenuActions()); Panel::contextMenuEvent(event); } @@ -307,8 +293,10 @@ void InformationPanel::cancelRequest() m_folderStatJob = 0; m_infoTimer->stop(); - m_urlChangedTimer->stop(); m_resetUrlTimer->stop(); + // Don't reset m_urlChangedTimer. As it is assured that the timeout of m_urlChangedTimer + // has the smallest interval (see init()), it is not possible that the exceeded timer + // would overwrite an information provided by a selection or hovering. m_invalidUrlCandidate.clear(); m_urlCandidate.clear(); @@ -327,29 +315,30 @@ void InformationPanel::markUrlAsInvalid() void InformationPanel::init() { - const int defaultDelay = 300; - m_infoTimer = new QTimer(this); - m_infoTimer->setInterval(defaultDelay); + m_infoTimer->setInterval(300); m_infoTimer->setSingleShot(true); connect(m_infoTimer, SIGNAL(timeout()), this, SLOT(slotInfoTimeout())); m_urlChangedTimer = new QTimer(this); - m_urlChangedTimer->setInterval(defaultDelay); + m_urlChangedTimer->setInterval(200); m_urlChangedTimer->setSingleShot(true); connect(m_urlChangedTimer, SIGNAL(timeout()), this, SLOT(showItemInfo())); m_resetUrlTimer = new QTimer(this); - m_resetUrlTimer->setInterval(defaultDelay * 3); + m_resetUrlTimer->setInterval(1000); m_resetUrlTimer->setSingleShot(true); connect(m_resetUrlTimer, SIGNAL(timeout()), this, SLOT(reset())); + Q_ASSERT(m_urlChangedTimer->interval() < m_infoTimer->interval()); + Q_ASSERT(m_urlChangedTimer->interval() < m_resetUrlTimer->interval()); + org::kde::KDirNotify* dirNotify = new org::kde::KDirNotify(QString(), QString(), QDBusConnection::sessionBus(), this); - connect(dirNotify, SIGNAL(FileRenamed(QString, QString)), SLOT(slotFileRenamed(QString, QString))); + connect(dirNotify, SIGNAL(FileRenamed(QString,QString)), SLOT(slotFileRenamed(QString,QString))); connect(dirNotify, SIGNAL(FilesAdded(QString)), SLOT(slotFilesAdded(QString))); connect(dirNotify, SIGNAL(FilesChanged(QStringList)), SLOT(slotFilesChanged(QStringList))); connect(dirNotify, SIGNAL(FilesRemoved(QStringList)), SLOT(slotFilesRemoved(QStringList))); @@ -360,6 +349,7 @@ void InformationPanel::init() connect(m_content, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl))); QVBoxLayout* layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_content); m_initialized = true;