emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master b5ac604b15: Fix some issues with input methods that depend on but


From: Po Lu
Subject: master b5ac604b15: Fix some issues with input methods that depend on button state
Date: Sat, 12 Mar 2022 00:03:20 -0500 (EST)

branch: master
commit b5ac604b15532db0418f3c2393907daa317f2ca5
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix some issues with input methods that depend on button state
    
    * src/xterm.c (handle_one_xevent): Translate button state before
    filtering events.
---
 src/xterm.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/src/xterm.c b/src/xterm.c
index cf79135497..d831182811 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -12771,6 +12771,19 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              xkey.time = xev->time;
              xkey.state = ((xev->mods.effective & ~(1 << 13 | 1 << 14))
                            | (xev->group.effective << 13));
+
+             /* Some input methods react differently depending on the
+                buttons that are pressed.  */
+             if (xev->buttons.mask_len)
+               {
+                 if (XIMaskIsSet (xev->buttons.mask, 1))
+                   xkey.state |= Button1Mask;
+                 if (XIMaskIsSet (xev->buttons.mask, 2))
+                   xkey.state |= Button2Mask;
+                 if (XIMaskIsSet (xev->buttons.mask, 3))
+                   xkey.state |= Button3Mask;
+               }
+
              xkey.keycode = xev->detail;
              xkey.same_screen = True;
 
@@ -13126,6 +13139,19 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              xkey.time = xev->time;
              xkey.state = ((xev->mods.effective & ~(1 << 13 | 1 << 14))
                            | (xev->group.effective << 13));
+
+             /* Some input methods react differently depending on the
+                buttons that are pressed.  */
+             if (xev->buttons.mask_len)
+               {
+                 if (XIMaskIsSet (xev->buttons.mask, 1))
+                   xkey.state |= Button1Mask;
+                 if (XIMaskIsSet (xev->buttons.mask, 2))
+                   xkey.state |= Button2Mask;
+                 if (XIMaskIsSet (xev->buttons.mask, 3))
+                   xkey.state |= Button3Mask;
+               }
+
              xkey.keycode = xev->detail;
              xkey.same_screen = True;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]