┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/views/dolphinview.cpp1
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.cpp53
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.h9
3 files changed, 44 insertions, 19 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index e3a986e11..7eb4d2454 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -182,6 +182,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) :
#endif
m_versionControlObserver = new VersionControlObserver(this);
+ m_versionControlObserver->setView(this);
m_versionControlObserver->setModel(m_model);
connect(m_versionControlObserver, &VersionControlObserver::infoMessage, this, &DolphinView::infoMessage);
connect(m_versionControlObserver, &VersionControlObserver::errorMessage, this, &DolphinView::errorMessage);
diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp
index 62f4cfd16..fc74390a9 100644
--- a/src/views/versioncontrol/versioncontrolobserver.cpp
+++ b/src/views/versioncontrol/versioncontrolobserver.cpp
@@ -21,6 +21,7 @@
#include "dolphin_versioncontrolsettings.h"
#include "dolphindebug.h"
+#include "views/dolphinview.h"
#include "kitemviews/kfileitemmodel.h"
#include "updateitemstatesthread.h"
@@ -35,8 +36,10 @@ VersionControlObserver::VersionControlObserver(QObject* parent) :
m_pendingItemStatesUpdate(false),
m_versionedDirectory(false),
m_silentUpdate(false),
+ m_view(nullptr),
m_model(nullptr),
m_dirVerificationTimer(nullptr),
+ m_pluginsInitialized(false),
m_plugin(nullptr),
m_updateItemStatesThread(nullptr)
{
@@ -84,6 +87,26 @@ KFileItemModel* VersionControlObserver::model() const
return m_model;
}
+void VersionControlObserver::setView(DolphinView* view)
+{
+ if (m_view) {
+ disconnect(m_view, &DolphinView::activated,
+ this, &VersionControlObserver::delayedDirectoryVerification);
+ }
+
+ m_view = view;
+
+ if (m_view) {
+ connect(m_view, &DolphinView::activated,
+ this, &VersionControlObserver::delayedDirectoryVerification);
+ }
+}
+
+DolphinView* VersionControlObserver::view() const
+{
+ return m_view;
+}
+
QList<QAction*> VersionControlObserver::actions(const KFileItemList& items) const
{
bool hasNullItems = false;
@@ -256,18 +279,9 @@ int VersionControlObserver::createItemStatesList(QMap<QString, QVector<ItemState
return index - firstIndex; // number of processed items
}
-KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& directory) const
+KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& directory)
{
- static bool pluginsAvailable = true;
- static QList<KVersionControlPlugin*> plugins;
-
- if (!pluginsAvailable) {
- // A searching for plugins has already been done, but no
- // plugins are installed
- return nullptr;
- }
-
- if (plugins.isEmpty()) {
+ if (!m_pluginsInitialized) {
// No searching for plugins has been done yet. Query the KServiceTypeTrader for
// all fileview version control plugins and remember them in 'plugins'.
const QStringList enabledPlugins = VersionControlSettings::enabledPlugins();
@@ -275,16 +289,19 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& director
const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin"));
for (KService::List::ConstIterator it = pluginServices.constBegin(); it != pluginServices.constEnd(); ++it) {
if (enabledPlugins.contains((*it)->name())) {
- KVersionControlPlugin* plugin = (*it)->createInstance<KVersionControlPlugin>();
+ KVersionControlPlugin* plugin = (*it)->createInstance<KVersionControlPlugin>(this);
if (plugin) {
- plugins.append(plugin);
+ m_plugins.append(plugin);
}
}
}
- if (plugins.isEmpty()) {
- pluginsAvailable = false;
- return nullptr;
- }
+ m_pluginsInitialized = true;
+ }
+
+ if (m_plugins.empty()) {
+ // A searching for plugins has already been done, but no
+ // plugins are installed
+ return nullptr;
}
// We use the number of upUrl() calls to find the best matching plugin
@@ -294,7 +311,7 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& director
// Verify whether the current directory contains revision information
// like .svn, .git, ...
- foreach (KVersionControlPlugin* plugin, plugins) {
+ foreach (KVersionControlPlugin* plugin, m_plugins) {
const QString fileName = directory.path() + '/' + plugin->fileName();
if (QFile::exists(fileName)) {
// The score of this plugin is 0 (best), so we can just return this plugin,
diff --git a/src/views/versioncontrol/versioncontrolobserver.h b/src/views/versioncontrol/versioncontrolobserver.h
index ea0834e65..08279dc86 100644
--- a/src/views/versioncontrol/versioncontrolobserver.h
+++ b/src/views/versioncontrol/versioncontrolobserver.h
@@ -37,6 +37,8 @@ class QAction;
class QTimer;
class UpdateItemStatesThread;
+class DolphinView;
+
/**
* @brief Observes all version control plugins.
*
@@ -55,6 +57,8 @@ public:
void setModel(KFileItemModel* model);
KFileItemModel* model() const;
+ void setView(DolphinView* view);
+ DolphinView* view() const;
QList<QAction*> actions(const KFileItemList& items) const;
@@ -126,7 +130,7 @@ private:
* Returns a matching plugin for the given directory.
* 0 is returned, if no matching plugin has been found.
*/
- KVersionControlPlugin* searchPlugin(const QUrl& directory) const;
+ KVersionControlPlugin* searchPlugin(const QUrl& directory);
/**
* Returns true, if the directory contains a version control information.
@@ -139,11 +143,14 @@ private:
bool m_silentUpdate; // if true, no messages will be send during the update
// of version states
+ DolphinView* m_view;
KFileItemModel* m_model;
QTimer* m_dirVerificationTimer;
+ bool m_pluginsInitialized;
KVersionControlPlugin* m_plugin;
+ QList<KVersionControlPlugin*> m_plugins;
UpdateItemStatesThread* m_updateItemStatesThread;
friend class UpdateItemStatesThread;