Bug 93674 [Dialogs] ProgressMonitorDialog not cancellable when fork is set to false
Overview Description: Invoking the ProgressMonitorDialog::run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) method with the fork parameter set to false, the user can't cancel the running dialog -even if the cancelable parameter is set to true. Steps to Reproduce: Simply launch a ProgressMonitorDialog and invoke its run method with fork parameter == false and cancelable parameter == true Actual Results: The Cancel button is not responsive to user clicks and the IProgressMonitor::isCanceled() will always regardless. Expected Results: When the suer clicks the Cancel button on the dialog, calling IProgressMonitor::isCanceled() should return true so that the executing IRunnableWithProgress can have a chance to honour the user's request and exit.
bundles/org.eclipse.jface/src/org/eclipse/jface/window/ApplicationWindow.java
ModalContext.run(runnable, fork, mgr
                                    .getProgressMonitor(), display);
                        } catch (InvocationTargetException ite) {
                            holder[0] = ite;
                        } catch (InterruptedException ie) {
                            holder[0] = ie;
                        }
                    }
                });
                if (holder[0] != null) {
                    if (holder[0] instanceof InvocationTargetException) {
                        throw (InvocationTargetException) holder[0];
                    } else if (holder[0] instanceof InterruptedException) {
                        throw (InterruptedException) holder[0];
                    }
                }
            } finally {
                operationInProgress = false;
                
                for (int i = 0; i < shells.length; i++) {
                    Shell current = shells[i];
                    if (current == shell)
                        continue;
                    if (current != null && !current.isDisposed()) {
                        current.setEnabled(enabled[i]);
                    }
                }
                if (!contents.isDisposed())
                    contents.setEnabled(contentsWasEnabled);
                if (menuBar != null && !menuBar.isDisposed())