]> git.eshelyaron.com Git - emacs.git/commitdiff
Update Android port
authorPo Lu <luangruo@yahoo.com>
Mon, 17 Jul 2023 06:28:20 +0000 (14:28 +0800)
committerPo Lu <luangruo@yahoo.com>
Mon, 17 Jul 2023 06:28:20 +0000 (14:28 +0800)
* doc/lispref/commands.texi (Touchscreen Events): Document
meaning of `mouse-1-menu-command'.
* lisp/mouse.el (minor-mode-menu-from-indicator): New arg EVENT.
Give it to popup-menu.
(mouse-minor-mode-menu): Use posn specified within EVENT.
* lisp/touch-screen.el (touch-screen-handle-touch): Fix
interactive translation.  Treat commands labeled
`mouse-1-menu-command' like ordinary keymaps.

doc/lispref/commands.texi
lisp/mouse.el
lisp/touch-screen.el

index 74b57f58ee869c4e21f9b1f320c792822ba89039..bcba3fe4026b7331709bfab3a240272d724d36e6 100644 (file)
@@ -2066,19 +2066,20 @@ However, some commands bound to
 conflict with defined touch screen gestures (such as ``long-press to
 drag''), or with user expectations for touch input, and shouldn't
 subject the touch sequence to simple translation.  If a command whose
-name contains the property @code{ignored-mouse-command} is encountered
-or there is no command bound to @code{down-mouse-1}, a more irregular
-form of translation takes place: here, Emacs processes touch screen
-gestures (@pxref{Touchscreens,,, emacs, The GNU Emacs Manual}) first,
-and finally attempts to translate touch screen events into mouse
-events if no gesture was detected prior to a closing
-@code{touchscreen-end} event and a command is bound to @code{mouse-1}
-at the location of that event.  Before generating the @code{mouse-1}
-event, point is also set to the location of the @code{touchscreen-end}
-event, and the window containing the position of that event is
-selected, as a compromise for packages which assume
-@code{mouse-drag-region} has already set point to the location of any
-mouse click and selected the window where it took place.
+name contains the property (@pxref{Symbol Properties})
+@code{ignored-mouse-command} is encountered or there is no command
+bound to @code{down-mouse-1}, a more irregular form of translation
+takes place: here, Emacs processes touch screen gestures
+(@pxref{Touchscreens,,, emacs, The GNU Emacs Manual}) first, and
+finally attempts to translate touch screen events into mouse events if
+no gesture was detected prior to a closing @code{touchscreen-end}
+event and a command is bound to @code{mouse-1} at the location of that
+event.  Before generating the @code{mouse-1} event, point is also set
+to the location of the @code{touchscreen-end} event, and the window
+containing the position of that event is selected, as a compromise for
+packages which assume @code{mouse-drag-region} has already set point
+to the location of any mouse click and selected the window where it
+took place.
 
 To prevent unwanted @code{mouse-1} events arriving after a mouse menu
 is dismissed (@pxref{Mouse Menus}), Emacs also avoids simple
@@ -2088,6 +2089,13 @@ prefix key.  In lieu of simple translation, it translates the closing
 starting position of the touch sequence, consequentially displaying
 the mouse menu.
 
+@cindex @code{mouse-1-menu-command}, a symbol property
+Since certain commands are also bound to @code{down-mouse-1} for the
+purpose of displaying pop-up menus, Emacs additionally behaves as
+illustrated in the last paragraph if @code{down-mouse-1} is bound to a
+command whose name has the property @code{mouse-1-menu-command}.
+
+@cindex touchscreen gesture events
 If touch gestures are detected during translation, one of the
 following input events may be generated:
 
index 3c30361ad7d678f5517abaff71ec39f28eb34f9c..50c10880da701dffb3b01989b71ac3c25f4cb070 100644 (file)
@@ -206,8 +206,11 @@ always return a positive integer or zero."
 \f
 ;; Provide a mode-specific menu on a mouse button.
 
-(defun minor-mode-menu-from-indicator (indicator)
+(defun minor-mode-menu-from-indicator (indicator &optional event)
   "Show menu for minor mode specified by INDICATOR.
+EVENT may be the mouse event that is causing this menu to be
+displayed.
+
 Interactively, INDICATOR is read using completion.
 If there is no menu defined for the minor mode, then create one with
 items `Turn Off' and `Help'."
@@ -234,14 +237,17 @@ items `Turn Off' and `Help'."
                           ,(lambda () (interactive)
                              (describe-function mm-fun)))))))
       (if menu
-          (popup-menu menu)
+          (popup-menu menu event)
         (message "No menu available")))))
 
 (defun mouse-minor-mode-menu (event)
   "Show minor-mode menu for EVENT on minor modes area of the mode line."
   (interactive "@e")
   (let ((indicator (car (nth 4 (car (cdr event))))))
-    (minor-mode-menu-from-indicator indicator)))
+    (minor-mode-menu-from-indicator indicator event)))
+
+;; See (elisp)Touchscreen Events.
+(put 'mouse-minor-mode-menu 'mouse-1-menu-command t)
 
 (defun mouse-menu-major-mode-map ()
   (run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
index 7d733bdb77f8f9de2cb9bd249c6c178868683812..1ef66d0043fc7670e568c6b908b409211c0a3e68 100644 (file)
@@ -767,12 +767,13 @@ the place of EVENT within the key sequence being translated, or
   (if interactive
       ;; Called interactively (probably from wid-edit.el.)
       ;; Add any event generated to `unread-command-events'.
-      (let ((event (catch 'input-event
-                     (touch-screen-translate-touch nil) nil)))
-        (when (vectorp event)
+      (let ((event1
+             (let ((current-key-remap-sequence (vector event)))
+               (touch-screen-translate-touch nil))))
+        (when (vectorp event1)
           (setq unread-command-events
                 (nconc unread-command-events
-                       (nreverse (append event nil))))))
+                       (nreverse (append event1 nil))))))
     (cond
      ((eq (car event) 'touchscreen-begin)
       ;; A tool was just pressed against the screen.  Figure out the
@@ -816,13 +817,15 @@ the place of EVENT within the key sequence being translated, or
                                            t nil position))
                         (not (and (symbolp binding)
                                   (get binding 'ignored-mouse-command))))))
-            (if (keymapp binding)
-                ;; binding is a keymap.  If a `mouse-1' event is
-                ;; generated after the keyboard command loop displays
-                ;; it as a menu, that event could cause unwanted
-                ;; commands to be run.  Set what to `mouse-1-menu'
-                ;; instead and wait for the up event to display the
-                ;; menu.
+            (if (or (keymapp binding)
+                    (and (symbolp binding)
+                         (get binding 'mouse-1-menu-command)))
+                ;; binding is a keymap, or a command that does almost
+                ;; the same thing.  If a `mouse-1' event is generated
+                ;; after the keyboard command loop displays it as a
+                ;; menu, that event could cause unwanted commands to
+                ;; be run.  Set what to `mouse-1-menu' instead and
+                ;; wait for the up event to display the menu.
                 (setcar (nthcdr 3 touch-screen-current-tool)
                         'mouse-1-menu)
               (progn (setcar (nthcdr 3 touch-screen-current-tool)