blob: 63c372612f54900874a4dc6af524426b7515db97 [file] [log] [blame]
package org.eclipse.swt.tests.gtk.snippets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
/*
* Title: Bug 514483 - [wayland] Launchbar filter closes when clicked
* How to run: launch snippet and follow onscreen instructions
* Bug description: The X-Y coordinates are relative to the child shell.
* Expected results: The X-Y coordinates are relative to the parent shell.
* GTK Version(s): GTK3.16+ (Wayland)
*/
public class Bug514483_getCursorLocation
{
public static void main(String[] args)
{
final Display display = new Display();
Shell shell = new Shell(display);
shell.setBounds(0, 0, 600, 600);
Label parentShellLabel = new Label(shell, SWT.None);
parentShellLabel.setText("Parent widget.shell.\n"
+ "INSTRUCTIONS:\n"
+ "- Parent widget.shell should be maximized.\n"
+ "- Child widget.shell should be at x400 y400 (in yellow square).\n"
+ "- Click inside the child widget.shell, observe result coordinates below.\n"
+ "\n"
+ "The bug is that x,y is not relative to parent, but relative to child-widget.shell itself (0-200 range).\n"
+ "Expected coordinates: between ~400 to ~600. (i.e, relative to parent's x,y.)\n"
+ "Result Coordinates:");
parentShellLabel.setBounds(0, 0, 600, 200);
final Label resultLbl = new Label(shell, SWT.None);
resultLbl.setBounds(0,180, 600, 100);
resultLbl.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
Label childShellLocation = new Label(shell, SWT.None);
childShellLocation.setText("Child Shell should be here.\nIf it is not, move it here \nmanually");
childShellLocation.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
childShellLocation.setBounds(400, 400, 200, 160);
Shell childShell = new Shell(shell, SWT.ON_TOP);
childShell.setBackground(display.getSystemColor(SWT.COLOR_DARK_YELLOW));
MouseAdapter clickListener = new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
Point loc = display.getCursorLocation();
resultLbl.setText(loc.toString());
if (loc.x > 300 && loc.x < 700 && loc.y > 300 && loc.y < 700) // give user some slack.
resultLbl.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
else
resultLbl.setBackground(display.getSystemColor(SWT.COLOR_RED));
}
};
childShell.addMouseListener(clickListener);
// display.addFilter(SWT.KeyDown, new Listener() {
// public void handleEvent(Event e) {
// if (e.type == SWT.KeyDown) {
// switch (e.keyCode) {
// case SWT.F1:
// System.out.println("Passed");
// break;
// case SWT.F2:
// System.out.println("Failed");
// break;
// case SWT.F3:
// System.out.println("Skipped");
// break;
// case SWT.F4:
// System.out.println("Exit Test suite");
// break;
// }
// }
// }
// });
shell.open();
childShell.open();
childShell.setBounds(400, 400, 200, 200);
while (!shell.isDisposed())
{
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}