diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index d478017676..1d29c8305c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -1514,7 +1514,7 @@ int /*long*/ filterProc (int /*long*/ xEvent, int /*long*/ gdkEvent, int /*long* public Point getCursorLocation () { checkDevice (); int [] x = new int [1], y = new int [1]; - OS.gdk_window_get_pointer (0, x, y, null); + gdk_window_get_device_position (0, x, y, null); return new Point (x [0], y [0]); } @@ -4397,4 +4397,21 @@ int /*long*/ windowTimerProc (int /*long*/ handle) { return widget.timerProc (handle); } +int /*long*/ gdk_window_get_device_position (int /*long*/ window, int[] x, int[] y, int[] mask) { + if (OS.GTK_VERSION >= OS.VERSION (3, 0, 0)) { + int /*long*/ display = 0; + if( window != 0) { + display = OS.gdk_window_get_display (window); + } else { + window = OS.gdk_get_default_root_window (); + display = OS.gdk_window_get_display (window); + } + int /*long*/ device_manager = OS.gdk_display_get_device_manager (display); + int /*long*/ pointer = OS.gdk_device_manager_get_client_pointer (device_manager); + return OS.gdk_window_get_device_position(window, pointer, x, y, mask); + } else { + return OS.gdk_window_get_pointer (window, x, y, mask); + } +} + } |