Branch: refs/heads/master Author: Yury Siamashka yurand2@gmail.com Committer: Yury Siamashka yurand2@gmail.com Date: Mon, 29 Jun 2015 13:02:08 UTC Commit: 87e1f9fb8ae77cbd1ff3fe5c9769d15272ef1171 https://github.com/geany/geany-plugins/commit/87e1f9fb8ae77cbd1ff3fe5c9769d1...
Log Message: ----------- geanyvc: search external diff tools in 'program files' locations for Windows
Modified Paths: -------------- geanyvc/src/externdiff.c geanyvc/src/geanyvc.c geanyvc/src/geanyvc.h
Modified: geanyvc/src/externdiff.c 69 lines changed, 57 insertions(+), 12 deletions(-) =================================================================== @@ -19,10 +19,13 @@ */
#include <string.h> - #include <geanyplugin.h> #include "geanyvc.h"
+#ifdef G_OS_WIN32 +#include <Shlobj.h> +#endif + extern GeanyFunctions *geany_functions;
@@ -38,27 +41,70 @@ enum };
-static const gchar *viewers[EXTERNAL_DIFF_COUNT] = { "meld", "kompare", "kdiff3", "diffuse", "tkdiff", "WinMergeU" }; +static const gchar *viewers[EXTERNAL_DIFF_COUNT] = { "Meld/meld", "kompare", "kdiff3", "diffuse", "tkdiff", "WinMerge/WinMergeU" };
static gchar *extern_diff_viewer = NULL; -const gchar * -get_external_diff_viewer(void) + +void external_diff_viewer_init(void) { gint i;
- if (extern_diff_viewer) - return extern_diff_viewer; + for (i = 0; i < EXTERNAL_DIFF_COUNT; i++) + { + gchar *filename = g_path_get_basename(viewers[i]); + gchar *path = g_find_program_in_path(filename); + g_free(filename); + if (path) + { + extern_diff_viewer = path; + return; + } + } +#ifdef G_OS_WIN32 + TCHAR szPathProgramFiles[MAX_PATH]; + TCHAR szPathProgramFiles86[MAX_PATH]; + SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, szPathProgramFiles); + SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, szPathProgramFiles86);
for (i = 0; i < EXTERNAL_DIFF_COUNT; i++) { - gchar *path = g_find_program_in_path(viewers[i]); + gchar *filename = g_build_filename(szPathProgramFiles, viewers[i], NULL); + gchar *path = g_find_program_in_path(filename); + g_free(filename); if (path) { - g_free(path); - extern_diff_viewer = (gchar *) viewers[i]; - return viewers[i]; + extern_diff_viewer = path; + return; } } + for (i = 0; i < EXTERNAL_DIFF_COUNT; i++) + { + gchar *filename = g_build_filename(szPathProgramFiles86, viewers[i], NULL); + gchar *path = g_find_program_in_path(filename); + g_free(filename); + if (path) + { + extern_diff_viewer = path; + return; + } + } +#endif +} + +void external_diff_viewer_deinit(void) +{ + if (extern_diff_viewer) + { + g_free(extern_diff_viewer); + extern_diff_viewer = NULL; + } +} + +const gchar * +get_external_diff_viewer(void) +{ + if (extern_diff_viewer) + return extern_diff_viewer; return NULL; }
@@ -67,7 +113,6 @@ void vc_external_diff(const gchar * src, const gchar * dest) { gchar *argv[4] = { NULL, NULL, NULL, NULL }; - const gchar *diff = get_external_diff_viewer(); if (!diff) return; @@ -76,7 +121,7 @@ vc_external_diff(const gchar * src, const gchar * dest) argv[1] = (gchar *) src; argv[2] = (gchar *) dest;
- utils_spawn_sync(NULL, argv, NULL, + g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, NULL, NULL, NULL); }
Modified: geanyvc/src/geanyvc.c 2 lines changed, 2 insertions(+), 0 deletions(-) =================================================================== @@ -2305,6 +2305,7 @@ plugin_init(G_GNUC_UNUSED GeanyData * data) load_config(); registrate();
+ external_diff_viewer_init();
if (set_menubar_entry == TRUE) { @@ -2378,6 +2379,7 @@ plugin_init(G_GNUC_UNUSED GeanyData * data) void plugin_cleanup(void) { + external_diff_viewer_deinit(); remove_menuitems_from_editor_menu(); gtk_widget_destroy(menu_entry); g_slist_free(VC);
Modified: geanyvc/src/geanyvc.h 2 lines changed, 2 insertions(+), 0 deletions(-) =================================================================== @@ -135,6 +135,8 @@ GSList *get_commit_files_null(const gchar * dir); extern const gchar *NO_ENV[];
/* External diff viewer */ +void external_diff_viewer_init(void); +void external_diff_viewer_deinit(void); const gchar *get_external_diff_viewer(void); void vc_external_diff(const gchar * src, const gchar * dest);
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
plugins-commits@lists.geany.org