Bug 528549 – (webkit2MouseListener) Snippet to reproduce.
bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=528549
Change-Id: I23490a3add32745be5a1aa93ac40ffc222430f41
Signed-off-by: Leo Ufimtsev <lufimtse@redhat.com>
diff --git a/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug528549_browser_MouseFocusEventListeners.java b/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug528549_browser_MouseFocusEventListeners.java
new file mode 100644
index 0000000..847ac99
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug528549_browser_MouseFocusEventListeners.java
@@ -0,0 +1,136 @@
+package org.eclipse.swt.tests.gtk.snippets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseWheelListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * On Webkit2, mouseUp/Down were not working.
+ * On Webkit1/2, Focus in/out were not working.
+ *
+ * Snippet prints events to console. Run and observer.
+ *
+ * On webkit1, signals were partially handled via javascript, on webkit2 only through gdk events.
+ *
+ */
+public class Bug528549_browser_MouseFocusEventListeners {
+
+ static int loadCounter;
+ public static void main(String[] args) {
+ Display display = new Display();
+ Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ shell.setSize(500, 200);
+ final Browser browser = new Browser(shell, SWT.NONE);
+
+ browser.addFocusListener(new FocusListener() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ System.out.println("Browser Focus lost " + e.toString());
+ }
+ @Override
+ public void focusGained(FocusEvent e) {
+ System.out.println("Browser Focus gained " + e.toString());
+ }
+ });
+
+ browser.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseUp(MouseEvent e) {
+ System.out.println("Browser Mouse Up " + e.toString());
+ }
+ @Override
+ public void mouseDown(MouseEvent e) {
+ System.out.println("Browser Mouse Down " + e.toString());
+
+ }
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ System.out.println("Browse Mouse Double click " + e.toString());
+ }
+ });
+
+
+ // Below listeners already worked before bug. But good to have around.
+ browser.addKeyListener(new KeyListener() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ System.out.println("Browser key released " + e.toString());
+ }
+ @Override
+ public void keyPressed(KeyEvent e) {
+ System.out.println("Browser key pressed " + e.toString());
+ }
+ });
+
+ browser.addMouseWheelListener(new MouseWheelListener() {
+ @Override
+ public void mouseScrolled(MouseEvent e) {
+ System.out.println("Browser scroll event " + e.toString());
+ }
+ });
+
+ // Generates a lot of events...
+ browser.addMouseMoveListener(new MouseMoveListener() {
+ @Override
+ public void mouseMove(MouseEvent e) {
+ System.out.println("Browser mouse moved " + e.toString());
+ }
+ });
+
+ Button jsOnButton = new Button(shell, SWT.PUSH);
+ jsOnButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ jsOnButton.setText("JS Off");
+ jsOnButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> browser.setJavascriptEnabled(false)));
+
+ Button jsOffButton = new Button(shell, SWT.PUSH);
+ jsOffButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ jsOffButton.setText("JS On");
+ jsOffButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> browser.setJavascriptEnabled(true)));
+
+
+ Button loadNextPage = new Button(shell, SWT.PUSH);
+ loadNextPage.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+ loadNextPage.setText("Load next page");
+ loadNextPage.addSelectionListener( SelectionListener.widgetSelectedAdapter(e -> browser.setText(getNewText())));
+
+ browser.setText(getNewText());
+
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ display.dispose();
+ }
+
+ static String getNewText() {
+ return "Hello world<br>"
+ + "<input type=\"button\" value=\"Open Curtain\" onclick=\"return change(this);\" />\n" +
+ "\n" +
+ "<script type=\"text/javascript\">\n" +
+ "function change( el )\n" +
+ "{\n" +
+ " if ( el.value === \"Open Curtain\" )\n" +
+ " el.value = \"Close Curtain\";\n" +
+ " else\n" +
+ " el.value = \"Open Curtain\";\n" +
+ "}\n" +
+ "</script>" + loadCounter++;
+ }
+
+
+}