summaryrefslogtreecommitdiff
path: root/nt/runemacs.c
diff options
context:
space:
mode:
authorJason Rumney <jasonr@gnu.org>2009-06-30 15:48:23 +0000
committerJason Rumney <jasonr@gnu.org>2009-06-30 15:48:23 +0000
commitff90fbdecc6ffb1e34fe5ee9c1f080106c0739df (patch)
tree220a6ca0665b2ed33868247c02949704fa510335 /nt/runemacs.c
parent974647ac913e1280e7142321a19e3b7eaabefc25 (diff)
downloademacs-ff90fbdecc6ffb1e34fe5ee9c1f080106c0739df.tar.gz
bug#1849 - Windows 7 Taskbar Support
* w32term.c (w32_initialize): Use GetModuleHandle for library that is already loaded. Set user model ID if supported (bug#1849). * runemacs.c (set_user_model_id): New function. (WinMain): Use it. * emacsclient.c (w32_give_focus): Use GetModuleHandle for library that is already loaded. (w32_set_user_model_id): New function. (main): Use it to associate emacsclient with emacs (bug#1849).
Diffstat (limited to 'nt/runemacs.c')
-rw-r--r--nt/runemacs.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/nt/runemacs.c b/nt/runemacs.c
index 55a520f7bc7..aba1d439957 100644
--- a/nt/runemacs.c
+++ b/nt/runemacs.c
@@ -43,6 +43,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <string.h>
#include <malloc.h>
+static void set_user_model_id ();
+
int WINAPI
WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
{
@@ -56,6 +58,8 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
char *p;
char modname[MAX_PATH];
+ set_user_model_id ();
+
if (!GetModuleFileName (NULL, modname, MAX_PATH))
goto error;
if ((p = strrchr (modname, '\\')) == NULL)
@@ -170,5 +174,32 @@ error:
return 1;
}
+void set_user_model_id ()
+{
+ HMODULE shell;
+ HRESULT (WINAPI * set_user_model) (PCWSTR);
+
+ /* 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) */