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].