1// Copyright © SixtyFPS GmbH <info@slint.dev>
2// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
3
4// https://github.com/slint-ui/slint/issues/7322
5// A PopupWindow with the default close-on-click policy should close when clicked, even if the click open a nested popup
6
7export component TestCase {
8 width: 300px;
9 height: 300px;
10
11 in-out property <int> popup1-clicked;
12 in-out property <int> popup2-clicked;
13 in-out property <int> root-clicked;
14
15 popup1 := PopupWindow {
16 Rectangle {
17 background: yellow;
18 }
19
20 x: 10px;
21 y: 10px;
22 height: 50px;
23 width: 50px;
24
25 TouchArea {
26 clicked => {
27 popup1-clicked += 1;
28 popup2.show();
29 }
30 }
31 }
32
33 popup2 := PopupWindow {
34 Rectangle {
35 background: red;
36 }
37
38 x: 40px;
39 y: 40px;
40 height: 50px;
41 width: 50px;
42
43 TouchArea {
44 clicked => {
45 popup2-clicked += 1;
46 }
47 }
48 }
49
50 TouchArea {
51 clicked => {
52 root-clicked += 1;
53 popup1.show();
54 }
55 }
56}
57
58/*
59
60```rust
61
62let instance = TestCase::new().unwrap();
63
64
65slint_testing::send_mouse_click(&instance, 15., 15.);
66assert_eq!(instance.get_root_clicked(), 1);
67assert_eq!(instance.get_popup1_clicked(), 0);
68assert_eq!(instance.get_popup2_clicked(), 0);
69
70// popup1 is open
71
72slint_testing::send_mouse_click(&instance, 15., 15.);
73assert_eq!(instance.get_root_clicked(), 1);
74assert_eq!(instance.get_popup1_clicked(), 1);
75assert_eq!(instance.get_popup2_clicked(), 0);
76
77// popup2 is open, popup1 is closed
78
79slint_testing::send_mouse_click(&instance, 45., 45.);
80assert_eq!(instance.get_root_clicked(), 1);
81assert_eq!(instance.get_popup1_clicked(), 1);
82assert_eq!(instance.get_popup2_clicked(), 1);
83
84// all popup closed
85
86slint_testing::send_mouse_click(&instance, 45., 45.);
87assert_eq!(instance.get_root_clicked(), 2);
88assert_eq!(instance.get_popup1_clicked(), 1);
89assert_eq!(instance.get_popup2_clicked(), 1);
90
91// popup1 is open
92// click where popup2 will be
93
94slint_testing::send_mouse_click(&instance, 45., 45.);
95assert_eq!(instance.get_root_clicked(), 2);
96assert_eq!(instance.get_popup1_clicked(), 2);
97assert_eq!(instance.get_popup2_clicked(), 1);
98
99// popup2 is open, popup1 is closed
100
101slint_testing::send_mouse_click(&instance, 45., 45.);
102assert_eq!(instance.get_root_clicked(), 2);
103assert_eq!(instance.get_popup1_clicked(), 2);
104assert_eq!(instance.get_popup2_clicked(), 2);
105
106// all popup closed
107
108slint_testing::send_mouse_click(&instance, 45., 45.);
109assert_eq!(instance.get_root_clicked(), 3);
110assert_eq!(instance.get_popup1_clicked(), 2);
111assert_eq!(instance.get_popup2_clicked(), 2);
112
113```
114
115*/