This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gui][PATCH] Rework peer code


Hi,

I just committed this large patch to java-gui-branch.  It reworks some
sections of the peers:

- peers that were backed by a GtkLayout are now backed by GtkFixed. 
This reduces the number of required X windows and allows us to remove
some special cases (e.g. find_gtk_layout).

- the GtkFramePeer.setMenuBar method is clearer now and it makes use of
the AWT's validation methods, which means that the awkward gtkFixedMove
method can be removed.

- native repaints caused by X expose events are now handled differently
than native repaints initiated by AWT paint events.  This allows us to
remove all the awkward expose event filtering logic.

- the GdkGraphics.drawImage methods are now synchronous.  This
eliminates the race condition that was causing images and graphics to be
drawn in the wrong order (e.g. images disappearing on Swing buttons).

- the native GtkFramePeer method implementations are now in a file of
their own where before they were interspersed throughout
gnu_java_awt_peer_gtk_GtkWindowPeer.c.

This patch causes some minor regressions, but I think it lays a good
foundation for fixing the remaining painting and image handling bugs.

Tom

2004-09-02  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am (gtk_c_source_files): Add
	gnu_java_awt_peer_gtk_GtkFramePeer.c.
	* Makefile.in: Regenerate.
	* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
	comment.
	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(create): Pack GtkButton in GtkEventBox.
	(connectJObject): Remove.
	(focus_in_cb): New function.
	(focus_out_cb): Likewise.
	(connectSignals): Connect focus-in-event and focus-out-event
	signals.
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	(gtkWidgetRequestFocus): New method.
	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(isInRepaint): New field.
	(gtkSetFont): Remove method.
	(addExposeFilter): Likewise.
	(removeExposeFilter): Likewise.
	(gtkWidgetQueueDrawArea): Rename to ...
	(gtkWidgetRepaintArea): New method.
	(beginNativeRepaint): New method.
	(endNativeRepaint): New method.
	(setComponentBounds): Move implementation here from
	GtkComponentPeer.
	(paint): Remove implementation.
	(repaint): Wrap call to gtkWidgetRepaintArea with calls to
	beginNativeRepaint and endNativeRepaint.
	(setBounds): Use menu bar height in bounds calculation.
	(postExposeEvent): Only post paint event if we're not doing a
	native repaint.
	(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
	(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
	(find_gtk_layout): Remove function.
	(filter_expose_event_handler): Likewise.
	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
	Likewise.
	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
	(setComponentBounds): Call GtkComponentPeer's
	setComponentBounds.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
	New method.
	(moveLayout): Rename to ...
	(gtkFixedMove): New method.
	(gtkLayoutSetVisible): Rename to ...
	(gtkFixedSetVisible): New method.
	(setMenuBar): Rearrange, to make the three separate cases
	clearer.
	(postExposeEvent): Only post paint event if we're not doing a
	native repaint.
	* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkImagePainter.java
	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
	Call run directly, rather than spawning a new thread.
	(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
	Likewise.
	* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
	Rename to ...
	(gtkWidgetModifyFont): New method.
	(create): Rename ebox to eventbox.
	* gnu/java/awt/peer/gtk/GtkListPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
	Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
	(GtkMenuComponentPeer): Set the default font.
	* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
	(gtkSetFont): Rename to ...
	(gtkWidgetModifyFont): New method.
	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
	* java/awt/Component.java (locale): Initialize to default
	locale.
	* java/awt/Container.java (invalidateTree): Make
	package-private.
	(paint): Paint self first.
	(setMenuBar): Call invalidateTree.
	* java/awt/Panel.java (dispatchEventImpl): Remove method.
	* java/awt/Window.java (show): Call no-parameter variant of
	requestFocusInWindow.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
	Remove special case for window widget.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(grab_current_drawable): Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
	(create): Replace GtkLayout with GtkFixed.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(pre_event_handler): Remove special cases for GDK_EXPOSE events.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
	Move all GtkFramePeer native method implementations here from
	gnu_java_awt_peer_gtk_GtkWindowPeer.c.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
	Replace GtkLayout with GtkFixed.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(find_layout): Remove function.
	(create): Replace GtkLayout with GtkFixed.
	(connectSignals): Remove find_layout call.
	(toBack): Replace XFlush with gdk_flush.
	(toFront): Replace XFlush with gdk_flush.
	Move GtkFramePeer native method implementations to
	gnu_java_awt_peer_gtk_GtkFramePeer.c.
	* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.

Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.361.2.42
diff -u -r1.361.2.42 Makefile.am
--- Makefile.am	25 Aug 2004 21:49:42 -0000	1.361.2.42
+++ Makefile.am	2 Sep 2004 21:17:48 -0000
@@ -203,6 +203,7 @@
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
Index: gnu/java/awt/peer/gtk/GdkGraphics.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java,v
retrieving revision 1.4.16.6
diff -u -r1.4.16.6 GdkGraphics.java
--- gnu/java/awt/peer/gtk/GdkGraphics.java	9 Aug 2004 22:35:23 -0000	1.4.16.6
+++ gnu/java/awt/peer/gtk/GdkGraphics.java	2 Sep 2004 21:17:48 -0000
@@ -116,7 +116,6 @@
 //    public Graphics create (int x, int y, int width, int height)
 //    {
 //      GdkGraphics g = new GdkGraphics (this);
-//      System.out.println ("translating by: " + x +" " + y);
 //      g.translate (x, y);
 //      g.clipRect (0, 0, width, height);
 
@@ -350,7 +349,6 @@
 
   public Rectangle getClipBounds ()
   {
-//      System.out.println ("returning CLIP: " + clip);
     return new Rectangle (clip.x, clip.y, clip.width, clip.height);
   }
 
Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v
retrieving revision 1.8.2.5
diff -u -r1.8.2.5 GtkButtonPeer.java
--- gnu/java/awt/peer/gtk/GtkButtonPeer.java	30 Jul 2004 19:48:31 -0000	1.8.2.5
+++ gnu/java/awt/peer/gtk/GtkButtonPeer.java	2 Sep 2004 21:17:48 -0000
@@ -52,13 +52,13 @@
 {
   native void create (String label);
 
-  public native void connectJObject ();
   public native void connectSignals ();
 
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetSetFont (String name, int style, int size);
   native void gtkSetLabel (String label);
   native void gtkWidgetSetForeground (int red, int green, int blue);
   native void gtkActivate ();
+  native void gtkWidgetRequestFocus ();
 
   public GtkButtonPeer (Button b)
   {
@@ -86,8 +86,8 @@
 	if (!me.isConsumed ()
 	    && (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
 	    && awtComponent.getBounds().contains(p))
-	  postActionEvent (((Button)awtComponent).getActionCommand (), 
-			   me.getModifiersEx ());
+          postActionEvent (((Button) awtComponent).getActionCommand (), 
+                           me.getModifiersEx ());
       }
 
     if (e.getID () == KeyEvent.KEY_PRESSED)
Index: gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,v
retrieving revision 1.4.8.4
diff -u -r1.4.8.4 GtkCheckboxPeer.java
--- gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	30 Jul 2004 09:47:57 -0000	1.4.8.4
+++ gnu/java/awt/peer/gtk/GtkCheckboxPeer.java	2 Sep 2004 21:17:48 -0000
@@ -55,7 +55,7 @@
   public native void create (GtkCheckboxGroupPeer group);
   public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
   public native void connectSignals ();
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetModifyFont (String name, int style, int size);
   native void gtkButtonSetLabel (String label);
   native void gtkToggleButtonSetActive (boolean is_active);
 
Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.16.2.18
diff -u -r1.16.2.18 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java	30 Jul 2004 19:48:31 -0000	1.16.2.18
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java	2 Sep 2004 21:17:48 -0000
@@ -77,6 +77,8 @@
 
   Insets insets;
 
+  boolean isInRepaint;
+
   /* this isEnabled differs from Component.isEnabled, in that it
      knows if a parent is disabled.  In that case Component.isEnabled 
      may return true, but our isEnabled will always return false */
@@ -97,10 +99,7 @@
   native void gtkWidgetRequestFocus ();
   native void gtkWidgetDispatchKeyEvent (int id, long when, int mods,
                                          int keyCode, int keyLocation);
-  native void gtkSetFont (String name, int style, int size);
-  native void gtkWidgetQueueDrawArea(int x, int y, int width, int height);
-  native void addExposeFilter();
-  native void removeExposeFilter();
+  native void gtkWidgetRepaintArea(int x, int y, int width, int height);
 
   void create ()
   {
@@ -134,8 +133,6 @@
 
     setComponentBounds ();
 
-    Rectangle bounds = awtComponent.getBounds ();
-    setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
     setVisibleAndEnabled ();
   }
 
@@ -154,15 +151,27 @@
       gtkWidgetSetParent (p);
   }
 
+  void beginNativeRepaint ()
+  {
+    isInRepaint = true;
+  }
+
+  void endNativeRepaint ()
+  {
+    isInRepaint = false;
+  }
+
   /*
    * Set the bounds of this peer's AWT Component based on dimensions
    * returned by the native windowing system.  Most Components impose
-   * their dimensions on the peers so the default implementation does
-   * nothing.  However some peers, like GtkFileDialogPeer, need to
-   * pass their size back to the AWT Component.
+   * their dimensions on the peers which is what the default
+   * implementation does.  However some peers, like GtkFileDialogPeer,
+   * need to pass their size back to the AWT Component.
    */
   void setComponentBounds ()
   {
+    Rectangle bounds = awtComponent.getBounds ();
+    setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
   }
 
   void setVisibleAndEnabled ()
@@ -265,8 +274,8 @@
               // Some peers like GtkFileDialogPeer are repainted by Gtk itself
               if (g == null)
                 break;
-		
-              g.setClip (((PaintEvent)event).getUpdateRect());
+
+              g.setClip (((PaintEvent) event).getUpdateRect());
 
               if (id == PaintEvent.PAINT)
                 awtComponent.paint (g);
@@ -310,21 +319,6 @@
 
   public void paint (Graphics g)
   {
-    Component parent = awtComponent.getParent();
-    GtkComponentPeer parentPeer = null;
-    if ((parent instanceof Container) && !parent.isLightweight())
-      parentPeer = (GtkComponentPeer) parent.getPeer();
-
-    addExposeFilter();
-    if (parentPeer != null)
-      parentPeer.addExposeFilter();
-
-    Rectangle clip = g.getClipBounds();
-    gtkWidgetQueueDrawArea(clip.x, clip.y, clip.width, clip.height);
-
-    removeExposeFilter();
-    if (parentPeer != null)
-      parentPeer.removeExposeFilter();
   }
 
   public Dimension preferredSize ()
@@ -371,8 +365,11 @@
 
   public void repaint (long tm, int x, int y, int width, int height)
   {
+    beginNativeRepaint ();
+    gtkWidgetRepaintArea (x, y, width, height);
+    endNativeRepaint ();
     q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
-				 new Rectangle (x, y, width, height)));
+                                 new Rectangle (x, y, width, height)));
   }
 
   public void requestFocus ()
