diff --git a/src/gui/tray/ActivityListModel.cpp b/src/gui/tray/ActivityListModel.cpp index 053d725f4..09b77065f 100644 --- a/src/gui/tray/ActivityListModel.cpp +++ b/src/gui/tray/ActivityListModel.cpp @@ -26,6 +26,7 @@ #include "folderman.h" #include "iconjob.h" #include "accessmanager.h" +#include "owncloudgui.h" #include "ActivityData.h" #include "ActivityListModel.h" @@ -417,7 +418,7 @@ void ActivityListModel::removeActivityFromActivityList(Activity activity) } } -void ActivityListModel::triggerDefaultAction(int activityIndex) const +void ActivityListModel::triggerDefaultAction(int activityIndex) { if (activityIndex < 0 || activityIndex >= _finalList.size()) { qCWarning(lcActivity) << "Couldn't trigger default action at index" << activityIndex << "/ final list size:" << _finalList.size(); @@ -444,13 +445,19 @@ void ActivityListModel::triggerDefaultAction(int activityIndex) const const auto baseName = QFileInfo(basePath).fileName(); - ConflictDialog dialog; - dialog.setBaseFilename(baseName); - dialog.setLocalVersionFilename(conflictedPath); - dialog.setRemoteVersionFilename(basePath); - if (dialog.exec() == ConflictDialog::Accepted) { - folder->scheduleThisFolderSoon(); + if (!_currentConflictDialog.isNull()) { + _currentConflictDialog->close(); } + _currentConflictDialog = new ConflictDialog; + _currentConflictDialog->setBaseFilename(baseName); + _currentConflictDialog->setLocalVersionFilename(conflictedPath); + _currentConflictDialog->setRemoteVersionFilename(basePath); + _currentConflictDialog->setAttribute(Qt::WA_DeleteOnClose); + connect(_currentConflictDialog, &ConflictDialog::accepted, folder, [folder]() { + folder->scheduleThisFolderSoon(); + }); + _currentConflictDialog->open(); + ownCloudGui::raiseDialog(_currentConflictDialog); return; } diff --git a/src/gui/tray/ActivityListModel.h b/src/gui/tray/ActivityListModel.h index 29b14e921..d58c34cd7 100644 --- a/src/gui/tray/ActivityListModel.h +++ b/src/gui/tray/ActivityListModel.h @@ -26,6 +26,7 @@ namespace OCC { Q_DECLARE_LOGGING_CATEGORY(lcActivity) class AccountState; +class ConflictDialog; /** * @brief The ActivityListModel @@ -74,7 +75,7 @@ public: void removeActivityFromActivityList(int row); void removeActivityFromActivityList(Activity activity); - Q_INVOKABLE void triggerDefaultAction(int activityIndex) const; + Q_INVOKABLE void triggerDefaultAction(int activityIndex); Q_INVOKABLE void triggerAction(int activityIndex, int actionIndex); public slots: @@ -113,6 +114,8 @@ private: int _maxActivities = 100; int _maxActivitiesDays = 30; bool _showMoreActivitiesAvailableEntry = false; + + QPointer _currentConflictDialog; }; }