Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Standard Widget Toolkit (SWT) » SWT Shell Resizing Problem on Linux/GTK
SWT Shell Resizing Problem on Linux/GTK [message #489265] Fri, 02 October 2009 07:28 Go to next message
Matt Seashore is currently offline Matt SeashoreFriend
Messages: 58
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------040301020000080606050105
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

I'm trying to create a borderless shell (NO_TRIM) with a minimum size on
Linux.

When I do this, resizing the window to be *larger* doesn't seem to work
(though resizing smaller works until it hits the minimum size). I've
attached a snippet which illustrates the problem I'm seeing.

Am I doing something wrong or is this a known issue?

FYI: I'm running SWT/GTK/x86 from Eclipse 3.5 SR1 (SWT version
3.5.1.v555a) under Ubuntu 9.04 with the default Gnome window manager.

Thanks,

Matt



------

package org.eclipse.riena.sample.snippets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
* Demonstrates apparent bug with borderless shells with a minimum size
set not
* being able to 'grow' (resize to a larger size) on Linux with GTK
*/
public class ResizeShellSnippet {

private static final int INITIAL_SIZE = 525;
public static final int MIN_SIZE = 500;

public ResizeShellSnippet(final Shell shell) {

Button grow = new Button(shell, SWT.PUSH);
grow.setText("Grow"); //$NON-NLS-1$
grow.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Rectangle rect = shell.getBounds();
rect.height = rect.height + 5;
rect.width = rect.width + 5;
shell.setBounds(rect);
}
});

Button shrink = new Button(shell, SWT.PUSH);
shrink.setText("Shrink"); //$NON-NLS-1$
shrink.addSelectionListener(new SelectionAdapter() {

@Override
public void widgetSelected(SelectionEvent e) {
Rectangle rect = shell.getBounds();
rect.height = rect.height - 5;
rect.width = rect.width - 5;
shell.setBounds(rect);
}
});

Button close = new Button(shell, SWT.PUSH);
close.setText("Close"); //$NON-NLS-1$
close.addSelectionListener(new SelectionAdapter() {

@Override
public void widgetSelected(SelectionEvent e) {
shell.close();
}
});
}

public static void main(String[] args) {
Display display = Display.getDefault();
try {
//The regular shell will be able to grow
final Shell shell = new Shell();

shell.setMinimumSize(MIN_SIZE, MIN_SIZE);

shell.setLayout(new GridLayout());
new ResizeShellSnippet(shell);
shell.pack();
shell.setBounds(0, 0, INITIAL_SIZE, INITIAL_SIZE);

shell.open();

//The borderless shell with a minimum size won't be able to grow
//(Though it can shrink to the minimum size)
final Shell shell2 = new Shell(SWT.NO_TRIM);

shell2.setMinimumSize(MIN_SIZE, MIN_SIZE);

shell2.setLayout(new GridLayout());
new ResizeShellSnippet(shell2);
shell2.pack();
shell2.setBounds(INITIAL_SIZE, 0, INITIAL_SIZE, INITIAL_SIZE);

shell2.open();

while (!shell.isDisposed() && !shell2.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} finally {
display.dispose();
}
}

}

--------------040301020000080606050105
Content-Type: text/x-java;
name="ResizeShellSnippet.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="ResizeShellSnippet.java"

