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

Reply via email to