@@ -426,8 +423,14 @@
     if (parent instanceof Window && !lightweightChild)
       {
 	Insets insets = ((Window) parent).getInsets ();
-	// Convert from Java coordinates to GTK coordinates.
-	setNativeBounds (x - insets.left, y - insets.top, width, height);
+        GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
+        int menuBarHeight = 0;
+        if (peer instanceof GtkFramePeer)
+          menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
+
+        // Convert from Java coordinates to GTK coordinates.
+        setNativeBounds (x - insets.left, y - insets.top + menuBarHeight,
+                         width, height);
       }
     else
       setNativeBounds (x, y, width, height);
@@ -448,7 +451,7 @@
     // FIXME: This should really affect the widget tree below me.
     // Currently this is only handled if the call is made directly on
     // a text widget, which implements setFont() itself.
-    gtkSetFont(f.getName(), f.getStyle(), f.getSize());
+    gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
   }
 
   public void setForeground (Color c) 
@@ -488,8 +491,9 @@
 
   protected void postExposeEvent (int x, int y, int width, int height)
   {
-    q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
-				 new Rectangle (x, y, width, height)));
+    if (!isInRepaint)
+      q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                   new Rectangle (x, y, width, height)));
   }
 
   protected void postKeyEvent (int id, long when, int mods,
Index: gnu/java/awt/peer/gtk/GtkDialogPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java,v
retrieving revision 1.9.8.2
diff -u -r1.9.8.2 GtkDialogPeer.java
--- gnu/java/awt/peer/gtk/GtkDialogPeer.java	30 Jul 2004 09:47:57 -0000	1.9.8.2
+++ gnu/java/awt/peer/gtk/GtkDialogPeer.java	2 Sep 2004 21:17:48 -0000
@@ -75,11 +75,12 @@
 
   protected void postExposeEvent (int x, int y, int width, int height)
   {
-    q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
-				 new Rectangle (x + insets.left, 
-						y + insets.top, 
-						width, height)));
-  }  
+    if (!isInRepaint)
+      q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                   new Rectangle (x + insets.left, 
+                                                  y + insets.top, 
+                                                  width, height)));
+  }
 
   void create ()
   {
Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,v
retrieving revision 1.6.4.3
diff -u -r1.6.4.3 GtkFileDialogPeer.java
--- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	30 Jul 2004 09:47:57 -0000	1.6.4.3
+++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java	2 Sep 2004 21:17:48 -0000
@@ -94,6 +94,7 @@
                                                       awtComponent.getY (),
                                                       dims[0], dims[1]);
       }
+    super.setComponentBounds ();
   }
 
   public void setFile (String fileName)
Index: gnu/java/awt/peer/gtk/GtkFramePeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java,v
retrieving revision 1.17.2.5
diff -u -r1.17.2.5 GtkFramePeer.java
--- gnu/java/awt/peer/gtk/GtkFramePeer.java	5 Aug 2004 13:59:12 -0000	1.17.2.5
+++ gnu/java/awt/peer/gtk/GtkFramePeer.java	2 Sep 2004 21:17:48 -0000
@@ -39,6 +39,7 @@
 package gnu.java.awt.peer.gtk;
 
 import java.awt.Component;
+import java.awt.Container;
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
@@ -58,46 +59,56 @@
   private MenuBarPeer menuBar;
   native int getMenuBarHeight (MenuBarPeer bar);
 
+  int getMenuBarHeight ()
+  {
+    return menuBar == null ? 0 : getMenuBarHeight (menuBar);
+  }
+
   native void setMenuBarPeer (MenuBarPeer bar);
   native void removeMenuBarPeer ();
