From 434a6c5d78587690f7b052fa1af83a9c800a1e8f Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Tue, 7 Nov 2006 10:43:45 +0000 Subject: [PATCH] (get_server_config): Extract also the Emacs pid from the server file. On Windows, try to force the Emacs frame to the foreground. --- lib-src/emacsclient.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index aeb221dfed..76ed21b29f 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -432,7 +432,7 @@ initialize_sockets () /* * Read the information needed to set up a TCP comm channel with - * the Emacs server: host, port and authentication string. + * the Emacs server: host, port, pid and authentication string. */ int get_server_config (server, authentication) @@ -441,6 +441,7 @@ get_server_config (server, authentication) { char dotted[32]; char *port; + char *pid; FILE *config = NULL; if (file_name_absolute_p (server_file)) @@ -464,9 +465,11 @@ get_server_config (server, authentication) return FALSE; if (fgets (dotted, sizeof dotted, config) - && (port = strchr (dotted, ':'))) + && (port = strchr (dotted, ':')) + && (pid = strchr (port, ' '))) { *port++ = '\0'; + *pid++ = '\0'; } else { @@ -486,6 +489,30 @@ get_server_config (server, authentication) fclose (config); +#ifdef WINDOWSNT + /* + Modern Windows restrict which processes can set the foreground window. + So, for emacsclient to be able to force Emacs into the foreground, we + have to call AllowSetForegroundWindow(). Unfortunately, older Windows + (W95, W98 and NT) don't have this function, so we have to check first. + + We're doing this here because it has to be done before sending info + to Emacs, and otherwise we'll need a global variable just to pass around + the pid, which is also inelegant. + */ + { + HMODULE hUser32; + + if (hUser32 = LoadLibrary ("user32.dll")) + { + void (*set_fg)(DWORD); + if (set_fg = GetProcAddress (hUser32, "AllowSetForegroundWindow")) + set_fg (atoi (pid)); + FreeLibrary (hUser32); + } + } +#endif + return TRUE; } -- 2.39.2