CVS commit by cullmann: backport fix for #75559 M +48 -9 katedocument.cpp 1.681.2.5 M +24 -13 katedocument.h 1.264.2.3 --- kdelibs/kate/part/katedocument.cpp #1.681.2.4:1.681.2.5 @@ -72,4 +72,5 @@ #include #include +#include #include @@ -2384,5 +2385,4 @@ bool KateDocument::openFile(KIO::Job * j } - // update file type updateFileType (KateFactory::self()->fileTypeManager()->fileType (this)); @@ -2390,4 +2390,7 @@ bool KateDocument::openFile(KIO::Job * j // read vars readVariables(); + + // update the md5 digest + createDigest( m_digest ); } @@ -2507,4 +2510,7 @@ bool KateDocument::saveFile() success = buffer->saveFile (m_file); + // update the md5 digest + createDigest( m_digest ); + // add file activateDirWatch (); @@ -4003,6 +4009,14 @@ void KateDocument::guiActivateEvent( KPa } -void KateDocument::setDocName (QString ) +void KateDocument::setDocName (QString name ) { + if ( !name.isEmpty() ) + { + // TODO check for similarly named documents + m_docName = name; + emit nameChanged((Kate::Document *) this); + return; + } + int count = -1; @@ -4813,6 +4827,13 @@ bool KateDocument::checkColorValue( QStr void KateDocument::slotModOnHdDirty (const QString &path) { - if ((path == m_file) && (!m_modOnHd || m_modOnHdReason != 1)) + if ((path == m_dirWatchFile) && (!m_modOnHd || m_modOnHdReason != 1)) + { + // compare md5 with the one we have (if we have one) + if ( ! m_digest.isEmpty() ) { + QCString tmp; + if ( createDigest( tmp ) && tmp == m_digest ) + return; + } m_modOnHd = true; m_modOnHdReason = 1; @@ -4823,5 +4844,5 @@ void KateDocument::slotModOnHdDirty (con void KateDocument::slotModOnHdCreated (const QString &path) { - if ((path == m_file) && (!m_modOnHd || m_modOnHdReason != 2)) + if ((path == m_dirWatchFile) && (!m_modOnHd || m_modOnHdReason != 2)) { m_modOnHd = true; @@ -4833,5 +4854,5 @@ void KateDocument::slotModOnHdCreated (c void KateDocument::slotModOnHdDeleted (const QString &path) { - if ((path == m_file) && (!m_modOnHd || m_modOnHdReason != 3)) + if ((path == m_dirWatchFile) && (!m_modOnHd || m_modOnHdReason != 3)) { m_modOnHd = true; @@ -4841,4 +4862,22 @@ void KateDocument::slotModOnHdDeleted (c } +bool KateDocument::createDigest( QCString &result ) +{ + bool ret = false; + result = ""; + if ( url().isLocalFile() ) + { + QFile f ( url().path() ); + if ( f.open( IO_ReadOnly) ) + { + KMD5 md5; + ret = md5.update( f ); + md5.hexDigest( result ); + f.close(); + } + } + return ret; +} + bool KateDocument::wrapCursor () { --- kdelibs/kate/part/katedocument.h #1.264.2.2:1.264.2.3 @@ -714,4 +714,14 @@ class KateDocument : public Kate::Docume void slotModOnHdDeleted (const QString &path); + private: + /** + * create a MD5 digest of the file, if it is a local file, + * and fill it into the string @p result. + * This is using KMD5::hexDigest(). + * + * @return wheather the operation was attempted and succeded. + */ + bool createDigest( QCString &result ); + public: // should cursor be wrapped ? take config + blockselection state in account @@ -740,4 +750,5 @@ class KateDocument : public Kate::Docume bool m_modOnHd; unsigned char m_modOnHdReason; + QCString m_digest; // MD5 digest, updated on load/save QString m_docName;