emacs-diffs
[Top][All Lists]
Advanced

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

master a218921172: Avoid code duplication converting XI event state in t


From: Po Lu
Subject: master a218921172: Avoid code duplication converting XI event state in toolkit menu code
Date: Mon, 4 Jul 2022 09:13:40 -0400 (EDT)

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

    Avoid code duplication converting XI event state in toolkit menu code
    
    * src/xmenu.c (x_menu_translate_generic_event):
    (popup_get_selection): Use `xi_convert_event_state' instead.
    * src/xterm.c (xi_convert_event_state): Export on non-GTK
    builds.
    * src/xterm.h: Update prototypes.
---
 src/xmenu.c | 26 +++-----------------------
 src/xterm.c |  6 +++++-
 src/xterm.h |  3 +++
 3 files changed, 11 insertions(+), 24 deletions(-)

diff --git a/src/xmenu.c b/src/xmenu.c
index 7134bf22c8..c006d2bfe2 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -261,20 +261,10 @@ x_menu_translate_generic_event (XEvent *event)
              copy.xbutton.y = lrint (xev->event_y);
              copy.xbutton.x_root = lrint (xev->root_x);
              copy.xbutton.y_root = lrint (xev->root_y);
-             copy.xbutton.state = xev->mods.effective;
+             copy.xbutton.state = xi_convert_event_state (xev);
              copy.xbutton.button = xev->detail;
              copy.xbutton.same_screen = True;
 
-             if (xev->buttons.mask_len)
-               {
-                 if (XIMaskIsSet (xev->buttons.mask, 1))
-                   copy.xbutton.state |= Button1Mask;
-                 if (XIMaskIsSet (xev->buttons.mask, 2))
-                   copy.xbutton.state |= Button2Mask;
-                 if (XIMaskIsSet (xev->buttons.mask, 3))
-                   copy.xbutton.state |= Button3Mask;
-               }
-
              XPutBackEvent (dpyinfo->display, &copy);
 
              break;
@@ -397,7 +387,7 @@ popup_get_selection (XEvent *initial_event, struct 
x_display_info *dpyinfo,
                    copy.xbutton.y = lrint (xev->event_y);
                    copy.xbutton.x_root = lrint (xev->root_x);
                    copy.xbutton.y_root = lrint (xev->root_y);
-                   copy.xbutton.state = xev->mods.effective;
+                   copy.xbutton.state = xi_convert_event_state (xev);
                    copy.xbutton.button = xev->detail;
                    copy.xbutton.same_screen = True;
 
@@ -412,16 +402,6 @@ popup_get_selection (XEvent *initial_event, struct 
x_display_info *dpyinfo,
                    copy.xbutton.state = 0;
 #endif
 
-                   if (xev->buttons.mask_len)
-                     {
-                       if (XIMaskIsSet (xev->buttons.mask, 1))
-                         copy.xbutton.state |= Button1Mask;
-                       if (XIMaskIsSet (xev->buttons.mask, 2))
-                         copy.xbutton.state |= Button2Mask;
-                       if (XIMaskIsSet (xev->buttons.mask, 3))
-                         copy.xbutton.state |= Button3Mask;
-                     }
-
                    break;
                  }
                case XI_KeyPress:
@@ -442,7 +422,7 @@ popup_get_selection (XEvent *initial_event, struct 
x_display_info *dpyinfo,
                    copy.xkey.y = lrint (xev->event_y);
                    copy.xkey.x_root = lrint (xev->root_x);
                    copy.xkey.y_root = lrint (xev->root_y);
-                   copy.xkey.state = xev->mods.effective;
+                   copy.xkey.state = xi_convert_event_state (xev);
                    copy.xkey.keycode = xev->detail;
                    copy.xkey.same_screen = True;
 
diff --git a/src/xterm.c b/src/xterm.c
index e242768c95..82a20ad1a9 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -5077,7 +5077,11 @@ xi_convert_button_state (XIButtonState *in, unsigned int 
*out)
 }
 
 /* Return the modifier state in XEV as a standard X modifier mask.  */
-static unsigned int
+
+#ifdef USE_GTK
+static
+#endif
+unsigned int
 xi_convert_event_state (XIDeviceEvent *xev)
 {
   unsigned int mods, buttons;
diff --git a/src/xterm.h b/src/xterm.h
index 26d6e4b3d0..b0f9200eea 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1689,6 +1689,9 @@ extern int x_error_message_count;
 #ifdef HAVE_XINPUT2
 extern struct xi_device_t *xi_device_from_id (struct x_display_info *, int);
 extern bool xi_frame_selected_for (struct frame *, unsigned long);
+#ifndef USE_GTK
+extern unsigned int xi_convert_event_state (XIDeviceEvent *);
+#endif
 #endif
 
 extern void mark_xterm (void);



reply via email to

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