-  native void moveLayout (int offset);
-  native void gtkLayoutSetVisible (boolean vis);
+  native void gtkFixedMove (int offset);
+  native void gtkFixedSetVisible (boolean visible);
 
   public void setMenuBar (MenuBar bar)
   {
-    if (bar == null)
-    {    
-      if (menuBar != null)
+    if (bar == null && menuBar != null)
       {
-        gtkLayoutSetVisible(false);
-        removeMenuBarPeer(); 
+        // We're removing the menubar.
+        gtkFixedSetVisible (false);
         menuBar = null;
-        moveLayout(menuBarHeight);
+        removeMenuBarPeer ();
         insets.top -= menuBarHeight;
-        menuBarHeight = 0;      
-        awtComponent.doLayout();
-        gtkLayoutSetVisible(true);
+        menuBarHeight = 0;
+        awtComponent.validate ();
+        gtkFixedSetVisible (true);
       }
-    }
-    else
-    {
-      gtkLayoutSetVisible(false);
-      int oldHeight = 0;
-      if (menuBar != null)
+    else if (bar != null && menuBar == null)
       {
+        // We're adding a menubar where there was no menubar before.
+        gtkFixedSetVisible (false);
+        menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
+        setMenuBarPeer (menuBar);
+        menuBarHeight = getMenuBarHeight ();
+        insets.top += menuBarHeight;
+        awtComponent.validate ();
+        gtkFixedSetVisible (true);
+      }
+    else if (bar != null && menuBar != null)
+      {
+        // We're swapping the menubar.
+        gtkFixedSetVisible (false);
         removeMenuBarPeer();
-        oldHeight = menuBarHeight;
-        insets.top -= menuBarHeight;
+        int oldHeight = menuBarHeight;
+        menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
+        setMenuBarPeer (menuBar);
+        menuBarHeight = getMenuBarHeight ();
+        if (oldHeight != menuBarHeight)
+          {
+            insets.top += (menuBarHeight - oldHeight);
+            awtComponent.validate ();
+          }
+        gtkFixedSetVisible (true);
       }
-      menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
-      setMenuBarPeer(menuBar);
-      menuBarHeight = getMenuBarHeight (menuBar);
-      if (oldHeight != menuBarHeight)
-        moveLayout(oldHeight - menuBarHeight);
-      insets.top += menuBarHeight;
-      awtComponent.doLayout();
-      gtkLayoutSetVisible(true);
-    }
   }
 
   public void setBounds (int x, int y, int width, int height)
@@ -225,10 +236,11 @@
 
   protected void postExposeEvent (int x, int y, int width, int height)
   {
-    q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
-				 new Rectangle (x + insets.left, 
-						y + insets.top, 
-						width, height)));
+    if (!isInRepaint)
+      q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+                                   new Rectangle (x + insets.left, 
+                                                  y + insets.top, 
+                                                  width, height)));
   }
 
   public int getState ()
Index: gnu/java/awt/peer/gtk/GtkGenericPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java,v
retrieving revision 1.2
diff -u -r1.2 GtkGenericPeer.java
--- gnu/java/awt/peer/gtk/GtkGenericPeer.java	13 Jul 2003 15:09:20 -0000	1.2
+++ gnu/java/awt/peer/gtk/GtkGenericPeer.java	2 Sep 2004 21:17:48 -0000
@@ -82,4 +82,6 @@
     // Let's assume this will never wrap.
     return next_native_state++;
   }
+
+  native void gtkWidgetModifyFont (String name, int style, int size);
 }
Index: gnu/java/awt/peer/gtk/GtkImagePainter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java,v
retrieving revision 1.2.18.4
diff -u -r1.2.18.4 GtkImagePainter.java
--- gnu/java/awt/peer/gtk/GtkImagePainter.java	12 Jul 2004 19:17:49 -0000	1.2.18.4
+++ gnu/java/awt/peer/gtk/GtkImagePainter.java	2 Sep 2004 21:17:48 -0000
@@ -75,7 +75,7 @@
     s_width = s_height = 0;
     clip = null;
 
-    new Thread (this).start ();
+    run ();
   }
 
   public
@@ -105,7 +105,7 @@
     s_height = Math.abs (sy2 - sy1);
     clip = new Rectangle (sx1, sy1, s_width, s_height);
 
-    new Thread (this).start ();
+    run ();
   }
 
   public void
Index: gnu/java/awt/peer/gtk/GtkLabelPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java,v
retrieving revision 1.3.10.2
diff -u -r1.3.10.2 GtkLabelPeer.java
--- gnu/java/awt/peer/gtk/GtkLabelPeer.java	18 May 2004 22:06:01 -0000	1.3.10.2
+++ gnu/java/awt/peer/gtk/GtkLabelPeer.java	2 Sep 2004 21:17:48 -0000
@@ -47,7 +47,7 @@
     implements LabelPeer
 {
   native void create (String text, float alignment);
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetModifyFont (String name, int style, int size);
   native void nativeSetAlignment (float alignment);
 
   native public void setText (String text);
Index: gnu/java/awt/peer/gtk/GtkListPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java,v
retrieving revision 1.7.2.4
diff -u -r1.7.2.4 GtkListPeer.java
--- gnu/java/awt/peer/gtk/GtkListPeer.java	30 Jul 2004 19:48:31 -0000	1.7.2.4
+++ gnu/java/awt/peer/gtk/GtkListPeer.java	2 Sep 2004 21:17:48 -0000
@@ -60,7 +60,7 @@
   native void create (int rows);
   native void connectJObject ();
   native void connectSignals ();
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetModifyFont (String name, int style, int size);
   native void gtkWidgetRequestFocus ();
 
   native void getSize (int rows, int visibleRows, int dims[]);
Index: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,v
retrieving revision 1.3
diff -u -r1.3 GtkMenuComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	27 Jan 2004 19:29:56 -0000	1.3
+++ gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java	2 Sep 2004 21:17:48 -0000
@@ -38,6 +38,8 @@
 
 package gnu.java.awt.peer.gtk;
 
+import java.awt.Font;
+import java.awt.MenuComponent;
 import java.awt.peer.MenuComponentPeer;
 
 public class GtkMenuComponentPeer extends GtkGenericPeer
@@ -46,7 +48,16 @@
   public GtkMenuComponentPeer (Object awtWidget)
   {
     super (awtWidget);
+    MenuComponent mc = ((MenuComponent) awtWidget);
+    Font f = mc.getFont ();
+    if (f == null)
+      {
+        mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
+        gtkWidgetModifyFont("Dialog", Font.PLAIN, 12);
+      }
+    else
+      gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
   }
-  
+
   public native void dispose();
 }
Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v
retrieving revision 1.7.8.5
diff -u -r1.7.8.5 GtkTextAreaPeer.java
--- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	24 Jun 2004 05:30:02 -0000	1.7.8.5
+++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java	2 Sep 2004 21:17:48 -0000
@@ -52,7 +52,7 @@
 
   native void create (int width, int height, int scrollbarVisibility);
 
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetModifyFont (String name, int style, int size);
   native void gtkWidgetRequestFocus ();
 
   void create ()
Index: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,v
retrieving revision 1.9.4.5
diff -u -r1.9.4.5 GtkTextFieldPeer.java
--- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	30 Jul 2004 19:48:31 -0000	1.9.4.5
+++ gnu/java/awt/peer/gtk/GtkTextFieldPeer.java	2 Sep 2004 21:17:48 -0000
@@ -84,7 +84,7 @@
 
   native int gtkEntryGetBorderWidth ();
 
