[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] Re: Composite.setBounds always send controlMoved event
|
Hi Enrico,
Thanks for investigating this! I've logged
https://bugs.eclipse.org/bugs/show_bug.cgi?id=236937 for it, but couldn't
add you as a CC because bugzilla did not know of your email address.
Grant
"Enrico Zanaga" <ezanaga@xxxxxxx> wrote in message
news:g2orjj$e4u$1@xxxxxxxxxxxxxxxxxxxx
> Hi all,
>
> in SWT version 3.4RC3 (win32/x86) was added the Composite.setBounds(int
> x, int y, int width, int height, int flags, boolean defer) method
override.
>
> In source Composite.java:889, there's the following line:
>
> state &= ~RESIZE_OCCURRED | MOVE_OCCURRED;
>
> It seems is missing parentheses, and at every setBounds this produces a
> controlMoved event, even if a move doesn't happened.
> The line should looks like:
>
> state &= ~(RESIZE_OCCURRED | MOVE_OCCURRED);
>
>
> The following code snippet show the problem, turning CPU usage at 100%
> until shell is closed:
>
> ----------------------------------------------------------------------
> public static void main(String[] args) {
> Display d = Display.getDefault();
> final Shell s = new Shell(d, SWT.CLOSE | SWT.TITLE | SWT.MIN);
>
> s.addControlListener(new ControlListener() {
> private void setFixedBounds() {
> Rectangle r = s.getMonitor().getClientArea();
> r.height = 100;
> s.setBounds(r);
> }
>
> @Override
> public void controlMoved(ControlEvent e) {
> s.getDisplay().asyncExec(new Runnable() {
> @Override
> public void run() {
> setFixedBounds();
> }
> });
> }
>
> @Override
> public void controlResized(ControlEvent e) {
> setFixedBounds();
> }
> });
>
> s.open();
> s.layout();
> while(!s.isDisposed()) {
> if(!d.readAndDispatch())
> d.sleep();
> }
> }
> ----------------------------------------------------------------------
>
> Thanks,
> Enrico