diff options
author | Sven Gothel <[email protected]> | 2015-10-09 01:54:32 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2015-10-09 01:54:32 +0200 |
commit | e418a665756af52fe2ca691ca220644e9b27c22c (patch) | |
tree | 5aad1e3803b5cbf177b591912985d992afec6894 /src/test/com/jogamp/opengl | |
parent | dca5d36370ec5eb44998bae593880e3b10cc9a4e (diff) |
Bug 1249 - NEWT X11: setVisible(*) _NET_WM_STATE_HIDDEN update not received at ConfigureNotify event (2)
On gnome shell WM, sometimes KDE WM,
it has been observed that the _NET_WM_STATE_HIDDEN update (visible or invisible)
is not received at ConfigureNotify event.
Turns out the state is finally updated at FocusOut!
This change tests _NET_WM_STATE_HIDDEN visibility hint
for mapped window also for FocusIn and FocusOut events,
besides the ConfigureNotify event.
Further more, NormalState to restore a hidden but mapped
window did not work, so it is no more being sent.
We limit us here to _NET_ACTIVE_WINDOW.
2 unit tests are prepared to test this issue:
- TestGLWindows00NEWT
- TestParenting01NEWT
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows00NEWT.java | 66 | ||||
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java | 76 |
2 files changed, 89 insertions, 53 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows00NEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows00NEWT.java index 8f1cdaae0..38620ad92 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows00NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows00NEWT.java @@ -49,6 +49,8 @@ import com.jogamp.nativewindow.AbstractGraphicsDevice; public class TestGLWindows00NEWT extends UITestCase { static GLProfile glp; static int width, height; + static boolean manual = false; + static int loopVisibleToggle = 10; static long durationPerTest = 100; // ms @BeforeClass @@ -98,6 +100,9 @@ public class TestGLWindows00NEWT extends UITestCase { @Test public void test01WindowCreateSimple() throws InterruptedException { + if( manual ) { + return; + } final GLCapabilities caps = new GLCapabilities(glp); Assert.assertNotNull(caps); final GLWindow window = createWindow(null, caps, false /* undecor */); // local @@ -116,6 +121,9 @@ public class TestGLWindows00NEWT extends UITestCase { @Test public void test02WindowCreateUndecor() throws InterruptedException { + if( manual ) { + return; + } final GLCapabilities caps = new GLCapabilities(glp); Assert.assertNotNull(caps); final GLWindow window = createWindow(null, caps, true /* undecor */); // local @@ -133,14 +141,17 @@ public class TestGLWindows00NEWT extends UITestCase { } @Test - public void test10WindowSimpleToggleVisibility() throws InterruptedException { - test1xWindowToggleVisibility(false /* undecor */); + public void test11WindowSimpleToggleVisibility() throws InterruptedException { + test1xWindowToggleVisibility(false /* undecor */, loopVisibleToggle); } @Test - public void test10WindowUndecorToggleVisibility() throws InterruptedException { - test1xWindowToggleVisibility(true /* undecor */); + public void test12WindowUndecorToggleVisibility() throws InterruptedException { + if( manual ) { + return; + } + test1xWindowToggleVisibility(true /* undecor */, loopVisibleToggle); } - private void test1xWindowToggleVisibility(final boolean undecor) throws InterruptedException { + private void test1xWindowToggleVisibility(final boolean undecor, final int loopVisibleToggle) throws InterruptedException { final GLCapabilities caps = new GLCapabilities(glp); Assert.assertNotNull(caps); final GLWindow window = createWindow(null, caps, undecor); // local @@ -154,30 +165,31 @@ public class TestGLWindows00NEWT extends UITestCase { Thread.sleep(100); } - System.err.println("XXX VISIBLE.1 -> FALSE"); - window.setVisible(false); - Assert.assertEquals(true,window.isNativeValid()); - Assert.assertEquals(false,window.isVisible()); - for(int state=0; state*100<durationPerTest; state++) { - Thread.sleep(100); - } + for(int i=1; i<=loopVisibleToggle; i++) { + System.err.println("XXX VISIBLE."+i+" -> FALSE"); + window.setVisible(false); + Assert.assertEquals(true,window.isNativeValid()); + Assert.assertEquals(false,window.isVisible()); + for(int state=0; state*100<durationPerTest; state++) { + Thread.sleep(100); + } - window.display(); - Assert.assertEquals(true,window.isNativeValid()); - Assert.assertEquals(false,window.isVisible()); + window.display(); + Assert.assertEquals(true,window.isNativeValid()); + Assert.assertEquals(false,window.isVisible()); - System.err.println("XXX VISIBLE.2 -> TRUE"); - window.setVisible(true); - Assert.assertEquals(true,window.isNativeValid()); - Assert.assertEquals(true,window.isVisible()); - for(int state=0; state*100<durationPerTest; state++) { - Thread.sleep(100); + System.err.println("XXX VISIBLE."+i+" -> TRUE"); + window.setVisible(true); + Assert.assertEquals(true,window.isNativeValid()); + Assert.assertEquals(true,window.isVisible()); + for(int state=0; state*100<durationPerTest; state++) { + Thread.sleep(100); + } + window.display(); + Assert.assertEquals(true,window.isNativeValid()); + Assert.assertEquals(true,window.isVisible()); } - window.display(); - Assert.assertEquals(true,window.isNativeValid()); - Assert.assertEquals(true,window.isVisible()); - destroyWindow(window); } @@ -193,6 +205,10 @@ public class TestGLWindows00NEWT extends UITestCase { for(int i=0; i<args.length; i++) { if(args[i].equals("-time")) { durationPerTest = atoi(args[++i]); + } else if(args[i].equals("-loopvt")) { + loopVisibleToggle = atoi(args[++i]); + } else if(args[i].equals("-manual")) { + manual = true; } } System.out.println("durationPerTest: "+durationPerTest); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java index 86614c3c3..eb4227607 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01NEWT.java @@ -50,7 +50,9 @@ import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestParenting01NEWT extends UITestCase { static int width, height; - static long durationPerTest = 600; + static long durationPerTest = 100; + static boolean manual = false; + static int loopVisibleToggle = 10; static GLCapabilities glCaps; @BeforeClass @@ -139,32 +141,34 @@ public class TestParenting01NEWT extends UITestCase { Assert.assertEquals(0,Display.getActiveDisplayNumber()); // visible test - Assert.assertEquals(0, glWindow1.getTotalFPSFrames()); - Assert.assertEquals(0, glWindow2.getTotalFPSFrames()); - System.err.println("XXX VISIBLE.1 -> TRUE"); - glWindow1.setVisible(true); - Assert.assertEquals(true, glWindow1.isVisible()); - Assert.assertEquals(true, glWindow1.isNativeValid()); - Assert.assertEquals(true, glWindow2.isVisible()); - Assert.assertEquals(true, glWindow2.isNativeValid()); - Assert.assertEquals(1,display.getReferenceCount()); - Assert.assertEquals(true,display.isNativeValid()); - Assert.assertNotNull(display.getEDTUtil()); - Assert.assertEquals(true,display.getEDTUtil().isRunning()); - Assert.assertEquals(2,screen.getReferenceCount()); - Assert.assertEquals(true,screen.isNativeValid()); - Assert.assertEquals(1,Display.getActiveDisplayNumber()); - waitForFrames("window1.setVisible(true)", 1, glWindow1, glWindow2, 2000, true); - - System.err.println("XXX VISIBLE.2 -> FALSE"); - glWindow1.setVisible(false); - Assert.assertEquals(false, glWindow1.isVisible()); - Assert.assertEquals(true, glWindow1.isNativeValid()); - Assert.assertEquals(false, glWindow2.isVisible()); - Assert.assertEquals(true, glWindow2.isNativeValid()); - - glWindow1.resetFPSCounter(); - glWindow2.resetFPSCounter(); + for(int i=1; i<=loopVisibleToggle; i++) { + Assert.assertEquals(0, glWindow1.getTotalFPSFrames()); + Assert.assertEquals(0, glWindow2.getTotalFPSFrames()); + System.err.println("XXX VISIBLE."+i+" -> TRUE"); + glWindow1.setVisible(true); + Assert.assertEquals(true, glWindow1.isVisible()); + Assert.assertEquals(true, glWindow1.isNativeValid()); + Assert.assertEquals(true, glWindow2.isVisible()); + Assert.assertEquals(true, glWindow2.isNativeValid()); + Assert.assertEquals(1,display.getReferenceCount()); + Assert.assertEquals(true,display.isNativeValid()); + Assert.assertNotNull(display.getEDTUtil()); + Assert.assertEquals(true,display.getEDTUtil().isRunning()); + Assert.assertEquals(2,screen.getReferenceCount()); + Assert.assertEquals(true,screen.isNativeValid()); + Assert.assertEquals(1,Display.getActiveDisplayNumber()); + waitForFrames("window1.setVisible(true)", 1, glWindow1, glWindow2, 2000, true); + + System.err.println("XXX VISIBLE."+i+" -> FALSE"); + glWindow1.setVisible(false); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(true, glWindow1.isNativeValid()); + Assert.assertEquals(false, glWindow2.isVisible()); + Assert.assertEquals(true, glWindow2.isNativeValid()); + + glWindow1.resetFPSCounter(); + glWindow2.resetFPSCounter(); + } Assert.assertEquals(0, glWindow1.getTotalFPSFrames()); Assert.assertEquals(0, glWindow2.getTotalFPSFrames()); System.err.println("XXX VISIBLE.3 -> TRUE"); @@ -307,11 +311,17 @@ public class TestParenting01NEWT extends UITestCase { @Test public void test02aReparentTop2WinReparentRecreate() throws InterruptedException { + if( manual ) { + return; + } test02ReparentTop2WinImpl(true); } @Test public void test02bReparentTop2WinReparentNative() throws InterruptedException { + if( manual ) { + return; + } test02ReparentTop2WinImpl(false); } @@ -536,11 +546,17 @@ public class TestParenting01NEWT extends UITestCase { @Test public void test03aReparentWin2TopReparentRecreate() throws InterruptedException { + if( manual ) { + return; + } test03ReparentWin2TopImpl(true); } @Test public void test03bReparentWin2TopReparentNative() throws InterruptedException { + if( manual ) { + return; + } test03ReparentWin2TopImpl(false); } @@ -765,6 +781,10 @@ public class TestParenting01NEWT extends UITestCase { for(int i=0; i<args.length; i++) { if(args[i].equals("-time")) { durationPerTest = atoi(args[++i]); + } else if(args[i].equals("-loopvt")) { + loopVisibleToggle = atoi(args[++i]); + } else if(args[i].equals("-manual")) { + manual = true; } else if(args[i].equals("-asMain")) { asMain = true; } @@ -774,8 +794,8 @@ public class TestParenting01NEWT extends UITestCase { try { TestParenting01NEWT.initClass(); final TestParenting01NEWT m = new TestParenting01NEWT(); - m.test02aReparentTop2WinReparentRecreate(); m.test01CreateVisibleDestroy(); + m.test02aReparentTop2WinReparentRecreate(); } catch (final Throwable t ) { t.printStackTrace(); } |