Many test cases I have, show that Sun does not call update(Graphics) on
Panels or Windows. Only paint(Graphics) is called. Many widgets were
being cleared and not repainted properly when update was called.

2006-02-09  Lillian Angel  <[EMAIL PROTECTED]>

        * gnu/java/awt/peer/gtk/GtkPanelPeer.java
        (handleEvent): Added code to handle PaintEvent.UPDATE.
        Sun does not call update(Graphics g) on Panels.
        * gnu/java/awt/peer/gtk/GtkWindowPeer.java
        (handleEvent): New method. Added code to handle 
        PaintEvent.UPDATE. Sun does not call update(Graphics g) on 
        Panels.

Index: gnu/java/awt/peer/gtk/GtkPanelPeer.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java,v
retrieving revision 1.19
diff -u -r1.19 GtkPanelPeer.java
--- gnu/java/awt/peer/gtk/GtkPanelPeer.java	2 Jul 2005 20:32:12 -0000	1.19
+++ gnu/java/awt/peer/gtk/GtkPanelPeer.java	9 Feb 2006 15:38:29 -0000
@@ -39,8 +39,10 @@
 package gnu.java.awt.peer.gtk;
 
 import java.awt.AWTEvent;
+import java.awt.Graphics;
 import java.awt.Panel;
 import java.awt.event.MouseEvent;
+import java.awt.event.PaintEvent;
 import java.awt.peer.PanelPeer;
 
 public class GtkPanelPeer extends GtkContainerPeer
@@ -63,7 +65,18 @@
         awtComponent.requestFocusInWindow ();
         break;
       }
-    super.handleEvent (event);
+    
+    if (event.getID() == PaintEvent.UPDATE)
+      {
+        Graphics g = getGraphics();
+        if (!awtComponent.isShowing() || g == null)
+          return;
+        
+        // Do not want to clear anything before painting.
+        awtComponent.paint(g);
+      }
+    else
+      super.handleEvent (event);
   }
 
   native void connectSignals ();
Index: gnu/java/awt/peer/gtk/GtkWindowPeer.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java,v
retrieving revision 1.42
diff -u -r1.42 GtkWindowPeer.java
--- gnu/java/awt/peer/gtk/GtkWindowPeer.java	16 Nov 2005 15:58:05 -0000	1.42
+++ gnu/java/awt/peer/gtk/GtkWindowPeer.java	9 Feb 2006 15:38:29 -0000
@@ -38,9 +38,12 @@
 
 package gnu.java.awt.peer.gtk;
 
+import java.awt.AWTEvent;
 import java.awt.Component;
 import java.awt.Frame;
+import java.awt.Graphics;
 import java.awt.Window;
+import java.awt.event.PaintEvent;
 import java.awt.event.WindowEvent;
 import java.awt.peer.WindowPeer;
 
@@ -235,4 +238,19 @@
     // TODO Auto-generated method stub
     return false;
   }
+  
+  public void handleEvent(AWTEvent event)
+  {
+    if (event.getID() == PaintEvent.UPDATE)
+      {
+        Graphics g = getGraphics();
+        if (!awtComponent.isShowing() || g == null)
+          return;
+        
+        // Do not want to clear anything before painting.
+        awtComponent.paint(g);
+      }
+    else
+      super.handleEvent(event);
+  }
 }

Reply via email to