summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuanma Barranquero <lekktu@gmail.com>2006-11-07 10:43:45 +0000
committerJuanma Barranquero <lekktu@gmail.com>2006-11-07 10:43:45 +0000
commit434a6c5d78587690f7b052fa1af83a9c800a1e8f (patch)
tree63ccdf0ac779276a7ebc3916d405f8f0a0fc3cbf
parentc42690a67674a93873fd2a4d7c0374bf83f70810 (diff)
downloademacs-434a6c5d78587690f7b052fa1af83a9c800a1e8f.tar.gz
(get_server_config): Extract also the Emacs pid from the server file.
On Windows, try to force the Emacs frame to the foreground.
-rw-r--r--lib-src/emacsclient.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index aeb221dfed1..76ed21b29f8 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;
}