aboutsummaryrefslogtreecommitdiffstats
path: root/nt
diff options
context:
space:
mode:
authorJason Rumney2009-06-30 15:48:23 +0000
committerJason Rumney2009-06-30 15:48:23 +0000
commitff90fbdecc6ffb1e34fe5ee9c1f080106c0739df (patch)
tree220a6ca0665b2ed33868247c02949704fa510335 /nt
parent974647ac913e1280e7142321a19e3b7eaabefc25 (diff)
downloademacs-ff90fbdecc6ffb1e34fe5ee9c1f080106c0739df.tar.gz
emacs-ff90fbdecc6ffb1e34fe5ee9c1f080106c0739df.zip
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')
-rw-r--r--nt/ChangeLog5
-rw-r--r--nt/runemacs.c31
2 files changed, 36 insertions, 0 deletions
diff --git a/nt/ChangeLog b/nt/ChangeLog
index d8f9685587c..e4c95671aff 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,8 @@
12009-06-30 Jason Rumney <jasonr@gnu.org>
2
3 * runemacs.c (set_user_model_id): New function.
4 (WinMain): Use it.
5
12009-06-21 Chong Yidong <cyd@stupidchicken.com> 62009-06-21 Chong Yidong <cyd@stupidchicken.com>
2 7
3 * Branch for 23.1. 8 * Branch for 23.1.
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/>. */
43#include <string.h> 43#include <string.h>
44#include <malloc.h> 44#include <malloc.h>
45 45
46static void set_user_model_id ();
47
46int WINAPI 48int WINAPI
47WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow) 49WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
48{ 50{
@@ -56,6 +58,8 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
56 char *p; 58 char *p;
57 char modname[MAX_PATH]; 59 char modname[MAX_PATH];
58 60
61 set_user_model_id ();
62
59 if (!GetModuleFileName (NULL, modname, MAX_PATH)) 63 if (!GetModuleFileName (NULL, modname, MAX_PATH))
60 goto error; 64 goto error;
61 if ((p = strrchr (modname, '\\')) == NULL) 65 if ((p = strrchr (modname, '\\')) == NULL)
@@ -170,5 +174,32 @@ error:
170 return 1; 174 return 1;
171} 175}
172 176
177void set_user_model_id ()
178{
179 HMODULE shell;
180 HRESULT (WINAPI * set_user_model) (PCWSTR);
181
182 /* On Windows 7 and later, we need to set the user model ID
183 to associate emacsclient launched files with Emacs frames
184 in the UI. */
185 shell = LoadLibrary ("shell32.dll");
186 if (shell)
187 {
188 set_user_model
189 = (void *) GetProcAddress (shell,
190 "SetCurrentProcessExplicitAppUserModelID");
191
192 /* If the function is defined, then we are running on Windows 7
193 or newer, and the UI uses this to group related windows
194 together. Since emacs, runemacs, emacsclient are related, we
195 want them grouped even though the executables are different,
196 so we need to set a consistent ID between them. */
197 if (set_user_model)
198 set_user_model (L"GNU.Emacs");
199
200 FreeLibrary (shell);
201 }
202}
203
173/* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384 204/* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384
174 (do not change this comment) */ 205 (do not change this comment) */