Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 94502
Collapse All | Expand All

(-)Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java (-21 / +27 lines)
Lines 1798-1804 Link Here
1798
	display.dragging = false;
1798
	display.dragging = false;
1799
	int button = gdkEvent.button;
1799
	int button = gdkEvent.button;
1800
	int type = gdkEvent.type != OS.GDK_2BUTTON_PRESS ? SWT.MouseDown : SWT.MouseDoubleClick;
1800
	int type = gdkEvent.type != OS.GDK_2BUTTON_PRESS ? SWT.MouseDown : SWT.MouseDoubleClick;
1801
	sendMouseEvent (type, button, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, event);
1801
	sendMouseEvent (type, button, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, event);
1802
	int result = 0;
1802
	int result = 0;
1803
	if ((state & MENU) != 0) {
1803
	if ((state & MENU) != 0) {
1804
		if (gdkEvent.button == 3 && gdkEvent.type == OS.GDK_BUTTON_PRESS) {
1804
		if (gdkEvent.button == 3 && gdkEvent.type == OS.GDK_BUTTON_PRESS) {
Lines 1835-1841 Link Here
1835
	int button = gdkEvent.button;
1835
	int button = gdkEvent.button;
1836
	if (button == -6) button = 4;
1836
	if (button == -6) button = 4;
1837
	if (button == -7) button = 5;
1837
	if (button == -7) button = 5;
1838
	sendMouseEvent (SWT.MouseUp, button, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, event);
1838
	sendMouseEvent (SWT.MouseUp, button, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, event);
1839
	return 0;
1839
	return 0;
1840
}
1840
}
1841
1841
Lines 1855-1861 Link Here
1855
	OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof);
1855
	OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof);
1856
	if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0;
1856
	if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0;
1857
	if (gdkEvent.subwindow != 0) return 0;
1857
	if (gdkEvent.subwindow != 0) return 0;
1858
	sendMouseEvent (SWT.MouseEnter, 0, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, event);
1858
	sendMouseEvent (SWT.MouseEnter, 0, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, event);
1859
	return 0;
1859
	return 0;
1860
}
1860
}
1861
1861
Lines 1976-1982 Link Here
1976
	OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof);
1976
	OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof);
1977
	if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0;
1977
	if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0;
1978
	if (gdkEvent.subwindow != 0) return 0;
1978
	if (gdkEvent.subwindow != 0) return 0;
1979
	sendMouseEvent (SWT.MouseExit, 0, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, event);
1979
	sendMouseEvent (SWT.MouseExit, 0, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, event);
1980
	return 0;
1980
	return 0;
1981
}
1981
}
1982
1982
Lines 2020-2035 Link Here
2020
	if (hooks (SWT.MouseHover) || filters (SWT.MouseHover)) {
2020
	if (hooks (SWT.MouseHover) || filters (SWT.MouseHover)) {
2021
		display.addMouseHoverTimeout (handle);
2021
		display.addMouseHoverTimeout (handle);
2022
	}
2022
	}
2023
	double x_root = gdkEvent.x_root, y_root = gdkEvent.y_root;
2023
	double x = gdkEvent.x_root, y = gdkEvent.y_root;
2024
	int state = gdkEvent.state;
2024
	int state = gdkEvent.state;
2025
	if (gdkEvent.is_hint != 0) {
2025
	if (gdkEvent.is_hint != 0) {
2026
		int [] pointer_x = new int [1], pointer_y = new int [1], mask = new int [1];
2026
		int [] pointer_x = new int [1], pointer_y = new int [1], mask = new int [1];
2027
		OS.gdk_window_get_pointer (0, pointer_x, pointer_y, mask);
2027
		int /*long*/ window = OS.GTK_WIDGET_WINDOW (eventHandle ());
2028
		x_root = pointer_x [0];
2028
		OS.gdk_window_get_pointer (window, pointer_x, pointer_y, mask);
2029
		y_root = pointer_y [0];
2029
		x = pointer_x [0];
2030
		y = pointer_y [0];
2030
		state = mask [0];
2031
		state = mask [0];
2031
	}
2032
	}
2032
	sendMouseEvent (SWT.MouseMove, 0, gdkEvent.time, x_root, y_root, state, event);
2033
	sendMouseEvent (SWT.MouseMove, 0, gdkEvent.time, x, y, gdkEvent.is_hint != 0, state, event);
2033
	return 0;
2034
	return 0;
2034
}
2035
}
2035
2036
Lines 2060-2079 Link Here
2060
	OS.memmove (gdkEvent, eventPtr, GdkEventScroll.sizeof);