-  native void gtkSetFont (String name, int style, int size);
+  native void gtkWidgetModifyFont (String name, int style, int size);
 
   public GtkTextFieldPeer (TextField tf)
   {
Index: java/awt/Component.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v
retrieving revision 1.37.2.20
diff -u -r1.37.2.20 Component.java
--- java/awt/Component.java	24 Aug 2004 22:00:25 -0000	1.37.2.20
+++ java/awt/Component.java	2 Sep 2004 21:17:48 -0000
@@ -293,7 +293,7 @@
    * @see #getLocale()
    * @see #setLocale(Locale)
    */
-  Locale locale;
+  Locale locale = Locale.getDefault ();
 
   /**
    * True if the object should ignore repaint events (usually because it is
Index: java/awt/Container.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Container.java,v
retrieving revision 1.34.2.18
diff -u -r1.34.2.18 Container.java
--- java/awt/Container.java	24 Aug 2004 22:00:25 -0000	1.34.2.18
+++ java/awt/Container.java	2 Sep 2004 21:17:48 -0000
@@ -527,7 +527,7 @@
   /**
    * Recursively invalidates the container tree.
    */
-  private void invalidateTree()
+  void invalidateTree()
   {
     for (int i = 0; i < ncomponents; i++)
       {
@@ -704,6 +704,8 @@
   {
     if (!isShowing())
       return;
+    // Paint self first.
+    super.paint(g);
     // Visit heavyweights as well, in case they were
     // erased when we cleared the background for this container.
     visitChildren(g, GfxPaintVisitor.INSTANCE, false);
Index: java/awt/Frame.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Frame.java,v
retrieving revision 1.20.2.1
diff -u -r1.20.2.1 Frame.java
--- java/awt/Frame.java	10 Jul 2004 05:15:41 -0000	1.20.2.1
+++ java/awt/Frame.java	2 Sep 2004 21:17:48 -0000
@@ -317,6 +317,7 @@
       this.menuBar.removeNotify();  
     if (menuBar != null)
       menuBar.addNotify();
+    invalidateTree ();
     ((FramePeer) peer).setMenuBar(menuBar);
   }
   this.menuBar = menuBar;
Index: java/awt/Panel.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Panel.java,v
retrieving revision 1.8.20.2
diff -u -r1.8.20.2 Panel.java
--- java/awt/Panel.java	10 Jul 2004 05:15:41 -0000	1.8.20.2
+++ java/awt/Panel.java	2 Sep 2004 21:17:48 -0000
@@ -38,7 +38,6 @@
 
 package java.awt;
 
-import java.awt.event.PaintEvent;
 import javax.accessibility.Accessible;
 import javax.accessibility.AccessibleContext;
 import javax.accessibility.AccessibleRole;
@@ -98,36 +97,6 @@
   }
 
   /**
-   * Consume initial application-requested paint event if it has not
-   * already been consumed, and if the initial system-requested paint
-   * event has not already been handled.  Otherwise, call
-   * super.dispatchEventImpl.  These extra steps are required to
-   * prevent a Panel from being painted twice when it is initially
-   * shown.
-   *
-   * @param e the event to dispatch
-   */
-  void dispatchEventImpl (AWTEvent e)
-  {
-    if (e instanceof PaintEvent)
-      {
-        if (e.id == PaintEvent.UPDATE)
-          {
-            if (!initialUpdateConsumed
-                && !initialSystemUpdateDone)
-              {
-                e.consume ();
-                initialUpdateConsumed = true;
-              }
-          }
-        else if (e.id == PaintEvent.PAINT)
-          initialSystemUpdateDone = true;
-      }
-    else
-      super.dispatchEventImpl (e);
-  }
-
-  /**
    * Notifies this object to create its native peer.
    *
    * @see #isDisplayable()
Index: java/awt/Window.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v
retrieving revision 1.32.12.10
diff -u -r1.32.12.10 Window.java
--- java/awt/Window.java	12 Jul 2004 03:26:59 -0000	1.32.12.10
+++ java/awt/Window.java	2 Sep 2004 21:17:48 -0000
@@ -291,7 +291,7 @@
           initialFocusOwner = policy.getInitialComponent (this);
 
         if (initialFocusOwner != null)
-          initialFocusOwner.requestFocusInWindow (false);
+          initialFocusOwner.requestFocusInWindow ();
 
         shown = true;
       }
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,v
retrieving revision 1.5.2.6
diff -u -r1.5.2.6 gnu_java_awt_peer_gtk_GdkGraphics.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c	9 Aug 2004 22:35:23 -0000	1.5.2.6
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c	2 Sep 2004 21:17:49 -0000
@@ -108,19 +108,7 @@
   gdk_threads_enter ();
 
   widget = GTK_WIDGET (ptr);
-
-  if (GTK_IS_WINDOW (widget))
-    {
-      g->drawable = find_gtk_layout (widget)->bin_window;
-    }
-  else if (GTK_IS_LAYOUT (widget))
-    {
-      g->drawable = (GdkDrawable *) GTK_LAYOUT (widget)->bin_window;
-    }
-  else
-    {
-      g->drawable = (GdkDrawable *) widget->window;
-    }
+  g->drawable = (GdkDrawable *) widget->window;
 
   gdk_window_ref (g->drawable);
   g->cm = gtk_widget_get_colormap (widget);
@@ -432,8 +420,8 @@
   gdk_threads_enter ();
   if (GDK_IS_WINDOW (g->drawable))
     {
-      gdk_window_clear_area ((GdkWindow *)g->drawable, 
-			     x + g->x_offset, y + g->y_offset, width, height);
+      gdk_window_clear_area ((GdkWindow *) g->drawable,
+                             x + g->x_offset, y + g->y_offset, width, height);
     }
   else
     {
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,v
retrieving revision 1.5.8.6
diff -u -r1.5.8.6 gnu_java_awt_peer_gtk_GdkGraphics2D.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	14 Aug 2004 21:46:53 -0000	1.5.8.6
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	2 Sep 2004 21:17:49 -0000
@@ -159,18 +159,7 @@
   g_assert (draw != NULL);
   g_assert (win != NULL);
 
-  if (GTK_IS_WINDOW (widget))
-    {
-      *win = find_gtk_layout (widget)->bin_window;
-    }
-  else if (GTK_IS_LAYOUT (widget))
-    {
-      *win = GTK_LAYOUT (widget)->bin_window;
-    }
-  else
-    {
-      *win = widget->window;
-    }
+  *win = widget->window;
 
   *draw = *win;
   gdk_window_get_internal_paint_info (*win, draw, 0, 0); 
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,v
retrieving revision 1.8.2.4
diff -u -r1.8.2.4 gnu_java_awt_peer_gtk_GtkButtonPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c	30 Jul 2004 09:47:57 -0000	1.8.2.4
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c	2 Sep 2004 21:17:49 -0000
@@ -37,14 +37,21 @@
 
 
 #include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
 #include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
 
+static gboolean focus_in_cb (GtkWidget *widget,
+                             GdkEventFocus *event,
+                             jobject peer);
+static gboolean focus_out_cb (GtkWidget *widget,
+                              GdkEventFocus *event,
+                              jobject peer);
+
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
   (JNIEnv *env, jobject obj, jstring label)
 {
   const char *c_label;
+  GtkWidget *eventbox;
   GtkWidget *button;
 
   NSA_SET_GLOBAL_REF (env, obj);
@@ -53,41 +60,46 @@
 
   gdk_threads_enter ();
 
+  eventbox = gtk_event_box_new ();
   button = gtk_button_new_with_label (c_label);
+  gtk_container_add (GTK_CONTAINER (eventbox), button);
   gtk_widget_show (button);
 
   gdk_threads_leave ();
 
   (*env)->ReleaseStringUTFChars (env, label, c_label);
-  NSA_SET_PTR (env, obj, button);
+  NSA_SET_PTR (env, obj, eventbox);
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectJObject
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
   (JNIEnv *env, jobject obj)
 {
   void *ptr;
+  jobject *gref;
+  GtkWidget *button;
 
   ptr = NSA_GET_PTR (env, obj);
+  gref = NSA_GET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
 
   gtk_widget_realize (GTK_WIDGET (ptr));
+  button = gtk_bin_get_child (GTK_BIN (ptr));
 
-  connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
+  g_signal_connect (G_OBJECT (ptr), "event",
+                    G_CALLBACK (pre_event_handler), *gref);
 
-  gdk_threads_leave ();
-}
+  g_signal_connect (G_OBJECT (button), "event",
+                    G_CALLBACK (pre_event_handler), *gref);
 
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
-  (JNIEnv *env, jobject obj)
-{
-  /* FIXME: Do we need to connect any signals here? Otherwise just do not
-     override parent method. */
+  g_signal_connect (G_OBJECT (button), "focus-in-event",
+                    G_CALLBACK (focus_in_cb), *gref);
+
+  g_signal_connect (G_OBJECT (button), "focus-out-event",
+                    G_CALLBACK (focus_out_cb), *gref);
 
-  /* Connect the superclass signals.  */
-  Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
+  gdk_threads_leave ();
 }
 
 JNIEXPORT void JNICALL 
@@ -113,7 +125,7 @@
 }
 
 JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
