Skip to content

Commit

Permalink
webadmin: Fix reseting of graphics
Browse files Browse the repository at this point in the history
When the BIOS type changed, the graphics list was always
reset even though the video type stayed the same.

This was because the setting of the items and selected item
was separated in https://gerrit.ovirt.org/c/ovirt-engine/+/118132

This patch goes back to setting the items and selected
item at once but making sure that the selection model is not
used to avoid issues fixed by https://gerrit.ovirt.org/c/ovirt-engine/+/118132

Bug-Url: https://bugzilla.redhat.com/2078193
  • Loading branch information
ljelinkova committed May 4, 2022
1 parent 35b0719 commit 9aba2a4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,27 @@ public void setItems(Collection<T> value) {
}

public void setItems(Collection<T> value, T selectedItem) {
setItems(value, selectedItem, true);
}

/**
* Sets the values and the selected item at once.
*
* If the code uses this method to set items and in other places method
* setSelectedItem(), it is advised not to use the selection model (useSelectionModel = false)
* because there might be synchronization issues between the selection model and
* the selected item where the selected item is overwritten by the selection model's
* selected item.
*
* @param value Items to be set to the model
* @param selectedItem Selected item
* @param useSelectionModel Whether to use or not the selection model
*/
public void setItems(Collection<T> value, T selectedItem, boolean useSelectionModel) {
if (items != value) {
itemsChanging(value, items);
items = value;
itemsChanged(selectedItem);
itemsChanged(selectedItem, useSelectionModel);
getItemsChangedEvent().raise(this, EventArgs.EMPTY);
onPropertyChanged(new PropertyChangedEventArgs("Items")); //$NON-NLS-1$
}
Expand Down Expand Up @@ -222,14 +239,20 @@ protected void itemPropertyChanged(Object sender, PropertyChangedEventArgs e) {
}

protected void itemsChanged(T selectedItem) {
itemsChanged(selectedItem, true);
}

protected void itemsChanged(T selectedItem, boolean useSelectionModel) {
if (selectedItem == null) {
itemsChanged();
} else {
List<T> selectedItems = new ArrayList<>();
selectedItems.add(selectedItem);
setSelectedItem(selectedItem);
setSelectedItems(selectedItems);
getSelectionModel().setSelected(selectedItem, true);
if (useSelectionModel) {
getSelectionModel().setSelected(selectedItem, true);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2598,13 +2598,13 @@ public void initDisplayModels(Set<DisplayType> displayTypes) {
}

public void initDisplayModels(Set<DisplayType> displayTypes, DisplayType selectedDisplayType) {
// set items and set selected one
// set items and set the selected display type but do not use selection model. The selection
// model causes synchronization problems because in other places we use setSelectedItem() that
// does not use the selection model too
if (displayTypes.contains(selectedDisplayType)) {
getDisplayType().setItems(displayTypes);
getDisplayType().setSelectedItem(selectedDisplayType);
getDisplayType().setItems(displayTypes, selectedDisplayType, false);
} else if (displayTypes.size() > 0) {
getDisplayType().setItems(displayTypes);
getDisplayType().setSelectedItem(displayTypes.iterator().next());
getDisplayType().setItems(displayTypes, displayTypes.iterator().next(), false);
}
}

Expand Down

0 comments on commit 9aba2a4

Please sign in to comment.