]> code.delx.au - gnu-emacs/blobdiff - nt/runemacs.c
lisp/cedet/semantic/wisent/comp.el:
[gnu-emacs] / nt / runemacs.c
index 6b6b84e33be0902dbba3e4c5fcb4930e2240fd0f..ab9620c0b0b7fedb7aac420244044d111e98bf31 100644 (file)
@@ -1,12 +1,12 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
      Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
      Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -14,9 +14,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /*
 
 
 /*
@@ -45,6 +43,8 @@ Boston, MA 02110-1301, USA.  */
 #include <string.h>
 #include <malloc.h>
 
 #include <string.h>
 #include <malloc.h>
 
+static void set_user_model_id ();
+
 int WINAPI
 WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
 {
 int WINAPI
 WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
 {
@@ -58,6 +58,8 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
   char *p;
   char modname[MAX_PATH];
 
   char *p;
   char modname[MAX_PATH];
 
+  set_user_model_id ();
+
   if (!GetModuleFileName (NULL, modname, MAX_PATH))
     goto error;
   if ((p = strrchr (modname, '\\')) == NULL)
   if (!GetModuleFileName (NULL, modname, MAX_PATH))
     goto error;
   if ((p = strrchr (modname, '\\')) == NULL)
@@ -172,5 +174,32 @@ error:
   return 1;
 }
 
   return 1;
 }
 
+void set_user_model_id ()
+{
+  HMODULE shell;
+  HRESULT (WINAPI * set_user_model) (wchar_t * id);
+
+  /* On Windows 7 and later, we need to set the user model ID
+     to associate emacsclient launched files with Emacs frames
+     in the UI.  */
+  shell = LoadLibrary ("shell32.dll");
+  if (shell)
+    {
+      set_user_model
+       = (void *) GetProcAddress (shell,
+                                  "SetCurrentProcessExplicitAppUserModelID");
+
+      /* If the function is defined, then we are running on Windows 7
+        or newer, and the UI uses this to group related windows
+        together.  Since emacs, runemacs, emacsclient are related, we
+        want them grouped even though the executables are different,
+        so we need to set a consistent ID between them.  */
+      if (set_user_model)
+       set_user_model (L"GNU.Emacs");
+
+      FreeLibrary (shell);
+    }
+}
+
 /* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384
    (do not change this comment) */
 /* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384
    (do not change this comment) */