annotate nt/runemacs.c @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents 7bad97f82eb6
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
100954
aeceb2460b39 Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 94795
diff changeset
1 /* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
75249
4ad431d8e164 Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 73541
diff changeset
2 Free Software Foundation, Inc.
64890
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
3
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
4 This file is part of GNU Emacs.
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
5
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79730
diff changeset
6 GNU Emacs is free software: you can redistribute it and/or modify
64890
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
7 it under the terms of the GNU General Public License as published by
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79730
diff changeset
8 the Free Software Foundation, either version 3 of the License, or
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79730
diff changeset
9 (at your option) any later version.
64890
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
10
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
14 GNU General Public License for more details.
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
15
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
16 You should have received a copy of the GNU General Public License
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79730
diff changeset
17 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
64890
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
18
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54773
diff changeset
19
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
20 /*
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
21 Simple program to start Emacs with its console window hidden.
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
22
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
23 This program is provided purely for convenience, since most users will
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
24 use Emacs in windowing (GUI) mode, and will not want to have an extra
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
25 console window lying around. */
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
26
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
27 /*
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
28 You may want to define this if you want to be able to install updated
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
29 emacs binaries even when other users are using the current version.
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
30 The problem with some file servers (notably Novell) is that an open
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
31 file cannot be overwritten, deleted, or even renamed. So if someone
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
32 is running emacs.exe already, you cannot install a newer version.
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
33 By defining CHOOSE_NEWEST_EXE, you can name your new emacs.exe
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
34 something else which matches "emacs*.exe", and runemacs will
73541
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
35 automatically select the newest emacs executable in the bin directory.
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
36 (So you'll probably be able to delete the old version some hours/days
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
37 later).
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
38 */
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
39
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
40 /* #define CHOOSE_NEWEST_EXE */
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
41
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
42 #include <windows.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
43 #include <string.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
44 #include <malloc.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
45
103641
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
46 static void set_user_model_id ();
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
47
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
48 int WINAPI
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
49 WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
50 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
51 STARTUPINFO start;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
52 SECURITY_ATTRIBUTES sec_attrs;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
53 PROCESS_INFORMATION child;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
54 int wait_for_child = FALSE;
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
55 DWORD priority_class = NORMAL_PRIORITY_CLASS;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
56 DWORD ret_code = 0;
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
57 char *new_cmdline;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
58 char *p;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
59 char modname[MAX_PATH];
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
60
103641
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
61 set_user_model_id ();
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
62
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
63 if (!GetModuleFileName (NULL, modname, MAX_PATH))
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
64 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
65 if ((p = strrchr (modname, '\\')) == NULL)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
66 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
67 *p = 0;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
68
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
69 new_cmdline = alloca (MAX_PATH + strlen (cmdline) + 3);
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
70 /* Quote executable name in case of spaces in the path. */
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
71 *new_cmdline = '"';
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
72 strcpy (new_cmdline + 1, modname);
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
73
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
74 #ifdef CHOOSE_NEWEST_EXE
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
75 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
76 /* Silly hack to allow new versions to be installed on
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
77 server even when current version is in use. */
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
78
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
79 char * best_name = alloca (MAX_PATH + 1);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
80 FILETIME best_time = {0,0};
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
81 WIN32_FIND_DATA wfd;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
82 HANDLE fh;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
83 p = new_cmdline + strlen (new_cmdline);
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
84 strcpy (p, "\\emacs*.exe\" ");
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
85 fh = FindFirstFile (new_cmdline, &wfd);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
86 if (fh == INVALID_HANDLE_VALUE)
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
87 goto error;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
88 do
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
89 {
73541
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
90 if (wfd.ftLastWriteTime.dwHighDateTime > best_time.dwHighDateTime
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
91 || (wfd.ftLastWriteTime.dwHighDateTime == best_time.dwHighDateTime
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
92 && wfd.ftLastWriteTime.dwLowDateTime > best_time.dwLowDateTime))
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
93 {
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
94 best_time = wfd.ftLastWriteTime;
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
95 strcpy (best_name, wfd.cFileName);
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
96 }
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
97 }
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
98 while (FindNextFile (fh, &wfd));
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
99 FindClose (fh);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
100 *p++ = '\\';
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
101 strcpy (p, best_name);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
102 strcat (p, " ");
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
103 }
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
104 #else
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
105 strcat (new_cmdline, "\\emacs.exe\" ");
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
106 #endif
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
107
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
108 /* Append original arguments if any; first look for arguments we
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
109 recognise (-wait, -high, and -low), and apply them ourselves. */
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
110 while (cmdline[0] == '-' || cmdline[0] == '/')
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
111 {
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
112 if (strncmp (cmdline+1, "wait", 4) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
113 {
73541
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
114 wait_for_child = TRUE;
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
115 cmdline += 5;
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
116 }
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
117 else if (strncmp (cmdline+1, "high", 4) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
118 {
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
119 priority_class = HIGH_PRIORITY_CLASS;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
120 cmdline += 5;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
121 }
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
122 else if (strncmp (cmdline+1, "low", 3) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
123 {
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
124 priority_class = IDLE_PRIORITY_CLASS;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
125 cmdline += 4;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
126 }
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
127 else
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
128 break;
73541
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
129 /* Look for next argument. */
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
130 while (*++cmdline == ' ');
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
131 }
73541
964e568f1d1d (WinMain): Process all recognized arguments, not just the first one.
Juanma Barranquero <lekktu@gmail.com>
parents: 69378
diff changeset
132
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
133 strcat (new_cmdline, cmdline);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
134
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
135 /* Set emacs_dir variable if runemacs was in "%emacs_dir%\bin". */
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
136 if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0)
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
137 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
138 *p = 0;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
139 for (p = modname; *p; p++)
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
140 if (*p == '\\') *p = '/';
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
141 SetEnvironmentVariable ("emacs_dir", modname);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
142 }
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
143
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
144 memset (&start, 0, sizeof (start));
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
145 start.cb = sizeof (start);
69378
45fbf2b25e1a (WinMain): Set screen buffer to 80x25.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
146 start.dwFlags = STARTF_USESHOWWINDOW | STARTF_USECOUNTCHARS;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
147 start.wShowWindow = SW_HIDE;
69378
45fbf2b25e1a (WinMain): Set screen buffer to 80x25.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
148 /* Ensure that we don't waste memory if the user has specified a huge
45fbf2b25e1a (WinMain): Set screen buffer to 80x25.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
149 default screen buffer for command windows. */
45fbf2b25e1a (WinMain): Set screen buffer to 80x25.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
150 start.dwXCountChars = 80;
45fbf2b25e1a (WinMain): Set screen buffer to 80x25.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
151 start.dwYCountChars = 25;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
152
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
153 sec_attrs.nLength = sizeof (sec_attrs);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
154 sec_attrs.lpSecurityDescriptor = NULL;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
155 sec_attrs.bInheritHandle = FALSE;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
156
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
157 if (CreateProcess (NULL, new_cmdline, &sec_attrs, NULL, TRUE, priority_class,
54773
a4825fc03ab1 (WinMain): Let emacs environment default to parent.
Jason Rumney <jasonr@gnu.org>
parents: 52401
diff changeset
158 NULL, NULL, &start, &child))
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
159 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
160 if (wait_for_child)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
161 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
162 WaitForSingleObject (child.hProcess, INFINITE);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
163 GetExitCodeProcess (child.hProcess, &ret_code);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
164 }
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
165 CloseHandle (child.hThread);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
166 CloseHandle (child.hProcess);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
167 }
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
168 else
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
169 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
170 return (int) ret_code;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
171
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
172 error:
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
173 MessageBox (NULL, "Could not start Emacs.", "Error", MB_ICONSTOP);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
174 return 1;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
175 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38139
diff changeset
176
103641
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
177 void set_user_model_id ()
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
178 {
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
179 HMODULE shell;
103716
7bad97f82eb6 * w32term.c (w32_initialize): Use standard types.
Jason Rumney <jasonr@gnu.org>
parents: 103641
diff changeset
180 HRESULT (WINAPI * set_user_model) (wchar_t * id);
103641
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
181
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
182 /* On Windows 7 and later, we need to set the user model ID
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
183 to associate emacsclient launched files with Emacs frames
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
184 in the UI. */
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
185 shell = LoadLibrary ("shell32.dll");
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
186 if (shell)
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
187 {
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
188 set_user_model
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
189 = (void *) GetProcAddress (shell,
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
190 "SetCurrentProcessExplicitAppUserModelID");
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
191
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
192 /* If the function is defined, then we are running on Windows 7
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
193 or newer, and the UI uses this to group related windows
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
194 together. Since emacs, runemacs, emacsclient are related, we
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
195 want them grouped even though the executables are different,
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
196 so we need to set a consistent ID between them. */
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
197 if (set_user_model)
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
198 set_user_model (L"GNU.Emacs");
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
199
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
200 FreeLibrary (shell);
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
201 }
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
202 }
48d529d3a5a4 bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
203
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38139
diff changeset
204 /* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38139
diff changeset
205 (do not change this comment) */