From http://www.jwz.org/xscreensaver/xscreensaver-5.39.tar.gz
[xscreensaver] / jwxyz / jwxyz-timers.c
index a849b2a9b919af56b26b7d380492b8e8db54e153..67326b02f1a5ec2bc12eab1f9691eed452bc1df4 100644 (file)
@@ -23,6 +23,7 @@
 #undef DEBUG_SOURCES
 
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <sys/time.h>
 #include <sys/select.h>
@@ -70,6 +71,9 @@ XtDisplayToApplicationContext (Display *dpy)
 
 #define app_to_display(APP) ((Display *) (APP))
 
+#define DISPLAY_SOURCES_DATA(APP) \
+  JWXYZ_VTBL(app_to_display (APP))->display_sources_data (app_to_display (APP))
+
 
 struct jwxyz_sources_data {
   int fd_count;
@@ -124,7 +128,7 @@ XtIntervalId
 XtAppAddTimeOut (XtAppContext app, unsigned long msecs,
                  XtTimerCallbackProc cb, XtPointer closure)
 {
-  jwxyz_sources_data *td = display_sources_data (app_to_display (app));
+  jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (app);
   XtIntervalId data = (XtIntervalId) calloc (1, sizeof(*data));
   double now = double_time();
   data->app = app;
@@ -149,7 +153,7 @@ XtAppAddTimeOut (XtAppContext app, unsigned long msecs,
 void
 XtRemoveTimeOut (XtIntervalId data)
 {
-  jwxyz_sources_data *td = display_sources_data (app_to_display (data->app));
+  jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (data->app);
 
   LOGT("timer  0x%08lX: remove", (unsigned long) data);
   ASSERT_RET (data->refcount > 0, "already freed");
@@ -188,7 +192,7 @@ XtInputId
 XtAppAddInput (XtAppContext app, int fd, XtPointer flags,
                XtInputCallbackProc cb, XtPointer closure)
 {
-  jwxyz_sources_data *td = display_sources_data (app_to_display (app));
+  jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (app);
   XtInputId data = (XtInputId) calloc (1, sizeof(*data));
   data->cb = cb;
   data->fd = fd;
@@ -210,7 +214,7 @@ XtAppAddInput (XtAppContext app, int fd, XtPointer flags,
 void
 XtRemoveInput (XtInputId id)
 {
-  jwxyz_sources_data *td = display_sources_data (app_to_display (id->app));
+  jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (id->app);
 
   LOGI("source 0x%08lX %2d: remove", (unsigned long) id, id->fd);
   ASSERT_RET (id->refcount > 0, "sources corrupted");
@@ -343,7 +347,7 @@ XtAppPending (XtAppContext app)
 void
 XtAppProcessEvent (XtAppContext app, XtInputMask mask)
 {
-  jwxyz_sources_data *td = display_sources_data (app_to_display (app));
+  jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (app);
   if (mask & XtIMAlternateInput)
     jwxyz_sources_run (td);
   if (mask & XtIMTimer)