blob: b7aa12fae9e55943c5050ba6a72cc06b2a9165b1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Red Hat and others. All rights reserved.
* The contents of this file are made available under the terms
* of the GNU Lesser General Public License (LGPL) Version 2.1 that
* accompanies this distribution (lgpl-v21.txt). The LGPL is also
* available at http://www.gnu.org/licenses/lgpl.html. If the version
* of the LGPL at http://www.gnu.org is different to the version of
* the LGPL accompanying this distribution and there is any conflict
* between the two license versions, the terms of the LGPL accompanying
* this distribution shall govern.
*
* Contributors:
* Red Hat - initial API and implementation
*******************************************************************************/
//package org.eclipse.swt.tests.gtk.snippets;
//
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.internal.gtk.GTK;
//import org.eclipse.swt.internal.gtk.GtkAllocation;
//import org.eclipse.swt.internal.gtk.OS;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Menu;
//import org.eclipse.swt.widgets.MenuItem;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.swt.widgets.Widget;
//
//
///*
// * Title: Bug 526083 - [GTK3] Menu.getBounds() returns wrong x & y coordinate
// * How to run: launch snippet, right click in the boxes, observe messages printed in the console
// * Bug description: The "getBounds" line has incorrect values
// * Expected results: The "getBounds" line should have the same values as the "correct bounds" line
// * GTK Version(s): GTK3
// */
//public class Bug526083_MenuGetBounds {
//
// public static void main(String[] args) {
// final Display display = new Display();
// Shell shell = new Shell(display);
// shell.setLayout(new GridLayout(2, false));
// Composite c1 = new Composite(shell, SWT.BORDER);
// c1.setLayoutData(new GridData(100, 100));
// Composite c2 = new Composite(shell, SWT.BORDER);
// c2.setLayoutData(new GridData(100, 100));
// final Menu menu = new Menu(shell, SWT.POP_UP);
// MenuItem item = new MenuItem(menu, SWT.PUSH);
// item.setText("Popup");
// menu.addListener(SWT.Show, event -> display.asyncExec(() -> {
// try {
// // menu.getBounds call
// System.err.println("getBounds: " + invoke(menu, "getBounds"));
// System.err.println("-----------------------------------------");
// // menu.getBounds implementation
//// long /*int*/ window = gtk_widget_get_window (menu.handle);
// long /*int*/ window = ((Long)invoke(Widget.class, "gtk_widget_get_window", true, menu, new Object[] { Long.valueOf(menu.handle) })).longValue();
// int [] origin_x = new int [1], origin_y = new int [1];
// OS.gdk_window_get_origin (window, origin_x, origin_y);
// GtkAllocation allocation = new GtkAllocation ();
// GTK.gtk_widget_get_allocation (menu.handle, allocation);
// System.err.println(origin_x[0] + " " + origin_y[0] + " " + allocation.x + " " + allocation.y + " " + allocation.width + " " + allocation.height);
// int x = origin_x [0] + allocation.x;
// int y = origin_y [0] + allocation.y;
// int width = allocation.width;
// int height = allocation.height;
// Rectangle bounds = new Rectangle (x, y, width, height);
// System.err.println("allocation: " + allocation.x + " " + allocation.y + " " + allocation.width + " " + allocation.height);
// System.err.println("bounds: " + bounds);
// System.err.println("-----------------------------------------");
// // correct bounds (without allocation)
// x = origin_x [0];
// y = origin_y [0];
// bounds = new Rectangle (x, y, width, height);
// System.err.println("correct bounds: " + bounds);
// } catch (Throwable t) {
// t.printStackTrace();
// }
// }));
// c1.setMenu(menu);
// c2.setMenu(menu);
// shell.setMenu(menu);
// shell.setSize(300, 300);
// shell.setLocation(100, 100);
// shell.open();
// while (!shell.isDisposed()) {
// if (!display.readAndDispatch())
// display.sleep();
// }
// display.dispose();
// }
//
// public final static Object invoke(final String clazzName, final String methodName, final Object... args)
// throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// return invoke(clazzName, methodName, false, args);
// }
//
// public final static Object invoke(final String clazzName, final String methodName, final Class<?>[] params, final Object... args)
// throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// return invoke(Class.forName(clazzName), methodName, false, null, params, args);
// }
//
// public final static Object invoke(final String clazzName, final String methodName, final boolean declaredMethod, final Object... args)
// throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// return invoke(Class.forName(clazzName), methodName, declaredMethod, null, args);
// }
//
// public final static Object invoke(final Object obj, final String methodName, final Object... args)
// throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// return invoke(obj.getClass(), methodName, true, obj, args);
// }
//
// public final static Object invoke(final Class<?> clazz, final String methodName, final boolean declaredMethod, final Object obj, final Object... args)
// throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// Class<?>[] params = new Class[args.length];
// for (int i = 0; i < args.length; i++) {
// Class<?> argClazz = args[i].getClass();
// try {
// Field typeField = argClazz.getField("TYPE"); //$NON-NLS-1$
// params[i] = (Class<?>) typeField.get(null);
// } catch (NoSuchFieldException e) {
// params[i] = argClazz;
// }
// }
// return invoke(clazz, methodName, declaredMethod, obj, params, args);
// }
//
// public final static Object invoke(final Class<?> clazz, final String methodName, final boolean declaredMethod, final Object obj, final Class<?>[] params, final Object... args)
// throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// Method method;
// if (declaredMethod) {
// method = clazz.getDeclaredMethod(methodName, params);
// method.setAccessible(true);
// } else {
// method = clazz.getMethod(methodName, params);
// }
// return method.invoke(obj, args);
// }
//
//}