# HG changeset patch # User Miles Bader # Date 1208930142 0 # Node ID ca9efc5939fc47fc6c5b8cd344c51ac7fac2627e # Parent f07af351ed0b38bfaac5071c61ad899a208aec55# Parent d55279d4ddcf3c11c7622a3c46b2df2779f62807 Merge from emacs--rel--22 Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1121 diff -r f07af351ed0b -r ca9efc5939fc ChangeLog --- a/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -1,3 +1,7 @@ +2008-04-23 Dan Nicolaescu + + * configure.in: Remove hpux10.20 from the desupported list. + 2008-04-18 Stefan Monnier * configure.in: Define USE_LUCID/USE_MOTIF in config.h. diff -r f07af351ed0b -r ca9efc5939fc admin/FOR-RELEASE --- a/admin/FOR-RELEASE Wed Apr 23 05:15:42 2008 +0000 +++ b/admin/FOR-RELEASE Wed Apr 23 05:55:42 2008 +0000 @@ -53,12 +53,6 @@ of 20070912, emails are bouncing) or someone else who can reproduce this. http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01497.html -** emacs-22.1 with GTK problems (with patches) -Only outstanding issue seems to be whether Solaris 2.6 GTK can be -supported in the absence of recursive mutexes, via a change to -alloc.c, or whether configure should abort. -http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00055.html - * BUGS ** Does deleting frames run Lisp code? If so, can we get rid of that? diff -r f07af351ed0b -r ca9efc5939fc configure.in --- a/configure.in Wed Apr 23 05:15:42 2008 +0000 +++ b/configure.in Wed Apr 23 05:55:42 2008 +0000 @@ -769,7 +769,7 @@ esac case "${opsys}" in - bsd386 | bsdos2-1 | bsdos2 | bsdos3 | bsdos4 | bsd4-1 | bsd4-2 | bsd4-3 | usg5-0 | usg5-2-2 | usg5-2 | usg5-3 | ultrix4-3 | 386bsd | hpux | hpux8 | hpux9 | hpux9shr | hpux10 | hpux10-20 | aix3-1 | aix3-2-5 | aix3-2 | aix4-1 | nextstep | ux4800 | uxpds | uxpv ) + bsd386 | bsdos2-1 | bsdos2 | bsdos3 | bsdos4 | bsd4-1 | bsd4-2 | bsd4-3 | usg5-0 | usg5-2-2 | usg5-2 | usg5-3 | ultrix4-3 | 386bsd | hpux | hpux8 | hpux9 | hpux9shr | hpux10 | aix3-1 | aix3-2-5 | aix3-2 | aix4-1 | nextstep | ux4800 | uxpds | uxpv ) echo "The system that you are configuring on: ${canonical} is considered to be obsolete" echo "and it is planned to be desupported in the next version of Emacs" echo "Please email emacs-devel@gnu.org as soon as possible if this system is still in use." diff -r f07af351ed0b -r ca9efc5939fc doc/emacs/ChangeLog --- a/doc/emacs/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/doc/emacs/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -13,6 +13,11 @@ * building.texi (GDB-UI Layout, Breakpoints Buffer) (Other GDB-UI Buffers): Update for recent thread related changes. +2008-04-11 Mirko Vukovic (tiny change) + + * maintaining.texi (Maintaining): + * emacs.texi (Top): Typo. + 2008-04-08 Stefan Monnier * display.texi (Font Lock): Prefer add-hook to using a non-nil `mode' diff -r f07af351ed0b -r ca9efc5939fc doc/emacs/emacs.texi --- a/doc/emacs/emacs.texi Wed Apr 23 05:15:42 2008 +0000 +++ b/doc/emacs/emacs.texi Wed Apr 23 05:55:42 2008 +0000 @@ -713,7 +713,7 @@ * Change Log:: Maintaining a change history for your program. * Format of ChangeLog:: What the change log file looks like. -* Tags:: Go direct to any function in your program in one +* Tags:: Go directly to any function in your program in one command. Tags remembers which file it is in. * Emerge:: A convenient way of merging two versions of a program. diff -r f07af351ed0b -r ca9efc5939fc doc/emacs/maintaining.texi --- a/doc/emacs/maintaining.texi Wed Apr 23 05:15:42 2008 +0000 +++ b/doc/emacs/maintaining.texi Wed Apr 23 05:55:42 2008 +0000 @@ -12,7 +12,7 @@ @menu * Change Log:: Maintaining a change history for your program. * Format of ChangeLog:: What the change log file looks like. -* Tags:: Go direct to any function in your program in one +* Tags:: Go directly to any function in your program in one command. Tags remembers which file it is in. @ifnottex * Emerge:: A convenient way of merging two versions of a program. diff -r f07af351ed0b -r ca9efc5939fc lib-src/ChangeLog --- a/lib-src/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/lib-src/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -1,3 +1,9 @@ +2008-04-10 Jason Rumney + + * makefile.w32-in (CLIENTRES): New variable and target. + (TRES): Remove. + ($(BLD)/emacsclientw.exe): Use $(CLIENTRES) instead of $(TRES). + 2008-04-19 Stefan Monnier * vcdiff: Use "sccs get" rather than "get"; leave PATH alone. diff -r f07af351ed0b -r ca9efc5939fc lib-src/makefile.w32-in --- a/lib-src/makefile.w32-in Wed Apr 23 05:15:42 2008 +0000 +++ b/lib-src/makefile.w32-in Wed Apr 23 05:55:42 2008 +0000 @@ -75,18 +75,19 @@ $(BLD)/getopt.$(O) \ $(BLD)/getopt1.$(O) \ $(BLD)/ntlib.$(O) -TRES = ../nt/$(BLD)/emacs.res +CLIENTRES = ../nt/$(BLD)/emacsclient.res -$(TRES): ../nt/emacs.rc - $(RC) $(RC_OUT)../nt/$(BLD)/emacs.res $(ALL_DEPS) +$(CLIENTRES): ../nt/emacsclient.rc + @echo Emacsclient resource file must be built from nt directory + @exit -1 $(BLD)/emacsclient.exe: $(ECLIENTOBJS) # put wsock32.lib before $(LIBS) to ensure we don't link to ws2_32.lib $(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(ECLIENTOBJS) $(WSOCK32) $(USER32) $(COMCTL32) $(LIBS) -$(BLD)/emacsclientw.exe: $(ECLIENTOBJS) $(TRES) +$(BLD)/emacsclientw.exe: $(ECLIENTOBJS) $(CLIENTRES) # put wsock32.lib before $(LIBS) to ensure we don't link to ws2_32.lib - $(LINK) $(LINK_OUT)$@ $(TRES) -mwindows $(LINK_FLAGS) $(ECLIENTOBJS) $(WSOCK32) $(USER32) $(COMCTL32) $(LIBS) + $(LINK) $(LINK_OUT)$@ $(CLIENTRES) -mwindows $(LINK_FLAGS) $(ECLIENTOBJS) $(WSOCK32) $(USER32) $(COMCTL32) $(LIBS) # emacsclient.$(O) depends on makefile.w32-in because makefile.w32-in # can be edited to define VERSION string, which is part of ECLIENT_CFLAGS. diff -r f07af351ed0b -r ca9efc5939fc lisp/ChangeLog --- a/lisp/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -1,3 +1,36 @@ +2008-04-12 Nick Roberts + + * progmodes/gdb-ui.el (gdb-init-buffer): New function. + (gdb-set-gud-minor-mode-existing-buffers) + (gdb-info-breakpoints-custom, gdb-get-location) + (gdb-set-gud-minor-mode-existing-buffers-1): Use it. + Previously gdb-create-define-alist wasn't always run and added to + after-save-hook. + + * progmodes/gud.el (gud-tooltip-tips): Use tooltip-event-buffer + +2008-04-12 Kevin Ryde + + * progmodes/make-mode.el (makefile-fill-paragraph): Treat indented + comments like unindented ones. + +2008-04-12 YAMAMOTO Mitsuharu + + * term/mac-win.el (mac-ae-open-documents): Adjust selection range + parameter origins. + +2008-04-11 Kevin Ryde + + * emacs-lisp/autoload.el (autoload-generate-file-autoloads): + Bind print-level to ensure output forms aren't truncated if + print-level is set to eval-expression-print-level when going via + eval-defun and friends, or has been otherwise fiddled with. + +2008-04-08 Stefan Monnier + + * progmodes/cc-mode.el (c-basic-common-init): Don't set + font-lock-extend-after-change-region-function globally. + 2008-04-23 Juanma Barranquero * speedbar.el (speedbar-use-tool-tips-flag) diff -r f07af351ed0b -r ca9efc5939fc lisp/emacs-lisp/autoload.el --- a/lisp/emacs-lisp/autoload.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/emacs-lisp/autoload.el Wed Apr 23 05:55:42 2008 +0000 @@ -335,6 +335,7 @@ (let ((autoloads-done '()) (load-name (autoload-file-load-name file)) (print-length nil) + (print-level nil) (print-readably t) ; This does something in Lucid Emacs. (float-output-format nil) (visited (get-file-buffer file)) diff -r f07af351ed0b -r ca9efc5939fc lisp/gnus/nnrss.el --- a/lisp/gnus/nnrss.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/gnus/nnrss.el Wed Apr 23 05:55:42 2008 +0000 @@ -1131,7 +1131,5 @@ (provide 'nnrss) - +;; arch-tag: 12910c07-0cdf-44fb-8d2c-416ded64c267 ;;; nnrss.el ends here - -;; arch-tag: 12910c07-0cdf-44fb-8d2c-416ded64c267 diff -r f07af351ed0b -r ca9efc5939fc lisp/progmodes/cc-mode.el --- a/lisp/progmodes/cc-mode.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/progmodes/cc-mode.el Wed Apr 23 05:55:42 2008 +0000 @@ -601,7 +601,7 @@ (add-hook 'before-change-functions 'c-before-change nil t) (make-local-hook 'after-change-functions) (add-hook 'after-change-functions 'c-after-change nil t) - (setq font-lock-extend-after-change-region-function + (set (make-local-variable 'font-lock-extend-after-change-region-function) 'c-extend-after-change-region)) ; Currently (2008-04), only used by AWK. (defun c-setup-doc-comment-style () diff -r f07af351ed0b -r ca9efc5939fc lisp/progmodes/gdb-ui.el --- a/lisp/progmodes/gdb-ui.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/progmodes/gdb-ui.el Wed Apr 23 05:55:42 2008 +0000 @@ -481,6 +481,15 @@ (defconst gdb-source-file-regexp "\\(.+?\\), \\|\\([^, \n].*$\\)") +(defun gdb-init-buffer () + (set (make-local-variable 'gud-minor-mode) + (buffer-local-value 'gud-minor-mode gud-comint-buffer)) + (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) + (when gud-tooltip-mode + (make-local-variable 'gdb-define-alist) + (gdb-create-define-alist) + (add-hook 'after-save-hook 'gdb-create-define-alist nil t))) + (defun gdb-set-gud-minor-mode-existing-buffers () "Create list of source files for current GDB session." (goto-char (point-min)) @@ -493,12 +502,7 @@ (when (and buffer-file-name (member (file-name-nondirectory buffer-file-name) gdb-source-file-list)) - (set (make-local-variable 'gud-minor-mode) 'gdba) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) - (when gud-tooltip-mode - (make-local-variable 'gdb-define-alist) - (gdb-create-define-alist) - (add-hook 'after-save-hook 'gdb-create-define-alist nil t)))))) + (gdb-init-buffer))))) (gdb-force-mode-line-update (propertize "ready" 'face font-lock-variable-name-face))) @@ -1953,10 +1957,7 @@ (not (string-equal file "File not found"))) (with-current-buffer (find-file-noselect file 'nowarn) - (set (make-local-variable 'gud-minor-mode) - 'gdba) - (set (make-local-variable 'tool-bar-map) - gud-tool-bar-map) + (gdb-init-buffer) ;; Only want one breakpoint icon at each ;; location. (save-excursion @@ -3269,9 +3270,7 @@ (throw 'file-not-found nil)) (with-current-buffer (find-file-noselect (match-string 0)) - (save-current-buffer - (set (make-local-variable 'gud-minor-mode) 'gdba) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)) + (gdb-init-buffer) ;; only want one breakpoint icon at each location (save-excursion (goto-line (string-to-number line)) @@ -3293,9 +3292,7 @@ buffer-file-name) gdb-source-file-list) (with-current-buffer (find-buffer-visiting buffer-file-name) - (set (make-local-variable 'gud-minor-mode) - (buffer-local-value 'gud-minor-mode gud-comint-buffer)) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map))))) + (gdb-init-buffer))))) ;;from put-image (defun gdb-put-string (putstring pos &optional dprop &rest sprops) @@ -3625,13 +3622,7 @@ (dolist (buffer (buffer-list)) (with-current-buffer buffer (when (member buffer-file-name gdb-source-file-list) - (set (make-local-variable 'gud-minor-mode) - (buffer-local-value 'gud-minor-mode gud-comint-buffer)) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) - (when gud-tooltip-mode - (make-local-variable 'gdb-define-alist) - (gdb-create-define-alist) - (add-hook 'after-save-hook 'gdb-create-define-alist nil t))))) + (gdb-init-buffer)))) (gdb-force-mode-line-update (propertize "ready" 'face font-lock-variable-name-face))) diff -r f07af351ed0b -r ca9efc5939fc lisp/progmodes/gud.el --- a/lisp/progmodes/gud.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/progmodes/gud.el Wed Apr 23 05:55:42 2008 +0000 @@ -3424,10 +3424,7 @@ (if (and (eq gud-minor-mode 'gdba) (not gdb-active-process)) (progn - (with-current-buffer - (window-buffer (let ((mouse (mouse-position))) - (window-at (cadr mouse) - (cddr mouse)))) + (with-current-buffer (tooltip-event-buffer event) (let ((define-elt (assoc expr gdb-define-alist))) (unless (null define-elt) (tooltip-show diff -r f07af351ed0b -r ca9efc5939fc lisp/progmodes/make-mode.el --- a/lisp/progmodes/make-mode.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/progmodes/make-mode.el Wed Apr 23 05:55:42 2008 +0000 @@ -1352,7 +1352,7 @@ (save-excursion (beginning-of-line) (cond - ((looking-at "^#+\\s-*") + ((looking-at "^[ \t]*#+\\s-*") ;; Found a comment. Return nil to let normal filling take place. nil) diff -r f07af351ed0b -r ca9efc5939fc lisp/term/mac-win.el --- a/lisp/term/mac-win.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/term/mac-win.el Wed Apr 23 05:55:42 2008 +0000 @@ -1802,11 +1802,11 @@ (let ((line (car selection-range)) (start (cadr selection-range)) (end (nth 2 selection-range))) - (if (> line 0) - (goto-line line) - (if (and (> start 0) (> end 0)) - (progn (set-mark start) - (goto-char end)))))) + (if (>= line 0) + (goto-line (1+ line)) + (if (and (>= start 0) (>= end 0)) + (progn (set-mark (1+ start)) + (goto-char (1+ end))))))) ((stringp search-text) (re-search-forward (mapconcat 'regexp-quote (split-string search-text) "\\|") diff -r f07af351ed0b -r ca9efc5939fc lisp/textmodes/paragraphs.el --- a/lisp/textmodes/paragraphs.el Wed Apr 23 05:15:42 2008 +0000 +++ b/lisp/textmodes/paragraphs.el Wed Apr 23 05:55:42 2008 +0000 @@ -355,8 +355,8 @@ a negative argument ARG = -N means move forward N paragraphs. A paragraph start is the beginning of a line which is a -`first-line-of-paragraph' or which is ordinary text and follows a -paragraph-separating line; except: if the first real line of a +`paragraph-start' or which is ordinary text and follows a +`paragraph-separate'ing line; except: if the first real line of a paragraph is preceded by a blank line, the paragraph starts at that blank line. diff -r f07af351ed0b -r ca9efc5939fc nt/ChangeLog --- a/nt/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/nt/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -1,3 +1,15 @@ +2008-04-23 Eli Zaretskii + + * makefile.w32-in (ALL): Move $(CLIENTRES) from here... + (all): ...to here. $(ALL) is a prerequisite of .PHONY, so having + a real file there is not a good idea. + +2008-04-23 Jason Rumney + + * makefile.w32-in (CLIENTRES): New variable and build target. + (all): Depend on it. + ($(TRES)): Use $(TRES) in rule. + 2008-04-21 Jason Rumney * configure.bat (success): Print "make" rather than "gmake", as that diff -r f07af351ed0b -r ca9efc5939fc nt/makefile.w32-in --- a/nt/makefile.w32-in Wed Apr 23 05:15:42 2008 +0000 +++ b/nt/makefile.w32-in Wed Apr 23 05:55:42 2008 +0000 @@ -24,13 +24,15 @@ # FIXME: This file uses DOS EOLs. Convert to Unix after 22.1 is out # (and remove or replace this comment). +TRES = $(BLD)/emacs.res +CLIENTRES = $(BLD)/emacsclient.res + +XMFLAGS = + ALL = addpm ddeclient runemacs cmdproxy addsection preprep .PHONY: $(ALL) -TRES = $(BLD)/emacs.res - -XMFLAGS = addpm: stamp_BLD $(BLD)/addpm.exe $(BLD)/addpm.exe: $(BLD)/addpm.$(O) @@ -62,7 +64,10 @@ # it is not necessary on later versions, it is still ok to use it. # $(TRES): emacs.rc icons/emacs.ico emacs.manifest stamp_BLD - $(RC) $(RC_OUT)$(BLD)/emacs.res emacs.rc + $(RC) $(RC_OUT)$(TRES) emacs.rc + +$(CLIENTRES): emacsclient.rc stamp_BLD + $(RC) $(RC_OUT)$(CLIENTRES) emacsclient.rc runemacs: stamp_BLD $(BLD)/runemacs.exe $(BLD)/runemacs.exe: $(BLD)/runemacs.$(O) $(TRES) @@ -81,7 +86,7 @@ # # Build emacs # -all: which-sh stamp_BLD $(ALL) maybe-bootstrap all-other-dirs-$(MAKETYPE) +all: which-sh stamp_BLD $(ALL) $(CLIENTRES) maybe-bootstrap all-other-dirs-$(MAKETYPE) all-other-dirs-nmake: addsection cd ..\lib-src diff -r f07af351ed0b -r ca9efc5939fc src/ChangeLog --- a/src/ChangeLog Wed Apr 23 05:15:42 2008 +0000 +++ b/src/ChangeLog Wed Apr 23 05:55:42 2008 +0000 @@ -1,3 +1,64 @@ +2008-04-19 YAMAMOTO Mitsuharu + + * mac.c (create_apple_event) [TARGET_API_MAC_CARBON]: + Make function non-static. + (create_apple_event_from_event_ref) [TARGET_API_MAC_CARBON]: + Remove function. + (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: + Move to mactoolbox.c. + (mac_event_parameters_to_lisp) [TARGET_API_MAC_CARBON]: New function. + + * macgui.h (CGFloat) [!CGFLOAT_DEFINED]: New typedef. + (mac_rect_make): New macro. + + * macterm.c (mac_draw_image_string_atsui) [MAC_OSX]: Use CGFloat + instead of float. + (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. + (init_cg_color, mac_draw_line, mac_draw_cg_image, XSetForeground) + (XSetBackground) [USE_CG_DRAWING]: Likewise. + (mac_draw_image_string_atsui) [MAC_OSX]: Use mac_rect_make instead of + CGRectMake. + (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. + (mac_erase_rectangle, mac_draw_cg_image, mac_fill_rectangle) + (mac_set_clip_rectangles) [USE_CG_DRAWING]: Likewise. + (XCreatePixmap, XCreatePixmapFromBitmapData): Use Window + instead of WindowRef in argument type. + (XCreatePixmap) [!MAC_OS8]: Don't call SetPortWindowPort. + (mac_invert_rectangle): Use CGContextSetBlendMode if available. + (mac_set_clip_rectangles, mac_reset_clip_rectangles): Take argument F + instead of DISPLAY. All uses changed. + (mac_handle_size_change): Don't call SET_FRAME_GARBAGED. + (x_calc_absolute_position): Simplify so as not to use + FRAME_PIXEL_WIDTH/FRAME_PIXEL_HEIGHT. + + * macterm.h (XCreatePixmap, XCreatePixmapFromBitmapData): Use Window + instead of WindowRef in argument type. + (create_apple_event_from_event_ref, create_apple_event_from_drag_ref) + [TARGET_API_MAC_CARBON]: Remove externs. + (create_apple_event, mac_event_parameters_to_lisp) + [TARGET_API_MAC_CARBON]: Add externs. + + * mactoolbox.c: (Vmac_ts_script_language_on_focus) + (saved_ts_script_language_on_focus) [USE_MAC_TSM]: Remove externs. + (XTread_socket) [USE_MAC_TOOLBAR]: Select window if its structure part + is clicked. + (x_activate_menubar): Remove extern for saved_menu_event_location. + (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: + Move from mac.c. + +2008-04-12 YAMAMOTO Mitsuharu + + * alloc.c [!SYSTEM_MALLOC && !SYNC_INPUT] (uninterrupt_malloc) + [HAVE_GTK_AND_PTHREAD && !DOUG_LEA_MALLOC]: Don't use recursive mutex. + +2008-04-10 Jason Rumney + + * w32.c (stat): When Vw32_get_true_file_attributes is Qlocal, get + attributes only for local files. + + * w32proc.c (syms_of_ntproc): Change Vw32_get_true_file attributes + default to Qlocal. + 2008-04-22 Juri Linkov * buffer.c (Fswitch_to_buffer): Change interactive spec to call diff -r f07af351ed0b -r ca9efc5939fc src/alloc.c --- a/src/alloc.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/alloc.c Wed Apr 23 05:55:42 2008 +0000 @@ -1366,6 +1366,7 @@ uninterrupt_malloc () { #ifdef HAVE_GTK_AND_PTHREAD +#ifdef DOUG_LEA_MALLOC pthread_mutexattr_t attr; /* GLIBC has a faster way to do this, but lets keep it portable. @@ -1373,6 +1374,11 @@ pthread_mutexattr_init (&attr); pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init (&alloc_mutex, &attr); +#else /* !DOUG_LEA_MALLOC */ + /* Some systems such as Solaris 2.6 doesn't have a recursive mutex, + and the bundled gmalloc.c doesn't require it. */ + pthread_mutex_init (&alloc_mutex, NULL); +#endif /* !DOUG_LEA_MALLOC */ #endif /* HAVE_GTK_AND_PTHREAD */ if (__free_hook != emacs_blocked_free) diff -r f07af351ed0b -r ca9efc5939fc src/mac.c --- a/src/mac.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/mac.c Wed Apr 23 05:55:42 2008 +0000 @@ -817,7 +817,7 @@ } #if TARGET_API_MAC_CARBON -static OSErr +OSErr create_apple_event (class, id, result) AEEventClass class; AEEventID id; @@ -842,129 +842,76 @@ return err; } -OSStatus -create_apple_event_from_event_ref (event, num_params, names, types, result) +Lisp_Object +mac_event_parameters_to_lisp (event, num_params, names, types) EventRef event; UInt32 num_params; const EventParamName *names; const EventParamType *types; - AppleEvent *result; { OSStatus err; - UInt32 i, size; + Lisp_Object result = Qnil; + UInt32 i; + ByteCount size; +#ifdef MAC_OSX CFStringRef string; CFDataRef data; +#endif char *buf = NULL; - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err != noErr) - return err; - for (i = 0; i < num_params; i++) - switch (types[i]) - { + { + EventParamName name = names[i]; + EventParamType type = types[i]; + + switch (type) + { #ifdef MAC_OSX - case typeCFStringRef: - err = GetEventParameter (event, names[i], typeCFStringRef, NULL, - sizeof (CFStringRef), NULL, &string); - if (err != noErr) - break; - data = CFStringCreateExternalRepresentation (NULL, string, - kCFStringEncodingUTF8, - '?'); - if (data == NULL) - break; - AEPutParamPtr (result, names[i], typeUTF8Text, - CFDataGetBytePtr (data), CFDataGetLength (data)); - CFRelease (data); - break; -#endif - - default: - err = GetEventParameter (event, names[i], types[i], NULL, - 0, &size, NULL); - if (err != noErr) + case typeCFStringRef: + err = GetEventParameter (event, name, typeCFStringRef, NULL, + sizeof (CFStringRef), NULL, &string); + if (err != noErr) + break; + data = CFStringCreateExternalRepresentation (NULL, string, + kCFStringEncodingUTF8, + '?'); + if (data == NULL) + break; + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (typeUTF8Text); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (CFDataGetBytePtr (data), + CFDataGetLength (data)))), + result); + CFRelease (data); break; - buf = xrealloc (buf, size); - err = GetEventParameter (event, names[i], types[i], NULL, - size, NULL, buf); - if (err == noErr) - AEPutParamPtr (result, names[i], types[i], buf, size); - break; - } - if (buf) - xfree (buf); - - return noErr; -} - -OSErr -create_apple_event_from_drag_ref (drag, num_types, types, result) - DragRef drag; - UInt32 num_types; - const FlavorType *types; - AppleEvent *result; -{ - OSErr err; - UInt16 num_items; - AppleEvent items; - long index; - char *buf = NULL; - - err = CountDragItems (drag, &num_items); - if (err != noErr) - return err; - err = AECreateList (NULL, 0, false, &items); - if (err != noErr) - return err; - - for (index = 1; index <= num_items; index++) - { - ItemReference item; - DescType desc_type = typeNull; - Size size; - - err = GetDragItemReferenceNumber (drag, index, &item); - if (err == noErr) - { - int i; - - for (i = 0; i < num_types; i++) +#endif + + default: + err = GetEventParameter (event, name, type, NULL, 0, &size, NULL); + if (err != noErr) + break; + buf = xrealloc (buf, size); + err = GetEventParameter (event, name, type, NULL, size, NULL, buf); + if (err == noErr) { - err = GetFlavorDataSize (drag, item, types[i], &size); - if (err == noErr) - { - buf = xrealloc (buf, size); - err = GetFlavorData (drag, item, types[i], buf, &size, 0); - } - if (err == noErr) - { - desc_type = types[i]; - break; - } + name = EndianU32_NtoB (name); + type = EndianU32_NtoB (type); + result = + Fcons (Fcons (make_unibyte_string ((char *) &name, 4), + Fcons (make_unibyte_string ((char *) &type, 4), + make_unibyte_string (buf, size))), + result); } + break; } - err = AEPutPtr (&items, index, desc_type, - desc_type != typeNull ? buf : NULL, - desc_type != typeNull ? size : 0); - if (err != noErr) - break; } if (buf) xfree (buf); - if (err == noErr) - { - err = create_apple_event (0, 0, result); /* Dummy class and ID. */ - if (err == noErr) - err = AEPutParamDesc (result, keyDirectObject, &items); - if (err != noErr) - AEDisposeDesc (result); - } - - AEDisposeDesc (&items); - - return err; + return result; } #endif /* TARGET_API_MAC_CARBON */ diff -r f07af351ed0b -r ca9efc5939fc src/macgui.h --- a/src/macgui.h Wed Apr 23 05:15:42 2008 +0000 +++ b/src/macgui.h Wed Apr 23 05:55:42 2008 +0000 @@ -126,6 +126,10 @@ #endif #endif +#ifndef CGFLOAT_DEFINED +typedef float CGFloat; +#endif + typedef WindowRef Window; #if TARGET_API_MAC_CARBON typedef ScrapRef Selection; @@ -149,6 +153,7 @@ #define mac_size_window SizeWindow #define mac_get_global_mouse GetGlobalMouse #define mac_is_window_toolbar_visible IsWindowToolbarVisible +#define mac_rect_make(f, x, y, w, h) CGRectMake (x, y, w, h) typedef GWorldPtr Pixmap; #define Cursor ThemeCursor diff -r f07af351ed0b -r ca9efc5939fc src/macterm.c --- a/src/macterm.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/macterm.c Wed Apr 23 05:55:42 2008 +0000 @@ -351,7 +351,7 @@ if (CGColorGetTypeID != NULL) #endif { - float rgba[] = {0.0f, 0.0f, 0.0f, 1.0f}; + CGFloat rgba[] = {0.0f, 0.0f, 0.0f, 1.0f}; mac_cg_color_black = CGColorCreate (mac_cg_color_space_rgb, rgba); } @@ -460,7 +460,7 @@ { #if USE_CG_DRAWING CGContextRef context; - float gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2; + CGFloat gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2; if (y1 != y2) gx1 += 0.5f, gx2 += 0.5f; @@ -553,7 +553,7 @@ context = mac_begin_cg_clip (f, gc); CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); - CGContextFillRect (context, CGRectMake (x, y, width, height)); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); mac_end_cg_clip (f); } #else @@ -632,8 +632,8 @@ int dest_x, dest_y, overlay_p; { CGContextRef context; - float port_height = FRAME_PIXEL_HEIGHT (f); - CGRect dest_rect = CGRectMake (dest_x, dest_y, width, height); + CGFloat port_height = FRAME_PIXEL_HEIGHT (f); + CGRect dest_rect = mac_rect_make (f, dest_x, dest_y, width, height); context = mac_begin_cg_clip (f, gc); if (!overlay_p) @@ -647,11 +647,11 @@ if (CGImageIsMask (image)) CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc); CGContextDrawImage (context, - CGRectMake (dest_x - src_x, - port_height - (dest_y - src_y - + CGImageGetHeight (image)), - CGImageGetWidth (image), - CGImageGetHeight (image)), + mac_rect_make (f, dest_x - src_x, + port_height - (dest_y - src_y + + CGImageGetHeight (image)), + CGImageGetWidth (image), + CGImageGetHeight (image)), image); mac_end_cg_clip (f); } @@ -744,7 +744,7 @@ Pixmap XCreatePixmap (display, w, width, height, depth) Display *display; - WindowRef w; + Window w; unsigned int width, height; unsigned int depth; { @@ -752,8 +752,9 @@ Rect r; QDErr err; +#ifdef MAC_OS8 SetPortWindowPort (w); - +#endif SetRect (&r, 0, 0, width, height); #if !defined (WORDS_BIG_ENDIAN) && USE_CG_DRAWING if (depth == 1) @@ -773,7 +774,7 @@ Pixmap XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth) Display *display; - WindowRef w; + Window w; char *data; unsigned int width, height; unsigned long fg, bg; @@ -838,7 +839,7 @@ context = mac_begin_cg_clip (f, gc); CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc); - CGContextFillRect (context, CGRectMake (x, y, width, height)); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); mac_end_cg_clip (f); #else Rect r; @@ -887,7 +888,26 @@ int x, y; unsigned int width, height; { - Rect r; +#if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020 + if (CGContextSetBlendMode != NULL) +#endif + { + CGContextRef context; + + context = mac_begin_cg_clip (f, NULL); + CGContextSetRGBFillColor (context, 1.0f, 1.0f, 1.0f, 1.0f); + CGContextSetBlendMode (context, kCGBlendModeDifference); + CGContextFillRect (context, mac_rect_make (f, x, y, width, height)); + mac_end_cg_clip (f); + } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020 + else /* CGContextSetBlendMode == NULL */ +#endif +#endif /* USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 */ +#if !USE_CG_DRAWING || MAC_OS_X_VERSION_MAX_ALLOWED < 1040 || (MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020) + { + Rect r; #if USE_CG_DRAWING mac_prepare_for_quickdraw (f); @@ -1018,7 +1038,7 @@ else { static CGContextRef context; - float port_height = FRAME_PIXEL_HEIGHT (f); + CGFloat port_height = FRAME_PIXEL_HEIGHT (f); static const ATSUAttributeTag tags[] = {kATSUCGContextTag}; static const ByteCount sizes[] = {sizeof (CGContextRef)}; static const ATSUAttributeValuePtr values[] = {&context}; @@ -1042,9 +1062,10 @@ { CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); CGContextFillRect (context, - CGRectMake (x, y - FONT_BASE (GC_FONT (gc)), - bg_width, - FONT_HEIGHT (GC_FONT (gc)))); + mac_rect_make (f, + x, y - FONT_BASE (GC_FONT (gc)), + bg_width, + FONT_HEIGHT (GC_FONT (gc)))); } CGContextScaleCTM (context, 1, -1); CGContextTranslateCTM (context, 0, -port_height); @@ -1388,7 +1409,7 @@ XChar2b *buf; int nchars, bg_width, overstrike_p; { - float port_height, gx, gy; + CGFloat port_height, gx, gy; int i; CGContextRef context; CGGlyph *glyphs; @@ -1430,8 +1451,8 @@ CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc); CGContextFillRect (context, - CGRectMake (gx, y - FONT_BASE (GC_FONT (gc)), - bg_width, FONT_HEIGHT (GC_FONT (gc)))); + mac_rect_make (f, gx, y - FONT_BASE (GC_FONT (gc)), + bg_width, FONT_HEIGHT (GC_FONT (gc)))); } CGContextScaleCTM (context, 1, -1); CGContextTranslateCTM (context, 0, -port_height); @@ -1733,7 +1754,7 @@ } else { - float rgba[4]; + CGFloat rgba[4]; rgba[0] = gc->fore_color.red / 65535.0f; rgba[1] = gc->fore_color.green / 65535.0f; @@ -1774,7 +1795,7 @@ } else { - float rgba[4]; + CGFloat rgba[4]; rgba[0] = gc->back_color.red / 65535.0f; rgba[1] = gc->back_color.green / 65535.0f; @@ -1803,8 +1824,8 @@ /* Mac replacement for XSetClipRectangles. */ static void -mac_set_clip_rectangles (display, gc, rectangles, n) - Display *display; +mac_set_clip_rectangles (f, gc, rectangles, n) + struct frame *f; GC gc; Rect *rectangles; int n; @@ -1836,9 +1857,9 @@ { Rect *rect = rectangles + i; - gc->clip_rects[i] = CGRectMake (rect->left, rect->top, - rect->right - rect->left, - rect->bottom - rect->top); + gc->clip_rects[i] = mac_rect_make (f, rect->left, rect->top, + rect->right - rect->left, + rect->bottom - rect->top); } #endif } @@ -1847,8 +1868,8 @@ /* Mac replacement for XSetClipMask. */ static INLINE void -mac_reset_clip_rectangles (display, gc) - Display *display; +mac_reset_clip_rectangles (f, gc) + struct frame *f; GC gc; { gc->n_clip_rects = 0; @@ -2338,7 +2359,7 @@ XSetForeground (display, face->gc, gcv.foreground); } - mac_reset_clip_rectangles (display, face->gc); + mac_reset_clip_rectangles (f, face->gc); } #if USE_CG_DRAWING @@ -2852,7 +2873,7 @@ int n; n = get_glyph_string_clip_rects (s, rects, MAX_CLIP_RECTS); - mac_set_clip_rectangles (s->display, s->gc, rects, n); + mac_set_clip_rectangles (s->f, s->gc, rects, n); } @@ -3442,7 +3463,7 @@ gc = f->output_data.mac->white_relief.gc; else gc = f->output_data.mac->black_relief.gc; - mac_set_clip_rectangles (dpy, gc, clip_rect, 1); + mac_set_clip_rectangles (f, gc, clip_rect, 1); /* Top. */ if (top_p) @@ -3457,12 +3478,12 @@ mac_draw_line (f, gc, left_x + i, top_y + i, left_x + i, bottom_y - i + 1); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); if (raised_p) gc = f->output_data.mac->black_relief.gc; else gc = f->output_data.mac->white_relief.gc; - mac_set_clip_rectangles (dpy, gc, clip_rect, 1); + mac_set_clip_rectangles (f, gc, clip_rect, 1); /* Bottom. */ if (bot_p) @@ -3477,7 +3498,7 @@ mac_draw_line (f, gc, right_x - i, top_y + i + 1, right_x - i, bottom_y - i); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); } @@ -3499,7 +3520,7 @@ XGetGCValues (s->display, s->gc, GCForeground, &xgcv); XSetForeground (s->display, s->gc, s->face->box_color); - mac_set_clip_rectangles (s->display, s->gc, clip_rect, 1); + mac_set_clip_rectangles (s->f, s->gc, clip_rect, 1); /* Top. */ mac_fill_rectangle (s->f, s->gc, left_x, top_y, @@ -3520,7 +3541,7 @@ top_y, width, bottom_y - top_y + 1); XSetForeground (s->display, s->gc, xgcv.foreground); - mac_reset_clip_rectangles (s->display, s->gc); + mac_reset_clip_rectangles (s->f, s->gc); } @@ -3829,7 +3850,7 @@ gc = s->face->gc; get_glyph_string_clip_rect (s, &r); - mac_set_clip_rectangles (s->display, gc, &r, 1); + mac_set_clip_rectangles (s->f, gc, &r, 1); #if 0 /* MAC_TODO: stipple */ if (s->face->stipple) @@ -4029,7 +4050,7 @@ } /* Reset clipping. */ - mac_reset_clip_rectangles (s->display, s->gc); + mac_reset_clip_rectangles (s->f, s->gc); } /* Shift display to make room for inserted glyphs. */ @@ -6409,7 +6430,7 @@ cursor_glyph->pixel_width, width); - mac_reset_clip_rectangles (dpy, gc); + mac_reset_clip_rectangles (f, gc); } } @@ -6739,7 +6760,6 @@ change_frame_size (f, rows, cols, 0, 1, 0); FRAME_PIXEL_WIDTH (f) = pixelwidth; FRAME_PIXEL_HEIGHT (f) = pixelheight; - SET_FRAME_GARBAGED (f); /* If cursor was outside the new size, mark it as off. */ mark_window_cursors_off (XWINDOW (f->root_window)); @@ -6772,7 +6792,6 @@ x_calc_absolute_position (f) struct frame *f; { - int width_diff = 0, height_diff = 0; int flags = f->size_hint_flags; Rect inner, outer; @@ -6787,22 +6806,15 @@ mac_get_window_bounds (f, &inner, &outer); UNBLOCK_INPUT; - width_diff = (outer.right - outer.left) - (inner.right - inner.left); - height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top); - /* Treat negative positions as relative to the leftmost bottommost position that fits on the screen. */ if (flags & XNegative) - f->left_pos = (FRAME_MAC_DISPLAY_INFO (f)->width - - width_diff - - FRAME_PIXEL_WIDTH (f) - + f->left_pos); + f->left_pos += (FRAME_MAC_DISPLAY_INFO (f)->width + - (outer.right - outer.left)); if (flags & YNegative) - f->top_pos = (FRAME_MAC_DISPLAY_INFO (f)->height - - height_diff - - FRAME_PIXEL_HEIGHT (f) - + f->top_pos); + f->top_pos += (FRAME_MAC_DISPLAY_INFO (f)->height + - (outer.bottom - outer.top)); /* The left_pos and top_pos are now relative to the top and left screen edges, diff -r f07af351ed0b -r ca9efc5939fc src/macterm.h --- a/src/macterm.h Wed Apr 23 05:15:42 2008 +0000 +++ b/src/macterm.h Wed Apr 23 05:55:42 2008 +0000 @@ -628,9 +628,9 @@ extern void x_wm_set_size_hint P_ ((struct frame *, long, int)); extern void x_delete_display P_ ((struct x_display_info *)); extern void mac_initialize P_ ((void)); -extern Pixmap XCreatePixmap P_ ((Display *, WindowRef, unsigned int, +extern Pixmap XCreatePixmap P_ ((Display *, Window, unsigned int, unsigned int, unsigned int)); -extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowRef, char *, +extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, Window, char *, unsigned int, unsigned int, unsigned long, unsigned long, unsigned int)); @@ -673,13 +673,10 @@ extern Lisp_Object mac_aedesc_to_lisp P_ ((const AEDesc *)); extern OSErr mac_ae_put_lisp P_ ((AEDescList *, UInt32, Lisp_Object)); #if TARGET_API_MAC_CARBON -extern OSStatus create_apple_event_from_event_ref P_ ((EventRef, UInt32, - const EventParamName *, - const EventParamType *, - AppleEvent *)); -extern OSErr create_apple_event_from_drag_ref P_ ((DragRef, UInt32, - const FlavorType *, - AppleEvent *)); +extern OSErr create_apple_event P_ ((AEEventClass, AEEventID, AppleEvent *)); +extern Lisp_Object mac_event_parameters_to_lisp P_ ((EventRef, UInt32, + const EventParamName *, + const EventParamType *)); extern CFStringRef cfstring_create_with_utf8_cstring P_ ((const char *)); extern CFStringRef cfstring_create_with_string P_ ((Lisp_Object)); extern Lisp_Object cfdata_to_lisp P_ ((CFDataRef)); diff -r f07af351ed0b -r ca9efc5939fc src/mactoolbox.c --- a/src/mactoolbox.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/mactoolbox.c Wed Apr 23 05:55:42 2008 +0000 @@ -120,8 +120,6 @@ extern Lisp_Object Qupdate_active_input_area, Qunicode_for_key_event; extern Lisp_Object Vmac_ts_active_input_overlay; extern Lisp_Object Qbefore_string; -extern Lisp_Object Vmac_ts_script_language_on_focus; -extern Lisp_Object saved_ts_script_language_on_focus; #endif static int mac_event_to_emacs_modifiers P_ ((EventRef)); @@ -606,15 +604,15 @@ #if USE_MAC_TSM if (err == noErr) { - static const EventTypeSpec spec[] = + static const EventTypeSpec specs[] = {{kEventClassTextInput, kEventTextInputUpdateActiveInputArea}, {kEventClassTextInput, kEventTextInputUnicodeForKeyEvent}, {kEventClassTextInput, kEventTextInputOffsetToPos}}; err = InstallApplicationEventHandler (NewEventHandlerUPP (mac_handle_text_input_event), - GetEventTypeCount (spec), - spec, NULL, NULL); + GetEventTypeCount (specs), + specs, NULL, NULL); } #endif @@ -3009,8 +3007,8 @@ GetEventParameter (eventRef, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &mods); class = GetEventClass (eventRef); - if (!NILP (Vmac_emulate_three_button_mouse) && - (class == kEventClassMouse || class == kEventClassCommand)) + if (!NILP (Vmac_emulate_three_button_mouse) + && (class == kEventClassMouse || class == kEventClassCommand)) { mods &= ~(optionKey | cmdKey); } @@ -3560,6 +3558,9 @@ OSStatus err; HIViewRef ch; + if (FrontNonFloatingWindow () != window_ptr) + SelectWindow (window_ptr); + err = HIViewGetViewForMouseEvent (HIViewGetRoot (window_ptr), eventRef, &ch); /* This doesn't work on Mac OS X 10.2. */ @@ -4248,7 +4249,6 @@ { SInt32 menu_choice; SInt16 menu_id, menu_item; - extern Point saved_menu_event_location; set_frame_menubar (f, 0, 1); BLOCK_INPUT; @@ -5704,6 +5704,75 @@ static DragTrackingHandlerUPP mac_do_track_dragUPP = NULL; static DragReceiveHandlerUPP mac_do_receive_dragUPP = NULL; +static OSErr +create_apple_event_from_drag_ref (drag, num_types, types, result) + DragRef drag; + UInt32 num_types; + const FlavorType *types; + AppleEvent *result; +{ + OSErr err; + UInt16 num_items; + AppleEvent items; + long index; + char *buf = NULL; + + err = CountDragItems (drag, &num_items); + if (err != noErr) + return err; + err = AECreateList (NULL, 0, false, &items); + if (err != noErr) + return err; + + for (index = 1; index <= num_items; index++) + { + ItemReference item; + DescType desc_type = typeNull; + Size size; + + err = GetDragItemReferenceNumber (drag, index, &item); + if (err == noErr) + { + int i; + + for (i = 0; i < num_types; i++) + { + err = GetFlavorDataSize (drag, item, types[i], &size); + if (err == noErr) + { + buf = xrealloc (buf, size); + err = GetFlavorData (drag, item, types[i], buf, &size, 0); + } + if (err == noErr) + { + desc_type = types[i]; + break; + } + } + } + err = AEPutPtr (&items, index, desc_type, + desc_type != typeNull ? buf : NULL, + desc_type != typeNull ? size : 0); + if (err != noErr) + break; + } + if (buf) + xfree (buf); + + if (err == noErr) + { + err = create_apple_event (0, 0, result); /* Dummy class and ID. */ + if (err == noErr) + err = AEPutParamDesc (result, keyDirectObject, &items); + if (err != noErr) + AEDisposeDesc (result); + } + + AEDisposeDesc (&items); + + return err; +} + static void mac_store_drag_event (window, mouse_pos, modifiers, desc) WindowRef window; diff -r f07af351ed0b -r ca9efc5939fc src/w32.c --- a/src/w32.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/w32.c Wed Apr 23 05:55:42 2008 +0000 @@ -110,6 +110,9 @@ extern Lisp_Object Vw32_downcase_file_names; extern Lisp_Object Vw32_generate_fake_inodes; extern Lisp_Object Vw32_get_true_file_attributes; +/* Defined in process.c for its own purpose. */ +extern Lisp_Object Qlocal; + extern int w32_num_mouse_buttons; @@ -2644,6 +2647,8 @@ } if (!NILP (Vw32_get_true_file_attributes) + && !(EQ (Vw32_get_true_file_attributes, Qlocal) && + GetDriveType (name) == DRIVE_FIXED) /* No access rights required to get info. */ && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL)) diff -r f07af351ed0b -r ca9efc5939fc src/w32proc.c --- a/src/w32proc.c Wed Apr 23 05:15:42 2008 +0000 +++ b/src/w32proc.c Wed Apr 23 05:55:42 2008 +0000 @@ -110,6 +110,7 @@ exactly, at the expense of slower operation. Since true hard links are supported on NTFS volumes, this is only relevant on NT. */ Lisp_Object Vw32_get_true_file_attributes; +extern Lisp_Object Qlocal; Lisp_Object Qhigh, Qlow; @@ -2353,9 +2354,12 @@ DEFVAR_LISP ("w32-get-true-file-attributes", &Vw32_get_true_file_attributes, doc: /* Non-nil means determine accurate link count in `file-attributes'. -Note that this option is only useful for files on NTFS volumes, where hard links -are supported. Moreover, it slows down `file-attributes' noticeably. */); - Vw32_get_true_file_attributes = Qt; +This option is only useful for files on NTFS volumes, where +hard links are supported. The default value `local' means only do +this for files on local harddrives. Any other non-nil value means do +this even on remote and removable drives where the performance impact +may be noticeable even on modern hardware. */); + Vw32_get_true_file_attributes = Qlocal; staticpro (&Vw32_valid_locale_ids); staticpro (&Vw32_valid_codepages);