Greg Padgett has uploaded a new change for review. Change subject: webadmin: improve behavior of bookmark list (2/2) ......................................................................
webadmin: improve behavior of bookmark list (2/2) This patch series fixes some problems with the behavior of the bookmark list. This patch fixes re-selection of already-selected bookmarks, which was broken by gwt issue 6310 (which causes setSelectedItem to not behave as expected when a SingleSelectionModel's keyboardSelectionPolicy is BOUND_TO_SELECTION). To work around the problem, we use a different keyboardSelectionPolicy that isn't affected by the bug, and handle the keypress events manually. Change-Id: I25a9e721d8b7ccd982708eadf579e9eb229dedd5 Bug-Url: https://bugzilla.redhat.com/880499 Signed-off-by: Greg Padgett <gpadg...@redhat.com> --- M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/bookmark/BookmarkList.java 1 file changed, 36 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/10819/1 diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/bookmark/BookmarkList.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/bookmark/BookmarkList.java index c433a79..5dffd73 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/bookmark/BookmarkList.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/bookmark/BookmarkList.java @@ -12,6 +12,9 @@ import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.ScrollEvent; import com.google.gwt.event.dom.client.ScrollHandler; import com.google.gwt.uibinder.client.UiBinder; @@ -19,9 +22,11 @@ import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy.KeyboardPagingPolicy; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; +import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.Range; +import com.google.gwt.view.client.SingleSelectionModel; public class BookmarkList extends AbstractActionStackPanelItem<BookmarkModelProvider, Bookmark, CellList<Bookmark>> { @@ -51,10 +56,39 @@ protected CellList<Bookmark> createDataDisplayWidget(BookmarkModelProvider modelProvider) { ApplicationTemplates templates = ClientGinjectorProvider.instance().getApplicationTemplates(); - CellList<Bookmark> display = new CellList<Bookmark>(new BookmarkListItemCell(templates)); - display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION); + final CellList<Bookmark> display = new CellList<Bookmark>(new BookmarkListItemCell(templates)); + + display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); display.setKeyboardPagingPolicy(KeyboardPagingPolicy.INCREASE_RANGE); + // Using KeyboardSelectionPolicy.BOUND_TO_SELECTION is preferable, but broken (see + // gwt issue 6310). Instead, use ENABLED and handle the keyboard input ourselves. + display.addDomHandler(new KeyDownHandler() { + @Override + @SuppressWarnings("unchecked") + public void onKeyDown(KeyDownEvent event) { + SingleSelectionModel<Bookmark> selectionModel = (SingleSelectionModel<Bookmark>) display.getSelectionModel(); + if (selectionModel.getSelectedObject() != null) { + Bookmark item = null; + int index = display.getVisibleItems().indexOf(selectionModel.getSelectedObject()); + int key = event.getNativeEvent().getKeyCode(); + + if (key == KeyCodes.KEY_UP) { + item = display.getVisibleItems().get(index - 1); + } else if (key == KeyCodes.KEY_DOWN) { + item = display.getVisibleItems().get(index + 1); + } + + if (item != null) { + selectionModel.setSelected(item, true); + event.stopPropagation(); + event.preventDefault(); + } + } + } + }, KeyDownEvent.getType()); + display.sinkEvents(Event.ONKEYDOWN); + modelProvider.addDataDisplay(display); return display; -- To view, visit http://gerrit.ovirt.org/10819 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I25a9e721d8b7ccd982708eadf579e9eb229dedd5 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Greg Padgett <gpadg...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches