+
+typedef void (ANEF) (XtAppContext app_context, XEvent *event_return);
+int evcount = 0;
+
+/*
+ * XtAppNextEvent Intercept Hack
+ * Normally xterm rejects "synthetic" (XSendEvent) events to prevent spoofing.
+ * We don't want to disable this completely, it's insecure. But hook here
+ * and allow these mostly harmless ones that we use to adjust fonts.
+ */
+void
+XtAppNextEvent(XtAppContext app_context, XEvent *event_return)
+{
+ static ANEF *func = NULL;
+ static int kp_add = 0, kp_subtract = 0;
+
+ /* find the real Xlib and the real X function */
+ if (!lib_xtlib)
+ lib_xtlib = dlopen("libXt.so", RTLD_GLOBAL | RTLD_LAZY);
+ if (!func) {
+ func = (ANEF *) dlsym(lib_xtlib, "XtAppNextEvent");
+ if (dpy != NULL) {
+ kp_add = XKeysymToKeycode(dpy, XK_KP_Add);
+ kp_subtract = XKeysymToKeycode(dpy, XK_KP_Subtract);
+ }
+ }
+
+ (*func) (app_context, event_return);
+
+ /* Return here if it's not an Xterm. */
+ if (!xterm)
+ return;
+
+ /* Allow spoofing of font change keystrokes. */
+ if ((event_return->type == KeyPress ||
+ event_return->type == KeyRelease) &&
+ event_return->xkey.state == ShiftMask &&
+ (event_return->xkey.keycode == kp_add ||
+ event_return->xkey.keycode == kp_subtract))
+ event_return->xkey.send_event = 0;
+}