Index: src/dialogs/katedialogs.h =================================================================== --- src/dialogs/katedialogs.h +++ src/dialogs/katedialogs.h @@ -318,7 +318,7 @@ * This dialog will prompt the user for what do with a file that is * modified on disk. * If the file wasn't deleted, it has a 'diff' button, which will create - * a diff file (uing diff(1)) and launch that using KRun. + * a diff file (using diff(1)) and launch that using KRun. */ class KateModOnHdPrompt : public QObject { @@ -340,6 +340,7 @@ void saveAsTriggered(); void ignoreTriggered(); void reloadTriggered(); + void autoReloadTriggered(); private Q_SLOTS: /** Index: src/dialogs/katedialogs.cpp =================================================================== --- src/dialogs/katedialogs.cpp +++ src/dialogs/katedialogs.cpp @@ -1273,6 +1273,12 @@ // If the file isn't deleted, present a diff button const bool onDiskDeleted = modtype == KTextEditor::ModificationInterface::OnDiskDeleted; if (!onDiskDeleted) { + QAction * aAutoReload = new QAction(i18n("Enable Auto Reload"), this); + aAutoReload->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); + aAutoReload->setToolTip(i18n("Will never again warn about on disk changes but always reload.")); + m_message->addAction(aAutoReload, false); + connect(aAutoReload, SIGNAL(triggered()), this, SIGNAL(autoReloadTriggered())); + if (!QStandardPaths::findExecutable(QStringLiteral("diff")).isEmpty()) { m_diffAction = new QAction(i18n("View &Difference"), this); m_diffAction->setToolTip(i18n("Shows a diff of the changes")); Index: src/document/katedocument.h =================================================================== --- src/document/katedocument.h +++ src/document/katedocument.h @@ -966,6 +966,7 @@ private Q_SLOTS: void onModOnHdSaveAs(); void onModOnHdReload(); + void onModOnHdAutoReload(); void onModOnHdIgnore(); public: @@ -1082,6 +1083,7 @@ bool m_userSetEncodingForNextReload = false; bool m_modOnHd = false; + bool m_autoReloadMode = false; ModifiedOnDiskReason m_modOnHdReason = OnDiskUnmodified; ModifiedOnDiskReason m_prevModOnHdReason = OnDiskUnmodified; Index: src/document/katedocument.cpp =================================================================== --- src/document/katedocument.cpp +++ src/document/katedocument.cpp @@ -4165,6 +4165,11 @@ return; } + if (!isModified() && m_autoReloadMode) { + onModOnHdAutoReload(); + return; + } + if (!m_fileChangedDialogsActivated || m_modOnHdHandler) { return; } @@ -4178,6 +4183,7 @@ m_modOnHdHandler = new KateModOnHdPrompt(this, m_modOnHdReason, reasonedMOHString()); connect(m_modOnHdHandler.data(), &KateModOnHdPrompt::saveAsTriggered, this, &DocumentPrivate::onModOnHdSaveAs); connect(m_modOnHdHandler.data(), &KateModOnHdPrompt::reloadTriggered, this, &DocumentPrivate::onModOnHdReload); + connect(m_modOnHdHandler.data(), &KateModOnHdPrompt::autoReloadTriggered, this, &DocumentPrivate::onModOnHdAutoReload); connect(m_modOnHdHandler.data(), &KateModOnHdPrompt::ignoreTriggered, this, &DocumentPrivate::onModOnHdIgnore); } @@ -4210,6 +4216,18 @@ delete m_modOnHdHandler; } +void KTextEditor::DocumentPrivate::onModOnHdAutoReload() +{ + if (m_modOnHdHandler) { + delete m_modOnHdHandler; + m_autoReloadMode = true; + } + + if (!m_reloading) { + documentReload(); + } +} + void KTextEditor::DocumentPrivate::onModOnHdIgnore() { // ignore as long as m_prevModOnHdReason == m_modOnHdReason