cGFja2FnZSBvcmcuZWNsaXBzZS5yaWVuYS5zYW1wbGUuc25pcHBldHM7Cgpp bXBvcnQgb3Jn
LmVjbGlwc2Uuc3d0LlNXVDsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVu dHMuU2VsZWN0
aW9uQWRhcHRlcjsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2Vs ZWN0aW9uRXZl
bnQ7CmltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xl OwppbXBvcnQg
b3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwppbXBvcnQgb3Jn LmVjbGlwc2Uu
c3d0LndpZGdldHMuQnV0dG9uOwppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0Lndp ZGdldHMuRGlz
cGxheTsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwoK LyoqCiAqIERl
bW9uc3RyYXRlcyBhcHBhcmVudCBidWcgd2l0aCBib3JkZXJsZXNzIHNoZWxs cyB3aXRoIGEg
bWluaW11bSBzaXplIHNldCBub3QKICogYmVpbmcgYWJsZSB0byAnZ3Jvdycg KHJlc2l6ZSB0
byBhIGxhcmdlciBzaXplKSBvbiBMaW51eCB3aXRoIEdUSwogKi8KcHVibGlj IGNsYXNzIFJl
c2l6ZVNoZWxsU25pcHBldCB7CgoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50 IElOSVRJQUxf
U0laRSA9IDUyNTsKCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9TSVpF ID0gNTAwOwoK
CXB1YmxpYyBSZXNpemVTaGVsbFNuaXBwZXQoZmluYWwgU2hlbGwgc2hlbGwp IHsKCgkJQnV0
dG9uIGdyb3cgPSBuZXcgQnV0dG9uKHNoZWxsLCBTV1QuUFVTSCk7CgkJZ3Jv dy5zZXRUZXh0
KCJHcm93Iik7IC8vJE5PTi1OTFMtMSQKCQlncm93LmFkZFNlbGVjdGlvbkxp c3RlbmVyKG5l
dyBTZWxlY3Rpb25BZGFwdGVyKCkgewoJCQlAT3ZlcnJpZGUKCQkJcHVibGlj IHZvaWQgd2lk
Z2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewoJCQkJUmVjdGFuZ2xl IHJlY3QgPSBz
aGVsbC5nZXRCb3VuZHMoKTsKCQkJCXJlY3QuaGVpZ2h0ID0gcmVjdC5oZWln aHQgKyA1OwoJ
CQkJcmVjdC53aWR0aCA9IHJlY3Qud2lkdGggKyA1OwoJCQkJc2hlbGwuc2V0 Qm91bmRzKHJl
Y3QpOwoJCQl9CgkJfSk7CgoJCUJ1dHRvbiBzaHJpbmsgPSBuZXcgQnV0dG9u KHNoZWxsLCBT
V1QuUFVTSCk7CgkJc2hyaW5rLnNldFRleHQoIlNocmluayIpOyAvLyROT04t TkxTLTEkCgkJ
c2hyaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFw dGVyKCkgewoK
CQkJQE92ZXJyaWRlCgkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNl bGVjdGlvbkV2
ZW50IGUpIHsKCQkJCVJlY3RhbmdsZSByZWN0ID0gc2hlbGwuZ2V0Qm91bmRz KCk7CgkJCQly
ZWN0LmhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gNTsKCQkJCXJlY3Qud2lkdGgg PSByZWN0Lndp
ZHRoIC0gNTsKCQkJCXNoZWxsLnNldEJvdW5kcyhyZWN0KTsKCQkJfQoJCX0p OwoKCQlCdXR0
b24gY2xvc2UgPSBuZXcgQnV0dG9uKHNoZWxsLCBTV1QuUFVTSCk7CgkJY2xv c2Uuc2V0VGV4
dCgiQ2xvc2UiKTsgLy8kTk9OLU5MUy0xJAoJCWNsb3NlLmFkZFNlbGVjdGlv bkxpc3RlbmVy
KG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewoKCQkJQE92ZXJyaWRlCgkJCXB1 YmxpYyB2b2lk
IHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKCQkJCXNoZWxs LmNsb3NlKCk7
CgkJCX0KCQl9KTsKCX0KCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJp bmdbXSBhcmdz
KSB7CgkJRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7 CgkJdHJ5IHsK
CQkJLy9UaGUgcmVndWxhciBzaGVsbCB3aWxsIGJlIGFibGUgdG8gZ3JvdwoJ CQlmaW5hbCBT
aGVsbCBzaGVsbCA9IG5ldyBTaGVsbCgpOwoKCQkJc2hlbGwuc2V0TWluaW11 bVNpemUoTUlO
X1NJWkUsIE1JTl9TSVpFKTsKCgkJCXNoZWxsLnNldExheW91dChuZXcgR3Jp ZExheW91dCgp
KTsKCQkJbmV3IFJlc2l6ZVNoZWxsU25pcHBldChzaGVsbCk7CgkJCXNoZWxs LnBhY2soKTsK
CQkJc2hlbGwuc2V0Qm91bmRzKDAsIDAsIElOSVRJQUxfU0laRSwgSU5JVElB TF9TSVpFKTsK
CgkJCXNoZWxsLm9wZW4oKTsKCgkJCS8vVGhlIGJvcmRlcmxlc3Mgc2hlbGwg d2l0aCBhIG1p
bmltdW0gc2l6ZSB3b24ndCBiZSBhYmxlIHRvIGdyb3cKCQkJLy8oVGhvdWdo IGl0IGNhbiBz
aHJpbmsgdG8gdGhlIG1pbmltdW0gc2l6ZSkKCQkJZmluYWwgU2hlbGwgc2hl bGwyID0gbmV3
IFNoZWxsKFNXVC5OT19UUklNKTsKCgkJCXNoZWxsMi5zZXRNaW5pbXVtU2l6 ZShNSU5fU0la
RSwgTUlOX1NJWkUpOwoKCQkJc2hlbGwyLnNldExheW91dChuZXcgR3JpZExh eW91dCgpKTsK
CQkJbmV3IFJlc2l6ZVNoZWxsU25pcHBldChzaGVsbDIpOwoJCQlzaGVsbDIu cGFjaygpOwoJ
CQlzaGVsbDIuc2V0Qm91bmRzKElOSVRJQUxfU0laRSwgMCwgSU5JVElBTF9T SVpFLCBJTklU
SUFMX1NJWkUpOwoKCQkJc2hlbGwyLm9wZW4oKTsKCgkJCXdoaWxlICghc2hl bGwuaXNEaXNw
b3NlZCgpICYmICFzaGVsbDIuaXNEaXNwb3NlZCgpKSB7CgkJCQlpZiAoIWRp c3BsYXkucmVh
ZEFuZERpc3BhdGNoKCkpIHsKCQkJCQlkaXNwbGF5LnNsZWVwKCk7CgkJCQl9 CgkJCX0KCQl9
IGZpbmFsbHkgewoJCQlkaXNwbGF5LmRpc3Bvc2UoKTsKCQl9Cgl9Cgp9
--------------040301020000080606050105--
Re: SWT Shell Resizing Problem on Linux/GTK [message #489410 is a reply to message #489265] Fri, 02 October 2009 20:48 Go to previous message
Grant Gayed is currently offline Grant GayedFriend
Messages: 2150
Registered: July 2009
Senior Member
Hi Matt,

This looks like a bug so I've logged
https://bugs.eclipse.org/bugs/show_bug.cgi?id=291253 .

Grant


"Matt Seashore" <mseashore@gmail.com> wrote in message
news:ha4a2f$km0$1@build.eclipse.org...
> Hi,
>
> I'm trying to create a borderless shell (NO_TRIM) with a minimum size on
> Linux.
>
> When I do this, resizing the window to be *larger* doesn't seem to work
> (though resizing smaller works until it hits the minimum size). I've
> attached a snippet which illustrates the problem I'm seeing.
>
> Am I doing something wrong or is this a known issue?
>
> FYI: I'm running SWT/GTK/x86 from Eclipse 3.5 SR1 (SWT version
> 3.5.1.v555a) under Ubuntu 9.04 with the default Gnome window manager.
>
> Thanks,
>
> Matt
>
>
>
> ------
>
> package org.eclipse.riena.sample.snippets;
>
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.graphics.Rectangle;
> import org.eclipse.swt.layout.GridLayout;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
>
> /**
> * Demonstrates apparent bug with borderless shells with a minimum size
> set not
> * being able to 'grow' (resize to a larger size) on Linux with GTK
> */
> public class ResizeShellSnippet {
>
> private static final int INITIAL_SIZE = 525;
> public static final int MIN_SIZE = 500;
>
> public ResizeShellSnippet(final Shell shell) {
>
> Button grow = new Button(shell, SWT.PUSH);
> grow.setText("Grow"); //$NON-NLS-1$
> grow.addSelectionListener(new SelectionAdapter() {
> @Override
> public void widgetSelected(SelectionEvent e) {
> Rectangle rect = shell.getBounds();
> rect.height = rect.height + 5;
> rect.width = rect.width + 5;
> shell.setBounds(rect);
> }
> });
>
> Button shrink = new Button(shell, SWT.PUSH);
> shrink.setText("Shrink"); //$NON-NLS-1$
> shrink.addSelectionListener(new SelectionAdapter() {
>
> @Override
> public void widgetSelected(SelectionEvent e) {
> Rectangle rect = shell.getBounds();
> rect.height = rect.height - 5;
> rect.width = rect.width - 5;
> shell.setBounds(rect);
> }
> });
>
> Button close = new Button(shell, SWT.PUSH);
> close.setText("Close"); //$NON-NLS-1$
> close.addSelectionListener(new SelectionAdapter() {
>
> @Override
> public void widgetSelected(SelectionEvent e) {
> shell.close();
> }
> });
> }
>
> public static void main(String[] args) {
> Display display = Display.getDefault();
> try {
> //The regular shell will be able to grow
> final Shell shell = new Shell();
>
> shell.setMinimumSize(MIN_SIZE, MIN_SIZE);
>
> shell.setLayout(new GridLayout());
> new ResizeShellSnippet(shell);
> shell.pack();
> shell.setBounds(0, 0, INITIAL_SIZE, INITIAL_SIZE);
>
> shell.open();
>
> //The borderless shell with a minimum size won't be able to grow
> //(Though it can shrink to the minimum size)
> final Shell shell2 = new Shell(SWT.NO_TRIM);
>
> shell2.setMinimumSize(MIN_SIZE, MIN_SIZE);
>
> shell2.setLayout(new GridLayout());
> new ResizeShellSnippet(shell2);
> shell2.pack();
> shell2.setBounds(INITIAL_SIZE, 0, INITIAL_SIZE, INITIAL_SIZE);
>
> shell2.open();
>
> while (!shell.isDisposed() && !shell2.isDisposed()) {
> if (!display.readAndDispatch()) {
> display.sleep();
> }
> }
> } finally {
> display.dispose();
> }
> }
>
> }
>


