Once again, I'm sending email out to everyone who has contacted me
regarding the resize/redraw bug in Xpdf 3.01.

Thanks to Michael Rogers, I have a potential fix -- see the attached
patch file.  I would appreciate it if you would all try this out, and
let me know if it fixes the problem for you.

- Derek
Index: XPDFCore.cc
===================================================================
RCS file: /home/derekn/src/cvs/xpdf/XPDFCore.cc,v
retrieving revision 1.68
diff -c -r1.68 XPDFCore.cc
*** XPDFCore.cc 19 Mar 2005 00:15:08 -0000      1.68
--- XPDFCore.cc 6 Oct 2005 21:22:11 -0000
***************
*** 981,986 ****
--- 981,989 ----
    XPDFCore *core = (XPDFCore *)ptr;
    XEvent event;
    Widget top;
+   Window rootWin;
+   int x1, y1;
+   Guint w1, h1, bw1, depth1;
    Arg args[2];
    int n;
    Dimension w, h;
***************
*** 988,1002 ****
  
    // find the top-most widget which has an associated window, and look
    // for a pending ConfigureNotify in the event queue -- if there is
!   // one, that means we're still resizing, and we want to skip the
!   // current event
    for (top = core->parentWidget;
         XtParent(top) && XtWindow(XtParent(top));
         top = XtParent(top)) ;
    if (XCheckTypedWindowEvent(core->display, XtWindow(top),
                             ConfigureNotify, &event)) {
      XPutBackEvent(core->display, &event);
!     return;
    }
  
    n = 0;
--- 991,1010 ----
  
    // find the top-most widget which has an associated window, and look
    // for a pending ConfigureNotify in the event queue -- if there is
!   // one, and it specifies a different width or height, that means
!   // we're still resizing, and we want to skip the current event
    for (top = core->parentWidget;
         XtParent(top) && XtWindow(XtParent(top));
         top = XtParent(top)) ;
    if (XCheckTypedWindowEvent(core->display, XtWindow(top),
                             ConfigureNotify, &event)) {
      XPutBackEvent(core->display, &event);
!     XGetGeometry(core->display, event.xconfigure.window,
!                &rootWin, &x1, &y1, &w1, &h1, &bw1, &depth1);
!     if ((Guint)event.xconfigure.width != w1 ||
!       (Guint)event.xconfigure.height != h1) {
!       return;
!     }
    }
  
    n = 0;

Reply via email to