From df0aefd4ae6bc4782459a83c97e8639918ed58ba Mon Sep 17 00:00:00 2001 From: Oleg Pekhovskiy Date: Fri, 27 May 2011 11:45:08 +0400 Subject: [PATCH 1/4] 7045174: Most of the tests in awt area fails with jdk 7b142 on windows with -Xcheck:jni Reviewed-by: art, denis --- jdk/src/windows/native/sun/windows/awt_Object.cpp | 5 ++++- jdk/src/windows/native/sun/windows/awt_Toolkit.cpp | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/jdk/src/windows/native/sun/windows/awt_Object.cpp b/jdk/src/windows/native/sun/windows/awt_Object.cpp index 54ec69a9a19..f448f37474a 100644 --- a/jdk/src/windows/native/sun/windows/awt_Object.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Object.cpp @@ -69,9 +69,12 @@ void AwtObject::_Dispose(jobject self) CriticalSection::Lock l(AwtToolkit::GetInstance().GetSyncCS()); + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject selfGlobalRef = env->NewGlobalRef(self); + // value 0 of lParam means that we should not attempt to enter the // SyncCall critical section, as it was entered someshere earlier - AwtToolkit::GetInstance().SendMessage(WM_AWT_DISPOSE, (WPARAM)self, (LPARAM)0); + AwtToolkit::GetInstance().SendMessage(WM_AWT_DISPOSE, (WPARAM)selfGlobalRef, (LPARAM)0); CATCH_BAD_ALLOC; } diff --git a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp index d010d6b130c..0329e950f62 100644 --- a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp @@ -741,7 +741,9 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message, } if (canDispose) { if(wParam != NULL) { - AwtObject *o = (AwtObject *) JNI_GET_PDATA((jobject)wParam); + jobject self = (jobject)wParam; + AwtObject *o = (AwtObject *) JNI_GET_PDATA(self); + env->DeleteGlobalRef(self); if(o != NULL && theAwtObjectList.Remove(o)) { o->Dispose(); } From 2f04b56c06be3a20584c85d3add6483946da61c3 Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Sat, 28 May 2011 12:56:52 +0400 Subject: [PATCH 2/4] 7046325: Broken links in java.awt.Toolkit's javadoc Reviewed-by: dav, yan --- jdk/src/share/classes/java/awt/Toolkit.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jdk/src/share/classes/java/awt/Toolkit.java b/jdk/src/share/classes/java/awt/Toolkit.java index 3ac2714dcef..8187084b52d 100644 --- a/jdk/src/share/classes/java/awt/Toolkit.java +++ b/jdk/src/share/classes/java/awt/Toolkit.java @@ -1857,7 +1857,7 @@ public abstract class Toolkit { /** * Adds the specified property change listener for the named desktop - * property. When a {@link PropertyChangeListenerProxy} object is added, + * property. When a {@link java.beans.PropertyChangeListenerProxy} object is added, * its property name is ignored, and the wrapped listener is added. * If {@code name} is {@code null} or {@code pcl} is {@code null}, * no exception is thrown and no action is performed. @@ -1874,7 +1874,7 @@ public abstract class Toolkit { /** * Removes the specified property change listener for the named - * desktop property. When a {@link PropertyChangeListenerProxy} object + * desktop property. When a {@link java.beans.PropertyChangeListenerProxy} object * is removed, its property name is ignored, and * the wrapped listener is removed. * If {@code name} is {@code null} or {@code pcl} is {@code null}, @@ -1893,11 +1893,11 @@ public abstract class Toolkit { /** * Returns an array of all the property change listeners * registered on this toolkit. The returned array - * contains {@code PropertyChangeListenerProxy} objects + * contains {@link java.beans.PropertyChangeListenerProxy} objects * that associate listeners with the names of desktop properties. * - * @return all of this toolkit's {@ code PropertyChangeListener} - * objects wrapped in {@code PropertyChangeListenerProxy} objects + * @return all of this toolkit's {@link PropertyChangeListener} + * objects wrapped in {@code java.beans.PropertyChangeListenerProxy} objects * or an empty array if no listeners are added * * @see PropertyChangeSupport#getPropertyChangeListeners() From 36b98d379ed4945241e693149d372d536c020db6 Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Mon, 30 May 2011 13:25:02 +0400 Subject: [PATCH 3/4] 7045354: Korean IME's Hanja candidate window is not displayed on IMFDemo Reviewed-by: art, ant --- jdk/src/windows/native/sun/windows/awt_Component.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index d4fe9e8766f..3b72baed5ee 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -3715,7 +3715,10 @@ void AwtComponent::OpenCandidateWindow(int x, int y) SetCandidateWindow(iCandType, x-rc.left, y-rc.top); } if (m_bitsCandType != 0) { - ::DefWindowProc(GetHWnd(), WM_IME_NOTIFY, IMN_OPENCANDIDATE, m_bitsCandType); + HWND proxy = GetProxyFocusOwner(); + // REMIND: is there any chance GetProxyFocusOwner() returns NULL here? + ::DefWindowProc((proxy != NULL) ? proxy : GetHWnd(), + WM_IME_NOTIFY, IMN_OPENCANDIDATE, m_bitsCandType); } } From 930f604543a512a8a5abc045a99e8fe2f832174f Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Mon, 30 May 2011 17:16:21 +0400 Subject: [PATCH 4/4] 7045193: interactive JCK tests java_awt/interactive/FileDialogTests fail Reviewed-by: dcherepanov, dav, art, denis --- .../sun/awt/X11/GtkFileDialogPeer.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java index 02be75b6ca5..41f5398a788 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java @@ -29,8 +29,6 @@ import java.awt.FileDialog; import java.awt.peer.FileDialogPeer; import java.io.File; import java.io.FilenameFilter; -import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; import sun.awt.AWTAccessor; /** @@ -107,9 +105,7 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer { if (b) { Thread t = new Thread() { public void run() { - GtkFileDialogPeer.this.run(fd.getTitle(), fd.getMode(), - fd.getDirectory(), fd.getFile(), fd.getFilenameFilter(), fd.isMultipleMode(), - fd.getX(), fd.getY()); + showNativeDialog(); fd.setVisible(false); } }; @@ -146,4 +142,30 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer { // We do not implement this method because we // have delegated to FileDialog#setFilenameFilter } + + private void showNativeDialog() { + String dirname = fd.getDirectory(); + // File path has a priority against directory path. + String filename = fd.getFile(); + if (filename != null) { + final File file = new File(filename); + if (fd.getMode() == FileDialog.LOAD + && dirname != null + && file.getParent() == null) { + // File path for gtk_file_chooser_set_filename. + filename = dirname + (dirname.endsWith(File.separator) ? "" : + File.separator) + filename; + } + if (fd.getMode() == FileDialog.SAVE && file.getParent() != null) { + // Filename for gtk_file_chooser_set_current_name. + filename = file.getName(); + // Directory path for gtk_file_chooser_set_current_folder. + dirname = file.getParent(); + } + } + GtkFileDialogPeer.this.run(fd.getTitle(), fd.getMode(), dirname, + filename, fd.getFilenameFilter(), + fd.isMultipleMode(), fd.getX(), fd.getY()); + } + }