From faf222b8f266cb1c11acf00ad8a053f52df34937 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Mon, 19 Jan 2015 15:59:53 -0500 Subject: [PATCH] Launch Bar: ui tweaks for proper re-sizing and keyboard events - fixed issues when list is not drawn properly - fixed that Esc does not work to close pop up sometimes - fixed filtering for list with edit button - fixed layout issues when only one item in the list and filter becomes visible (filter is disabled in this case) Change-Id: I562f12df8326b4efecf75150b57b699c53d398da --- .../ui/internal/controls/FilterControl.java | 3 ++ .../controls/LaunchBarListViewer.java | 42 +++++++++++-------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/FilterControl.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/FilterControl.java index 2ef11dfb141..9b1cdb45223 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/FilterControl.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/FilterControl.java @@ -271,6 +271,9 @@ public class FilterControl extends Composite { } else if (e.detail == SWT.TRAVERSE_ARROW_NEXT) { listViewer.setFocus(); updateListSelection(false); + } else if (e.detail == SWT.TRAVERSE_ESCAPE) { + listViewer.setDefaultSelection(new StructuredSelection()); + e.doit = false; } } }); diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarListViewer.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarListViewer.java index 63157a915b5..947dfcc10b5 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarListViewer.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarListViewer.java @@ -137,7 +137,28 @@ public class LaunchBarListViewer extends StructuredViewer { } }; + private KeyListener lisItemKeyListener = new KeyListener() { + @Override + public void keyReleased(KeyEvent e) { + // ignore + } + @Override + public void keyPressed(KeyEvent e) { + if (e.character != 0 && e.character >= 0x20 && !filterControl.isVisible()) { + if (listItems.length <= 1) + return; // no filter for 1 item! + // enable filter control and send the character there + filterControl.setVisible(true); + filterControl.setFocus(); + filterControl.getParent().layout(true); + filterControl.getFilterText().setText(e.character + ""); + filterControl.getFilterText().setSelection(1); + } else if (e.character == SWT.ESC) { + setDefaultSelection(new StructuredSelection()); + } + } + }; private class ListItem extends Composite { @@ -171,6 +192,7 @@ public class LaunchBarListViewer extends StructuredViewer { GC gc = e.gc; gc.setForeground(outlineColor); gc.drawLine(0, size.y - 1, size.x, size.y - 1); + System.out.println(ListItem.this.index); if (label == null) lazyInit(); } @@ -235,28 +257,13 @@ public class LaunchBarListViewer extends StructuredViewer { editButton.setBackground(backgroundColor); editButton.addMouseTrackListener(listItemMouseTrackListener); editButton.addTraverseListener(listItemTraverseListener); + editButton.addKeyListener(lisItemKeyListener); } else { // add traverse listnener to control which will have keyboard focus addTraverseListener(listItemTraverseListener); + addKeyListener(lisItemKeyListener); } - addKeyListener(new KeyListener() { - @Override - public void keyReleased(KeyEvent e) { - // ignore - } - @Override - public void keyPressed(KeyEvent e) { - if (e.character != 0 && !filterControl.isVisible()) { - // enable filter control and send the character there - filterControl.setVisible(true); - filterControl.setFocus(); - filterControl.getParent().layout(true); - filterControl.getFilterText().setText(e.character + ""); - filterControl.getFilterText().setSelection(1); - } - } - }); setBackground(backgroundColor); layout(true); } @@ -453,6 +460,7 @@ public class LaunchBarListViewer extends StructuredViewer { createSash(listComposite); } listComposite.pack(true); + listComposite.layout(true, true); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); if (elements.length > maxScrollBucket) { Rectangle bounds = listItems[maxScrollBucket].getBounds();