aboutsummaryrefslogtreecommitdiffstats
path: root/src/newt/classes
diff options
context:
space:
mode:
Diffstat (limited to 'src/newt/classes')
-rw-r--r--src/newt/classes/com/jogamp/newt/Window.java3
-rw-r--r--src/newt/classes/com/jogamp/newt/opengl/GLWindow.java4
-rw-r--r--src/newt/classes/jogamp/newt/DefaultEDTUtil.java13
-rw-r--r--src/newt/classes/jogamp/newt/DisplayImpl.java2
-rw-r--r--src/newt/classes/jogamp/newt/WindowImpl.java145
-rw-r--r--src/newt/classes/jogamp/newt/driver/android/WindowDriver.java10
-rw-r--r--src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java49
-rw-r--r--src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java42
-rw-r--r--src/newt/classes/jogamp/newt/driver/windows/WindowDriver.java21
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java3
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java36
11 files changed, 188 insertions, 140 deletions
diff --git a/src/newt/classes/com/jogamp/newt/Window.java b/src/newt/classes/com/jogamp/newt/Window.java
index e43961e98..82f878a98 100644
--- a/src/newt/classes/com/jogamp/newt/Window.java
+++ b/src/newt/classes/com/jogamp/newt/Window.java
@@ -1029,8 +1029,9 @@ public interface Window extends NativeWindow, WindowClosingProtocol, ScalableSur
* @param y dirty-region x-pos in pixel units
* @param width dirty-region width in pixel units
* @param height dirty-region height in pixel units
+ * @return true if window {@link #isNativeValid()}
*/
- void windowRepaint(int x, int y, int width, int height);
+ boolean windowRepaint(int x, int y, int width, int height);
/**
* Enqueues a {@link com.jogamp.newt.event.NEWTEvent NEWT event}.
diff --git a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java
index cbac22e26..09f5e1ebf 100644
--- a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java
+++ b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java
@@ -844,8 +844,8 @@ public class GLWindow extends GLAutoDrawableBase implements GLAutoDrawable, Wind
// Window completion
//
@Override
- public final void windowRepaint(final int x, final int y, final int width, final int height) {
- window.windowRepaint(x, y, width, height);
+ public final boolean windowRepaint(final int x, final int y, final int width, final int height) {
+ return window.windowRepaint(x, y, width, height);
}
@Override
diff --git a/src/newt/classes/jogamp/newt/DefaultEDTUtil.java b/src/newt/classes/jogamp/newt/DefaultEDTUtil.java
index ff713410b..26a2544c7 100644
--- a/src/newt/classes/jogamp/newt/DefaultEDTUtil.java
+++ b/src/newt/classes/jogamp/newt/DefaultEDTUtil.java
@@ -146,10 +146,14 @@ public class DefaultEDTUtil implements EDTUtil {
@Override
public final boolean invokeStop(final boolean wait, final Runnable task) {
if(DEBUG) {
- System.err.println(Thread.currentThread()+": Default-EDT.invokeStop wait "+wait);
+ System.err.println(Thread.currentThread()+": Default-EDT.invokeStop.0 wait "+wait+" "+this);
ExceptionUtils.dumpStack(System.err);
}
- return invokeImpl(wait, task, true /* stop */, false /* provokeError */);
+ final boolean res = invokeImpl(wait, task, true /* stop */, false /* provokeError */);
+ if(DEBUG) {
+ System.err.println(Thread.currentThread()+": Default-EDT.invokeStop.X wait "+wait+" "+this);
+ }
+ return res;
}
public final boolean invokeAndWaitError(final Runnable task) {
@@ -202,7 +206,8 @@ public class DefaultEDTUtil implements EDTUtil {
if( !edt.isRunning ) {
if( null != task ) {
if( stop ) {
- System.err.println(Thread.currentThread()+": Warning: Default-EDT is about (3) to stop and stopped already, dropping task. Remaining tasks: "+edt.tasks.size()+" - "+edt);
+ System.err.println(Thread.currentThread()+": Warning: Default-EDT is about (3) to stop and stopped already, executing stop-task. Remaining tasks: "+edt.tasks.size()+" - "+edt);
+ task.run();
} else {
System.err.println(Thread.currentThread()+": Warning: Default-EDT is not running, dropping task. NEDT "+edt);
}
@@ -210,7 +215,7 @@ public class DefaultEDTUtil implements EDTUtil {
ExceptionUtils.dumpStack(System.err);
}
}
- return false;
+ return stop; // OK if invokeStop
} else if( stop && null == task ) {
task = nullTask; // ensures execution triggering stop
}
diff --git a/src/newt/classes/jogamp/newt/DisplayImpl.java b/src/newt/classes/jogamp/newt/DisplayImpl.java
index aea42b66d..cea779d0b 100644
--- a/src/newt/classes/jogamp/newt/DisplayImpl.java
+++ b/src/newt/classes/jogamp/newt/DisplayImpl.java
@@ -821,6 +821,6 @@ public abstract class DisplayImpl extends Display {
protected int hashCode;
protected int refCount; // number of Display references by Screen
protected boolean exclusive; // do not share this display, uses NullLock!
- protected AbstractGraphicsDevice aDevice;
+ protected volatile AbstractGraphicsDevice aDevice;
}
diff --git a/src/newt/classes/jogamp/newt/WindowImpl.java b/src/newt/classes/jogamp/newt/WindowImpl.java
index 75c1e9474..ff333f720 100644
--- a/src/newt/classes/jogamp/newt/WindowImpl.java
+++ b/src/newt/classes/jogamp/newt/WindowImpl.java
@@ -69,7 +69,6 @@ import com.jogamp.common.ExceptionUtils;
import com.jogamp.common.os.Clock;
import com.jogamp.common.util.ArrayHashSet;
import com.jogamp.common.util.Bitfield;
-import com.jogamp.common.util.InterruptSource;
import com.jogamp.common.util.PropertyAccess;
import com.jogamp.common.util.ReflectionUtil;
import com.jogamp.common.util.locks.LockFactory;
@@ -2363,7 +2362,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
return stateMask.get(STATE_BIT_MAXIMIZED_HORZ);
}
/** Triggered by implementation's WM events to update maximized window state. */
- protected final void maximizedChanged(final boolean newMaxHorz, final boolean newMaxVert) {
+ protected final boolean maximizedChanged(final boolean newMaxHorz, final boolean newMaxVert) {
if( !isFullscreen() ) {
final String stateMask0 = DEBUG_IMPLEMENTATION ? getStateMaskString() : null;
final boolean changedHorz = stateMask.put(STATE_BIT_MAXIMIZED_HORZ, newMaxHorz) != newMaxHorz;
@@ -2381,6 +2380,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
System.err.println("Window.maximizedChanged.ignored: "+stateMask0+" -> max["+(newMaxHorz?"":"!")+"h, "+(newMaxVert?"":"!")+"v]");
}
}
+ return isNativeValid();
}
/**
* Manually calculate maximized and de-maximized position and size
@@ -3756,14 +3756,16 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
// Native MouseEvents pre-processed to be enqueued or consumed directly
//
- public final void sendMouseEvent(final short eventType, final int modifiers,
- final int x, final int y, final short button, final float rotation) {
+ public final boolean sendMouseEvent(final short eventType, final int modifiers,
+ final int x, final int y, final short button, final float rotation) {
doMouseEvent(false, false, eventType, modifiers, x, y, button, MouseEvent.getRotationXYZ(rotation, modifiers), 1f);
+ return isNativeValid();
}
- public final void enqueueMouseEvent(final boolean wait, final short eventType, final int modifiers,
+ public final boolean enqueueMouseEvent(final boolean wait, final short eventType, final int modifiers,
final int x, final int y, final short button, final float rotation) {
doMouseEvent(true, wait, eventType, modifiers, x, y, button, MouseEvent.getRotationXYZ(rotation, modifiers), 1f);
+ return isNativeValid();
}
protected final void doMouseEvent(final boolean enqueue, final boolean wait, final short eventType, final int modifiers,
final int x, final int y, final short button, final float rotation) {
@@ -4543,14 +4545,16 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
return false;
}
- public void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
// Always add currently pressed mouse buttons to modifier mask
consumeKeyEvent( KeyEvent.create(eventType, this, System.currentTimeMillis(), modifiers | pState1.buttonPressedMask, keyCode, keySym, keyChar) );
+ return isNativeValid();
}
- public void enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public boolean enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
// Always add currently pressed mouse buttons to modifier mask
enqueueEvent(wait, KeyEvent.create(eventType, this, System.currentTimeMillis(), modifiers | pState1.buttonPressedMask, keyCode, keySym, keyChar) );
+ return isNativeValid();
}
@Override
@@ -4779,7 +4783,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
//
/** Triggered by implementation's WM events to update the focus state. */
- protected void focusChanged(final boolean defer, final boolean focusGained) {
+ protected boolean focusChanged(final boolean defer, final boolean focusGained) {
if( stateMask.get(PSTATE_BIT_FOCUS_CHANGE_BROKEN) ||
stateMask.get(STATE_BIT_FOCUSED) != focusGained )
{
@@ -4797,15 +4801,17 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
enqueueWindowEvent(false, evt);
}
}
+ return isNativeValid();
}
/** Triggered by implementation's WM events to update the visibility state. */
- protected final void visibleChanged(final boolean visible) {
+ protected final boolean visibleChanged(final boolean visible) {
if( stateMask.put(STATE_BIT_VISIBLE, visible) != visible ) {
if(DEBUG_IMPLEMENTATION) {
System.err.println("Window.visibleChanged ("+getThreadName()+"): visible "+(!visible)+" -> state "+getStateMaskString()+" - windowHandle "+toHexString(windowHandle)+" parentWindowHandle "+toHexString(parentWindowHandle));
}
}
+ return isNativeValid();
}
/** Triggered by implementation's WM events to update the client-area size in window units w/o insets/decorations. */
@@ -4840,10 +4846,8 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
enqueueWindowEvent(false, WindowEvent.EVENT_WINDOW_RESIZED);
}
}
- return true;
- } else {
- return false;
}
+ return isNativeValid();
}
/** Triggered by implementation's WM events to update the position. */
@@ -4871,11 +4875,10 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
} else {
enqueueWindowEvent(false, WindowEvent.EVENT_WINDOW_MOVED);
}
- return true;
} else {
stateMask.clear(STATE_BIT_AUTOPOSITION); // ensure it's off even w/ same position
- return false;
}
+ return isNativeValid();
}
/**
@@ -4888,7 +4891,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @see #getInsets()
* @see #updateInsetsImpl(Insets)
*/
- protected final void insetsChanged(final boolean windowUnits, final int leftU, final int rightU, final int topU, final int bottomU) {
+ protected final boolean insetsChanged(final boolean windowUnits, final int leftU, final int rightU, final int topU, final int bottomU) {
if ( leftU >= 0 && rightU >= 0 && topU >= 0 && bottomU >= 0 ) {
final int[] tl_win;
final int[] br_win;
@@ -4915,6 +4918,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
insets.set(tl_win[0], br_win[0], tl_win[1], br_win[1]);
}
}
+ return isNativeValid();
}
/**
@@ -4925,7 +4929,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param width dirty-region width in pixel units
* @param height dirty-region height in pixel units
*/
- protected final void windowRepaint(final boolean defer, final int x, final int y, int width, int height) {
+ protected final boolean windowRepaint(final boolean defer, final int x, final int y, int width, int height) {
width = ( 0 >= width ) ? getSurfaceWidth() : width;
height = ( 0 >= height ) ? getSurfaceHeight() : height;
if(DEBUG_IMPLEMENTATION) {
@@ -4936,6 +4940,9 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
final NEWTEvent e = new WindowUpdateEvent(WindowEvent.EVENT_WINDOW_REPAINT, this, System.currentTimeMillis(),
new Rectangle(x, y, width, height));
doEvent(defer, false, e);
+ return true;
+ } else {
+ return false;
}
}
@@ -5002,19 +5009,21 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param button
* @param rotation
*/
- protected final void visibleChangedSendMouseEvent(final boolean defer, final int visibleChange,
- final short eventType, final int modifiers,
- final int x, final int y, final short button, final float rotation) {
+ protected final boolean visibleChangedSendMouseEvent(final boolean defer, final int visibleChange,
+ final short eventType, final int modifiers,
+ final int x, final int y, final short button, final float rotation) {
+ boolean res = true;
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = visibleChanged(0 < visibleChange);
}
if( 0 < eventType ) {
if( defer ) {
- enqueueMouseEvent(false /* wait */, eventType, modifiers, x, y, button, rotation);
+ res = res && enqueueMouseEvent(false /* wait */, eventType, modifiers, x, y, button, rotation);
} else {
- sendMouseEvent(eventType, modifiers, x, y, button, rotation);
+ res = res && sendMouseEvent(eventType, modifiers, x, y, button, rotation);
}
}
+ return res;
}
/**
@@ -5026,12 +5035,13 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param width dirty-region width in pixel units
* @param height dirty-region height in pixel units
*/
- protected final void visibleChangedWindowRepaint(final boolean defer, final int visibleChange,
- final int x, final int y, final int width, final int height) {
+ protected final boolean visibleChangedWindowRepaint(final boolean defer, final int visibleChange,
+ final int x, final int y, final int width, final int height) {
+ boolean res = true;
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = visibleChanged(0 < visibleChange);
}
- windowRepaint(defer, x, y, width, height);
+ return res && windowRepaint(defer, x, y, width, height);
}
/**
@@ -5041,15 +5051,17 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param focusChange -1 ignored, 0 unfocused, > 0 focused
* @param visibleChange -1 ignored, 0 invisible, > 0 visible
*/
- protected final void focusVisibleChanged(final boolean defer,
- final int focusChange,
- final int visibleChange) {
+ protected final boolean focusVisibleChanged(final boolean defer,
+ final int focusChange,
+ final int visibleChange) {
+ boolean res = true;
if( 0 <= focusChange ) { // ignore focus < 0
- focusChanged(defer, 0 < focusChange);
+ res = focusChanged(defer, 0 < focusChange);
}
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = res && visibleChanged(0 < visibleChange);
}
+ return res && isNativeValid();
}
/**
@@ -5061,12 +5073,13 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param bottom insets, -1 ignored
* @param visibleChange -1 ignored, 0 invisible, > 0 visible
*/
- protected final void insetsVisibleChanged(final boolean windowUnits,
- final int left, final int right, final int top, final int bottom, final int visibleChange) {
- insetsChanged(windowUnits, left, right, top, bottom);
+ protected final boolean insetsVisibleChanged(final boolean windowUnits,
+ final int left, final int right, final int top, final int bottom, final int visibleChange) {
+ boolean res = insetsChanged(windowUnits, left, right, top, bottom);
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = res && visibleChanged(0 < visibleChange);
}
+ return res;
}
/**
@@ -5086,21 +5099,22 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param visibleChange -1 ignored, 0 invisible, > 0 visible
* @param force
*/
- protected final void sizePosInsetsFocusVisibleChanged(final boolean defer,
- final boolean windowUnits,
- final int newX, final int newY, final int newWidth, final int newHeight,
- final int left, final int right, final int top, final int bottom,
- final int focusChange,
- final int visibleChange, final boolean force) {
- sizeChanged(defer, windowUnits, newWidth, newHeight, force);
- positionChanged(defer, windowUnits, newX, newY);
- insetsChanged(windowUnits, left, right, top, bottom);
+ protected final boolean sizePosInsetsFocusVisibleChanged(final boolean defer,
+ final boolean windowUnits,
+ final int newX, final int newY, final int newWidth, final int newHeight,
+ final int left, final int right, final int top, final int bottom,
+ final int focusChange,
+ final int visibleChange, final boolean force) {
+ boolean res = sizeChanged(defer, windowUnits, newWidth, newHeight, force);
+ res = res && positionChanged(defer, windowUnits, newX, newY);
+ res = res && insetsChanged(windowUnits, left, right, top, bottom);
if( 0 <= focusChange ) { // ignore focus < 0
- focusChanged(defer, 0 < focusChange);
+ res = res && focusChanged(defer, 0 < focusChange);
}
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = res && visibleChanged(0 < visibleChange);
}
+ return res;
}
/**
@@ -5122,20 +5136,21 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
* @param force
* @param windowUnits if true, values are given in window units, otherwise in pixel units.
*/
- protected final void sizePosMaxInsetsVisibleChanged(final boolean defer, final boolean windowUnits,
- final int newX, final int newY, final int newWidth, final int newHeight,
- final int maxHorzChange, final int maxVertChange,
- final int left, final int right, final int top, final int bottom,
- final int visibleChange, final boolean force) {
- sizeChanged(defer, windowUnits, newWidth, newHeight, force);
- positionChanged(defer, windowUnits, newX, newY);
+ protected final boolean sizePosMaxInsetsVisibleChanged(final boolean defer, final boolean windowUnits,
+ final int newX, final int newY, final int newWidth, final int newHeight,
+ final int maxHorzChange, final int maxVertChange,
+ final int left, final int right, final int top, final int bottom,
+ final int visibleChange, final boolean force) {
+ boolean res = sizeChanged(defer, windowUnits, newWidth, newHeight, force);
+ res = res && positionChanged(defer, windowUnits, newX, newY);
if( 0 <= maxHorzChange && 0 <= maxVertChange ) {
- maximizedChanged(0 < maxHorzChange, 0 < maxVertChange);
+ res = res && maximizedChanged(0 < maxHorzChange, 0 < maxVertChange);
}
- insetsChanged(false, left, right, top, bottom);
+ res = res && insetsChanged(false, left, right, top, bottom);
if( 0 <= visibleChange ) { // ignore visible < 0
- visibleChanged(0 < visibleChange);
+ res = res && visibleChanged(0 < visibleChange);
}
+ return res;
}
//
@@ -5261,19 +5276,23 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
//
@Override
- public final void windowRepaint(final int x, final int y, final int width, final int height) {
- windowRepaint(false, x, y, width, height);
+ public final boolean windowRepaint(final int x, final int y, final int width, final int height) {
+ return windowRepaint(false, x, y, width, height);
}
//
// Accumulated actions
//
- /** Triggered by implementation. */
- protected final void sendMouseEventRequestFocus(final short eventType, final int modifiers,
- final int x, final int y, final short button, final float rotation) {
- sendMouseEvent(eventType, modifiers, x, y, button, rotation);
- requestFocus(false /* wait */);
+ /** Triggered by implementation or event dispatcher. */
+ protected final boolean sendMouseEventRequestFocus(final short eventType, final int modifiers,
+ final int x, final int y, final short button, final float rotation) {
+ if( sendMouseEvent(eventType, modifiers, x, y, button, rotation) ) {
+ requestFocus(false /* wait */);
+ return true;
+ } else {
+ return false;
+ }
}
//
diff --git a/src/newt/classes/jogamp/newt/driver/android/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/android/WindowDriver.java
index 9ffeaffa2..33155ad67 100644
--- a/src/newt/classes/jogamp/newt/driver/android/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/android/WindowDriver.java
@@ -245,6 +245,7 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
}
if( enable ) {
androidView.post(new Runnable() {
+ @Override
public void run() {
androidView.setClickable(false);
androidView.setFocusable(true);
@@ -300,6 +301,7 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
if( null != viewGroup && !added2StaticViewGroup ) {
added2StaticViewGroup = true;
viewGroup.post(new Runnable() {
+ @Override
public void run() {
if(null == androidView) {
setupAndroidView( StaticContext.getContext() );
@@ -324,7 +326,7 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
}
@Override
- protected final void createNativeImpl(boolean[] positionModified) {
+ protected final void createNativeImpl(final boolean[] positionModified) {
// Create own screen/device resource instance allowing independent ownership,
// while still utilizing shared EGL resources.
final AbstractGraphicsScreen aScreen = getScreen().getGraphicsScreen();
@@ -412,6 +414,7 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
final ViewGroup viewGroup = StaticContext.getContentViewGroup();
if( null != viewGroup) {
viewGroup.post(new Runnable() {
+ @Override
public void run() {
viewGroup.removeView(androidView);
Log.d(MD.TAG, "closeNativeImpl: removed from static ViewGroup - on thread "+Thread.currentThread().getName());
@@ -437,8 +440,8 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
* {@inheritDoc}
*/
@Override
- public final void focusChanged(final boolean defer, final boolean focusGained) {
- super.focusChanged(defer, focusGained);
+ public final boolean focusChanged(final boolean defer, final boolean focusGained) {
+ return super.focusChanged(defer, focusGained);
}
@Override
@@ -446,6 +449,7 @@ public class WindowDriver extends jogamp.newt.WindowImpl implements Callback2 {
if(null != androidView) {
Log.d(MD.TAG, "requestFocusImpl: reparented "+reparented);
androidView.post(new Runnable() {
+ @Override
public void run() {
androidView.requestFocus();
androidView.bringToFront();
diff --git a/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
index 454b2200f..6aa4fdc9c 100644
--- a/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
@@ -526,15 +526,16 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
}
/** Callback for native screen position change event of the client area. */
- protected void screenPositionChanged(final boolean defer, final int newX, final int newY) {
+ protected boolean screenPositionChanged(final boolean defer, final int newX, final int newY) {
// passed coordinates are in screen position of the client area
if( isNativeValid() ) {
+ final boolean[] res = { true };
final NativeWindow parent = getParent();
if( !useParent(parent) || isOffscreenInstance ) {
if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.0 (Screen Pos - TOP): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> "+newX+"/"+newY);
}
- positionChanged(defer, true, newX, newY);
+ res[0] = positionChanged(defer, true, newX, newY);
} else {
final Runnable action = new Runnable() {
@Override
@@ -547,18 +548,19 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.1 (Screen Pos - CHILD): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> absPos "+newX+"/"+newY+", parentOnScreen "+parentOnScreen+" -> "+absPos);
}
- positionChanged(false, true, absPos.getX(), absPos.getY());
+ res[0] = positionChanged(false, true, absPos.getX(), absPos.getY());
} };
if( defer ) {
new InterruptSource.Thread(null, action).start();
} else {
action.run();
}
-
}
+ return res[0];
} else if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.2 (Screen Pos - IGN): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> "+newX+"/"+newY);
}
+ return false;
}
@Override
@@ -609,25 +611,26 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
//
/** Triggered by implementation's WM events to update the client-area position, size and insets. */
- protected void sizeScreenPosInsetsChanged(final boolean defer,
- final int newX, final int newY,
- final int newWidth, final int newHeight,
- final int left, final int right, final int top, final int bottom,
- final boolean force,
- final boolean withinLiveResize) {
+ protected boolean sizeScreenPosInsetsChanged(final boolean defer,
+ final int newX, final int newY,
+ final int newWidth, final int newHeight,
+ final int left, final int right, final int top, final int bottom,
+ final boolean force,
+ final boolean withinLiveResize) {
final LifecycleHook lh = getLifecycleHook();
if( withinLiveResize && !resizeAnimatorPaused && null!=lh ) {
resizeAnimatorPaused = lh.pauseRenderingAction();
}
- sizeChanged(defer, false, newWidth, newHeight, force);
- screenPositionChanged(defer, newX, newY);
- insetsChanged(false, left, right, top, bottom);
- if( !withinLiveResize && resizeAnimatorPaused ) {
+ boolean res = sizeChanged(defer, false, newWidth, newHeight, force);
+ res = res && screenPositionChanged(defer, newX, newY);
+ res = res && insetsChanged(false, left, right, top, bottom);
+ if( !withinLiveResize && resizeAnimatorPaused && res ) {
resizeAnimatorPaused = false;
if( null!=lh ) {
lh.resumeRenderingAction();
}
}
+ return res;
}
@Override
@@ -638,9 +641,9 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
SurfaceScaleUtils.scale(y, getPixelScaleY()), button, rotationXYZ, rotationScale);
}
- public final void sendTouchScreenEvent(final short eventType, final int modifiers,
- final int[] pActionIdx, final short[] pNames,
- final int[] pTypesI, final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
+ public final boolean sendTouchScreenEvent(final short eventType, final int modifiers,
+ final int[] pActionIdx, final short[] pNames,
+ final int[] pTypesI, final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
final int pCount = pNames.length;
final MouseEvent.PointerType[] pTypes = new MouseEvent.PointerType[pCount];
for(int i=0; i<pCount; i++) {
@@ -651,19 +654,20 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
pTypes, eventType, modifiers, pActionIdx[i], true /*normalPNames*/, pNames,
pX, pY, pPressure, maxPressure, new float[] { 0f, 0f, 0f} /*rotationXYZ*/, 1f/*rotationScale*/);
}
+ return isNativeValid();
}
@Override
- public final void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
@Override
- public final void enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short _keyCode, final short _keySym, final char keyChar) {
+ public final boolean enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short _keyCode, final short _keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
- protected final void enqueueKeyEvent(final boolean wait, final short eventType, int modifiers, final short _keyCode, final char keyChar, final char keySymChar) {
+ protected final boolean enqueueKeyEvent(final boolean wait, final short eventType, int modifiers, final short _keyCode, final char keyChar, final char keySymChar) {
// Note that we send the key char for the key code on this
// platform -- we do not get any useful key codes out of the system
final short keyCode = MacKeyUtil.validateKeyCode(_keyCode, keyChar);
@@ -685,6 +689,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
// OSX delivery order is PRESSED (t0), RELEASED (t1) and TYPED (t2) -> NEWT order: PRESSED (t0) and RELEASED (t1)
// Auto-Repeat: OSX delivers only PRESSED, inject auto-repeat RELEASE key _before_ PRESSED
+ boolean res = true;
switch(eventType) {
case KeyEvent.EVENT_KEY_RELEASED:
if( isKeyCodeTracked(keyCode) ) {
@@ -696,12 +701,12 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if( setKeyPressed(keyCode, true) ) {
// key was already pressed
modifiers |= InputEvent.AUTOREPEAT_MASK;
- super.enqueueKeyEvent(wait, KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar); // RELEASED
+ res = super.enqueueKeyEvent(wait, KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar); // RELEASED
}
}
break;
}
- super.enqueueKeyEvent(wait, eventType, modifiers, keyCode, keySym, keyChar);
+ return res && super.enqueueKeyEvent(wait, eventType, modifiers, keyCode, keySym, keyChar);
}
protected int getDisplayID() {
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
index 79951e5a6..e8383916e 100644
--- a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
@@ -556,16 +556,17 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
}
/** Callback for native screen position change event of the client area. */
- protected void screenPositionChanged(final boolean defer, final int newX, final int newY) {
+ protected boolean screenPositionChanged(final boolean defer, final int newX, final int newY) {
// passed coordinates are in screen position of the client area
if( isNativeValid() ) {
+ final boolean[] res = { true };
final NativeWindow parent = getParent();
final boolean useParentLoc = useParentLocation(parent);
if( !useParentLoc || isOffscreenInstance ) {
if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.0 (Screen Pos - TOP): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> "+newX+"/"+newY);
}
- positionChanged(defer, true, newX, newY);
+ res[0] = positionChanged(defer, true, newX, newY);
} else if( useParentLoc && !isVisible() ) {
// Fake invisible child window: drop fake position update for fake invisibility
if(DEBUG_IMPLEMENTATION) {
@@ -590,18 +591,19 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.1 (Screen Pos - CHILD): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> absPos "+newX+"/"+newY+", parentOnScreen "+parentOnScreen+" -> "+absPos);
}
- positionChanged(false, true, absPos.getX(), absPos.getY());
+ res[0] = positionChanged(false, true, absPos.getX(), absPos.getY());
} };
if( defer ) {
new InterruptSource.Thread(null, action).start();
} else {
action.run();
}
-
}
+ return res[0];
} else if(DEBUG_IMPLEMENTATION) {
System.err.println("MacWindow.positionChanged.2 (Screen Pos - IGN): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> "+newX+"/"+newY);
}
+ return false;
}
@Override
@@ -654,25 +656,26 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
//
/** Triggered by implementation's WM events to update the client-area position, size and insets. */
- protected void sizeScreenPosInsetsChanged(final boolean defer,
- final int newX, final int newY,
- final int newWidth, final int newHeight,
- final int left, final int right, final int top, final int bottom,
- final boolean force,
- final boolean withinLiveResize) {
+ protected boolean sizeScreenPosInsetsChanged(final boolean defer,
+ final int newX, final int newY,
+ final int newWidth, final int newHeight,
+ final int left, final int right, final int top, final int bottom,
+ final boolean force,
+ final boolean withinLiveResize) {
final LifecycleHook lh = getLifecycleHook();
if( withinLiveResize && !resizeAnimatorPaused && null!=lh ) {
resizeAnimatorPaused = lh.pauseRenderingAction();
}
- sizeChanged(defer, true /* windowUnits */, newWidth, newHeight, force);
- screenPositionChanged(defer, newX, newY);
- insetsChanged(false, left, right, top, bottom);
- if( !withinLiveResize && resizeAnimatorPaused ) {
+ boolean res = sizeChanged(defer, true /* windowUnits */, newWidth, newHeight, force);
+ res = res && screenPositionChanged(defer, newX, newY);
+ res = res && insetsChanged(false, left, right, top, bottom);
+ if( !withinLiveResize && resizeAnimatorPaused && res ) {
resizeAnimatorPaused = false;
if( null!=lh ) {
lh.resumeRenderingAction();
}
}
+ return res;
}
@Override
@@ -727,16 +730,16 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
}
@Override
- public final void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
@Override
- public final void enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short _keyCode, final short _keySym, final char keyChar) {
+ public final boolean enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short _keyCode, final short _keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
- protected final void enqueueKeyEvent(final boolean wait, final short eventType, int modifiers, final short _keyCode, final char keyChar, final char keySymChar) {
+ protected final boolean enqueueKeyEvent(final boolean wait, final short eventType, int modifiers, final short _keyCode, final char keyChar, final char keySymChar) {
// Note that we send the key char for the key code on this
// platform -- we do not get any useful key codes out of the system
final short keyCode = MacKeyUtil.validateKeyCode(_keyCode, keyChar);
@@ -758,6 +761,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
// OSX delivery order is PRESSED (t0), RELEASED (t1) and TYPED (t2) -> NEWT order: PRESSED (t0) and RELEASED (t1)
// Auto-Repeat: OSX delivers only PRESSED, inject auto-repeat RELEASE key _before_ PRESSED
+ boolean res = true;
switch(eventType) {
case KeyEvent.EVENT_KEY_RELEASED:
if( isKeyCodeTracked(keyCode) ) {
@@ -769,12 +773,12 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if( setKeyPressed(keyCode, true) ) {
// key was already pressed
modifiers |= InputEvent.AUTOREPEAT_MASK;
- super.enqueueKeyEvent(wait, KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar); // RELEASED
+ res = super.enqueueKeyEvent(wait, KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar); // RELEASED
}
}
break;
}
- super.enqueueKeyEvent(wait, eventType, modifiers, keyCode, keySym, keyChar);
+ return res && super.enqueueKeyEvent(wait, eventType, modifiers, keyCode, keySym, keyChar);
}
protected int getDisplayID() {
diff --git a/src/newt/classes/jogamp/newt/driver/windows/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/windows/WindowDriver.java
index b95911adf..fb88c77df 100644
--- a/src/newt/classes/jogamp/newt/driver/windows/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/windows/WindowDriver.java
@@ -194,9 +194,9 @@ public class WindowDriver extends WindowImpl {
if( !cfg.getChosenCapabilities().isBackgroundOpaque() ) {
GDIUtil.DwmSetupTranslucency(_windowHandle, true);
}
- InitWindow0(_windowHandle, flags);
setWindowHandle(_windowHandle);
windowHandleClose = _windowHandle;
+ InitWindow0(_windowHandle, flags);
if( 0 == ( STATE_MASK_CHILDWIN & flags ) && 1 <= maxCount ) {
reconfigureWindowImpl(xy_pix[0], xy_pix[1], sz_pix[0], sz_pix[1], flags);
@@ -411,15 +411,16 @@ public class WindowDriver extends WindowImpl {
* for details.
* </p>
*/
- public final void sendTouchScreenEvent(final short eventType, final int modifiers,
- final int pActionIdx, final short[] pNames,
- final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
+ public final boolean sendTouchScreenEvent(final short eventType, final int modifiers,
+ final int pActionIdx, final short[] pNames,
+ final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
final int pCount = pNames.length;
final MouseEvent.PointerType[] pTypes = new MouseEvent.PointerType[pCount];
for(int i=pCount-1; i>=0; i--) { pTypes[i] = PointerType.TouchScreen; }
doPointerEvent(false /*enqueue*/, false /*wait*/,
pTypes, eventType, modifiers, pActionIdx, false /*normalPNames*/, pNames,
pX, pY, pPressure, maxPressure, new float[] { 0f, 0f, 0f} /*rotationXYZ*/, 1f/*rotationScale*/);
+ return isNativeValid();
}
//
@@ -447,35 +448,37 @@ public class WindowDriver extends WindowImpl {
}
@Override
- public final void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
final boolean isModifierKey = KeyEvent.isModifierKey(keySym);
// System.err.println("*** sendKeyEvent: event "+KeyEvent.getEventTypeString(eventType)+", keyCode "+toHexString(keyCode)+", keyChar <"+keyChar+">, mods "+toHexString(modifiers)+
// ", isKeyCodeTracked "+isKeyCodeTracked(keyCode)+", was: pressed "+isKeyPressed(keyCode)+", printableKey "+KeyEvent.isPrintableKey(keyCode, false)+" [modifierKey "+isModifierKey+"] - "+System.currentTimeMillis());
// Reorder: WINDOWS delivery order is PRESSED (t0), TYPED (t0) and RELEASED (t1) -> NEWT order: PRESSED (t0) and RELEASED (t1)
// Auto-Repeat: WINDOWS delivers only PRESSED (t0) and TYPED (t0).
+ boolean res = true;
switch(eventType) {
case KeyEvent.EVENT_KEY_RELEASED:
if( isKeyCodeTracked(keyCode) ) {
if( repeatedKey == keyCode && !isModifierKey ) {
// AR out - send out missing PRESSED
- super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers | InputEvent.AUTOREPEAT_MASK, keyCode, keySym, keyChar);
+ res = super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers | InputEvent.AUTOREPEAT_MASK, keyCode, keySym, keyChar);
}
setKeyPressed(keyCode, false);
repeatedKey = KeyEvent.VK_UNDEFINED;
}
- super.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar);
+ res = res && super.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar);
break;
case KeyEvent.EVENT_KEY_PRESSED:
if( !handlePressTypedAutoRepeat(isModifierKey, modifiers, keyCode, keySym, keyChar) ) {
- super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers, keyCode, keySym, keyChar);
+ res = super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers, keyCode, keySym, keyChar);
}
break;
}
+ return res;
}
@Override
- public final void enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
diff --git a/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java b/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
index e0fd20e2b..2957df93a 100644
--- a/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/x11/DisplayDriver.java
@@ -154,10 +154,11 @@ public class DisplayDriver extends DisplayImpl {
this.randr_error_base = randr_error_base;
this.xi_opcode = xi_opcode;
}
- private void sendRRScreenChangeNotify(final long event) {
+ private boolean sendRRScreenChangeNotify(final long event) {
if( null != rAndR ) {
rAndR.sendRRScreenChangeNotify(getHandle(), event);
}
+ return isNativeValidAsync();
}
void registerRandR(final RandR rAndR) {
this.rAndR = rAndR;
diff --git a/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java
index e939edeae..501adee9c 100644
--- a/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/x11/WindowDriver.java
@@ -204,12 +204,15 @@ public class WindowDriver extends WindowImpl {
@Override
protected void closeNativeImpl() {
- if(0!=javaWindowHandle && null!=getScreen() ) {
+ final long _javaWindowHandle = javaWindowHandle;
+ if(0!=_javaWindowHandle && null!=getScreen() ) {
final DisplayDriver display = (DisplayDriver) getScreen().getDisplay();
final AbstractGraphicsDevice edtDevice = display.getGraphicsDevice();
edtDevice.lock();
try {
- CloseWindow0(edtDevice.getHandle(), javaWindowHandle /* , display.getKbdHandle() */, // XKB disabled for now
+ setWindowHandle(0); // dispose native window handle ASAP
+ javaWindowHandle = 0; // dispose our javaWindow handle ASAP
+ CloseWindow0(display, edtDevice.getHandle(), _javaWindowHandle /* , display.getKbdHandle() */, // XKB disabled for now
display.getRandREventBase(), display.getRandRErrorBase(), display.getXiOpcode());
} catch (final Throwable t) {
if(DEBUG_IMPLEMENTATION) {
@@ -218,7 +221,6 @@ public class WindowDriver extends WindowImpl {
}
} finally {
edtDevice.unlock();
- javaWindowHandle = 0;
last_monitor = null;
}
}
@@ -304,7 +306,7 @@ public class WindowDriver extends WindowImpl {
* {@inheritDoc}
*/
@Override
- protected void focusChanged(final boolean defer, final boolean focusGained) {
+ protected boolean focusChanged(final boolean defer, final boolean focusGained) {
if( isNativeValid() && isFullscreen() && !isAlwaysOnBottom() && tempFSAlwaysOnTop && hasFocus() != focusGained ) {
final int flags = getReconfigureMask(CHANGE_MASK_ALWAYSONTOP, isVisible()) |
( focusGained ? STATE_MASK_ALWAYSONTOP : 0 );
@@ -320,7 +322,7 @@ public class WindowDriver extends WindowImpl {
}
});
}
- super.focusChanged(defer, focusGained);
+ return super.focusChanged(defer, focusGained);
}
@Override
@@ -349,11 +351,12 @@ public class WindowDriver extends WindowImpl {
return res;
}
- protected void reparentNotify(final long newParentWindowHandle) {
+ protected boolean reparentNotify(final long newParentWindowHandle) {
if(DEBUG_IMPLEMENTATION) {
final long p0 = getParentWindowHandle();
System.err.println("Window.reparentNotify ("+getThreadName()+"): "+toHexString(p0)+" -> "+toHexString(newParentWindowHandle));
}
+ return isNativeValid();
}
@Override
@@ -490,7 +493,7 @@ public class WindowDriver extends WindowImpl {
}
/** Called by native TK */
- protected final void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar0, final String keyString) {
+ protected final boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar0, final String keyString) {
// handleKeyEvent(true, false, eventType, modifiers, keyCode, keyChar);
final boolean isModifierKey = KeyEvent.isModifierKey(keyCode);
final boolean isAutoRepeat = 0 != ( InputEvent.AUTOREPEAT_MASK & modifiers );
@@ -498,22 +501,24 @@ public class WindowDriver extends WindowImpl {
// System.err.println("*** sendKeyEvent: event "+KeyEvent.getEventTypeString(eventType)+", keyCode "+toHexString(keyCode)+", keyChar <"+keyChar0+">/<"+keyChar+">, keyString "+keyString+", mods "+toHexString(modifiers)+
// ", isKeyCodeTracked "+isKeyCodeTracked(keyCode)+", was: pressed "+isKeyPressed(keyCode)+", repeat "+isAutoRepeat+", [modifierKey "+isModifierKey+"] - "+System.currentTimeMillis());
+ boolean res = true;
if( !isAutoRepeat || !isModifierKey ) { // ! ( isModifierKey && isAutoRepeat )
switch(eventType) {
case KeyEvent.EVENT_KEY_PRESSED:
- super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers, keyCode, keySym, keyChar);
+ res = super.sendKeyEvent(KeyEvent.EVENT_KEY_PRESSED, modifiers, keyCode, keySym, keyChar);
break;
case KeyEvent.EVENT_KEY_RELEASED:
- super.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar);
+ res = super.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keySym, keyChar);
break;
}
}
+ return res;
}
- public final void sendTouchScreenEvent(final short eventType, final int modifiers,
- final int pActionIdx, final short[] pNames,
- final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
+ public final boolean sendTouchScreenEvent(final short eventType, final int modifiers,
+ final int pActionIdx, final short[] pNames,
+ final int[] pX, final int[] pY, final float[] pPressure, final float maxPressure) {
final int pCount = pNames.length;
final MouseEvent.PointerType[] pTypes = new MouseEvent.PointerType[pCount];
for(int i=0; i<pCount; i++) {
@@ -522,14 +527,15 @@ public class WindowDriver extends WindowImpl {
doPointerEvent(false /*enqueue*/, false /*wait*/,
pTypes, eventType, modifiers, pActionIdx, true /*normalPNames*/, pNames,
pX, pY, pPressure, maxPressure, new float[] { 0f, 0f, 0f} /*rotationXYZ*/, 1f/*rotationScale*/);
+ return isNativeValid();
}
@Override
- public final void sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean sendKeyEvent(final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
@Override
- public final void enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
+ public final boolean enqueueKeyEvent(final boolean wait, final short eventType, final int modifiers, final short keyCode, final short keySym, final char keyChar) {
throw new InternalError("XXX: Adapt Java Code to Native Code Changes");
}
@@ -565,7 +571,7 @@ public class WindowDriver extends WindowImpl {
int pixelDataSize, Object pixels, int pixels_byte_offset, boolean pixels_is_direct,
boolean verbose);
private static native int GetSupportedReconfigMask0(long javaWindowHandle);
- private native void CloseWindow0(long display, long javaWindowHandle /*, long kbdHandle*/, // XKB disabled for now
+ private native void CloseWindow0(DisplayDriver disbplayDriver, long display, long javaWindowHandle /*, long kbdHandle*/, // XKB disabled for now
final int randr_event_base, final int randr_error_base, final int xi_opcode);
private static native void reconfigureWindow0(long display, int screen_index, long parentWindowHandle, long javaWindowHandle,
int x, int y, int width, int height, int flags);