--- old/src/java.desktop/share/classes/java/awt/Taskbar.java 2016-10-06 15:18:37.000000000 +0300 +++ new/src/java.desktop/share/classes/java/awt/Taskbar.java 2016-10-06 15:18:37.000000000 +0300 @@ -407,10 +407,21 @@ } /** - * Displays progress for specified window. + * Displays a determinate progress bar in the task area for the specified + * window. + *
+ * The visual behavior is platform and {@link State} dependent. + *
+ * This call cancels the {@link State#INDETERMINATE INDETERMINATE} state + * of the window. + *
+ * Note that the behavior is undefined when multiple windows is grouped + * in the task area. * * @param w window to update - * @param value from 0 to 100, other to disable progress indication + * @param value from 0 to 100, other to switch to {@link State#OFF} state + * and disable progress indication + * @see #setWindowProgressState(java.awt.Window, State) * @throws SecurityException if a security manager exists and it denies the * {@code RuntimePermission("canProcessApplicationEvents")} permission. * @throws UnsupportedOperationException if the current platform @@ -426,14 +437,21 @@ /** * Sets a progress state for a specified window. + *
+ * Each state displays a progress in a platform-dependent way. + *
+ * Note than switching from {@link State#INDETERMINATE INDETERMINATE} state + * to any of determinate states may reset value set by + * {@link #setWindowProgressValue(java.awt.Window, int) setWindowProgressValue} * * @param w window * @param state to change to * @see State#OFF * @see State#NORMAL * @see State#PAUSED - * @see State#INDETERMINATE * @see State#ERROR + * @see State#INDETERMINATE + * @see #setWindowProgressValue(java.awt.Window, int) * @throws SecurityException if a security manager exists and it denies the * {@code RuntimePermission("canProcessApplicationEvents")} permission. * @throws UnsupportedOperationException if the current platform --- old/src/java.desktop/windows/native/libawt/windows/awt_Taskbar.cpp 2016-10-06 15:18:37.000000000 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Taskbar.cpp 2016-10-06 15:18:37.000000000 +0300 @@ -58,7 +58,11 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WTaskbarPeer_setProgressValue (JNIEnv *, jobject, jlong window, jint value) { - m_Taskbar->SetProgressValue((HWND)window, value, 100); + if (value < 0 || value > 100) { + m_Taskbar->SetProgressState((HWND)window, TBPF_NOPROGRESS); + } else { + m_Taskbar->SetProgressValue((HWND)window, value, 100); + } } @@ -88,6 +92,9 @@ flag = TBPF_NOPROGRESS; } else if (strcmp(valueNative, "NORMAL") == 0) { flag = TBPF_NORMAL; + + // Switching from TBPF_INDETERMINATE to TBPF_NORMAL has no effect + m_Taskbar->SetProgressState((HWND)window, TBPF_PAUSED); } else if (strcmp(valueNative, "PAUSED") == 0) { flag = TBPF_PAUSED; } else if (strcmp(valueNative, "INDETERMINATE") == 0) {