@@ -186,3 +198,42 @@
 
   gdk_threads_leave ();
 }
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  GtkWidget *button;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gdk_threads_enter ();
+  button = gtk_bin_get_child (GTK_BIN (ptr));
+  gtk_widget_grab_focus (button);
+  gdk_threads_leave ();
+}
+
+static gboolean
+focus_in_cb (GtkWidget *widget __attribute((unused)),
+             GdkEventFocus *event __attribute((unused)),
+             jobject peer)
+{
+  (*gdk_env)->CallVoidMethod (gdk_env, peer,
+                              postFocusEventID,
+                              AWT_FOCUS_GAINED,
+                              JNI_FALSE);
+  return FALSE;
+}
+
+static gboolean
+focus_out_cb (GtkWidget *widget __attribute((unused)),
+              GdkEventFocus *event __attribute((unused)),
+              jobject peer)
+{
+  (*gdk_env)->CallVoidMethod (gdk_env, peer,
+                              postFocusEventID,
+                              AWT_FOCUS_LOST,
+                              JNI_FALSE);
+  return FALSE;
+}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,v
retrieving revision 1.4.8.5
diff -u -r1.4.8.5 gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c	30 Jul 2004 09:47:58 -0000	1.4.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c	2 Sep 2004 21:17:49 -0000
@@ -144,7 +144,7 @@
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.15.2.22
diff -u -r1.15.2.22 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	31 Jul 2004 21:31:32 -0000	1.15.2.22
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	2 Sep 2004 21:17:49 -0000
@@ -49,6 +49,7 @@
 static gboolean focus_out_cb (GtkWidget *widget,
                               GdkEventFocus *event,
                               jobject peer);
+
 /*
  * This method returns a GDK keyval that corresponds to one of the
  * keysyms in the X keymap table.  The return value is only used to
@@ -492,12 +493,12 @@
   if (GTK_IS_WINDOW (parent_widget))
     {
       GList *children = gtk_container_children 
-        (GTK_CONTAINER (GTK_BIN (parent_widget)->child));
+        (GTK_CONTAINER (parent_widget));
 
       if (GTK_IS_MENU_BAR (children->data))
-	gtk_layout_put (GTK_LAYOUT (children->next->data), widget, 0, 0);
+	gtk_fixed_put (GTK_FIXED (children->next->data), widget, 0, 0);
       else
-	gtk_layout_put (GTK_LAYOUT (children->data), widget, 0, 0);
+	gtk_fixed_put (GTK_FIXED (children->data), widget, 0, 0);
     }
   else
     if (GTK_IS_SCROLLED_WINDOW (parent_widget))
@@ -509,7 +510,7 @@
 
       }
     else
-      gtk_layout_put (GTK_LAYOUT (parent_widget), widget, 0, 0);
+      gtk_fixed_put (GTK_FIXED (parent_widget), widget, 0, 0);
 
   gdk_threads_leave ();
 }
@@ -792,7 +793,7 @@
   else
     {
       gtk_widget_set_size_request (widget, width, height);
-      gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y);
+      gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
     }
 
   gdk_threads_leave ();
@@ -908,38 +909,6 @@
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont
-  (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
-{
-  const char *font_name;
-  void *ptr;
-  PangoFontDescription *font_desc;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  font_name = (*env)->GetStringUTFChars (env, name, NULL);
-
-  gdk_threads_enter();
-
-  font_desc = pango_font_description_from_string (font_name);
-  pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
-
-  if (style & AWT_STYLE_BOLD)
-    pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
-
-  if (style & AWT_STYLE_ITALIC)
-    pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
-
-  gtk_widget_modify_font (GTK_WIDGET(ptr), font_desc);
-
-  pango_font_description_free (font_desc);
-
-  gdk_threads_leave();
-
-  (*env)->ReleaseStringUTFChars (env, name, font_name);
-}
-
-JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
   (JNIEnv *env, jobject obj)
 {
@@ -965,23 +934,6 @@
   gdk_threads_leave();
 }
 
-GtkLayout *
-find_gtk_layout (GtkWidget *parent)
-{
-  if (GTK_IS_WINDOW (parent))
-    {
-      GList *children = gtk_container_children 
-	                  (GTK_CONTAINER (GTK_BIN (parent)->child));
-
-      if (GTK_IS_MENU_BAR (children->data))
-	return GTK_LAYOUT (children->next->data);
-      else /* GTK_IS_LAYOUT (children->data) */
-	return GTK_LAYOUT (children->data);
-    }
-
-  return NULL;
-}
-
 JNIEXPORT jboolean JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled 
   (JNIEnv *env, jobject obj)
@@ -1013,141 +965,7 @@
   return retval;
 }
 
