Lightweight Components not repainting after recent Classpathmerge

Scott Gilbertson scottg@mantatest.com
Mon Feb 6 22:28:00 GMT 2006


> Roman wrote:
> Have you tried resyncing with the latest Classpath sources already?
> AFAIK, the latest merge is quite some time ago and I remember to have
> fixed a couple of repaint related issues in Classpath's AWT code. I
> tried the example of your previous email regarding AWT (the same as the
> attached program?) against Classpath and that seemed to work.
>

The last merge to the GCJ tree was January 17, 2006, using Classpath 0.20

I just had a look at java.awt.Component in the Classpath cvs browser
(revision 1.94, Feb 6, 2006).
It has:

  public void repaint(long tm, int x, int y, int width, int height)
  {
    if (isShowing())
      {
        ComponentPeer p = peer;
        if (p != null)
          p.repaint(tm, x, y, width, height);
      }
  }
That's the same as in GCJ.  Since
gnu.java.awt.peer.GLightweightPeer.repaint is empty (also the same as in
GCJ), p.repaint doesn't do anything.  So I don't see how the latest
Classpath code can do a repaint on a lightweight.

Earlier versions (1.86, Nov 8 2005, and earlier) of java.awt.Component
called the parent's repaint, which circumvented the problem, but I think
GLightweightPeer is the right place to do that.

I have modified GLightweightPeer in my local GCJ build to call the parent's
repaint, and it makes the test program work.



More information about the Java mailing list