Mercurial > emacs
diff src/w32fns.c @ 89943:4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-218
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-220
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-221
Restore deleted tagline in etc/TUTORIAL.ru
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-222
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-228
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-229
Remove TeX output files from the archive
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-230
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-247
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-248
src/lisp.h (CYCLE_CHECK): Macro moved from xfaces.c
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-249
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-256
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-258
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-263
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-264
Update from CVS: lispref/display.texi: emacs -> Emacs.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-265
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-274
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-275
Update from CVS: man/makefile.w32-in: Revert last change
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-276
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-295
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296
Allow restarting an existing debugger session that's exited
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-297
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-299
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-300
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-327
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-328
Update from CVS: src/.gdbinit (xsymbol): Fix last change.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-329
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-344
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-345
Tweak source regexps so that building in place won't cause problems
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-346
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-351
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-352
Update from CVS: lisp/flymake.el: New file.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-353
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-361
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-362
Support " [...]" style defaults in minibuffer-electric-default-mode
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-363
(read-number): Use canonical format for default in prompt.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-364
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-367
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-368
Improve display-supports-face-attributes-p on non-ttys
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369
Rewrite face-differs-from-default-p
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-370
Move `display-supports-face-attributes-p' entirely into C code
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-371
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Simplify face-differs-from-default-p; don't consider :stipple.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-373
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-374
(tty_supports_face_attributes_p): Ensure attributes differ from default
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-375
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377
(Fdisplay_supports_face_attributes_p): Work around bootstrapping problem
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381
Face merging cleanups
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-382
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-384
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-385
src/xfaces.c (push_named_merge_point): Return 0 if a cycle is detected
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-386
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-395
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396
Tweak arch tagging to make build/install-in-place less annoying
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-397
Work around vc-arch problems when building eshell
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398
Tweak permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399
Tweak directory permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401
More build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403
Yet more build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-409
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-410
Make sure image types are initialized for lookup too
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-411
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-416
Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Mon, 28 Jun 2004 07:56:49 +0000 |
parents | 68c22ea6027c c12c7852c322 |
children | 59dcbfe97385 |
line wrap: on
line diff
--- a/src/w32fns.c Sat May 29 02:17:09 2004 +0000 +++ b/src/w32fns.c Mon Jun 28 07:56:49 2004 +0000 @@ -1,5 +1,5 @@ /* Graphical user interface functions for the Microsoft W32 API. - Copyright (C) 1989, 92, 93, 94, 95, 1996, 1997, 1998, 1999, 2000, 2001 + Copyright (C) 1989, 1992, 93, 94, 95, 96, 97, 98, 99, 2000, 01, 04 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -89,7 +89,7 @@ Lisp_Object Vw32_alt_is_meta; /* If non-zero, the windows virtual key code for an alternative quit key. */ -Lisp_Object Vw32_quit_key; +int w32_quit_key; /* Non nil if left window key events are passed on to Windows (this only affects whether "tapping" the key opens the Start menu). */ @@ -133,11 +133,11 @@ /* Control how close left/right button down events must be to be converted to a middle button down event. */ -Lisp_Object Vw32_mouse_button_tolerance; +int w32_mouse_button_tolerance; /* Minimum interval between mouse movement (and scroll bar drag) events that are passed on to the event loop. */ -Lisp_Object Vw32_mouse_move_interval; +int w32_mouse_move_interval; /* Flag to indicate if XBUTTON events should be passed on to Windows. */ int w32_pass_extra_mouse_buttons_to_system; @@ -235,6 +235,9 @@ Lisp_Object Qw32_charset_unicode; #endif +/* The ANSI codepage. */ +int w32_ansi_code_page; + /* Prefix for system colors. */ #define SYSTEM_COLOR_PREFIX "System" #define SYSTEM_COLOR_PREFIX_LEN (sizeof (SYSTEM_COLOR_PREFIX) - 1) @@ -281,7 +284,7 @@ /* From w32term.c. */ -extern Lisp_Object Vw32_num_mouse_buttons; +extern int w32_num_mouse_buttons; extern Lisp_Object Vw32_recognize_altgr; extern HWND w32_system_caret_hwnd; @@ -463,7 +466,7 @@ CHECK_NUMBER (blue); CHECK_STRING (name); - XSET (rgb, Lisp_Int, RGB(XUINT (red), XUINT (green), XUINT (blue))); + XSETINT (rgb, RGB(XUINT (red), XUINT (green), XUINT (blue))); BLOCK_INPUT; @@ -826,7 +829,7 @@ return Qnil; } -COLORREF +static Lisp_Object w32_color_map_lookup (colorname) char *colorname; { @@ -845,7 +848,7 @@ if (lstrcmpi (SDATA (tem), colorname) == 0) { - ret = XUINT (Fcdr (elt)); + ret = Fcdr (elt); break; } @@ -908,7 +911,7 @@ } -COLORREF +static Lisp_Object x_to_w32_color (colorname) char * colorname; { @@ -968,7 +971,8 @@ if (i == 2) { UNBLOCK_INPUT; - return (colorval); + XSETINT (ret, colorval); + return ret; } color = end; } @@ -1021,7 +1025,8 @@ if (*end != '\0') break; UNBLOCK_INPUT; - return (colorval); + XSETINT (ret, colorval); + return ret; } if (*end != '/') break; @@ -1062,7 +1067,8 @@ if (*end != '\0') break; UNBLOCK_INPUT; - return (colorval); + XSETINT (ret, colorval); + return ret; } if (*end != '/') break; @@ -2416,6 +2422,10 @@ #define HOTKEY_VK_CODE(k) (XFASTINT (k) & 255) #define HOTKEY_MODIFIERS(k) (XFASTINT (k) >> 8) +#define RAW_HOTKEY_ID(k) ((k) & 0xbfff) +#define RAW_HOTKEY_VK_CODE(k) ((k) & 255) +#define RAW_HOTKEY_MODIFIERS(k) ((k) >> 8) + /* Register hot-keys for reserved key combinations when Emacs has keyboard focus, since this is the only way Emacs can receive key combinations like Alt-Tab which are used by the system. */ @@ -2497,20 +2507,20 @@ focus_window = GetFocus (); if (focus_window != NULL) RegisterHotKey (focus_window, - HOTKEY_ID (msg.wParam), - HOTKEY_MODIFIERS (msg.wParam), - HOTKEY_VK_CODE (msg.wParam)); + RAW_HOTKEY_ID (msg.wParam), + RAW_HOTKEY_MODIFIERS (msg.wParam), + RAW_HOTKEY_VK_CODE (msg.wParam)); /* Reply is not expected. */ break; case WM_EMACS_UNREGISTER_HOT_KEY: focus_window = GetFocus (); if (focus_window != NULL) - UnregisterHotKey (focus_window, HOTKEY_ID (msg.wParam)); + UnregisterHotKey (focus_window, RAW_HOTKEY_ID (msg.wParam)); /* Mark item as erased. NB: this code must be thread-safe. The next line is okay because the cons cell is never made into garbage and is not relocated by GC. */ - XSETCAR ((Lisp_Object) msg.lParam, Qnil); + XSETCAR ((Lisp_Object) ((EMACS_INT) msg.lParam), Qnil); if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0)) abort (); break; @@ -2518,7 +2528,7 @@ { int vk_code = (int) msg.wParam; int cur_state = (GetKeyState (vk_code) & 1); - Lisp_Object new_state = (Lisp_Object) msg.lParam; + Lisp_Object new_state = (Lisp_Object) ((EMACS_INT) msg.lParam); /* NB: This code must be thread-safe. It is safe to call NILP because symbols are not relocated by GC, @@ -2708,7 +2718,7 @@ c = make_ctrl_char (c) & 0377; if (c == quit_char || (wmsg.dwModifiers == 0 && - XFASTINT (Vw32_quit_key) && wParam == XFASTINT (Vw32_quit_key))) + w32_quit_key && wParam == w32_quit_key)) { Vquit_flag = Qt; @@ -3118,7 +3128,7 @@ are used together, but only if user has two button mouse. */ case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: - if (XINT (Vw32_num_mouse_buttons) > 2) + if (w32_num_mouse_buttons > 2) goto handle_plain_button; { @@ -3168,7 +3178,7 @@ /* Hold onto message for now. */ mouse_button_timer = SetTimer (hwnd, MOUSE_BUTTON_ID, - XINT (Vw32_mouse_button_tolerance), NULL); + w32_mouse_button_tolerance, NULL); saved_mouse_button_msg.msg.hwnd = hwnd; saved_mouse_button_msg.msg.message = msg; saved_mouse_button_msg.msg.wParam = wParam; @@ -3181,7 +3191,7 @@ case WM_LBUTTONUP: case WM_RBUTTONUP: - if (XINT (Vw32_num_mouse_buttons) > 2) + if (w32_num_mouse_buttons > 2) goto handle_plain_button; { @@ -3277,7 +3287,7 @@ track_mouse_window = hwnd; } case WM_VSCROLL: - if (XINT (Vw32_mouse_move_interval) <= 0 + if (w32_mouse_move_interval <= 0 || (msg == WM_MOUSEMOVE && button_state == 0)) { wmsg.dwModifiers = w32_get_modifiers (); @@ -3293,7 +3303,7 @@ if (saved_mouse_move_msg.msg.hwnd == 0) mouse_move_timer = SetTimer (hwnd, MOUSE_MOVE_ID, - XINT (Vw32_mouse_move_interval), NULL); + w32_mouse_move_interval, NULL); /* Hold onto message for now. */ saved_mouse_move_msg.msg.hwnd = hwnd; @@ -4036,15 +4046,15 @@ 1, 1, 0, doc: /* Make a new window, which is called a \"frame\" in Emacs terms. Returns an Emacs frame object. -ALIST is an alist of frame parameters. +PARAMETERS is an alist of frame parameters. If the parameters specify that the frame should not have a minibuffer, and do not specify a specific minibuffer window to use, then `default-minibuffer-frame' must be a frame whose minibuffer can be shared by the new frame. This function is an internal primitive--use `make-frame' instead. */) - (parms) - Lisp_Object parms; + (parameters) + Lisp_Object parameters; { struct frame *f; Lisp_Object frame, tem; @@ -4065,7 +4075,7 @@ until we know if this frame has a specified name. */ Vx_resource_name = Vinvocation_name; - display = w32_get_arg (parms, Qdisplay, 0, 0, RES_TYPE_STRING); + display = w32_get_arg (parameters, Qdisplay, 0, 0, RES_TYPE_STRING); if (EQ (display, Qunbound)) display = Qnil; dpyinfo = check_x_display_info (display); @@ -4075,7 +4085,7 @@ kb = &the_only_kboard; #endif - name = w32_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING); + name = w32_get_arg (parameters, Qname, "name", "Name", RES_TYPE_STRING); if (!STRINGP (name) && ! EQ (name, Qunbound) && ! NILP (name)) @@ -4085,7 +4095,7 @@ Vx_resource_name = name; /* See if parent window is specified. */ - parent = w32_get_arg (parms, Qparent_id, NULL, NULL, RES_TYPE_NUMBER); + parent = w32_get_arg (parameters, Qparent_id, NULL, NULL, RES_TYPE_NUMBER); if (EQ (parent, Qunbound)) parent = Qnil; if (! NILP (parent)) @@ -4095,8 +4105,8 @@ /* No need to protect DISPLAY because that's not used after passing it to make_frame_without_minibuffer. */ frame = Qnil; - GCPRO4 (parms, parent, name, frame); - tem = w32_get_arg (parms, Qminibuffer, "minibuffer", "Minibuffer", + GCPRO4 (parameters, parent, name, frame); + tem = w32_get_arg (parameters, Qminibuffer, "minibuffer", "Minibuffer", RES_TYPE_SYMBOL); if (EQ (tem, Qnone) || NILP (tem)) f = make_frame_without_minibuffer (Qnil, kb, display); @@ -4126,7 +4136,7 @@ record_unwind_protect (unwind_create_frame, frame); f->icon_name - = w32_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING); + = w32_get_arg (parameters, Qicon_name, "iconName", "Title", RES_TYPE_STRING); if (! STRINGP (f->icon_name)) f->icon_name = Qnil; @@ -4168,7 +4178,7 @@ { Lisp_Object font; - font = w32_get_arg (parms, Qfont, "font", "Font", RES_TYPE_STRING); + font = w32_get_arg (parameters, Qfont, "font", "Font", RES_TYPE_STRING); BLOCK_INPUT; /* First, try whatever font the caller has specified. */ @@ -4192,49 +4202,49 @@ if (! STRINGP (font)) font = build_string ("Fixedsys"); - x_default_parameter (f, parms, Qfont, font, + x_default_parameter (f, parameters, Qfont, font, "font", "Font", RES_TYPE_STRING); } - x_default_parameter (f, parms, Qborder_width, make_number (2), + x_default_parameter (f, parameters, Qborder_width, make_number (2), "borderWidth", "BorderWidth", RES_TYPE_NUMBER); /* This defaults to 2 in order to match xterm. We recognize either internalBorderWidth or internalBorder (which is what xterm calls it). */ - if (NILP (Fassq (Qinternal_border_width, parms))) + if (NILP (Fassq (Qinternal_border_width, parameters))) { Lisp_Object value; - value = w32_get_arg (parms, Qinternal_border_width, - "internalBorder", "InternalBorder", RES_TYPE_NUMBER); + value = w32_get_arg (parameters, Qinternal_border_width, + "internalBorder", "InternalBorder", RES_TYPE_NUMBER); if (! EQ (value, Qunbound)) - parms = Fcons (Fcons (Qinternal_border_width, value), - parms); + parameters = Fcons (Fcons (Qinternal_border_width, value), + parameters); } /* Default internalBorderWidth to 0 on Windows to match other programs. */ - x_default_parameter (f, parms, Qinternal_border_width, make_number (0), + x_default_parameter (f, parameters, Qinternal_border_width, make_number (0), "internalBorderWidth", "InternalBorder", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qvertical_scroll_bars, Qright, + x_default_parameter (f, parameters, Qvertical_scroll_bars, Qright, "verticalScrollBars", "ScrollBars", RES_TYPE_SYMBOL); /* Also do the stuff which must be set before the window exists. */ - x_default_parameter (f, parms, Qforeground_color, build_string ("black"), + x_default_parameter (f, parameters, Qforeground_color, build_string ("black"), "foreground", "Foreground", RES_TYPE_STRING); - x_default_parameter (f, parms, Qbackground_color, build_string ("white"), + x_default_parameter (f, parameters, Qbackground_color, build_string ("white"), "background", "Background", RES_TYPE_STRING); - x_default_parameter (f, parms, Qmouse_color, build_string ("black"), + x_default_parameter (f, parameters, Qmouse_color, build_string ("black"), "pointerColor", "Foreground", RES_TYPE_STRING); - x_default_parameter (f, parms, Qcursor_color, build_string ("black"), + x_default_parameter (f, parameters, Qcursor_color, build_string ("black"), "cursorColor", "Foreground", RES_TYPE_STRING); - x_default_parameter (f, parms, Qborder_color, build_string ("black"), + x_default_parameter (f, parameters, Qborder_color, build_string ("black"), "borderColor", "BorderColor", RES_TYPE_STRING); - x_default_parameter (f, parms, Qscreen_gamma, Qnil, + x_default_parameter (f, parameters, Qscreen_gamma, Qnil, "screenGamma", "ScreenGamma", RES_TYPE_FLOAT); - x_default_parameter (f, parms, Qline_spacing, Qnil, + x_default_parameter (f, parameters, Qline_spacing, Qnil, "lineSpacing", "LineSpacing", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qleft_fringe, Qnil, + x_default_parameter (f, parameters, Qleft_fringe, Qnil, "leftFringe", "LeftFringe", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qright_fringe, Qnil, + x_default_parameter (f, parameters, Qright_fringe, Qnil, "rightFringe", "RightFringe", RES_TYPE_NUMBER); @@ -4246,16 +4256,16 @@ happen. */ init_frame_faces (f); - x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1), + x_default_parameter (f, parameters, Qmenu_bar_lines, make_number (1), "menuBar", "MenuBar", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qtool_bar_lines, make_number (1), + x_default_parameter (f, parameters, Qtool_bar_lines, make_number (1), "toolBar", "ToolBar", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qbuffer_predicate, Qnil, + x_default_parameter (f, parameters, Qbuffer_predicate, Qnil, "bufferPredicate", "BufferPredicate", RES_TYPE_SYMBOL); - x_default_parameter (f, parms, Qtitle, Qnil, + x_default_parameter (f, parameters, Qtitle, Qnil, "title", "Title", RES_TYPE_STRING); - x_default_parameter (f, parms, Qfullscreen, Qnil, + x_default_parameter (f, parameters, Qfullscreen, Qnil, "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW; @@ -4268,13 +4278,13 @@ f->output_data.w32->hourglass_cursor = w32_load_cursor (IDC_WAIT); f->output_data.w32->horizontal_drag_cursor = w32_load_cursor (IDC_SIZEWE); - window_prompting = x_figure_window_size (f, parms, 1); - - tem = w32_get_arg (parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); + window_prompting = x_figure_window_size (f, parameters, 1); + + tem = w32_get_arg (parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); f->no_split = minibuffer_only || EQ (tem, Qt); w32_window (f, window_prompting, minibuffer_only); - x_icon (f, parms); + x_icon (f, parameters); x_make_gc (f); @@ -4284,16 +4294,16 @@ /* We need to do this after creating the window, so that the icon-creation functions can say whose icon they're describing. */ - x_default_parameter (f, parms, Qicon_type, Qnil, + x_default_parameter (f, parameters, Qicon_type, Qnil, "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL); - x_default_parameter (f, parms, Qauto_raise, Qnil, + x_default_parameter (f, parameters, Qauto_raise, Qnil, "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); - x_default_parameter (f, parms, Qauto_lower, Qnil, + x_default_parameter (f, parameters, Qauto_lower, Qnil, "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN); - x_default_parameter (f, parms, Qcursor_type, Qbox, + x_default_parameter (f, parameters, Qcursor_type, Qbox, "cursorType", "CursorType", RES_TYPE_SYMBOL); - x_default_parameter (f, parms, Qscroll_bar_width, Qnil, + x_default_parameter (f, parameters, Qscroll_bar_width, Qnil, "scrollBarWidth", "ScrollBarWidth", RES_TYPE_NUMBER); /* Dimensions, especially FRAME_LINES (f), must be done via change_frame_size. @@ -4331,7 +4341,7 @@ { Lisp_Object visibility; - visibility = w32_get_arg (parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL); + visibility = w32_get_arg (parameters, Qvisibility, 0, 0, RES_TYPE_SYMBOL); if (EQ (visibility, Qunbound)) visibility = Qt; @@ -4775,46 +4785,46 @@ w32_charset = Fcar (Fcdr (this_entry)); /* Translate Lisp symbol to number. */ - if (w32_charset == Qw32_charset_ansi) + if (EQ (w32_charset, Qw32_charset_ansi)) return ANSI_CHARSET; - if (w32_charset == Qw32_charset_symbol) + if (EQ (w32_charset, Qw32_charset_symbol)) return SYMBOL_CHARSET; - if (w32_charset == Qw32_charset_shiftjis) + if (EQ (w32_charset, Qw32_charset_shiftjis)) return SHIFTJIS_CHARSET; - if (w32_charset == Qw32_charset_hangeul) + if (EQ (w32_charset, Qw32_charset_hangeul)) return HANGEUL_CHARSET; - if (w32_charset == Qw32_charset_chinesebig5) + if (EQ (w32_charset, Qw32_charset_chinesebig5)) return CHINESEBIG5_CHARSET; - if (w32_charset == Qw32_charset_gb2312) + if (EQ (w32_charset, Qw32_charset_gb2312)) return GB2312_CHARSET; - if (w32_charset == Qw32_charset_oem) + if (EQ (w32_charset, Qw32_charset_oem)) return OEM_CHARSET; #ifdef JOHAB_CHARSET - if (w32_charset == Qw32_charset_johab) + if (EQ (w32_charset, Qw32_charset_johab)) return JOHAB_CHARSET; - if (w32_charset == Qw32_charset_easteurope) + if (EQ (w32_charset, Qw32_charset_easteurope)) return EASTEUROPE_CHARSET; - if (w32_charset == Qw32_charset_turkish) + if (EQ (w32_charset, Qw32_charset_turkish)) return TURKISH_CHARSET; - if (w32_charset == Qw32_charset_baltic) + if (EQ (w32_charset, Qw32_charset_baltic)) return BALTIC_CHARSET; - if (w32_charset == Qw32_charset_russian) + if (EQ (w32_charset, Qw32_charset_russian)) return RUSSIAN_CHARSET; - if (w32_charset == Qw32_charset_arabic) + if (EQ (w32_charset, Qw32_charset_arabic)) return ARABIC_CHARSET; - if (w32_charset == Qw32_charset_greek) + if (EQ (w32_charset, Qw32_charset_greek)) return GREEK_CHARSET; - if (w32_charset == Qw32_charset_hebrew) + if (EQ (w32_charset, Qw32_charset_hebrew)) return HEBREW_CHARSET; - if (w32_charset == Qw32_charset_vietnamese) + if (EQ (w32_charset, Qw32_charset_vietnamese)) return VIETNAMESE_CHARSET; - if (w32_charset == Qw32_charset_thai) + if (EQ (w32_charset, Qw32_charset_thai)) return THAI_CHARSET; - if (w32_charset == Qw32_charset_mac) + if (EQ (w32_charset, Qw32_charset_mac)) return MAC_CHARSET; #endif /* JOHAB_CHARSET */ #ifdef UNICODE_CHARSET - if (w32_charset == Qw32_charset_unicode) + if (EQ (w32_charset, Qw32_charset_unicode)) return UNICODE_CHARSET; #endif @@ -4956,8 +4966,8 @@ /* Look for Same charset and a valid codepage (or non-int which means ignore). */ - if (w32_charset == charset_type - && (!INTEGERP (codepage) || codepage == CP_DEFAULT + if (EQ (w32_charset, charset_type) + && (!INTEGERP (codepage) || XINT (codepage) == CP_DEFAULT || IsValidCodePage (XINT (codepage)))) { /* If we don't have a match already, then this is the @@ -5151,8 +5161,8 @@ /* Look for Same charset and a valid codepage (or non-int which means ignore). */ - if (w32_charset == charset_type - && (!INTEGERP (codepage) || codepage == CP_DEFAULT + if (EQ (w32_charset, charset_type) + && (!INTEGERP (codepage) || XINT (codepage) == CP_DEFAULT || IsValidCodePage (XINT (codepage)))) { retval = Fcons (x_charset, retval); @@ -6205,6 +6215,9 @@ } } +/* directory-files from dired.c. */ +Lisp_Object Fdirectory_files P_((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)); + /* Find BDF files in a specified directory. (use GCPRO when calling, as this calls lisp to get a directory listing). */ @@ -6218,7 +6231,7 @@ return Qnil; filelist = Fdirectory_files (directory, Qt, - build_string (".*\\.[bB][dD][fF]"), Qt); + build_string (".*\\.[bB][dD][fF]"), Qt); for ( ; CONSP(filelist); filelist = XCDR (filelist)) { @@ -6231,10 +6244,10 @@ DEFUN ("w32-find-bdf-fonts", Fw32_find_bdf_fonts, Sw32_find_bdf_fonts, 1, 1, 0, - doc: /* Return a list of BDF fonts in DIR. -The list is suitable for appending to w32-bdf-filename-alist. Fonts -which do not contain an xlfd description will not be included in the -list. DIR may be a list of directories. */) + doc: /* Return a list of BDF fonts in DIRECTORY. +The list is suitable for appending to `w32-bdf-filename-alist'. +Fonts which do not contain an xlfd description will not be included +in the list. DIRECTORY may be a list of directories. */) (directory) Lisp_Object directory; { @@ -6315,7 +6328,7 @@ DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, 0, 1, 0, - doc: /* Return t if the X display supports shades of gray. + doc: /* Return t if DISPLAY supports shades of gray. Note that color displays do support shades of gray. The optional argument DISPLAY specifies which display to ask about. DISPLAY should be either a frame or a display name (a string). @@ -6388,9 +6401,9 @@ hdc = GetDC (dpyinfo->root_window); if (dpyinfo->has_palette) - cap = GetDeviceCaps (hdc,SIZEPALETTE); + cap = GetDeviceCaps (hdc, SIZEPALETTE); else - cap = GetDeviceCaps (hdc,NUMCOLORS); + cap = GetDeviceCaps (hdc, NUMCOLORS); /* We force 24+ bit depths to 24-bit, both to prevent an overflow and because probably is more meaningful on Windows anyway */ @@ -7175,6 +7188,8 @@ old_buffer = current_buffer; set_buffer_internal_1 (XBUFFER (buffer)); current_buffer->truncate_lines = Qnil; + specbind (Qinhibit_read_only, Qt); + specbind (Qinhibit_modification_hooks, Qt); Ferase_buffer (); Finsert (1, &text); set_buffer_internal_1 (old_buffer); @@ -7442,7 +7457,7 @@ Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil means use the default timeout of 5 seconds. -If the list of frame parameters PARAMS contains a `left' parameter, +If the list of frame parameters PARMS contains a `left' parameter, the tooltip is displayed at that x-position. Otherwise it is displayed at the mouse position, with offset DX added (default is 5 if DX isn't specified). Likewise for the y-position; if a `top' frame @@ -7923,7 +7938,7 @@ DEFUN ("w32-send-sys-command", Fw32_send_sys_command, Sw32_send_sys_command, 1, 2, 0, doc: /* Send frame a Windows WM_SYSCOMMAND message of type COMMAND. -Some useful values for command are #xf030 to maximise frame (#xf020 +Some useful values for COMMAND are #xf030 to maximize frame (#xf020 to minimize), #xf120 to restore frame to original size, and #xf100 to activate the menubar for keyboard access. #xf140 activates the screen saver if defined. @@ -8003,7 +8018,7 @@ /* Convert a one-element vector style key sequence to a hot key definition. */ -static int +static Lisp_Object w32_parse_hot_key (key) Lisp_Object key; { @@ -8035,7 +8050,7 @@ if (SYMBOLP (c)) { c = parse_modifiers (c); - lisp_modifiers = Fcar (Fcdr (c)); + lisp_modifiers = XINT (Fcar (Fcdr (c))); c = Fcar (c); if (!SYMBOLP (c)) abort (); @@ -8104,8 +8119,13 @@ /* Notify input thread about new hot-key definition, so that it takes effect without needing to switch focus. */ +#ifdef USE_LISP_UNION_TYPE + PostThreadMessage (dwWindowsThreadId, WM_EMACS_REGISTER_HOT_KEY, + (WPARAM) key.i, 0); +#else PostThreadMessage (dwWindowsThreadId, WM_EMACS_REGISTER_HOT_KEY, (WPARAM) key, 0); +#endif } return key; @@ -8113,7 +8133,7 @@ DEFUN ("w32-unregister-hot-key", Fw32_unregister_hot_key, Sw32_unregister_hot_key, 1, 1, 0, - doc: /* Unregister HOTKEY as a hot-key combination. */) + doc: /* Unregister KEY as a hot-key combination. */) (key) Lisp_Object key; { @@ -8128,8 +8148,14 @@ { /* Notify input thread about hot-key definition being removed, so that it takes effect without needing focus switch. */ +#ifdef USE_LISP_UNION_TYPE + if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_UNREGISTER_HOT_KEY, + (WPARAM) XINT (XCAR (item)), (LPARAM) item.i)) +#else if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_UNREGISTER_HOT_KEY, (WPARAM) XINT (XCAR (item)), (LPARAM) item)) + +#endif { MSG msg; GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); @@ -8149,7 +8175,8 @@ DEFUN ("w32-reconstruct-hot-key", Fw32_reconstruct_hot_key, Sw32_reconstruct_hot_key, 1, 1, 0, - doc: /* Convert hot-key ID to a lisp key combination. */) + doc: /* Convert hot-key ID to a lisp key combination. +usage: (w32-reconstruct-hot-key ID) */) (hotkeyid) Lisp_Object hotkeyid; { @@ -8202,8 +8229,13 @@ if (!dwWindowsThreadId) return make_number (w32_console_toggle_lock_key (vk_code, new_state)); +#ifdef USE_LISP_UNION_TYPE + if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_TOGGLE_LOCK_KEY, + (WPARAM) vk_code, (LPARAM) new_state.i)) +#else if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_TOGGLE_LOCK_KEY, (WPARAM) vk_code, (LPARAM) new_state)) +#endif { MSG msg; GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); @@ -8383,7 +8415,7 @@ Initialization ***********************************************************************/ -/* Keep this list in the same order as frame_parms in frame.c. +/* Keep this list in the same order as frame_parms in frame.c. Use 0 for unsupported frame parameters. */ frame_parm_handler w32_frame_parm_handlers[] = @@ -8468,7 +8500,7 @@ w32_grabbed_keys = Qnil; DEFVAR_LISP ("w32-color-map", &Vw32_color_map, - doc: /* An array of color name mappings for windows. */); + doc: /* An array of color name mappings for Windows. */); Vw32_color_map = Qnil; DEFVAR_LISP ("w32-pass-alt-to-system", &Vw32_pass_alt_to_system, @@ -8482,9 +8514,9 @@ When nil, Emacs will translate the alt key to the Alt modifier, and not Meta. */); Vw32_alt_is_meta = Qt; - DEFVAR_INT ("w32-quit-key", &Vw32_quit_key, - doc: /* If non-zero, the virtual key code for an alternative quit key. */); - XSETINT (Vw32_quit_key, 0); + DEFVAR_INT ("w32-quit-key", &w32_quit_key, + doc: /* If non-zero, the virtual key code for an alternative quit key. */); + w32_quit_key = 0; DEFVAR_LISP ("w32-pass-lwindow-to-system", &Vw32_pass_lwindow_to_system, @@ -8498,9 +8530,9 @@ When non-nil, the Start menu is opened by tapping the key. */); Vw32_pass_rwindow_to_system = Qt; - DEFVAR_INT ("w32-phantom-key-code", + DEFVAR_LISP ("w32-phantom-key-code", &Vw32_phantom_key_code, - doc: /* Virtual key code used to generate \"phantom\" key presses. + doc: /* Virtual key code used to generate \"phantom\" key presses. Value is a number between 0 and 255. Phantom key presses are generated in order to stop the system from @@ -8508,7 +8540,7 @@ `w32-pass-rwindow-to-system' is nil. */); /* Although 255 is technically not a valid key code, it works and means that this hack won't interfere with any real key code. */ - Vw32_phantom_key_code = 255; + XSETINT (Vw32_phantom_key_code, 255); DEFVAR_LISP ("w32-enable-num-lock", &Vw32_enable_num_lock, @@ -8563,21 +8595,21 @@ Vw32_enable_palette = Qt; DEFVAR_INT ("w32-mouse-button-tolerance", - &Vw32_mouse_button_tolerance, + &w32_mouse_button_tolerance, doc: /* Analogue of double click interval for faking middle mouse events. The value is the minimum time in milliseconds that must elapse between left/right button down events before they are considered distinct events. If both mouse buttons are depressed within this interval, a middle mouse button down event is generated instead. */); - XSETINT (Vw32_mouse_button_tolerance, GetDoubleClickTime () / 2); + w32_mouse_button_tolerance = GetDoubleClickTime () / 2; DEFVAR_INT ("w32-mouse-move-interval", - &Vw32_mouse_move_interval, + &w32_mouse_move_interval, doc: /* Minimum interval between mouse move events. The value is the minimum time in milliseconds that must elapse between successive mouse move (or scroll bar drag) events before they are reported as lisp events. */); - XSETINT (Vw32_mouse_move_interval, 0); + w32_mouse_move_interval = 0; DEFVAR_BOOL ("w32-pass-extra-mouse-buttons-to-system", &w32_pass_extra_mouse_buttons_to_system, @@ -8857,6 +8889,11 @@ /* ditto for GetClipboardSequenceNumber. */ clipboard_sequence_fn = (ClipboardSequence_Proc) GetProcAddress (user32_lib, "GetClipboardSequenceNumber"); + + DEFVAR_INT ("w32-ansi-code-page", + &w32_ansi_code_page, + doc: /* The ANSI code page used by the system. */); + w32_ansi_code_page = GetACP (); } #undef abort