all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Tomas Abrahamsson <tab@lysator.liu.se>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: artist-mouse-choose-operation
Date: Mon, 09 Nov 2009 23:22:11 +0100	[thread overview]
Message-ID: <uqbpjbl4oc.fsf@stalhein.lysator.liu.se> (raw)
In-Reply-To: <834opfeq8a.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 31 Oct 2009 13:51:17 +0200")

Eli Zaretskii <eliz@gnu.org> writes:

> The function in the Subject calls x-popup-menu, evidently under the
> assumption that if Emacs can use a mouse, it also supports menus.  But
> that assumption is false: Emacs configured --without-x can have mouse
> support, e.g. via gpm-mouse, but does not have x-popup-menu.

Yes, I agree this is a bug. Below is a patch for fixing the bug and a
proposal for a ChangeLog entry.

	* textmodes/artist.el (artist-mouse-choose-operation) call
	`tmm-prompt' instead of `x-popup-menu' if we cannot popup
	menus. Bug noticed by Eli Zaretskii <eliz@gnu.org>.

	* textmodes/artist.el (artist-mouse-choose-operation)
	(artist-down-mouse-1): call (new) function
	`artist-compute-up-event-key'.

The patch is against the latest from the git/cvs repository as of
yesterday (Sunday).  The patch is made by me.

BRs
Tomas



diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index c69e3bc..03cb77b 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -4750,6 +4750,15 @@ If optional argument STATE is positive, turn borders on."
   "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 @@ If optional argument STATE is positive, turn borders on."
 	 (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 @@ If optional argument STATE is positive, turn borders on."
    (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))))




  reply	other threads:[~2009-11-09 22:22 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-31 11:51 artist-mouse-choose-operation Eli Zaretskii
2009-11-09 22:22 ` Tomas Abrahamsson [this message]
2009-11-10 17:20   ` artist-mouse-choose-operation Stefan Monnier
2009-11-10 19:09     ` artist-mouse-choose-operation Eli Zaretskii
2009-11-10 19:31       ` artist-mouse-choose-operation Stefan Monnier
2009-11-10 21:32         ` artist-mouse-choose-operation tomas
2009-11-10 21:06     ` artist-mouse-choose-operation Tomas Abrahamsson
2009-11-13 10:34   ` artist-mouse-choose-operation Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=uqbpjbl4oc.fsf@stalhein.lysator.liu.se \
    --to=tab@lysator.liu.se \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.