MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / eventLoop

Function eventLoop

demos/glxspheres.c:378–439  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

376
377
378static int eventLoop(void)
379{
380 int retval = 0;
381
382 while(!deadYet)
383 {
384 int advance = 0, doDisplay = 0;
385
386 while(1)
387 {
388 XEvent event;
389 if(interactive) XNextEvent(dpy, &event);
390 else
391 {
392 if(XPending(dpy) > 0) XNextEvent(dpy, &event);
393 else break;
394 }
395 switch(event.type)
396 {
397 case Expose:
398 doDisplay = 1;
399 break;
400 case ConfigureNotify:
401 reshape(event.xconfigure.width, event.xconfigure.height);
402 break;
403 case KeyPress:
404 {
405 char buf[10];
406 XLookupString(&event.xkey, buf, sizeof(buf), NULL, NULL);
407 switch(buf[0])
408 {
409 case 27: case 'q': case 'Q':
410 return 0;
411 }
412 break;
413 }
414 case MotionNotify:
415 if(event.xmotion.state & Button1Mask) doDisplay = advance = 1;
416 break;
417 case ClientMessage:
418 {
419 XClientMessageEvent *cme = (XClientMessageEvent *)&event;
420 if(cme->message_type == protoAtom
421 && cme->data.l[0] == (long)deleteAtom)
422 return 0;
423 }
424 }
425 if(interactive)
426 {
427 if(XPending(dpy) <= 0) break;
428 }
429 }
430 if(!interactive) { CATCH(display(1)); }
431 else
432 {
433 if(doDisplay) { CATCH(display(advance)); }
434 }
435 }

Callers 1

mainFunction · 0.70

Calls 3

XNextEventFunction · 0.85
reshapeFunction · 0.70
displayFunction · 0.70

Tested by

no test coverage detected