Am Dienstag, den 05.12.2006, 10:42 +0100 schrieb Roman Kennke: > Am Montag, den 04.12.2006, 15:52 -0500 schrieb Thomas Fitzsimmons: > > Mark Wielaard wrote: > > > Hi, > > > > > > With the mauve regressions cleaned up we finally have a branch for 0.93 > > > (tagged as classpath-0_93-branch with classpath-0_93-branch-point as > > > marker on the trunk). So things todo before release: > > > > > > - sync up generics branch again. > > > - Run some larger applications as smoke tests > > > eclipse, jfreecharts, jedit, megamek, hsql-frontends, some applets, > > > etc. to make sure they still run as well as they did with 0.92. > > > Reports welcome! > > > > I'm attempting to run MegaMek on cacao + classpath-0_93-branch. I see many > > exceptions like this: > > > > Exception during event dispatch: > > java.lang.NullPointerException > > at > > gnu.java.awt.peer.gtk.GtkComponentPeer.paintComponent(GtkComponentPeer.java:316) > > That's my fault. I fix this. We need to 'coalesce' the paint area from the current event too in the case when an application bypasses the eventqueue and sends PaintEvents directly. 2006-12-05 Roman Kennke <kennke@xxxxxxxxx> (paintComponent): Include paint area from event. (updateComponent): Include paint area from event. /Roman
Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v retrieving revision 1.123 diff -u -1 -5 -r1.123 GtkComponentPeer.java --- gnu/java/awt/peer/gtk/GtkComponentPeer.java 3 Dec 2006 16:01:11 -0000 1.123 +++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 5 Dec 2006 09:55:35 -0000 @@ -301,30 +301,34 @@ // This method and its overrides are the only methods in the peers // that should call awtComponent.paint. protected void paintComponent (PaintEvent event) { // Do not call Component.paint if the component is not showing or // if its bounds form a degenerate rectangle. if (!awtComponent.isShowing() || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1)) return; // Creating and disposing a GdkGraphics every time paint is called // seems expensive. However, the graphics state does not carry // over between calls to paint, and resetting the graphics object // may even be more costly than simply creating a new one. + + // Make sure that the paintArea includes the area from the event + // in the case when an application sends PaintEvents directly. + coalescePaintEvent(event); Rectangle paintArea; synchronized (this) { paintArea = currentPaintArea; currentPaintArea = null; } if (paintArea != null) { Graphics g = getGraphics(); try { g.setClip(paintArea); awtComponent.paint(g); } @@ -333,30 +337,33 @@ g.dispose(); } } } // This method and its overrides are the only methods in the peers // that should call awtComponent.update. protected void updateComponent (PaintEvent event) { // Do not call Component.update if the component is not showing or // if its bounds form a degenerate rectangle. if (!awtComponent.isShowing() || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1)) return; + // Make sure that the paintArea includes the area from the event + // in the case when an application sends PaintEvents directly. + coalescePaintEvent(event); Rectangle paintArea; synchronized (this) { paintArea = currentPaintArea; currentPaintArea = null; } if (paintArea != null) { Graphics g = getGraphics(); try { g.setClip(paintArea); awtComponent.update(g); }