Hi,
I committed this patch to trunk and classpath-0_93-branch. It fixes
some ScrollPane issues:
1) doLayout should not be called by addImpl
2) a Panel parent should only be added to lightweight children of the
ScrollPane
3) GTK assertion failures for Button and Label children of ScrollPane
This fixes the problem in MegaMek that my getFont patch worked around.
Tom
2006-12-06 Thomas Fitzsimmons <[EMAIL PROTECTED]>
* java/awt/ScrollPane.java (addNotify): Add a parent panel for any
lightweight component, not just for non-Panel components.
(addImpl): Do not call doLayout.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
(setNativeBounds): Ensure widget parent is a GtkFixed before
calling gtk_fixed_move.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
(setNativeBounds): Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(setNativeBounds): Likewise.
Index: java/awt/ScrollPane.java
===================================================================
RCS file: /sources/classpath/classpath/java/awt/ScrollPane.java,v
retrieving revision 1.29
diff -u -r1.29 ScrollPane.java
--- java/awt/ScrollPane.java 13 Oct 2006 17:47:47 -0000 1.29
+++ java/awt/ScrollPane.java 6 Dec 2006 18:35:32 -0000
@@ -414,7 +414,7 @@
super.addNotify();
Component[] list = getComponents();
- if (list != null && list.length > 0 && ! (list[0] instanceof Panel))
+ if (list != null && list.length > 0 && list[0].isLightweight())
{
Panel panel = new Panel();
panel.setLayout(new BorderLayout());
@@ -454,8 +454,6 @@
remove(list[0]);
super.addImpl(component, constraints, index);
-
- doLayout();
}
/*************************************************************************/
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,v
retrieving revision 1.30
diff -u -r1.30 gnu_java_awt_peer_gtk_GtkButtonPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 25 Aug 2005 02:26:49 -0000 1.30
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 6 Dec 2006 18:35:37 -0000
@@ -353,7 +353,7 @@
/* ...and the label's size request. */
gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (child)), width,
height);
- if (widget->parent != NULL)
+ if (widget->parent != NULL && GTK_IS_FIXED (widget->parent))
gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.65
diff -u -r1.65 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 25 Jul 2006 22:41:46 -0000 1.65
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 6 Dec 2006 18:35:37 -0000
@@ -659,16 +659,16 @@
width = width < 0 ? 0 : width;
height = height < 0 ? 0 : height;
- if (GTK_IS_VIEWPORT (widget->parent))
- gtk_widget_set_size_request (widget, width, height);
- else
+ if (!(width == 0 && height == 0))
{
- if (!(width == 0 && height == 0))
- {
- gtk_widget_set_size_request (widget, width, height);
- if (widget->parent != NULL)
- gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
- }
+ gtk_widget_set_size_request (widget, width, height);
+ /* The GTK_IS_FIXED check here prevents gtk_fixed_move being
+ called when our parent is a GtkScrolledWindow. In that
+ case though, moving the child widget is invalid since a
+ ScrollPane only has one child and that child is always
+ located at (0, 0) in viewport coordinates. */
+ if (widget->parent != NULL && GTK_IS_FIXED (widget->parent))
+ gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
}
gdk_threads_leave ();
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,v
retrieving revision 1.18
diff -u -r1.18 gnu_java_awt_peer_gtk_GtkLabelPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 20 Jun 2006 20:36:14 -0000 1.18
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 6 Dec 2006 18:35:38 -0000
@@ -213,7 +213,7 @@
gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (widget)),
width, height);
- if (widget->parent != NULL)
+ if (widget->parent != NULL && GTK_IS_FIXED (widget->parent))
gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
}