On Tue, 13 May 2025 10:34:38 GMT, Tejesh R <t...@openjdk.org> wrote: >> The rendering of the directory names are handled as JLabel w.r.t Look and >> feel and also either Details/List view. Though FilePane creates basic >> rendering for these two few Look and Feel define their own renderers and >> also ComboBox Directory directory name view. Since HTML filtering is not >> taken care in any of these renderers, JLabel renders them as HTML document >> if nothing is set or specified. >> The fix is to get "html.disable" property from JFileChooser and set the same >> to JLabel component which renders and set Directory name. Hence applications >> can either enable/disable this property and control HTML rendering of >> directory name. > > Tejesh R has updated the pull request with a new target base due to a merge > or a rebase. The incremental webrev excludes the unrelated changes brought in > by the merge/rebase. The pull request contains three additional commits since > the last revision: > > - Merge branch 'master' of https://git.openjdk.java.net/jdk into > branch_8139228 > - Fix for windows L&F > - Fix + Manual test
Changes requested by aivanov (Reviewer). src/java.desktop/macosx/classes/com/apple/laf/AquaFileChooserUI.java line 1195: > 1193: setIcon(fc.getIcon(file)); > 1194: setEnabled(isSelectableInList(file)); > 1195: this.putClientProperty("html.disable", > getFileChooser().getClientProperty("html.disable")); Suggestion: putClientProperty("html.disable", getFileChooser().getClientProperty("html.disable")); No method call above uses explicit `this`, I see no reason to use it here either. This comment applies to all the modified files. src/java.desktop/share/classes/sun/swing/FilePane.java line 1238: > 1236: setText(text); > 1237: this.putClientProperty("html.disable", > getFileChooser().getClientProperty("html.disable")); > 1238: return this; Be consistent at least inside one file. Here you removed the blank line, but below at 1632–1635 you preserved the blank line. src/java.desktop/share/classes/sun/swing/FilePane.java line 1635: > 1633: this.putClientProperty("html.disable", > getFileChooser().getClientProperty("html.disable")); > 1634: > 1635: return this; I prefer this style everywhere: all the code that sets up the component, a blank line followed by the `return` statement. I'd add a blank line before `putClientProperty` as well — setting the `"html.disable"` property isn't the part of previous statements which configure the renderer component one way or another, and, with blank lines around this call, it will stand out in the code. test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 68: > 66: .instructions(INSTRUCTIONS) > 67: .columns(45) > 68: .testUI(initialize()) In majority of cases, you should pass a method reference rather than the result of a method call to `testUI`. As it's written, the `initialize` is executed on the main thread, and its result—the list frames—is passed to `PassFailJFrame`. What you actually want is `HTMLFileName::initialize`. In this case, the `PassFailJFrame` framework will call the `initialize` method on EDT when the time to create UI comes. test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 69: > 67: .columns(45) > 68: .testUI(initialize()) > 69: .position(PassFailJFrame.Position.TOP_LEFT_CORNER) Suggestion: .positionTestUIRightColumn() I suggest using [**`positionTestUIRightColumnCentered`**](https://cr.openjdk.org/~aivanov/PassFailJFrame/api/PassFailJFrame.Builder.html#positionTestUIRightColumnCentered()) to lay out the entire test UI in the centre of the screen. Since two file choosers take quite a lot of space, the file chooser at the bottom doesn't fit the screen if you use [`positionTestUIRightColumn`](https://cr.openjdk.org/~aivanov/PassFailJFrame/api/PassFailJFrame.Builder.html#positionTestUIRightColumn()). Alternatively, you can choose a horizontal layout with [`positionTestUIBottomRowCentered`](https://cr.openjdk.org/~aivanov/PassFailJFrame/api/PassFailJFrame.Builder.html#positionTestUIBottomRowCentered()). test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 79: > 77: } > 78: > 79: public static List<JFrame> initialize() { Suggestion: private static List<JFrame> initialize() { test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 84: > 82: String fileName = homeDir + File.separator + > 83: "<html><h1 color=#ff00ff><font face=\"Comic Sans > MS\">Testing Name"; > 84: directory = new File(fileName); You shouldn't create the files in the home directory of the user any way. Create them in the current directory which is a scratch directory when the test is run with jtreg; the contents of the scratch directory is automatically removed by jtreg when the test exits, even if the test itself fails to remove its own temporary files. Yet if you create the files in the user's home, all these files and directories will be still be around if anything goes awry in the test. test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 85: > 83: "<html><h1 color=#ff00ff><font face=\"Comic Sans > MS\">Testing Name"; > 84: directory = new File(fileName); > 85: directory.mkdir(); Do you need the directory at all? Use `VirtualFileSystemView` for all platforms. The fact that it's possible to create files with HTML tags in the name is irrelevant to the test. test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 96: > 94: jfc = new JFileChooser(homeDir); > 95: jfc_HTML_Enabled = new JFileChooser(homeDir); > 96: } I suggest creating a method that creates one file chooser placed in a frame; pass a boolean parameter to specify whether to set the `"html.disable"` property to `false` or keep its default value of `true`. Then your `initialize` method would be as simple as a single return statement: private static List<JFrame> initialize() { return List.of(createFileChooser(true), createFileChooser(false)); } test/jdk/javax/swing/JFileChooser/HTMLFileName.java line 107: > 105: } > 106: > 107: static class VirtualFileSystemView extends FileSystemView { Suggestion: private static class VirtualFileSystemView extends FileSystemView { ------------- PR Review: https://git.openjdk.org/jdk/pull/24439#pullrequestreview-2847459647 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093571535 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093578359 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093586784 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093592420 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093595668 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093604829 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093609644 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093604201 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093617717 PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2093604589