Skip to content
Prev 5077 / 63424 Next

devX11.c -- questions about expose events and XBell

Hi,  sorry for lumping this together...  Both these issues are rather
small, and I'm not sure either qualifies as a bug...

1) After a window id created in X11_Open and mapped,  you "gobble the
   expose events".  Not true, you gobble any event that comes along!
   The code below fixes this by using *XCheckTypedEvent*.  Hmm, I'm
   not sure this right already, but better...

*** devX11.c~    Tue Feb 13 17:24:40 2001
--- devX11.c    Tue Feb 13 18:07:41 2001
***************
*** 1232,1242 ****
  
        /* Gobble expose events */
  
!       XNextEvent(display, &event);
!       if (event.xany.type == Expose) {
!           while (event.xexpose.count)
!               XNextEvent(display, &event);
!       }
      } else { /* PIXMAP */
        xd->windowWidth = iw = w;
        xd->windowHeight = ih = h;
--- 1232,1241 ----
  
        /* Gobble expose events */
  
!       if (XCheckTypedEvent(display, Expose, &event)) {
!           while (event.xexpose.count)
!               XNextEvent(display, &event);
!       }
      } else { /* PIXMAP */
        xd->windowWidth = iw = w;
        xd->windowHeight = ih = h;


2) There are beeps from X11_Locator for every successful mouse click.
   The code here assumes that stderr is connected to a terminal.
   This is not always true!  When I run R within an ESS session in
   emacs, I get ^G  but no sound.  When I redirect the output, I get
   nothing...  *Question* Why don't you use *XBell*?

*** devX11.c~    Tue Feb 13 17:24:40 2001
--- devX11.c    Tue Feb 13 18:07:41 2001
***************
*** 1880,1887 ****
                if (event.xbutton.button == Button1) {
                    *x = event.xbutton.x;
                    *y = event.xbutton.y;
!                   fprintf(stderr, "\07");
!                   fflush(stderr);
                    XSync(display, 0);
                    done = 1;
                }
--- 1879,1885 ----
                if (event.xbutton.button == Button1) {
                    *x = event.xbutton.x;
                    *y = event.xbutton.y;
!                   XBell (display, 0);
                    XSync(display, 0);
                    done = 1;
                }
   

Regards,
  -tom