Add EventsBlock().

Intended to enable running event loop without processing X events.

SVN revision: 78406
This commit is contained in:
Kim Woelders 2012-10-24 17:20:32 +00:00
parent c76b8f6a2a
commit acaf58fd94
4 changed files with 25 additions and 4 deletions

View File

@ -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

View File

@ -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;

View File

@ -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_ */

View File

@ -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();
}