diff options
author | Jason Rumney <jasonr@gnu.org> | 2009-06-30 15:48:23 +0000 |
---|---|---|
committer | Jason Rumney <jasonr@gnu.org> | 2009-06-30 15:48:23 +0000 |
commit | ff90fbdecc6ffb1e34fe5ee9c1f080106c0739df (patch) | |
tree | 220a6ca0665b2ed33868247c02949704fa510335 /nt/runemacs.c | |
parent | 974647ac913e1280e7142321a19e3b7eaabefc25 (diff) | |
download | emacs-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.c | 31 |
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) */ |