diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2013-09-29 22:57:21 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-09-30 16:36:00 +0200 |
commit | 003e25d488ef8b4ac9b797cc26c667b84f246f09 (patch) | |
tree | 40c744e0d4ac067d16b104656ef8f76493a67aaf /src/plugins | |
parent | 8e90640edb43a7192153575e81def2c84d5415c8 (diff) | |
download | qt-creator-003e25d488ef8b4ac9b797cc26c667b84f246f09.tar.gz |
VCS: Abort previous command for the same editor
It is very common to have output from a previous (longer) command appear
instead of the newly created one.
For example: Open a log. Check "Show Diff" and immediately uncheck it.
If this is done fast enough (or with a high Log Count limit) the output
with the diff will appear instead of the normal log.
Change-Id: Ie64cc4a383a261f5328a4d0486eec93f73766679
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/git/gitclient.cpp | 7 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseclient.cpp | 1 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.cpp | 9 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.h | 2 |
4 files changed, 17 insertions, 2 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 813539d62a..d48d5805f2 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2467,8 +2467,11 @@ VcsBase::Command *GitClient::createCommand(const QString &workingDirectory, VcsBase::Command *command = new VcsBase::Command(gitBinaryPath(), workingDirectory, processEnvironment()); command->setCodec(getSourceCodec(currentDocumentPath())); command->setCookie(QVariant(editorLineNumber)); - if (editor) - connect(command, SIGNAL(finished(bool,int,QVariant)), editor, SLOT(commandFinishedGotoLine(bool,int,QVariant))); + if (editor) { + editor->setCommand(command); + connect(command, SIGNAL(finished(bool,int,QVariant)), + editor, SLOT(commandFinishedGotoLine(bool,int,QVariant))); + } if (useOutputToWindow) { command->addFlags(VcsBasePlugin::ShowStdOutInLogWindow); command->addFlags(VcsBasePlugin::ShowSuccessMessage); diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp index 1d83c0ef8b..feb4c5588b 100644 --- a/src/plugins/vcsbase/vcsbaseclient.cpp +++ b/src/plugins/vcsbase/vcsbaseclient.cpp @@ -143,6 +143,7 @@ void VcsBaseClientPrivate::saveSettings() void VcsBaseClientPrivate::bindCommandToEditor(Command *cmd, VcsBaseEditorWidget *editor) { + editor->setCommand(cmd); QObject::connect(cmd, SIGNAL(finished(bool,int,QVariant)), m_cmdFinishedMapper, SLOT(map())); m_cmdFinishedMapper->setMapping(cmd, editor); } diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 9141a4b620..0c415cf8eb 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -32,6 +32,7 @@ #include "baseannotationhighlighter.h" #include "vcsbaseplugin.h" #include "vcsbaseeditorparameterwidget.h" +#include "command.h" #include <coreplugin/icore.h> #include <coreplugin/vcsmanager.h> @@ -575,6 +576,7 @@ public: VcsBaseEditorParameterWidget *m_configurationWidget; bool m_mouseDragging; QList<AbstractTextCursorHandler *> m_textCursorHandlers; + QPointer<Command> m_command; private: QComboBox *m_entriesComboBox; @@ -1350,6 +1352,13 @@ VcsBaseEditorParameterWidget *VcsBaseEditorWidget::configurationWidget() const return d->m_configurationWidget; } +void VcsBaseEditorWidget::setCommand(Command *command) +{ + if (d->m_command) + d->m_command->abort(); + d->m_command = command; +} + // Find the complete file from a diff relative specification. QString VcsBaseEditorWidget::findDiffFile(const QString &f) const { diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index b2fd845d9e..ae2587c88a 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -55,6 +55,7 @@ class VcsBaseEditorWidgetPrivate; class DiffHighlighter; class BaseAnnotationHighlighter; class VcsBaseEditorParameterWidget; +class Command; // Documentation inside enum EditorContentType @@ -188,6 +189,7 @@ public: bool setConfigurationWidget(VcsBaseEditorParameterWidget *w); VcsBaseEditorParameterWidget *configurationWidget() const; + void setCommand(Command *command); /* Tagging editors: Sometimes, an editor should be re-used, for example, when showing * a diff of the same file with different diff-options. In order to be able to find * the editor, they get a 'tag' containing type and parameters (dynamic property string). */ |