From 0232bf0760d9944100acb31a587c6afe7487783d Mon Sep 17 00:00:00 2001 From: Federico Jeanne Date: Fri, 19 Jun 2026 10:35:52 +0200 Subject: [PATCH] Add button to cancel job family to the JobsView The JobsView can be opened with Ctrl+3 -> "Job Factory" --- .../e4/ui/examples/jobs/views/JobsView.java | 24 +++++++++++++++++-- .../ui/examples/jobs/views/JobsView.java | 22 ++++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/examples/org.eclipse.e4.ui.examples.job/src/org/eclipse/e4/ui/examples/jobs/views/JobsView.java b/examples/org.eclipse.e4.ui.examples.job/src/org/eclipse/e4/ui/examples/jobs/views/JobsView.java index a4be9e01e7d..1f21e77bf37 100644 --- a/examples/org.eclipse.e4.ui.examples.job/src/org/eclipse/e4/ui/examples/jobs/views/JobsView.java +++ b/examples/org.eclipse.e4.ui.examples.job/src/org/eclipse/e4/ui/examples/jobs/views/JobsView.java @@ -247,7 +247,19 @@ public void widgetSelected(SelectionEvent e) { } }); - // join the running test jobs + // Cancel the job family (all TestJobs have the same family) + Button cancelFamily = new Button(group, SWT.PUSH); + cancelFamily.setText("Cancel Job family"); //$NON-NLS-1$ + cancelFamily.setToolTipText("IJobManager.cancel() on test jobs"); //$NON-NLS-1$ + cancelFamily.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + cancelFamily.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + cancelTestJobs(); + } + }); + + // Put all jobs to sleep Button sleep = new Button(group, SWT.PUSH); sleep.setText("Sleep"); //$NON-NLS-1$ sleep.setToolTipText("Calls sleep() on all TestJobs"); //$NON-NLS-1$ @@ -259,7 +271,7 @@ public void widgetSelected(SelectionEvent e) { } }); - // join the running test jobs + // Wake up all jobs Button wake = new Button(group, SWT.PUSH); wake.setText("WakeUp"); //$NON-NLS-1$ wake.setToolTipText("Calls wakeUp() on all TestJobs"); //$NON-NLS-1$ @@ -540,6 +552,14 @@ protected void joinTestJobs() { } } + private void cancelTestJobs() { + try { + progressService.busyCursorWhile(__ -> Job.getJobManager().cancel(TestJob.FAMILY_TEST_JOB)); + } catch (InterruptedException | InvocationTargetException e) { + e.printStackTrace(); + } + } + protected void progressNoFork() { try { final long duration = getDuration(); diff --git a/examples/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/JobsView.java b/examples/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/JobsView.java index 1356394640d..2e67ca5d5fc 100644 --- a/examples/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/JobsView.java +++ b/examples/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/JobsView.java @@ -214,21 +214,28 @@ private void createPushButtonGroup(Composite parent) { join.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); join.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> joinTestJobs())); - // join the running test jobs + // Cancel the job family (all TestJobs have the same family) + Button cancelFamily = new Button(group, SWT.PUSH); + cancelFamily.setText("Cancel Job family"); //$NON-NLS-1$ + cancelFamily.setToolTipText("IJobManager.cancel() on test jobs"); //$NON-NLS-1$ + cancelFamily.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + cancelFamily.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> cancelTestJobs())); + + // Use a runnable context Button window = new Button(group, SWT.PUSH); window.setText("Runnable in Window"); //$NON-NLS-1$ window.setToolTipText("Using a runnable context in the workbench window"); //$NON-NLS-1$ window.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); window.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> runnableInWindow())); - // join the running test jobs + // Put all jobs to sleep Button sleep = new Button(group, SWT.PUSH); sleep.setText("Sleep"); //$NON-NLS-1$ sleep.setToolTipText("Calls sleep() on all TestJobs"); //$NON-NLS-1$ sleep.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); sleep.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> doSleep())); - // join the running test jobs + // Wake up all jobs Button wake = new Button(group, SWT.PUSH); wake.setText("WakeUp"); //$NON-NLS-1$ wake.setToolTipText("Calls wakeUp() on all TestJobs"); //$NON-NLS-1$ @@ -542,6 +549,15 @@ protected void joinTestJobs() { } } + private void cancelTestJobs() { + try { + PlatformUI.getWorkbench().getProgressService() + .busyCursorWhile(monitor -> Job.getJobManager().cancel(TestJob.FAMILY_TEST_JOB)); + } catch (InterruptedException | InvocationTargetException e) { + e.printStackTrace(); + } + } + protected void progressNoFork() { try { final long duration = getDuration();