package com.yoursway.swt.scrollbar; import static com.yoursway.swt.scrollbar.CompositeUtils.addAllChildrenListener; import static com.yoursway.swt.scrollbar.CompositeUtils.removeAllChildrenListener; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; public class MouseEnterExitTracker { private int mouseEnterLevel = 0; private Listener trackingListener; private final Composite control; public MouseEnterExitTracker(Composite control, final Listener listener) { this.control = control; trackingListener = new Listener() { public void handleEvent(Event event) { if (event.type == SWT.MouseEnter) { if (mouseEnterLevel == 0) listener.handleEvent(event); mouseEnterLevel++; } else if (event.type == SWT.MouseExit) { if (mouseEnterLevel == 1) listener.handleEvent(event); mouseEnterLevel--; } } }; addAllChildrenListener(control, SWT.MouseEnter, trackingListener); addAllChildrenListener(control, SWT.MouseExit, trackingListener); } public void uninstall() { removeAllChildrenListener(control, SWT.MouseEnter, trackingListener); removeAllChildrenListener(control, SWT.MouseExit, trackingListener); } }