------------------------------------------------------------ ----------------
----


> package org.eclipse.riena.sample.snippets;
>
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.graphics.Rectangle;
> import org.eclipse.swt.layout.GridLayout;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
>
> /**
> * Demonstrates apparent bug with borderless shells with a minimum size
set not
> * being able to 'grow' (resize to a larger size) on Linux with GTK
> */
> public class ResizeShellSnippet {
>
> private static final int INITIAL_SIZE = 525;
> public static final int MIN_SIZE = 500;
>
> public ResizeShellSnippet(final Shell shell) {
>
> Button grow = new Button(shell, SWT.PUSH);
> grow.setText("Grow"); //$NON-NLS-1$
> grow.addSelectionListener(new SelectionAdapter() {
> @Override
> public void widgetSelected(SelectionEvent e) {
> Rectangle rect = shell.getBounds();
> rect.height = rect.height + 5;
> rect.width = rect.width + 5;
> shell.setBounds(rect);
> }
> });
>
> Button shrink = new Button(shell, SWT.PUSH);
> shrink.setText("Shrink"); //$NON-NLS-1$
> shrink.addSelectionListener(new SelectionAdapter() {
>
> @Override
> public void widgetSelected(SelectionEvent e) {
> Rectangle rect = shell.getBounds();
> rect.height = rect.height - 5;
> rect.width = rect.width - 5;
> shell.setBounds(rect);
> }
> });
>
> Button close = new Button(shell, SWT.PUSH);
> close.setText("Close"); //$NON-NLS-1$
> close.addSelectionListener(new SelectionAdapter() {
>
> @Override
> public void widgetSelected(SelectionEvent e) {
> shell.close();
> }
> });
> }
>
> public static void main(String[] args) {
> Display display = Display.getDefault();
> try {
> //The regular shell will be able to grow
> final Shell shell = new Shell();
>
> shell.setMinimumSize(MIN_SIZE, MIN_SIZE);
>
> shell.setLayout(new GridLayout());
> new ResizeShellSnippet(shell);
> shell.pack();
> shell.setBounds(0, 0, INITIAL_SIZE, INITIAL_SIZE);
>
> shell.open();
>
> //The borderless shell with a minimum size won't be able to grow
> //(Though it can shrink to the minimum size)
> final Shell shell2 = new Shell(SWT.NO_TRIM);
>
> shell2.setMinimumSize(MIN_SIZE, MIN_SIZE);
>
> shell2.setLayout(new GridLayout());
> new ResizeShellSnippet(shell2);
> shell2.pack();
> shell2.setBounds(INITIAL_SIZE, 0, INITIAL_SIZE, INITIAL_SIZE);
>
> shell2.open();
>
> while (!shell.isDisposed() && !shell2.isDisposed()) {
> if (!display.readAndDispatch()) {
> display.sleep();
> }
> }
> } finally {
> display.dispose();
> }
> }
>
> }
Previous Topic:Problem with toolbar button activation
Next Topic:StackLayout in SashForm
Goto Forum:
  


Current Time: Tue Mar 19 05:38:13 GMT 2024

Powered by FUDForum. Page generated in 0.02755 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top