Remove code in xf86Wakeup for dealing with other input and switch to using the new NotifyFd interface.
Signed-off-by: Keith Packard <kei...@keithp.com> --- hw/xfree86/common/xf86Events.c | 76 ++++++++++++------------------------------ 1 file changed, 22 insertions(+), 54 deletions(-) diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index 5b4fa23..7d3c35f 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -100,8 +100,6 @@ Bool VTSwitchEnabled = TRUE; /* Allows run-time disabling for switches when using the DRI automatic full screen mode.*/ -extern fd_set EnabledDevices; - #ifdef XF86PM extern void (*xf86OSPMClose) (void); #endif @@ -246,45 +244,6 @@ xf86ProcessActionEvent(ActionEvent action, void *arg) void xf86Wakeup(void *blockData, int err, void *pReadmask) { - fd_set *LastSelectMask = (fd_set *) pReadmask; - fd_set devicesWithInput; - InputInfoPtr pInfo; - - if (err >= 0) { - - XFD_ANDSET(&devicesWithInput, LastSelectMask, &EnabledDevices); - if (XFD_ANYSET(&devicesWithInput)) { - pInfo = xf86InputDevs; - while (pInfo) { - if (pInfo->read_input && pInfo->fd >= 0 && - (FD_ISSET(pInfo->fd, &devicesWithInput) != 0)) { - input_lock(); - - /* - * Remove the descriptior from the set because more than one - * device may share the same file descriptor. - */ - FD_CLR(pInfo->fd, &devicesWithInput); - - pInfo->read_input(pInfo); - input_unlock(); - } - pInfo = pInfo->next; - } - } - } - - if (err >= 0) { /* we don't want the handlers called if select() */ - IHPtr ih, ih_tmp; /* returned with an error condition, do we? */ - - nt_list_for_each_entry_safe(ih, ih_tmp, InputHandlers, next) { - if (ih->enabled && ih->fd >= 0 && ih->ihproc && - (FD_ISSET(ih->fd, ((fd_set *) pReadmask)) != 0)) { - ih->ihproc(ih->fd, ih->data); - } - } - } - if (xf86VTSwitchPending()) xf86VTSwitch(); } @@ -629,6 +588,16 @@ xf86VTSwitch(void) /* Input handler registration */ +static void +xf86InputHandlerNotify(int fd, int ready, void *data) +{ + IHPtr ih = data; + + if (ih->enabled && ih->fd >= 0 && ih->ihproc) { + ih->ihproc(ih->fd, ih->data); + } +} + static void * addInputHandler(int fd, InputHandlerProc proc, void *data) { @@ -646,6 +615,11 @@ addInputHandler(int fd, InputHandlerProc proc, void *data) ih->data = data; ih->enabled = TRUE; + if (!SetNotifyFd(fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih)) { + free(ih); + return NULL; + } + ih->next = InputHandlers; InputHandlers = ih; @@ -657,10 +631,8 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, void *data) { IHPtr ih = addInputHandler(fd, proc, data); - if (ih) { - AddEnabledDevice(fd); + if (ih) ih->is_input = TRUE; - } return ih; } @@ -669,8 +641,6 @@ xf86AddGeneralHandler(int fd, InputHandlerProc proc, void *data) { IHPtr ih = addInputHandler(fd, proc, data); - if (ih) - AddGeneralSocket(fd); return ih; } @@ -700,6 +670,8 @@ removeInputHandler(IHPtr ih) { IHPtr p; + if (ih->fd >= 0) + RemoveNotifyFd(ih->fd); if (ih == InputHandlers) InputHandlers = ih->next; else { @@ -724,8 +696,6 @@ xf86RemoveInputHandler(void *handler) ih = handler; fd = ih->fd; - if (ih->fd >= 0) - RemoveEnabledDevice(ih->fd); removeInputHandler(ih); return fd; @@ -743,8 +713,6 @@ xf86RemoveGeneralHandler(void *handler) ih = handler; fd = ih->fd; - if (ih->fd >= 0) - RemoveGeneralSocket(ih->fd); removeInputHandler(ih); return fd; @@ -761,7 +729,7 @@ xf86DisableInputHandler(void *handler) ih = handler; ih->enabled = FALSE; if (ih->fd >= 0) - RemoveEnabledDevice(ih->fd); + RemoveNotifyFd(ih->fd); } void @@ -775,7 +743,7 @@ xf86DisableGeneralHandler(void *handler) ih = handler; ih->enabled = FALSE; if (ih->fd >= 0) - RemoveGeneralSocket(ih->fd); + RemoveNotifyFd(ih->fd); } void @@ -789,7 +757,7 @@ xf86EnableInputHandler(void *handler) ih = handler; ih->enabled = TRUE; if (ih->fd >= 0) - AddEnabledDevice(ih->fd); + SetNotifyFd(ih->fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih); } void @@ -803,7 +771,7 @@ xf86EnableGeneralHandler(void *handler) ih = handler; ih->enabled = TRUE; if (ih->fd >= 0) - AddGeneralSocket(ih->fd); + SetNotifyFd(ih->fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih); } /* -- 2.8.0.rc3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel