#undef DEBUG_SOURCES
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/select.h>
#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;
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;
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");
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;
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");
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)