From 21480a7ae8dce67cf3a844d8caafb0b96c37ac0e Mon Sep 17 00:00:00 2001
From: Tejesh R
Date: Thu, 25 Apr 2024 04:31:55 +0000
Subject: [PATCH] 8322135: Printing JTable in Windows L&F throws InternalError:
HTHEME is null
Reviewed-by: abhiscxk, honkar, aivanov
---
.../classes/sun/awt/windows/ThemeReader.java | 19 ++++++++++++++-----
.../swing/JTable/JTableScrollPrintTest.java | 2 +-
.../javax/swing/JTable/PrintAllPagesTest.java | 4 ++--
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java b/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java
index 61972bf4ed5..7c0d8c1ea4d 100644
--- a/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java
+++ b/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -100,21 +100,30 @@ public final class ThemeReader {
return xpStyleEnabled;
}
- private static Long openThemeImpl(String widget, int dpi) {
- Long theme;
+ private static long openThemeImpl(String widget, int dpi) {
+ long theme;
int i = widget.indexOf("::");
if (i > 0) {
// We're using the syntax "subAppName::controlName" here, as used by msstyles.
// See documentation for SetWindowTheme on MSDN.
setWindowTheme(widget.substring(0, i));
- theme = openTheme(widget.substring(i + 2), dpi);
+ theme = getOpenThemeValue(widget.substring(i + 2), dpi);
setWindowTheme(null);
} else {
- theme = openTheme(widget, dpi);
+ theme = getOpenThemeValue(widget, dpi);
}
return theme;
}
+ private static long getOpenThemeValue(String widget, int dpi) {
+ long theme;
+ theme = openTheme(widget, dpi);
+ if (theme == 0) {
+ theme = openTheme(widget, defaultDPI);
+ }
+ return theme;
+ }
+
// this should be called only with writeLock held
private static Long getThemeImpl(String widget, int dpi) {
return dpiAwareWidgetToTheme.computeIfAbsent(dpi, key -> new HashMap<>())
diff --git a/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java b/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java
index 5621b359346..a2bd03081a9 100644
--- a/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java
+++ b/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java
@@ -41,7 +41,7 @@ import javax.swing.table.DefaultTableModel;
/*
* @test
* @key headful
- * @bug 8210807 8322140
+ * @bug 8210807 8322140 8322135
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @summary Test to check if JTable can be printed when JScrollPane added to it.
diff --git a/test/jdk/javax/swing/JTable/PrintAllPagesTest.java b/test/jdk/javax/swing/JTable/PrintAllPagesTest.java
index 263415f641b..284fbe57097 100644
--- a/test/jdk/javax/swing/JTable/PrintAllPagesTest.java
+++ b/test/jdk/javax/swing/JTable/PrintAllPagesTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/*
* @test
- * @bug 8257810
+ * @bug 8257810 8322135
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @summary Verifies if all pages are printed if scrollRectToVisible is set.