2061
	OS.memmove (gdkEvent, eventPtr, GdkEventScroll.sizeof);
2061
	switch (gdkEvent.direction) {
2062
	switch (gdkEvent.direction) {
2062
		case OS.GDK_SCROLL_UP:
2063
		case OS.GDK_SCROLL_UP:
2063
			if (!sendMouseEvent (SWT.MouseWheel, 0, 3, SWT.SCROLL_LINE, true, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, eventPtr)) {
2064
			if (!sendMouseEvent (SWT.MouseWheel, 0, 3, SWT.SCROLL_LINE, true, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, eventPtr)) {
2064
				return 1;
2065
				return 1;
2065
			}
2066
			}
2066
			break;
2067
			break;
2067
		case OS.GDK_SCROLL_DOWN:
2068
		case OS.GDK_SCROLL_DOWN:
2068
			if (!sendMouseEvent (SWT.MouseWheel, 0, -3, SWT.SCROLL_LINE, true, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, eventPtr)) {
2069
			if (!sendMouseEvent (SWT.MouseWheel, 0, -3, SWT.SCROLL_LINE, true, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, eventPtr)) {
2069
				return 1;
2070
				return 1;
2070
			}
2071
			}
2071
			break;
2072
			break;
2072
		case OS.GDK_SCROLL_LEFT:
2073
		case OS.GDK_SCROLL_LEFT:
2073
			sendMouseEvent (SWT.MouseDown, 4, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, eventPtr);
2074
			sendMouseEvent (SWT.MouseDown, 4, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, eventPtr);
2074
			break;
2075
			break;
2075
		case OS.GDK_SCROLL_RIGHT:
2076
		case OS.GDK_SCROLL_RIGHT:
2076
			sendMouseEvent (SWT.MouseDown, 5, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, gdkEvent.state, eventPtr);
2077
			sendMouseEvent (SWT.MouseDown, 5, gdkEvent.time, gdkEvent.x_root, gdkEvent.y_root, false, gdkEvent.state, eventPtr);
2077
			break;
2078
			break;
2078
	}
2079
	}
2079
	return 0;
2080
	return 0;
Lines 2451-2472 Link Here
2451
	return false;
2452
	return false;
2452
}
2453
}
2453
2454
2454
boolean sendMouseEvent (int type, int button, int time, double x_root, double y_root, int state, int /*long*/ eventPtr) {
2455
boolean sendMouseEvent (int type, int button, int time, double x, double y, boolean window_relative, int state, int /*long*/ eventPtr) {
2455
	return sendMouseEvent (type, button, 0, 0, false, time, x_root, y_root, state, eventPtr);
2456
	return sendMouseEvent (type, button, 0, 0, false, time, x, y, window_relative, state, eventPtr);
2456
}
2457
}
2457
2458
2458
boolean sendMouseEvent (int type, int button, int count, int detail, boolean send, int time, double x_root, double y_root, int state, int /*long*/ eventPtr) {
2459
boolean sendMouseEvent (int type, int button, int count, int detail, boolean send, int time, double x, double y, boolean window_relative, int state, int /*long*/ eventPtr) {
2459
	if(!hooks (type) && !filters (type)) return true;
2460
	if(!hooks (type) && !filters (type)) return true;
2460
	Event event = new Event ();
2461
	Event event = new Event ();
2461
	event.time = time;
2462
	event.time = time;
2462
	event.button = button;
2463
	event.button = button;
2463
	event.detail = detail;
2464
	event.detail = detail;
2464
	event.count = count;
2465
	event.count = count;
2465
	int /*long*/ window = OS.GTK_WIDGET_WINDOW (eventHandle ());
2466
	if (window_relative) {
2466
	int [] origin_x = new int [1], origin_y = new int [1];
2467
		event.x = (int)x;
2467
	OS.gdk_window_get_origin (window, origin_x, origin_y);
2468
		event.y = (int)y;
2468
	event.x = (int)x_root - origin_x [0];
2469
	} else {
2469
	event.y = (int)y_root - origin_y [0];
2470
		int /*long*/ window = OS.GTK_WIDGET_WINDOW (eventHandle ());
2471
		int [] origin_x = new int [1], origin_y = new int [1];
2472
		OS.gdk_window_get_origin (window, origin_x, origin_y);
2473
		event.x = (int)x - origin_x [0];
2474
		event.y = (int)y - origin_y [0];
2475
	}
2470
	setInputState (event, state);
2476
	setInputState (event, state);
2471
	if (send) {
2477
	if (send) {
2472
		sendEvent (type, event);
2478
		sendEvent (type, event);

Return to bug 94502