From 201db83a7f1b7759173b6e9f0a844caef4da6cce Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Fri, 9 Feb 2018 16:07:58 +0100 Subject: [PATCH] core, w32: Enable spawning GUI applications * src/engine-spawn.c (engspawn_start): Translate spawn flag to IOSPAWN flag. * src/gpgme-w32spawn.c (my_spawn): Handle the new flag. * src/gpgme.h.in (GPGME_SPAWN_SHOW_WINDOW): New. * src/priv-io.h (IOSPAWN_FLAG_SHOW_WINDOW): New. -- Used by GpgOL --- src/engine-spawn.c | 3 ++- src/gpgme-w32spawn.c | 4 +--- src/gpgme.h.in | 1 + src/priv-io.h | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/engine-spawn.c b/src/engine-spawn.c index 7044781b..7f78bb50 100644 --- a/src/engine-spawn.c +++ b/src/engine-spawn.c @@ -241,7 +241,8 @@ engspawn_start (engine_spawn_t esp, const char *file, const char *argv[], spflags |= IOSPAWN_FLAG_DETACHED; if ((flags & GPGME_SPAWN_ALLOW_SET_FG)) spflags |= IOSPAWN_FLAG_ALLOW_SET_FG; - + if ((flags & GPGME_SPAWN_SHOW_WINDOW)) + spflags |= IOSPAWN_FLAG_SHOW_WINDOW; err = build_fd_data_map (esp); if (err) diff --git a/src/gpgme-w32spawn.c b/src/gpgme-w32spawn.c index d86c8508..868dbd57 100644 --- a/src/gpgme-w32spawn.c +++ b/src/gpgme-w32spawn.c @@ -121,8 +121,6 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags) int duped_stdout = 0; int duped_stderr = 0; HANDLE hnul = INVALID_HANDLE_VALUE; - /* FIXME. */ - int debug_me = 0; i = 0; while (argv[i]) @@ -142,7 +140,7 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags) memset (&si, 0, sizeof si); si.cb = sizeof (si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - si.wShowWindow = debug_me ? SW_SHOW : SW_HIDE; + si.wShowWindow = (flags & IOSPAWN_FLAG_SHOW_WINDOW) ? SW_SHOW : SW_HIDE; si.hStdInput = GetStdHandle (STD_INPUT_HANDLE); si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE); si.hStdError = GetStdHandle (STD_ERROR_HANDLE); diff --git a/src/gpgme.h.in b/src/gpgme.h.in index 31a90609..ff80023e 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -2007,6 +2007,7 @@ gpgme_error_t gpgme_op_getauditlog (gpgme_ctx_t ctx, gpgme_data_t output, /* Flags for the spawn operations. */ #define GPGME_SPAWN_DETACHED 1 #define GPGME_SPAWN_ALLOW_SET_FG 2 +#define GPGME_SPAWN_SHOW_WINDOW 4 /* Run the command FILE with the arguments in ARGV. Connect stdin to diff --git a/src/priv-io.h b/src/priv-io.h index 23061756..bc9d3d53 100644 --- a/src/priv-io.h +++ b/src/priv-io.h @@ -83,6 +83,8 @@ int _gpgme_io_set_nonblocking (int fd); #define IOSPAWN_FLAG_ALLOW_SET_FG 2 /* Don't close any child FDs. */ #define IOSPAWN_FLAG_NOCLOSE 4 +/* Set show window to true for windows */ +#define IOSPAWN_FLAG_SHOW_WINDOW 8 /* Spawn the executable PATH with ARGV as arguments. After forking close all fds except for those in FD_LIST in the child, then