diff options
author | spingel | 2009-10-08 05:22:12 +0000 |
---|---|---|
committer | spingel | 2009-10-08 05:22:12 +0000 |
commit | adc132a6c47f39aa85c458252f2294cb5e438bfa (patch) | |
tree | 6d3dda941798f5d9e362be1ffcbd81ec58cdccd3 | |
parent | b519c6a858285197e243af70284eab5e95c363c7 (diff) | |
download | org.eclipse.mylyn.tasks-adc132a6c47f39aa85c458252f2294cb5e438bfa.tar.gz org.eclipse.mylyn.tasks-adc132a6c47f39aa85c458252f2294cb5e438bfa.tar.xz org.eclipse.mylyn.tasks-adc132a6c47f39aa85c458252f2294cb5e438bfa.zip |
NEW - bug 202709: [linux] mouse wheel does not scroll task editor when pointer is above description or combo box
https://bugs.eclipse.org/bugs/show_bug.cgi?id=202709
4 files changed, 69 insertions, 1 deletions
diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/FlagAttributeEditor.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/FlagAttributeEditor.java index e8f906858..9194663e3 100644 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/FlagAttributeEditor.java +++ b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/FlagAttributeEditor.java @@ -11,6 +11,7 @@ package org.eclipse.mylyn.internal.bugzilla.ui.editor; import java.util.Map; import org.eclipse.core.runtime.Assert; +import org.eclipse.mylyn.internal.tasks.ui.editors.EditorUtil; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskDataModel; import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; @@ -71,6 +72,7 @@ public class FlagAttributeEditor extends AbstractAttributeEditor { if (tooltip != null) { combo.setToolTipText(tooltip); } + EditorUtil.addScrollListener(combo); Map<String, String> labelByValue = getAttributeMapper().getAssoctiatedAttribute(getTaskAttribute()) .getOptions(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/EditorUtil.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/EditorUtil.java index 21d5fa13b..bb93a3bcb 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/EditorUtil.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/EditorUtil.java @@ -34,9 +34,13 @@ import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage; import org.eclipse.mylyn.tasks.ui.editors.TaskFormPage; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CTabFolder; +import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseWheelListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; @@ -49,8 +53,11 @@ import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.swt.widgets.Scrollable; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; @@ -63,6 +70,7 @@ import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.SharedScrolledComposite; import org.eclipse.ui.internal.EditorAreaHelper; import org.eclipse.ui.internal.WorkbenchPage; +import org.eclipse.ui.internal.forms.widgets.FormUtil; public class EditorUtil { @@ -508,4 +516,60 @@ public class EditorUtil { return (label.endsWith(":")) ? label.substring(0, label.length() - 1) : label; //$NON-NLS-1$ } + public static void scroll(ScrolledComposite scomp, int xoffset, int yoffset) { + Point origin = scomp.getOrigin(); + Point contentSize = scomp.getContent().getSize(); + int xorigin = origin.x + xoffset; + int yorigin = origin.y + yoffset; + xorigin = Math.max(xorigin, 0); + xorigin = Math.min(xorigin, contentSize.x - 1); + yorigin = Math.max(yorigin, 0); + yorigin = Math.min(yorigin, contentSize.y - 1); + scomp.setOrigin(xorigin, yorigin); + } + + public static void addScrollListener(final Scrollable textWidget) { + if (textWidget.getVerticalBar() != null) { + textWidget.addMouseWheelListener(new MouseWheelListener() { + public void mouseScrolled(MouseEvent event) { + ScrollBar verticalBar = textWidget.getVerticalBar(); + ScrolledComposite form = FormUtil.getScrolledComposite(textWidget); + if (verticalBar != null && form != null) { + if (event.count < 0) { + // scroll form down + if (verticalBar.getSelection() + verticalBar.getThumb() == verticalBar.getMaximum()) { + EditorUtil.scroll(form, 0, form.getVerticalBar().getIncrement()); + } + } else { + // scroll form up + if (verticalBar.getSelection() == verticalBar.getMinimum()) { + EditorUtil.scroll(form, 0, -form.getVerticalBar().getIncrement()); + } + } + } + } + }); + } + } + + public static void addScrollListener(final CCombo combo) { + combo.addListener(SWT.KeyDown, new Listener() { + public void handleEvent(Event event) { + if (event.keyCode == SWT.ARROW_UP) { + ScrolledComposite form = FormUtil.getScrolledComposite(combo); + if (form != null) { + EditorUtil.scroll(form, 0, -form.getVerticalBar().getIncrement()); + event.doit = false; + } + } else if (event.keyCode == SWT.ARROW_DOWN) { + ScrolledComposite form = FormUtil.getScrolledComposite(combo); + if (form != null) { + EditorUtil.scroll(form, 0, form.getVerticalBar().getIncrement()); + event.doit = false; + } + } + } + }); + } + } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RichTextEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RichTextEditor.java index 0eb976eb8..68e79989d 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RichTextEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/RichTextEditor.java @@ -203,6 +203,7 @@ public class RichTextEditor { if (toolkit != null) { toolkit.adapt(viewer.getControl(), false, false); } + EditorUtil.addScrollListener(viewer.getTextWidget()); return viewer; } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SingleSelectionAttributeEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SingleSelectionAttributeEditor.java index b18ab9ea6..4ff4c67d1 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SingleSelectionAttributeEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/SingleSelectionAttributeEditor.java @@ -56,7 +56,7 @@ public class SingleSelectionAttributeEditor extends AbstractAttributeEditor { } @Override - public void createControl(Composite parent, FormToolkit toolkit) { + public void createControl(final Composite parent, FormToolkit toolkit) { if (isReadOnly()) { text = new Text(parent, SWT.FLAT | SWT.READ_ONLY); text.setFont(EditorUtil.TEXT_FONT); @@ -82,6 +82,7 @@ public class SingleSelectionAttributeEditor extends AbstractAttributeEditor { } } }); + EditorUtil.addScrollListener(combo); setControl(combo); } refresh(); |