]> git.eshelyaron.com Git - emacs.git/commitdiff
Add configure tests for faulty XI2 installations
authorPo Lu <luangruo@yahoo.com>
Sun, 26 Dec 2021 06:44:53 +0000 (14:44 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 26 Dec 2021 06:48:13 +0000 (14:48 +0800)
* configure.ac: Detect cases where XI 2.4 headers are installed
without the correct event structures.
* src/xterm.c (handle_one_xevent): Don't use structures that
might not exist unless configure found them.

configure.ac
src/xterm.c

index 9fcc124758d40bacba07545e81ae788bb127c227..5b94fc8e1b7225f6390f94a6d7967737ffcae492 100644 (file)
@@ -4489,6 +4489,13 @@ if test "${HAVE_X11}" = "yes" && test "${with_xinput2}" != "no"; then
        AC_MSG_WARN([You are building Emacs with GTK+ 2 and the X Input Extension version 2.
 This might lead to problems if your version of GTK+ is not built with support for XInput 2.])
      fi
+     # Detect both faulty installations of libXi where gesture event
+     # types are defined but gesture event structures are not, and
+     # also where gesture event structures are empty.
+     AC_CHECK_MEMBERS([XIGesturePinchEvent.delta_unaccel_y],
+       [AC_DEFINE(HAVE_USABLE_XI_GESTURE_PINCH_EVENT, 1,
+         [Define to 1 if XInput headers define gesture structures correctly.])],
+       [], [[#include <X11/extensions/XInput2.h>]])
    fi
 fi
 AC_SUBST(XINPUT_CFLAGS)
index 00cb04f005d9a2a4dad119ccbd246e472002ab2c..8ba4f46c2c9e0b33b06d05ada92cb92126000fac 100644 (file)
@@ -11050,6 +11050,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
          case XI_GesturePinchBegin:
          case XI_GesturePinchUpdate:
            {
+#ifdef HAVE_USABLE_XI_GESTURE_PINCH_EVENT
              XIGesturePinchEvent *pev = (XIGesturePinchEvent *) xi_event;
              struct xi_device_t *device = xi_device_from_id (dpyinfo, pev->deviceid);
 
@@ -11070,6 +11071,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                                       make_float (pev->scale),
                                       make_float (pev->delta_angle));
                }
+#endif
              /* Once again GTK seems to crash when confronted by
                 events it doesn't understand.  */
              *finish = X_EVENT_DROP;