diff --git a/tests/configs/issue465.conf b/tests/configs/issue465.conf new file mode 100644 index 00000000..313371d9 --- /dev/null +++ b/tests/configs/issue465.conf @@ -0,0 +1,4 @@ +shadow = true; +shadow-exclude = [ + "focused != 1" +]; diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 08203e07..e7e5bbf2 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -15,3 +15,4 @@ eval `dbus-launch --sh-syntax` ./run_one_test.sh $exe configs/issue314.conf testcases/issue314_2.py ./run_one_test.sh $exe configs/issue314.conf testcases/issue314_3.py ./run_one_test.sh $exe /dev/null testcases/issue299.py +./run_one_test.sh $exe configs/issue465.conf testcases/issue465.py diff --git a/tests/testcases/issue465.py b/tests/testcases/issue465.py new file mode 100755 index 00000000..a4ac51b0 --- /dev/null +++ b/tests/testcases/issue465.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import xcffib.xproto as xproto +import xcffib +import time +from common import set_window_name, trigger_root_configure + +conn = xcffib.connect() +setup = conn.get_setup() +root = setup.roots[0].root +visual = setup.roots[0].root_visual +depth = setup.roots[0].root_depth +x = xproto.xprotoExtension(conn) + +# issue 465 is triggered when focusing a new window with a shadow-exclude rule for unfocused windows. +wid1 = conn.generate_id() +print("Window 1: ", hex(wid1)) +wid2 = conn.generate_id() +print("Window 2: ", hex(wid2)) + +# Create a window +conn.core.CreateWindowChecked(depth, wid1, root, 0, 0, 100, 100, 0, xproto.WindowClass.InputOutput, visual, 0, []).check() +conn.core.CreateWindowChecked(depth, wid2, root, 0, 0, 100, 100, 0, xproto.WindowClass.InputOutput, visual, 0, []).check() + +# Set Window name +set_window_name(conn, wid1, "Test window 1") +set_window_name(conn, wid2, "Test window 2") + +print("mapping 1") +conn.core.MapWindowChecked(wid1).check() +print("mapping 2") +conn.core.MapWindowChecked(wid2).check() +time.sleep(0.5) + +x.SetInputFocusChecked(0, wid1, xproto.Time.CurrentTime).check() +time.sleep(0.5) + +# Destroy the windows +conn.core.DestroyWindowChecked(wid1).check() +time.sleep(1)