From 6312cc18e2e2d9a3a1d4146ad94e22a87e66d6e0 Mon Sep 17 00:00:00 2001
From: Petar Perisin <petar.perisin@gmail.com>
Date: Thu, 4 Jul 2013 01:03:53 +0200
Subject: [PATCH] Git - added ability to launch git gui

Change-Id: I65ed3e0408e43e354a289bbbd385aec2e254746c
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/git/gitclient.cpp | 13 +++++++++++++
 src/plugins/git/gitclient.h   |  1 +
 src/plugins/git/gitplugin.cpp | 13 +++++++++++++
 src/plugins/git/gitplugin.h   |  1 +
 4 files changed, 28 insertions(+)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index e29e2d6889f..d14c4d04840 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2576,6 +2576,19 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env,
     return success;
 }
 
+bool GitClient::launchGitGui(const QString &workingDirectory) {
+    bool success;
+    QString gitBinary = gitBinaryPath(&success);
+    if (success)
+        success = QProcess::startDetached(gitBinary, QStringList(QLatin1String("gui")),
+                                          workingDirectory);
+
+    if (!success)
+        outputWindow()->appendError(tr("Cannot launch git gui"));
+
+    return success;
+}
+
 QString GitClient::gitBinaryPath(bool *ok, QString *errorMessage) const
 {
     return settings()->gitBinaryPath(ok, errorMessage);
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index faf39964683..67704aaed63 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -295,6 +295,7 @@ public:
 
     void launchGitK(const QString &workingDirectory, const QString &fileName);
     void launchGitK(const QString &workingDirectory) { launchGitK(workingDirectory, QString()); }
+    bool launchGitGui(const QString &workingDirectory);
 
     void launchRepositoryBrowser(const QString &workingDirectory);
 
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index b7d4976978c..917a47a39ce 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -634,6 +634,12 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     // --------------
     gitToolsMenu->addSeparator(globalcontext);
 
+    createRepositoryAction(gitToolsMenu, tr("Git Gui"), Core::Id("Git.GitGui"),
+                           globalcontext, true, SLOT(gitGui()));
+
+    // --------------
+    gitToolsMenu->addSeparator(globalcontext);
+
     m_repositoryBrowserAction
             = createRepositoryAction(gitToolsMenu,
                                      tr("Repository Browser"), Core::Id("Git.LaunchRepositoryBrowser"),
@@ -927,6 +933,13 @@ void GitPlugin::gitkForCurrentFolder()
     }
 }
 
+void GitPlugin::gitGui()
+{
+    const VcsBase::VcsBasePluginState state = currentState();
+    QTC_ASSERT(state.hasTopLevel(), return);
+    m_gitClient->launchGitGui(state.topLevel());
+}
+
 void GitPlugin::startAmendCommit()
 {
     startCommit(AmendCommit);
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 4a70caedeeb..5a4663dfdcf 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -123,6 +123,7 @@ private slots:
     void unstageFile();
     void gitkForCurrentFile();
     void gitkForCurrentFolder();
+    void gitGui();
     void cleanProject();
     void cleanRepository();
     void updateSubmodules();
-- 
GitLab