diff options
| author | Fabián Ezequiel Gallina | 2015-01-28 01:03:46 -0300 |
|---|---|---|
| committer | Fabián Ezequiel Gallina | 2015-01-28 01:03:46 -0300 |
| commit | 33ab7ee0edcb3608e4a3d5deebc2b72c180dbfe4 (patch) | |
| tree | 946ccc8bdc1f41a2c4066e6fcef4bfd04a9d693a /lisp | |
| parent | 85ca47671ccbffe87d6ccad17039b49d6b676d61 (diff) | |
| parent | 8ee825c35b62768e28fe825163dea90d3ab46022 (diff) | |
| download | emacs-33ab7ee0edcb3608e4a3d5deebc2b72c180dbfe4.tar.gz emacs-33ab7ee0edcb3608e4a3d5deebc2b72c180dbfe4.zip | |
Merge from origin/emacs-24
8ee825c doc/emacs/programs.texi (Custom C Indent): Fix a typo. (Bug#19647)
88ba49f Fix coding.c subscript error
3ea1b31 Prevent artist-mode from creating runaway timers (Bug#6130).
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/subr.el | 33 | ||||
| -rw-r--r-- | lisp/textmodes/artist.el | 95 |
3 files changed, 77 insertions, 58 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bf60d38b2a3..a693cc0bdc6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2015-01-21 Daniel Koning <dk@danielkoning.com> (tiny change) | ||
| 2 | |||
| 3 | * subr.el (posnp): Correct docstring of `posnp'. | ||
| 4 | (posn-col-row): Make it work with all mouse position objects. | ||
| 5 | * textmodes/artist.el (artist-mouse-draw-continously): Cancel | ||
| 6 | timers if an error occurs during continuous drawing. (Bug#6130) | ||
| 7 | |||
| 1 | 2015-01-20 Eli Zaretskii <eliz@gnu.org> | 8 | 2015-01-20 Eli Zaretskii <eliz@gnu.org> |
| 2 | 9 | ||
| 3 | * button.el (button-activate, push-button): Doc fix. (Bug#19628) | 10 | * button.el (button-activate, push-button): Doc fix. (Bug#19628) |
diff --git a/lisp/subr.el b/lisp/subr.el index 05345853edc..68cd230c5e2 100644 --- a/lisp/subr.el +++ b/lisp/subr.el | |||
| @@ -1082,7 +1082,12 @@ The return value is a positive integer." | |||
| 1082 | ;;;; Extracting fields of the positions in an event. | 1082 | ;;;; Extracting fields of the positions in an event. |
| 1083 | 1083 | ||
| 1084 | (defun posnp (obj) | 1084 | (defun posnp (obj) |
| 1085 | "Return non-nil if OBJ appears to be a valid `posn' object." | 1085 | "Return non-nil if OBJ appears to be a valid `posn' object specifying a window. |
| 1086 | If OBJ is a valid `posn' object, but specifies a frame rather | ||
| 1087 | than a window, return nil." | ||
| 1088 | ;; FIXME: Correct the behavior of this function so that all valid | ||
| 1089 | ;; `posn' objects are recognized, after updating other code that | ||
| 1090 | ;; depends on its present behavior. | ||
| 1086 | (and (windowp (car-safe obj)) | 1091 | (and (windowp (car-safe obj)) |
| 1087 | (atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS. | 1092 | (atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS. |
| 1088 | (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET. | 1093 | (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET. |
| @@ -1142,24 +1147,28 @@ For a scroll-bar event, the result column is 0, and the row | |||
| 1142 | corresponds to the vertical position of the click in the scroll bar. | 1147 | corresponds to the vertical position of the click in the scroll bar. |
| 1143 | POSITION should be a list of the form returned by the `event-start' | 1148 | POSITION should be a list of the form returned by the `event-start' |
| 1144 | and `event-end' functions." | 1149 | and `event-end' functions." |
| 1145 | (let* ((pair (posn-x-y position)) | 1150 | (let* ((pair (posn-x-y position)) |
| 1146 | (window (posn-window position)) | 1151 | (frame-or-window (posn-window position)) |
| 1147 | (area (posn-area position))) | 1152 | (frame (if (framep frame-or-window) |
| 1153 | frame-or-window | ||
| 1154 | (window-frame frame-or-window))) | ||
| 1155 | (window (when (windowp frame-or-window) frame-or-window)) | ||
| 1156 | (area (posn-area position))) | ||
| 1148 | (cond | 1157 | (cond |
| 1149 | ((null window) | 1158 | ((null frame-or-window) |
| 1150 | '(0 . 0)) | 1159 | '(0 . 0)) |
| 1151 | ((eq area 'vertical-scroll-bar) | 1160 | ((eq area 'vertical-scroll-bar) |
| 1152 | (cons 0 (scroll-bar-scale pair (1- (window-height window))))) | 1161 | (cons 0 (scroll-bar-scale pair (1- (window-height window))))) |
| 1153 | ((eq area 'horizontal-scroll-bar) | 1162 | ((eq area 'horizontal-scroll-bar) |
| 1154 | (cons (scroll-bar-scale pair (window-width window)) 0)) | 1163 | (cons (scroll-bar-scale pair (window-width window)) 0)) |
| 1155 | (t | 1164 | (t |
| 1156 | (let* ((frame (if (framep window) window (window-frame window))) | 1165 | ;; FIXME: This should take line-spacing properties on |
| 1157 | ;; FIXME: This should take line-spacing properties on | 1166 | ;; newlines into account. |
| 1158 | ;; newlines into account. | 1167 | (let* ((spacing (when (display-graphic-p frame) |
| 1159 | (spacing (when (display-graphic-p frame) | 1168 | (or (with-current-buffer |
| 1160 | (or (with-current-buffer (window-buffer window) | 1169 | (window-buffer (frame-selected-window frame)) |
| 1161 | line-spacing) | 1170 | line-spacing) |
| 1162 | (frame-parameter frame 'line-spacing))))) | 1171 | (frame-parameter frame 'line-spacing))))) |
| 1163 | (cond ((floatp spacing) | 1172 | (cond ((floatp spacing) |
| 1164 | (setq spacing (truncate (* spacing | 1173 | (setq spacing (truncate (* spacing |
| 1165 | (frame-char-height frame))))) | 1174 | (frame-char-height frame))))) |
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 8a2383c12ff..85d9410868a 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el | |||
| @@ -4963,52 +4963,55 @@ The event, EV, is the mouse event." | |||
| 4963 | (artist-funcall init-fn x1 y1) | 4963 | (artist-funcall init-fn x1 y1) |
| 4964 | (if (not artist-rubber-banding) | 4964 | (if (not artist-rubber-banding) |
| 4965 | (artist-no-rb-set-point1 x1 y1)) | 4965 | (artist-no-rb-set-point1 x1 y1)) |
| 4966 | (track-mouse | 4966 | (unwind-protect |
| 4967 | (while (or (mouse-movement-p ev) | 4967 | (track-mouse |
| 4968 | (member 'down (event-modifiers ev))) | 4968 | (while (or (mouse-movement-p ev) |
| 4969 | (setq ev-start-pos (artist-coord-win-to-buf | 4969 | (member 'down (event-modifiers ev))) |
| 4970 | (posn-col-row (event-start ev)))) | 4970 | (setq ev-start-pos (artist-coord-win-to-buf |
| 4971 | (setq x1 (car ev-start-pos)) | 4971 | (posn-col-row (event-start ev)))) |
| 4972 | (setq y1 (cdr ev-start-pos)) | 4972 | (setq x1 (car ev-start-pos)) |
| 4973 | 4973 | (setq y1 (cdr ev-start-pos)) | |
| 4974 | ;; Cancel previous timer | 4974 | |
| 4975 | (if timer | 4975 | ;; Cancel previous timer |
| 4976 | (cancel-timer timer)) | 4976 | (if timer |
| 4977 | 4977 | (cancel-timer timer)) | |
| 4978 | (if (not (eq initial-win (posn-window (event-start ev)))) | 4978 | |
| 4979 | ;; If we moved outside the window, do nothing | 4979 | (if (not (eq initial-win (posn-window (event-start ev)))) |
| 4980 | nil | 4980 | ;; If we moved outside the window, do nothing |
| 4981 | 4981 | nil | |
| 4982 | ;; Still in same window: | 4982 | |
| 4983 | ;; | 4983 | ;; Still in same window: |
| 4984 | ;; Check if user presses or releases shift key | 4984 | ;; |
| 4985 | (if (artist-shift-has-changed shift-state ev) | 4985 | ;; Check if user presses or releases shift key |
| 4986 | 4986 | (if (artist-shift-has-changed shift-state ev) | |
| 4987 | ;; First check that the draw-how is the same as we | 4987 | |
| 4988 | ;; already have. Otherwise, ignore the changed shift-state. | 4988 | ;; First check that the draw-how is the same as we |
| 4989 | (if (not (eq draw-how | 4989 | ;; already have. Otherwise, ignore the changed shift-state. |
| 4990 | (artist-go-get-draw-how-from-symbol | 4990 | (if (not (eq draw-how |
| 4991 | (if (not shift-state) shifted unshifted)))) | 4991 | (artist-go-get-draw-how-from-symbol |
| 4992 | (message "Cannot switch to shifted operation") | 4992 | (if (not shift-state) shifted unshifted)))) |
| 4993 | 4993 | (message "Cannot switch to shifted operation") | |
| 4994 | ;; progn is "implicit" since this is the else-part | 4994 | |
| 4995 | (setq shift-state (not shift-state)) | 4995 | ;; progn is "implicit" since this is the else-part |
| 4996 | (setq op (if shift-state shifted unshifted)) | 4996 | (setq shift-state (not shift-state)) |
| 4997 | (setq draw-how (artist-go-get-draw-how-from-symbol op)) | 4997 | (setq op (if shift-state shifted unshifted)) |
| 4998 | (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) | 4998 | (setq draw-how (artist-go-get-draw-how-from-symbol op)) |
| 4999 | 4999 | (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) | |
| 5000 | ;; Draw the new shape | 5000 | |
| 5001 | (setq shape (artist-funcall draw-fn x1 y1)) | 5001 | ;; Draw the new shape |
| 5002 | (artist-move-to-xy x1 y1) | 5002 | (setq shape (artist-funcall draw-fn x1 y1)) |
| 5003 | 5003 | (artist-move-to-xy x1 y1) | |
| 5004 | ;; Start the timer to call `draw-fn' repeatedly every | 5004 | |
| 5005 | ;; `interval' second | 5005 | ;; Start the timer to call `draw-fn' repeatedly every |
| 5006 | (if (and interval draw-fn) | 5006 | ;; `interval' second |
| 5007 | (setq timer (run-at-time interval interval draw-fn x1 y1)))) | 5007 | (if (and interval draw-fn) |
| 5008 | 5008 | (setq timer (run-at-time interval interval draw-fn x1 y1)))) | |
| 5009 | ;; Read next event | 5009 | |
| 5010 | (setq ev (read-event)))) | 5010 | ;; Read next event |
| 5011 | 5011 | (setq ev (read-event)))) | |
| 5012 | ;; Cleanup: get rid of any active timer. | ||
| 5013 | (if timer | ||
| 5014 | (cancel-timer timer))) | ||
| 5012 | ;; Cancel any timers | 5015 | ;; Cancel any timers |
| 5013 | (if timer | 5016 | (if timer |
| 5014 | (cancel-timer timer)) | 5017 | (cancel-timer timer)) |