javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java Tue May 25 12:34:19 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java Wed Jun 09 09:34:07 2010 +0300
@@ -734,7 +734,10 @@
if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
if (control.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
if (!contains(control)) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+ doShowControl(control, false);
+ }
+ private void doShowControl(Control control, boolean center) {
Rectangle itemRect = getDisplay().map(control.getParent(), this, control.getBounds());
Rectangle area = getClientArea();
Point origin = getOrigin();
@@ -746,13 +749,21 @@
{
if (area.width < itemRect.x + itemRect.width) origin.x = Math.max(0, origin.x + itemRect.x + Math.min(itemRect.width, area.width) - area.width);
}
- if (itemRect.y < 0)
+
+ if (center && itemRect.height <= area.height)
{
- origin.y = Math.max(0, origin.y + itemRect.y);
+ origin.y = origin.y + itemRect.y - (area.height - itemRect.height) / 2;
}
else
{
- if (area.height < itemRect.y + itemRect.height) origin.y = Math.max(0, origin.y + itemRect.y + Math.min(itemRect.height, area.height) - area.height);
+ if (itemRect.y < 0)
+ {
+ origin.y = Math.max(0, origin.y + itemRect.y);
+ }
+ else
+ {
+ if (area.height < itemRect.y + itemRect.height) origin.y = Math.max(0, origin.y + itemRect.y + Math.min(itemRect.height, area.height) - area.height);
+ }
}
setOrigin(origin);
}
@@ -765,4 +776,10 @@
int vSelection = vBar.getSelection();
content.setLocation(location.x, -vSelection);
}
+
+ void handleShowFocusedControlEvent()
+ {
+ Control control = getDisplay().getFocusControl();
+ if (contains(control)) doShowControl(control, true);
+ }
}