changeset 105981:fb2c6de37340

(artist-mouse-choose-operation): Call `tmm-prompt' instead of `x-popup-menu' if we cannot popup menus. (artist-compute-up-event-key): New function. (artist-mouse-choose-operation, artist-down-mouse-1): Call it.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 13 Nov 2009 10:35:00 +0000
parents 801a779ab8f9
children cabe35654fc4
files lisp/textmodes/artist.el
diffstat 1 files changed, 26 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/artist.el	Fri Nov 13 10:10:15 2009 +0000
+++ b/lisp/textmodes/artist.el	Fri Nov 13 10:35:00 2009 +0000
@@ -4750,6 +4750,15 @@
   "Function that does nothing."
   (interactive))
 
+(defun artist-compute-up-event-key (ev)
+  "Compute the corresponding up key sequence for event EV."
+ (let* ((basic (event-basic-type ev))
+	(unshifted basic)
+	(shifted (make-symbol (concat "S-" (symbol-name basic)))))
+   (if (artist-event-is-shifted ev)
+       (make-vector 1 shifted)
+     (make-vector 1 unshifted))))
+
 (defun artist-down-mouse-1 (ev)
   "Perform drawing action for event EV."
   (interactive "@e")
@@ -4761,15 +4770,10 @@
 	 (orig-draw-region-min-y artist-draw-region-min-y)
 	 (orig-draw-region-max-y artist-draw-region-max-y)
 	 (orig-pointer-shape (if (eq window-system 'x) x-pointer-shape nil))
-	 (echo-keystrokes 10000)	; a lot of seconds
+	 (echoq-keystrokes 10000)	; a lot of seconds
 	 ;; Remember original binding for the button-up event to this
 	 ;; button-down event.
-	 (key (let* ((basic (event-basic-type ev))
-		     (unshifted basic)
-		     (shifted (make-symbol (concat "S-" (symbol-name basic)))))
-		(if (artist-event-is-shifted ev)
-		    (make-vector 1 shifted)
-		  (make-vector 1 unshifted))))
+	 (key (artist-compute-up-event-key ev))
 	 (orig-button-up-binding (lookup-key (current-global-map) key)))
 
     (unwind-protect
@@ -4835,7 +4839,21 @@
    (progn
      (select-window (posn-window (event-start last-input-event)))
      (list last-input-event
-           (x-popup-menu last-nonmenu-event artist-popup-menu-table))))
+	   (if (display-popup-menus-p)
+	       (x-popup-menu last-nonmenu-event artist-popup-menu-table)
+	     'no-popup-menus))))
+
+  (if (eq op 'no-popup-menus)
+      ;; No popup menus. Call `tmm-prompt' instead, but with the
+      ;; up-mouse-button, if any, temporarily disabled, otherwise
+      ;; it'll interfere.
+      (let* ((key (artist-compute-up-event-key ev))
+	     (orig-button-up-binding (lookup-key (current-global-map) key)))
+	(unwind-protect
+	    (define-key (current-global-map) key 'artist-do-nothing)
+	    (setq op (tmm-prompt artist-popup-menu-table))
+	  (if orig-button-up-binding
+	      (define-key (current-global-map) key orig-button-up-binding)))))
 
   (let ((draw-fn (artist-go-get-draw-fn-from-symbol (car op)))
 	(set-fn (artist-fc-get-fn-from-symbol (car op))))