-static gboolean
-filter_expose_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
-{
-  /*
-   * Prevent the default event handler from getting this signal if applicable
-   * FIXME: I came up with these filters by looking for patterns in the unwanted
-   *        expose events that are fed back to us from gtk/X. Perhaps there is
-   *        a way to prevent them from occuring in the first place.
-   */
-  if (event->type == GDK_EXPOSE && (!GTK_IS_LAYOUT(widget)
-                                    || event->any.window != widget->window))
-    {
-      g_signal_stop_emission_by_name(GTK_OBJECT(widget), "event");
-      return FALSE;
-    }
-  else
-    {
-      /* There may be non-expose events that are triggered while we're
-        painting a heavyweight peer. */
-      return pre_event_handler(widget, event, peer);
-    }
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter
-  (JNIEnv *env, jobject obj)
-{
-  GtkObject *filterobj;
-  GtkWidget *vbox, *layout;
-  GList *children;
-  void *ptr = NSA_GET_PTR (env, obj);
-  jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-  gulong hid;
-
-  g_assert (gref);
-
-  gdk_threads_enter ();
-
-  /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow.
-     Events go to the GtkLayout layer, so we filter them there. */
-  if (GTK_IS_WINDOW(ptr))
-    {
-      children = gtk_container_get_children(GTK_CONTAINER(ptr));
-      vbox = children->data;
-      g_assert (GTK_IS_VBOX(vbox));
-
-      children = gtk_container_get_children(GTK_CONTAINER(vbox));
-      do
-      {
-        layout = children->data;
-        children = children->next;
-      }
-      while (!GTK_IS_LAYOUT (layout) && children != NULL);
-      g_assert (GTK_IS_LAYOUT(layout));
-
-      filterobj = GTK_OBJECT(layout);
-    }
-  else if (GTK_IS_SCROLLED_WINDOW(ptr))
-    {
-      /* The event will go to the parent GtkLayout. */
-      filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
-    }
-  else
-    {
-      filterobj = GTK_OBJECT(ptr);
-    }
-  hid = g_signal_handler_find(filterobj,
-                              G_SIGNAL_MATCH_FUNC,
-                              0, 0, NULL, *pre_event_handler, NULL);
-  if (hid > 0)
-  {
-    g_signal_handler_block(filterobj, hid);
-  }
-  g_signal_connect( filterobj, "event",
-                    G_CALLBACK(filter_expose_event_handler), *gref);
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter
-  (JNIEnv *env, jobject obj)
-{
-  GtkObject *filterobj;
-  GtkWidget *vbox, *layout;
-  GList *children;
-  void *ptr = NSA_GET_PTR (env, obj);
-  jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-  gulong hid;
-
-  g_assert (gref);
-
-  gdk_threads_enter ();
-
-  /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow.
-     Events go to the GtkLayout layer, so we filter them there. */
-  if (GTK_IS_WINDOW(ptr))
-    {
-      children = gtk_container_get_children(GTK_CONTAINER(ptr));
-      vbox = children->data;
-      g_assert (GTK_IS_VBOX(vbox));
-
-      children = gtk_container_get_children(GTK_CONTAINER(vbox));
-      do
-      {
-        layout = children->data;
-        children = children->next;
-      }
-      while (!GTK_IS_LAYOUT (layout) && children != NULL);
-      g_assert (GTK_IS_LAYOUT(layout));
-
-      filterobj = GTK_OBJECT(layout);
-    }
-  else if (GTK_IS_SCROLLED_WINDOW(ptr))
-    {
-      /* The event will go to the parent GtkLayout. */
-      filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
-    }
-  else
-    {
-      filterobj = GTK_OBJECT(ptr);
-    }
-
-  g_signal_handlers_disconnect_by_func (filterobj,
-                                        *filter_expose_event_handler, *gref);
-  hid = g_signal_handler_find(filterobj,
-                              G_SIGNAL_MATCH_FUNC,
-                              0, 0, NULL, *pre_event_handler, NULL);
-  if (hid > 0)
-  {
-    g_signal_handler_unblock(filterobj, hid);
-  }
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRepaintArea
   (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
 {
   GdkRectangle rect;
@@ -1155,15 +973,15 @@
 
   ptr = NSA_GET_PTR (env, obj);
 
-  rect.x = x + GTK_WIDGET(ptr)->allocation.x;
-  rect.y = y + GTK_WIDGET(ptr)->allocation.y;
+  gdk_threads_enter ();
+
+  rect.x = x;
+  rect.y = y;
   rect.width = width;
   rect.height = height;
 
-  gdk_threads_enter ();
-
   gdk_window_invalidate_rect (GTK_WIDGET (ptr)->window, &rect, 0);
-  gdk_window_process_all_updates();
+  gdk_window_process_updates (GTK_WIDGET (ptr)->window, TRUE);
 
   gdk_threads_leave ();
 }
@@ -1187,23 +1005,19 @@
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
   (JNIEnv *env, jobject obj)
 {
-  void *ptr = NSA_GET_PTR (env, obj);
-  jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-  g_assert (gref);
+  void *ptr;
+  jobject *gref;
+
+  ptr = NSA_GET_PTR (env, obj);
+  gref = NSA_GET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
 
   gtk_widget_realize (GTK_WIDGET (ptr));
-  
-  /* FIXME: We could check here if this is a scrolled window with a
-     single child that does not have an associated jobject.  This
-     means that it is one of our wrapped widgets like List or TextArea
-     and thus we could connect the signal to the child without having
-     to specialize this method. */
 
   /* Connect EVENT signal, which happens _before_ any specific signal. */
 
-  g_signal_connect (GTK_OBJECT (ptr), "event", 
+  g_signal_connect (GTK_OBJECT (ptr), "event",
                     G_CALLBACK (pre_event_handler), *gref);
 
   g_signal_connect (G_OBJECT (ptr), "focus-in-event",
@@ -1235,19 +1049,7 @@
 {
   GtkWidget *bg_color_widget;
 
-  if (GTK_IS_WINDOW (widget))
-    {
-      GtkWidget *vbox;
-      GList* children;
-
-      children = gtk_container_get_children(GTK_CONTAINER(widget));
-      vbox = children->data;
-
-      children = gtk_container_get_children(GTK_CONTAINER(vbox));
-      bg_color_widget = children->data;
-    }
-  else
-    bg_color_widget = widget;
+  bg_color_widget = widget;
 
   return bg_color_widget;
 }
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c,v
retrieving revision 1.5
diff -u -r1.5 gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c	5 Jan 2004 21:41:21 -0000	1.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c	2 Sep 2004 21:17:49 -0000
@@ -45,22 +45,18 @@
   (JNIEnv *env, jobject obj, jlong socket_id)
 {
   GtkWidget *window;
-  GtkWidget *vbox, *layout;
+  GtkWidget *fixed;
 
-  /* Create global reference and save it for future use */
   NSA_SET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
 
   window = gtk_plug_new ((GdkNativeWindow) socket_id);
 
-  vbox = gtk_vbox_new (0, 0);
-  layout = gtk_layout_new (NULL, NULL);
-  gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
-  gtk_container_add (GTK_CONTAINER (window), vbox);
+  fixed = gtk_fixed_new ();
+  gtk_container_add (GTK_CONTAINER (window), fixed);
 
-  gtk_widget_show (layout);
-  gtk_widget_show (vbox);
+  gtk_widget_show (fixed);
 
   gdk_threads_leave ();
 
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,v
retrieving revision 1.19.2.10
diff -u -r1.19.2.10 gnu_java_awt_peer_gtk_GtkEvents.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c	30 Jul 2004 19:48:35 -0000	1.19.2.10
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c	2 Sep 2004 21:17:49 -0000
@@ -1010,23 +1010,12 @@
       }
       break;
     case GDK_EXPOSE:
-      {
-        /* This filters out unwanted feedback expose events from gtk/X
-           when we explictly invalidate and update heavyweight components,
-           thus avoiding an infinite loop.
-           FIXME: I'm not quite sure why we're getting these expose events. 
-                  Maybe there is a way to avoid them? */
-        if((event->any.window == widget->window && event->any.send_event)
-           || GTK_IS_LAYOUT(widget))
-          {
-	    (*gdk_env)->CallVoidMethod (gdk_env, peer,
-				        postExposeEventID,
-				        (jint)event->expose.area.x,
-				        (jint)event->expose.area.y,
-				        (jint)event->expose.area.width,
-				        (jint)event->expose.area.height);
-          }
-      }
+      (*gdk_env)->CallVoidMethod (gdk_env, peer,
+                                  postExposeEventID,
+                                  (jint)event->expose.area.x,
+                                  (jint)event->expose.area.y,
+                                  (jint)event->expose.area.width,
+                                  (jint)event->expose.area.height);
       break;
 
     case GDK_FOCUS_CHANGE:
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,v
retrieving revision 1.1.16.1
diff -u -r1.1.16.1 gnu_java_awt_peer_gtk_GtkGenericPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c	24 Jun 2004 05:31:41 -0000	1.1.16.1
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c	2 Sep 2004 21:17:49 -0000
@@ -57,3 +57,34 @@
   gdk_threads_leave ();
 }
 
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont
+  (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
+{
+  const char *font_name;
+  void *ptr;
+  PangoFontDescription *font_desc;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  font_name = (*env)->GetStringUTFChars (env, name, NULL);
+
+  gdk_threads_enter();
+
+  font_desc = pango_font_description_from_string (font_name);
+  pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+
+  if (style & AWT_STYLE_BOLD)
+    pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
+
+  if (style & AWT_STYLE_ITALIC)
+    pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
+
+  gtk_widget_modify_font (GTK_WIDGET(ptr), font_desc);
+
+  pango_font_description_free (font_desc);
+
+  gdk_threads_leave();
+
+  (*env)->ReleaseStringUTFChars (env, name, font_name);
+}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,v
retrieving revision 1.6.8.2
diff -u -r1.6.8.2 gnu_java_awt_peer_gtk_GtkLabelPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c	27 May 2004 18:40:20 -0000	1.6.8.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c	2 Sep 2004 21:17:49 -0000
@@ -44,33 +44,30 @@
   (JNIEnv *env, jobject obj, jstring text, jfloat xalign)
 {
   GtkWidget *label;
-  GtkWidget *ebox;
-  GtkContainer *ebox_container;
+  GtkWidget *eventbox;
   const char *str;
 
-  /* Create global reference and save it for future use */
   NSA_SET_GLOBAL_REF (env, obj);
 
   str = (*env)->GetStringUTFChars (env, text, 0);
 
   gdk_threads_enter ();
 
-  ebox = gtk_event_box_new ();
-  ebox_container = GTK_CONTAINER (ebox);
+  eventbox = gtk_event_box_new ();
   label = gtk_label_new (str);
   gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
-  gtk_container_add (ebox_container, label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
   gtk_widget_show (label);
 
   gdk_threads_leave ();
 
   (*env)->ReleaseStringUTFChars (env, text, str);
 
-  NSA_SET_PTR (env, obj, ebox);
+  NSA_SET_PTR (env, obj, eventbox);
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
@@ -121,7 +118,7 @@
 
   gdk_threads_enter ();
 
-  label = gtk_bin_get_child (GTK_BIN(ptr));
+  label = gtk_bin_get_child (GTK_BIN (ptr));
 
   gtk_label_set_label (GTK_LABEL (label), str);
 
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,v
retrieving revision 1.7.8.5
diff -u -r1.7.8.5 gnu_java_awt_peer_gtk_GtkListPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c	27 May 2004 23:37:27 -0000	1.7.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c	2 Sep 2004 21:17:49 -0000
@@ -163,7 +163,7 @@
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c,v
retrieving revision 1.4.8.2
diff -u -r1.4.8.2 gnu_java_awt_peer_gtk_GtkPanelPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c	12 Jul 2004 05:38:32 -0000	1.4.8.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c	2 Sep 2004 21:17:49 -0000
@@ -44,14 +44,15 @@
 Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create
   (JNIEnv *env, jobject obj)
 {
-  gpointer widget;
+  GtkWidget *widget;
 
-  /* Create global reference and save it for future use */
   NSA_SET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
   
-  widget = gtk_layout_new (NULL, NULL);
+  widget = gtk_fixed_new ();
+
+  gtk_fixed_set_has_window (GTK_FIXED (widget), TRUE);
 
   GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
 
@@ -70,7 +71,7 @@
 
   gdk_threads_enter ();
   gtk_widget_realize (GTK_WIDGET (ptr));
-  connect_awt_hook (env, obj, 1, GTK_LAYOUT (ptr)->bin_window);
+  connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
 
   gdk_threads_leave ();
 }
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,v
retrieving revision 1.11.8.5
diff -u -r1.11.8.5 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	24 Jun 2004 05:31:41 -0000	1.11.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c	2 Sep 2004 21:17:49 -0000
@@ -141,7 +141,7 @@
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,v
retrieving revision 1.10.4.2
diff -u -r1.10.4.2 gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c	26 Jul 2004 05:52:03 -0000	1.10.4.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c	2 Sep 2004 21:17:49 -0000
@@ -175,7 +175,7 @@
 }
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont
   (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
 {
   const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,v
retrieving revision 1.24.2.14
diff -u -r1.24.2.14 gnu_java_awt_peer_gtk_GtkWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	8 Aug 2004 22:08:49 -0000	1.24.2.14
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	2 Sep 2004 21:17:49 -0000
@@ -37,9 +37,7 @@
 
 
 #include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
 #include "gnu_java_awt_peer_gtk_GtkWindowPeer.h"
-#include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
 #include <gdk/gdkprivate.h>
 #include <gdk/gdkx.h>
 #include <X11/Xatom.h>
@@ -58,8 +56,6 @@
                                        XEvent  *xevent,
                                        XPointer arg);
 
-static GtkLayout *find_layout (GtkWindow *window);
-
 static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
 			      jobject peer);
 static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,
@@ -93,8 +89,7 @@
   GtkWidget *window_widget;
   GtkWindow *window;
   void *window_parent;
-  GtkWidget *vbox;
-  GtkWidget *layout;
+  GtkWidget *fixed;
   int top = 0;
   int left = 0;
   int bottom = 0;
@@ -124,13 +119,10 @@
 
   gtk_window_group_add_window (global_gtk_window_group, window);
 
-  vbox = gtk_vbox_new (0, 0);
-  layout = gtk_layout_new (NULL, NULL);
-  gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
-  gtk_container_add (GTK_CONTAINER (window_widget), vbox);
+  fixed = gtk_fixed_new ();
+  gtk_container_add (GTK_CONTAINER (window_widget), fixed);
 
-  gtk_widget_show (layout);
-  gtk_widget_show (vbox);
+  gtk_widget_show (fixed);
   gtk_widget_realize (window_widget);
 
   if (decorated)
@@ -236,19 +228,12 @@
   (JNIEnv *env, jobject obj)
 {
   void *ptr;
-  GtkLayout *layout;
 
   ptr = NSA_GET_PTR (env, obj);
 
   gdk_threads_enter ();
 
-  layout = find_layout (GTK_WINDOW (ptr));
-
-  gtk_widget_realize (GTK_WIDGET (layout));
-
-  connect_awt_hook (env, obj, 1, layout->bin_window);
-
-  gtk_widget_realize (ptr);
+  gtk_widget_realize (GTK_WIDGET (ptr));
 
   connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
 
@@ -261,23 +246,17 @@
 {
   void *ptr;
   jobject *gref;
-  GtkLayout *layout;
 
   ptr = NSA_GET_PTR (env, obj);
-
   gref = NSA_GET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
 
-  gtk_widget_realize (ptr);
-
-  /* Receive events from the GtkLayout too */
-  layout = find_layout (GTK_WINDOW (ptr));
+  gtk_widget_realize (GTK_WIDGET (ptr));
 
-  g_signal_connect (G_OBJECT (layout), "event",
+  g_signal_connect (G_OBJECT (ptr), "event",
                     G_CALLBACK (pre_event_handler), *gref);
 
-  /* Connect signals for window event support. */
   g_signal_connect (G_OBJECT (ptr), "delete-event",
 		    G_CALLBACK (window_delete_cb), *gref);
 
@@ -306,15 +285,8 @@
 		    G_CALLBACK (window_property_changed_cb), *gref);
 
   gdk_threads_leave ();
-
-  /* Connect the superclass signals.  */
-  Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
 }
 
-/*
- * Lower the z-level of a window. 
- */
-
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, 
     jobject obj)
@@ -323,16 +295,13 @@
   ptr = NSA_GET_PTR (env, obj);
     
   gdk_threads_enter ();
+
   gdk_window_lower (GTK_WIDGET (ptr)->window);
+  gdk_flush ();
 
-  XFlush (GDK_DISPLAY ());
   gdk_threads_leave ();
 }
 
-/*
- * Raise the z-level of a window.
- */
-
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, 
     jobject obj)
@@ -341,9 +310,10 @@
   ptr = NSA_GET_PTR (env, obj);
     
   gdk_threads_enter ();
+
   gdk_window_raise (GTK_WIDGET (ptr)->window);
+  gdk_flush ();
 
-  XFlush (GDK_DISPLAY ());
   gdk_threads_leave ();
 }
 
@@ -369,7 +339,9 @@
   height = (height < 1) ? 1 : height;
 
   gdk_threads_enter ();
+
   gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
+
   gdk_threads_leave ();
 }
 
@@ -408,199 +380,6 @@
   gdk_threads_leave ();
 }
 
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer
-  (JNIEnv *env, jobject obj)
-{
-  void *wptr;
-  GtkWidget *box;
-  GtkWidget *mptr;
-  GList* children;
-
-  wptr = NSA_GET_PTR (env, obj);
-  
-  gdk_threads_enter ();
-
-  box = GTK_BIN (wptr)->child;
-  
-  children = gtk_container_get_children (GTK_CONTAINER (box));
-  
-  while (children != NULL && !GTK_IS_MENU_SHELL (children->data)) 
-  {
-    children = children->next;
-  }
-  
-  /* If there isn't a MenuBar in this Frame's list of children
-     then we can just return. */
-  if (!GTK_IS_MENU_SHELL (children->data))
-    return;
-  else
-    mptr = children->data;
-    
-  /* This will actually destroy the MenuBar. By removing it from
-     its parent, the reference count for the MenuBar widget will
-     decrement to 0. The widget will be automatically destroyed 
-     by Gtk. */
-  gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (mptr));  
-  
-  gdk_threads_leave();
-}  
-  
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
-  (JNIEnv *env, jobject obj, jobject menubar)
-{
-  void *wptr;
-  GtkWidget *mptr;
-  GtkWidget *box;
-
-  wptr = NSA_GET_PTR (env, obj);
-  mptr = NSA_GET_PTR (env, menubar);
-  
-  gdk_threads_enter ();
-
-  box = GTK_BIN (wptr)->child;		    
-  gtk_box_pack_start (GTK_BOX (box), mptr, 0, 0, 0);
- 
-  gtk_widget_show (mptr);
-
- 
-  gdk_threads_leave ();
-}
-
-JNIEXPORT jint JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
-  (JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar)
-{
-  GtkWidget *ptr;
-  jint height;
-  GtkRequisition gtkreq;
-  
-  ptr = NSA_GET_PTR (env, menubar);
-
-  gdk_threads_enter ();
-  gtk_widget_size_request (ptr, &gtkreq);
-
-  height = gtkreq.height;
-  gdk_threads_leave ();
-  return height;
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_moveLayout
-  (JNIEnv *env, jobject obj, jint offset)
-{
-  void* ptr;
-  GList* children;
-  GtkLayout* layout;
-  GtkWidget* widget;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  layout = find_layout (GTK_WINDOW (ptr));
-
-  children = gtk_container_get_children (GTK_CONTAINER (layout));
-  
-  while (children != NULL)
-  {
-    widget = children->data;
-    gtk_layout_move (layout, widget, widget->allocation.x,
-                     widget->allocation.y+offset);
-    children = children->next;
-  }
-  
-  gdk_threads_leave ();
-}
-  
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
-  (JNIEnv *env, jobject obj, jboolean visible)
-{
-  void *ptr;
-  GtkLayout *layout;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  layout = find_layout (GTK_WINDOW (ptr));
-
-  if (visible)
-    gtk_widget_show (GTK_WIDGET (layout));
-  else
-    gtk_widget_hide (GTK_WIDGET (layout));
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromDecoder
-  (JNIEnv *env, jobject obj, jobject decoder)
-{
-  void *ptr;
-  GdkPixbufLoader *loader = NULL;
-  GdkPixbuf *pixbuf = NULL;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  loader = NSA_GET_PB_PTR (env, decoder);
-  g_assert (loader != NULL);
-
-  gdk_threads_enter ();
-
-  pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
-  g_assert (pixbuf != NULL);
-
-  gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
-
-  gdk_threads_leave ();
-}
-
-void free_pixbuf_data (guchar *pixels, gpointer data __attribute__((unused)))
-{
-  free(pixels);
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData
-  (JNIEnv *env, jobject obj, jintArray pixelArray, jint width, jint height)
-{
-  void *ptr;
-  GdkPixbuf *pixbuf;
-  jint *pixels;
-  int pixels_length, i;
-  guchar *data;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  pixels = (*env)->GetIntArrayElements (env, pixelArray, 0);
-  pixels_length = (*env)->GetArrayLength (env, pixelArray);
-
-  data = malloc (sizeof (guchar) * pixels_length);
-  for (i = 0; i < pixels_length; i++)
-    data[i] = (guchar) pixels[i];
-
-  gdk_threads_enter ();
-
-  pixbuf = gdk_pixbuf_new_from_data (data,
-                                     GDK_COLORSPACE_RGB,
-                                     TRUE,
-                                     8,
-                                     width,
-                                     height,
-                                     width*4,
-                                     free_pixbuf_data,
-                                     NULL);
-
-  gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
-
-  gdk_threads_leave ();
-
-  (*env)->ReleaseIntArrayElements(env, pixelArray, pixels, 0);
-}
-
 static void
 window_get_frame_extents (GtkWidget *window,
                           int *top, int *left, int *bottom, int *right)
@@ -785,6 +564,8 @@
                               postWindowEventID,
                               (jint) AWT_WINDOW_GAINED_FOCUS,
                               (jobject) NULL, (jint) 0);
+  /* FIXME: somewhere after this is handled, the child window is
+     getting an expose event. */
   return FALSE;
 }
 
@@ -797,6 +578,8 @@
                               postWindowEventID,
                               (jint) AWT_WINDOW_LOST_FOCUS,
                               (jobject) NULL, (jint) 0);
+  /* FIXME: somewhere after this is handled, the child window is
+     getting an expose event. */
   return FALSE;
 }
 
@@ -924,26 +707,3 @@
 
   return FALSE;
 }
