diff --git a/tests/configs/issue239.conf b/tests/configs/issue239.conf new file mode 100644 index 0000000..23a4c80 --- /dev/null +++ b/tests/configs/issue239.conf @@ -0,0 +1,7 @@ +fading = true; +fade-in-step = 1; +fade-out-step = 0.01; +shadow = true; +shadow-exclude = [ +"name = 'NoShadow'" +] diff --git a/tests/run_one_test.sh b/tests/run_one_test.sh index 5861462..a03810b 100755 --- a/tests/run_one_test.sh +++ b/tests/run_one_test.sh @@ -1,5 +1,5 @@ #!/bin/sh -set -x +set -xe if [ -z $DISPLAY ]; then exec xvfb-run -s "+extension composite" -a $0 $1 $2 $3 fi @@ -11,9 +11,9 @@ echo "Running test $2" compton_pid=$! $3 -kill -INT $compton_pid -wait $compton_pid +kill -INT $compton_pid || true cat log rm log +wait $compton_pid diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 8c84b53..6f78790 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e compton=$(realpath $1) cd $(dirname $0) ./run_one_test.sh $compton configs/empty.conf testcases/basic.py +./run_one_test.sh $compton configs/issue239.conf testcases/issue239.py diff --git a/tests/testcases/issue239.py b/tests/testcases/issue239.py new file mode 100755 index 0000000..ac46428 --- /dev/null +++ b/tests/testcases/issue239.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +import xcffib.xproto as xproto +import xcffib +import time + +conn = xcffib.connect() +setup = conn.get_setup() +root = setup.roots[0].root +visual = setup.roots[0].root_visual +depth = setup.roots[0].root_depth + +# issue 239 is caused by a window gaining a shadow during its fade-out transition +wid = conn.generate_id() +print("Window id is ", hex(wid)) + +# Create a window +conn.core.CreateWindowChecked(depth, wid, root, 0, 0, 100, 100, 0, xproto.WindowClass.InputOutput, visual, 0, []).check() + +# Set Window name so it doesn't get a shadow +name = "_NET_WM_NAME" +name_atom = conn.core.InternAtom(True, len(name), name).reply().atom +str_type = "STRING" +str_type_atom = conn.core.InternAtom(True, len(str_type), str_type).reply().atom + +win_name = "NoShadow" +conn.core.ChangePropertyChecked(xproto.PropMode.Replace, wid, name_atom, str_type_atom, 8, len(win_name), win_name).check() + +# Map the window +print("mapping") +conn.core.MapWindowChecked(wid).check() + +time.sleep(0.5) + +# Set the Window name so it gets a shadow +print("set new name") +win_name = "YesShadow" +conn.core.ChangePropertyChecked(xproto.PropMode.Replace, wid, name_atom, str_type_atom, 8, len(win_name), win_name).check() + +# Unmap the window +conn.core.UnmapWindowChecked(wid).check() + +time.sleep(0.5) + +# Destroy the window +conn.core.DestroyWindowChecked(wid).check()