> Can you run the gnu.testlet.java.awt tests from Mauve as well as the > Window/Frame/Dialog related vte tests? I think we found that we needed > to set the width and height, as well as the location (i.e. we needed to > call setBounds) before showing the window.
These tests still pass. I also found a problem with preferredSize in Component, This is now fixed. 2006-02-15 Lillian Angel <[EMAIL PROTECTED]> * gnu/java/awt/peer/gtk/GtkDialogPeer.java (setVisible): Removed method. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (setLocation): New method. (setLocationUnlocked): New method. (show): Changed to use setLocation instead of setBounds. * java/awt/Component.java (show): Should call peer.show(), not peer.setVisible(), so the location of the component is correctly set. (preferredSize): Added curly braces so else statements are properly associated with if's. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocation): New function. (Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSet LocationUnlocked): New function. * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Added declarations for Java_gnu_java_awt_peer_gtk_ GtkWindowPeer_nativeSetLocation and Java_gnu_java_awt_peer_gtk_GtkWindowPeer _nativeSetLocationUnlocked. Committed. Thanks, Lillian
Index: gnu/java/awt/peer/gtk/GtkDialogPeer.java =================================================================== RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java,v retrieving revision 1.31 diff -u -r1.31 GtkDialogPeer.java --- gnu/java/awt/peer/gtk/GtkDialogPeer.java 14 Feb 2006 19:40:07 -0000 1.31 +++ gnu/java/awt/peer/gtk/GtkDialogPeer.java 15 Feb 2006 18:17:34 -0000 @@ -62,16 +62,6 @@ g.translate (-insets.left, -insets.top); return g; } - - public void setVisible (boolean b) - { - // Prevent the window manager from automatically placing this - // window when it is shown. - setBounds(awtComponent.getX(), awtComponent.getY(), - awtComponent.getWidth(), awtComponent.getHeight()); - - super.setVisible(b); - } protected void postMouseEvent(int id, long when, int mods, int x, int y, int clickCount, boolean popupTrigger) Index: gnu/java/awt/peer/gtk/GtkWindowPeer.java =================================================================== RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java,v retrieving revision 1.45 diff -u -r1.45 GtkWindowPeer.java --- gnu/java/awt/peer/gtk/GtkWindowPeer.java 13 Feb 2006 14:32:53 -0000 1.45 +++ gnu/java/awt/peer/gtk/GtkWindowPeer.java 15 Feb 2006 18:17:34 -0000 @@ -126,7 +126,23 @@ native void nativeSetBounds (int x, int y, int width, int height); native void nativeSetBoundsUnlocked (int x, int y, int width, int height); + native void nativeSetLocation (int x, int y); + native void nativeSetLocationUnlocked (int x, int y); + public void setLocation (int x, int y) + { + // prevent window_configure_cb -> awtComponent.setSize -> + // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock. + if (Thread.currentThread() == GtkToolkit.mainThread) + return; + nativeSetLocation (x, y); + } + + public void setLocationUnlocked (int x, int y) + { + nativeSetLocationUnlocked (x, y); + } + public void setBounds (int x, int y, int width, int height) { // prevent window_configure_cb -> awtComponent.setSize -> @@ -195,12 +211,7 @@ public void show () { - // Prevent the window manager from automatically placing this - // window when it is shown. - setBounds (awtComponent.getX(), - awtComponent.getY(), - awtComponent.getWidth(), - awtComponent.getHeight()); + setLocation(awtComponent.getX(), awtComponent.getY()); setVisible (true); } Index: include/gnu_java_awt_peer_gtk_GtkWindowPeer.h =================================================================== RCS file: /sources/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h,v retrieving revision 1.19 diff -u -r1.19 gnu_java_awt_peer_gtk_GtkWindowPeer.h --- include/gnu_java_awt_peer_gtk_GtkWindowPeer.h 26 Aug 2005 04:35:49 -0000 1.19 +++ include/gnu_java_awt_peer_gtk_GtkWindowPeer.h 15 Feb 2006 18:17:34 -0000 @@ -22,6 +22,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, jobject); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds (JNIEnv *env, jobject, jint, jint, jint, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked (JNIEnv *env, jobject, jint, jint, jint, jint); +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocation (JNIEnv *env, jobject, jint, jint); +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocationUnlocked (JNIEnv *env, jobject, jint, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize (JNIEnv *env, jobject, jint, jint); #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL 0L Index: java/awt/Component.java =================================================================== RCS file: /sources/classpath/classpath/java/awt/Component.java,v retrieving revision 1.98 diff -u -r1.98 Component.java --- java/awt/Component.java 13 Feb 2006 15:12:25 -0000 1.98 +++ java/awt/Component.java 15 Feb 2006 18:17:35 -0000 @@ -900,7 +900,7 @@ // Avoid NullPointerExceptions by creating a local reference. ComponentPeer currentPeer=peer; if (currentPeer != null) - currentPeer.setVisible(true); + currentPeer.show(); // The JDK repaints the component before invalidating the parent. // So do we. @@ -1598,16 +1596,18 @@ public Dimension preferredSize() { if (prefSize == null) - if (peer == null) - return new Dimension(width, height); - else - prefSize = peer.getPreferredSize(); + { + if (peer == null) + prefSize = size(); + else + prefSize = peer.getPreferredSize(); + } return prefSize; } /** * Returns the component's minimum size. - * + * * @return the component's minimum size * @see #getPreferredSize() * @see LayoutManager Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c =================================================================== RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,v retrieving revision 1.63 diff -u -r1.63 gnu_java_awt_peer_gtk_GtkWindowPeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 15 Feb 2006 09:00:25 -0000 1.63 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 15 Feb 2006 18:17:35 -0000 @@ -1394,6 +1394,32 @@ } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocation + (JNIEnv *env, jobject obj, jint x, jint y) +{ + gdk_threads_enter (); + + Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocationUnlocked + (env, obj, x, y); + + gdk_threads_leave (); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetLocationUnlocked + (JNIEnv *env, jobject obj, jint x, jint y) +{ + void *ptr; + + ptr = NSA_GET_PTR (env, obj); + + gtk_window_move (GTK_WINDOW(ptr), x, y); + + if (GTK_WIDGET (ptr)->window != NULL) + gdk_window_move (GTK_WIDGET (ptr)->window, x, y); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) {