Hi Davide,

The enhancement you submitted is now available in JBS:

https://bugs.openjdk.org/browse/JDK-8323821
Use toast notifications on Windows 11

I updated the subject so that it sounds like an enhancement rather than a bug.

JDK-8323821 is more specific than https://bugs.openjdk.org/browse/JDK-8266423 which talks about both macOS and Windows.


If you have ideas on how to implement toast notifications for JDK, feel free to discuss the ideas further. Contributions are welcome.

--
Regards,
Alexey

On 2024-01-12 11:40, Davide Perini wrote:
I wrote to Microsoft and they suggested to use the New APIs (ToastNotification) meant for the purpose

https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/toast-notifications-overview
https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/send-local-toast-desktop-cpp-wrl

Shell_NotifyIcon API is clearly unsupported after 25/30 years on a modern OS.

If you are a Java programmer, you can't send an OS notification.

OS Notifications are very crucial to most apps this days,
I can't imagine how Java can overlook it.

Since you don't accept it as a bug (Oracle is closing all the bug reports from people on this), I opened a feature request on this in the hope that someone wise will look at it.

Kind Regards,
Davide


Il 08/01/2024 22:05, Davide Perini ha scritto:
Thanks for the explanation Aleksei
but can you explain me what is the OpenJDK direction please?

Suppose that you have a feature like this one, a simple notifications.
Java worked well with Windows notifications until Win10,
then Microsoft changed the APIs for notifications in Win11.

Isn't OpenJDK supposed to adapt to the new Windows APIs?

Does OpenJDK supports Windows 11 or not?

It's a little "weird" to close an issue by saying that Java uses the same way to do the same thing since Windows 95 and that it's a Microsoft problem if they changed the way to send notifications to the OS.

Java should support Microsoft Windows, it isn't Microsoft Windows that should support Java,
isn't it?

Other languages adapted their APIs for the new notifications system, like everyone should expect from a modern language,
after 2 years from the release of Win 11,
Oracle says that it worked since Windows 95, so it is ok to have a broken API in JDK because it worked before, they are the ones who broke it (Microsoft).

Does Java offers a correct way to send Notifications in Win10? Answer: Yes
Does Java offers a correct way to send Notifications in Win11? Answer: No
Does other languages offers a correct way to send Notifications in Win11? Answer: Yes
Does current JDK APIs works as expected in Win11?
Answer: No because JDK uses an old API born with Win95 (30 years ago + or -) with a new OS born in 2021, this results in an unexcpected behaviour that doesn't work as supposed initially by the API.

In the bug report you wrote:
"I can't see what Java can do to change the behaviour."

The answer is:
"By implementing the correct API for the correct OS".


Java is currently not able to correctly send a Notification in Windows 11.


I see a bug there, if you don't see it,
I'm pretty worried of the new JDK direction.

Thanks
Davide


Il 08/01/2024 20:55, Aleksei Ivanov ha scritto:
On 2024-01-08 19:30, Davide Perini wrote:
Thanks for the Answer Aleksei,
I have a lot of Windows apps that uses notifications without problems.

even a simple python program like this works correctly.
from win11toastimport toast

toast('Hello','Click to run python script')

Python could use newer WinRT APIs [6], in particular ToastNotification class [7] which provide richer interface for the toast notifications. The package name ‘toast’ hints it uses the newer APIs.

is it possible that Microsoft changed the way how to create Notifications in Windows 11 and Java still uses the way it worked in Windows 7?

Perhaps, Microsoft changed how they handle notifications in Windows 11. In Windows 10, the notifications created with a Java app remain in Action / Notification centre.

Java uses Shell_NotifyIcon [8] function that has been available since Windows 95.

--
Regards,
Alexey

[6] https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/
[7] https://learn.microsoft.com/en-us/uwp/api/windows.ui.notifications.toastnotification?view=winrt-22621 [8] https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shell_notifyiconw


Thanks
Davide



Il 08/01/2024 17:59, Aleksei Ivanov ha scritto:
Hi Davide,

The bug that you reported has been moved to JDK project in JBS, you can view it as JDK-8315647 [1]. You should've received a link to it.

Is there a way to workaround this JDK bug?
I opened a bug report months ago but no one answered.

What kind of answer did you expect to receive?

You already asked this question on this mailing list in August [2]. I replied to your question [3]. Nothing has changed since August. It is not a bug in Java because a native Win32 app behaves the same way.

I compiled and tested the sample [4], it behaves in Windows 11 as Java does: the displayed balloon notification does not go to notification centre. However, if I open notification centre while the balloon is displayed, it remains there. If I disable "Show notification banners" and leave "Show notifications in notification centre" enabled, the balloon goes directly to notification centre without displaying a banner.

You can compile and test the sample too:

git clone --filter=blob:none --sparse https://github.com/microsoft/Windows-classic-samples.git windows-samples
cd windows-samples
git sparse-checkout add Samples/Win7Samples/winui/shell/appshellintegration/NotificationIcon

Navigate to the NotificationIcon folder and open NotificationIcon.sln in Visual Studio to compile and run it.

If required, I can attach the compiled version of the application.


I have closed JDK-8315647 as duplicate of JDK-8310352 [5].






Reply via email to