Actual source code: wmap.c

  1: #define PETSC_DLL

 3:  #include src/sys/src/draw/impls/x/ximpl.h

  5: /*
  6:     This routine waits until the window is actually created or destroyed
  7:     Returns 0 if window is mapped; 1 if window is destroyed.
  8:  */
 11: PetscErrorCode Xi_wait_map(PetscDraw_X *XiWin)
 12: {
 13:   XEvent  event;
 14:   int     w,h;

 17:   /*
 18:    This is a bug.  XSelectInput should be set BEFORE the window is mapped
 19:   */
 20:   /*
 21:   XSelectInput(XiWin->disp,XiWin->win,ExposureMask | StructureNotifyMask);
 22:   */
 23:   while (1) {
 24:     XMaskEvent(XiWin->disp,ExposureMask | StructureNotifyMask,&event);
 25:     if (event.xany.window != XiWin->win) {
 26:       break;
 27:       /* Bug for now */
 28:     } else {
 29:       switch (event.type) {
 30:         case ConfigureNotify:
 31:         /* window has been moved or resized */
 32:         w         = event.xconfigure.width  - 2 * event.xconfigure.border_width;
 33:         h         = event.xconfigure.height - 2 * event.xconfigure.border_width;
 34:         XiWin->w  = w;
 35:         XiWin->h  = h;
 36:         break;
 37:       case DestroyNotify:
 38:         PetscFunctionReturn(1);
 39:       case Expose:
 40:         return(0);
 41:       /* else ignore event */
 42:       }
 43:     }
 44:   }
 45:   return(0);
 46: }