-
-static GtkLayout *
-find_layout (GtkWindow *window)
-{
-  GList* children;
-  GtkBox* vbox;
-  GtkLayout* layout;
-
-  children = gtk_container_get_children (GTK_CONTAINER (window));
-  vbox = children->data;
-  g_assert (GTK_IS_VBOX (vbox));
-
-  children = gtk_container_get_children (GTK_CONTAINER (vbox));
-  do
-  {
-    layout = children->data;
-    children = children->next;
-  }
-  while (!GTK_IS_LAYOUT (layout) && children != NULL);
-  g_assert (GTK_IS_LAYOUT (layout));
-
-  return layout;
-}
Index: jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.12.8.6
diff -u -r1.12.8.6 gtkpeer.h
--- jni/gtk-peer/gtkpeer.h	8 Aug 2004 22:08:49 -0000	1.12.8.6
+++ jni/gtk-peer/gtkpeer.h	2 Sep 2004 21:17:49 -0000
@@ -463,7 +463,6 @@
 
 void set_visible (GtkWidget *widget, jboolean visible);
 void set_parent (GtkWidget *widget, GtkContainer *parent);
-GtkLayout *find_gtk_layout (GtkWidget *parent);
 
 jint keyevent_state_to_awt_mods (GdkEvent *event);
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]