emacs-diffs
[Top][All Lists]
Advanced

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

master 42ede97016: Use XI2 to handle xwidget button events


From: Po Lu
Subject: master 42ede97016: Use XI2 to handle xwidget button events
Date: Wed, 29 Dec 2021 00:14:22 -0500 (EST)

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

    Use XI2 to handle xwidget button events
    
    * src/xterm.c (handle_one_xevent): Handle xwidget views when
    handling XI_ButtonPress or XI_ButtonRelease events.
    * src/xwidget.c (x_draw_xwidget_glyph_string): Add appropriate
    values to the XI2 event mask.
---
 src/xterm.c   | 22 ++++++++++++++++++++++
 src/xwidget.c |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/src/xterm.c b/src/xterm.c
index 3fdf214c3d..3200e44a87 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -10325,6 +10325,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              bool tab_bar_p = false;
              bool tool_bar_p = false;
              struct xi_device_t *device;
+#ifdef HAVE_XWIDGETS
+             struct xwidget_view *xvw;
+#endif
 
 #ifdef XIPointerEmulated
              /* Ignore emulated scroll events when XI2 native
@@ -10340,6 +10343,25 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                }
 #endif
 
+#ifdef HAVE_XWIDGETS
+             xvw = xwidget_view_from_window (xev->event);
+             if (xvw)
+               {
+                 xwidget_button (xvw, xev->evtype == XI_ButtonPress,
+                                 lrint (xev->event_x), lrint (xev->event_y),
+                                 xev->detail, xev->mods.effective, xev->time);
+
+                 if (!EQ (selected_window, xvw->w) && (xev->detail < 4))
+                   {
+                     inev.ie.kind = SELECT_WINDOW_EVENT;
+                     inev.ie.frame_or_window = xvw->w;
+                   }
+
+                 *finish = X_EVENT_DROP;
+                 goto XI_OTHER;
+               }
+#endif
+
              device = xi_device_from_id (dpyinfo, xev->deviceid);
 
              if (!device || !device->master_p)
diff --git a/src/xwidget.c b/src/xwidget.c
index 5745153548..22c42382bb 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -2106,6 +2106,8 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
          mask.deviceid = XIAllMasterDevices;
 
          XISetMask (m, XI_Motion);
+         XISetMask (m, XI_ButtonPress);
+         XISetMask (m, XI_ButtonRelease);
          XISelectEvents (xv->dpy, xv->wdesc, &mask, 1);
        }
 #endif



reply via email to

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