495715: Install All Favorites might only select first item
Set selection in bulk and only update the viewer at the end
Bug: 495715
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=495715
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
index ee9b92e..abbd2c9 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/InstallAllActionLink.java
@@ -15,6 +15,7 @@
import org.eclipse.epp.internal.mpc.ui.catalog.MarketplaceNodeCatalogItem;
import org.eclipse.epp.mpc.ui.Operation;
import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
+import org.eclipse.jface.viewers.StructuredSelection;
public class InstallAllActionLink extends ActionLink {
@@ -36,15 +37,21 @@
protected void installAll() {
MarketplaceViewer viewer = marketplacePage.getViewer();
List<CatalogItem> items = viewer.getCatalog().getItems();
+ //We need to first select the items in the selection model and then
+ //set the selection to the viewer. Otherwise the MarketplacePage listener
+ //will advance the wizard on the first selected item.
SelectionModel selectionModel = viewer.getSelectionModel();
for (CatalogItem catalogItem : items) {
if (catalogItem instanceof MarketplaceNodeCatalogItem) {
MarketplaceNodeCatalogItem nodeItem = (MarketplaceNodeCatalogItem) catalogItem;
if (selectionModel.getSelectedOperation(nodeItem) != Operation.INSTALL
&& nodeItem.getAvailableOperations().contains(Operation.INSTALL)) {
- viewer.modifySelection(nodeItem, Operation.INSTALL);
+ selectionModel.select(nodeItem, Operation.INSTALL);
}
}
}
+ //viewer.getCheckedItems() is based on the SelectionModel state, so it already has the
+ //updated selection. Just let the viewer synchronize its remaining selection state with it.
+ viewer.setSelection(new StructuredSelection(viewer.getCheckedItems()));
}
}
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
index d948425..4bba862 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplacePage.java
@@ -291,7 +291,7 @@
// sets the empty selection whenever the catalog is updated.
if (!event.getSelection().isEmpty()) {
- if (previousSelectionSize == 0 && newSelectionSize == 1
+ if (previousSelectionSize == 0 && newSelectionSize > 0
&& selectionModel.computeProvisioningOperationViableForFeatureSelection()) {
showNextPage();
}