diff options
| author | Jason Rumney | 2009-06-30 15:48:23 +0000 |
|---|---|---|
| committer | Jason Rumney | 2009-06-30 15:48:23 +0000 |
| commit | ff90fbdecc6ffb1e34fe5ee9c1f080106c0739df (patch) | |
| tree | 220a6ca0665b2ed33868247c02949704fa510335 /nt | |
| parent | 974647ac913e1280e7142321a19e3b7eaabefc25 (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | nt/runemacs.c | 31 |
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 @@ | |||
| 1 | 2009-06-30 Jason Rumney <jasonr@gnu.org> | ||
| 2 | |||
| 3 | * runemacs.c (set_user_model_id): New function. | ||
| 4 | (WinMain): Use it. | ||
| 5 | |||
| 1 | 2009-06-21 Chong Yidong <cyd@stupidchicken.com> | 6 | 2009-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 | ||
| 46 | static void set_user_model_id (); | ||
| 47 | |||
| 46 | int WINAPI | 48 | int WINAPI |
| 47 | WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow) | 49 | WinMain (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 | ||
| 177 | void 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) */ |