Add EventsBlock().
Intended to enable running event loop without processing X events. SVN revision: 78406
This commit is contained in:
parent
c76b8f6a2a
commit
acaf58fd94
1
src/E.h
1
src/E.h
|
@ -363,6 +363,7 @@ typedef struct {
|
|||
unsigned int last_button;
|
||||
unsigned int last_keycode;
|
||||
unsigned int last_keystate;
|
||||
char block;
|
||||
char double_click;
|
||||
char on_screen;
|
||||
#if USE_COMPOSITE
|
||||
|
|
22
src/events.c
22
src/events.c
|
@ -416,6 +416,14 @@ EventsUpdateXY(int *px, int *py)
|
|||
return ss;
|
||||
}
|
||||
|
||||
void
|
||||
EventsBlock(int mode)
|
||||
{
|
||||
Mode.events.block = mode;
|
||||
if (EDebug(EDBUG_TYPE_EVENTS))
|
||||
Eprintf("%s: mode=%d\n", __func__, Mode.events.block);
|
||||
}
|
||||
|
||||
static void
|
||||
ModeGetXY(int rx, int ry)
|
||||
{
|
||||
|
@ -935,7 +943,8 @@ EventsMain(void)
|
|||
for (;;)
|
||||
{
|
||||
pfetch = 0;
|
||||
count = EventsProcess(&evq_ptr, &evq_alloc, &pfetch);
|
||||
if (!Mode.events.block)
|
||||
count = EventsProcess(&evq_ptr, &evq_alloc, &pfetch);
|
||||
|
||||
if (pfetch)
|
||||
{
|
||||
|
@ -964,16 +973,23 @@ EventsMain(void)
|
|||
/* Run idlers */
|
||||
IdlersRun();
|
||||
|
||||
/* Get time to first non-expired (0 means none) */
|
||||
time2 = TimersRunNextIn(time2);
|
||||
|
||||
if (Mode.wm.exit_mode)
|
||||
break;
|
||||
|
||||
if (XPending(disp))
|
||||
if (Mode.events.block)
|
||||
XFlush(disp);
|
||||
else if (XPending(disp))
|
||||
continue;
|
||||
|
||||
FD_ZERO(&fdset);
|
||||
fdsize = -1;
|
||||
for (i = 0; i < nfds; i++)
|
||||
{
|
||||
if (Mode.events.block && i == 0)
|
||||
continue;
|
||||
fd = pfds[i].fd;
|
||||
if (fd < 0)
|
||||
continue;
|
||||
|
@ -983,8 +999,6 @@ EventsMain(void)
|
|||
}
|
||||
fdsize++;
|
||||
|
||||
/* Get time to first non-expired (0 means none) */
|
||||
time2 = TimersRunNextIn(time2);
|
||||
if (time2 > 0.)
|
||||
{
|
||||
tval.tv_sec = (long)time2 / 1000;
|
||||
|
|
|
@ -49,5 +49,6 @@ EventFdDesc *EventFdRegister(int fd, EventFdHandler * handler);
|
|||
void EventFdUnregister(EventFdDesc * efd);
|
||||
|
||||
int EventsUpdateXY(int *px, int *py);
|
||||
void EventsBlock(int mode);
|
||||
|
||||
#endif /* _EVENTS_H_ */
|
||||
|
|
|
@ -194,6 +194,9 @@ PagerScanTimeout(void *data)
|
|||
if (pager_mode != PAGER_MODE_SNAP)
|
||||
goto nomore;
|
||||
|
||||
if (Mode.events.block)
|
||||
return 1;
|
||||
|
||||
ewin = p->ewin;
|
||||
if (!ewin || !EoIsShown(ewin))
|
||||
goto nomore;
|
||||
|
@ -876,6 +879,8 @@ PagersCheckUpdate(void)
|
|||
static void
|
||||
_PagersIdler(void *data __UNUSED__)
|
||||
{
|
||||
if (Mode.events.block)
|
||||
return;
|
||||
PagersCheckUpdate();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue