AtlatestRepositorysigil-wm

sigil-wm / tree / testscene-move.c

1/* SPDX-License-Identifier: BSD-3-Clause */
2#define listen socket_listen
3#include <sys/socket.h>
4#undef listen
5#include "../src/c/host.c"
6#include <assert.h>
7
8int main(void) {
9 struct server s={0};
10 wl_list_init(&s.views); wl_list_init(&s.pixels); wl_list_init(&s.outputs);
11 s.scene=wlr_scene_create(); assert(s.scene);
12 s.normal=wlr_scene_tree_create(&s.scene->tree); assert(s.normal);
13 s.cursor=wlr_cursor_create(); assert(s.cursor);
14 s.cursor->x=40; s.cursor->y=40;
15 bridge.event_fd=eventfd(0,EFD_NONBLOCK|EFD_CLOEXEC); assert(bridge.event_fd>=0);
16 struct view view={.id=1,.mapped=true,.tree=wlr_scene_tree_create(s.normal)};
17 struct pixels border={.id=2,.scene=wlr_scene_buffer_create(s.normal,NULL)};
18 assert(view.tree && border.scene);
19 wl_list_insert(&s.views,&view.link); wl_list_insert(&s.pixels,&border.link);
20 wlr_scene_node_set_position(&view.tree->node,100,100);
21 wlr_scene_node_set_position(&border.scene->node,99,99);
22 int64_t payload[]={1,272,40000,40000,2,1,-2};
23 struct wm_message event;
24 assert(scene_move_start(&s,10,payload,7)); /* release overtook copied admission */
25 assert(!s.scene_move.active && pop(&bridge.events,&event));
26 assert(event.word[0]==38 && event.word[4]==10 && event.word[5]==1);
27 assert(event.word[2]==0 && event.word[3]==0);
28 s.intercepted_buttons[0].held=true; s.intercepted_buttons[0].code=272;
29 s.intercepted_buttons[0].device=9;
30 assert(scene_move_start(&s,11,payload,7));
31 s.cursor->x=80; s.cursor->y=60; scene_move_update(&s);
32 assert(view.tree->node.x==140 && view.tree->node.y==120);
33 assert(border.scene->node.x==139 && border.scene->node.y==119);
34 assert(view.tree->node.link.next==&border.scene->node.link); /* no restack */
35 scene_move_position(&s,1,&view.tree->node,100,100);
36 scene_move_position(&s,-2,&border.scene->node,99,99);
37 assert(view.tree->node.x==140 && border.scene->node.x==139);
38 int64_t stale[]={1,1,0,200,1,100,100,64,64,1,0,0,0,0};
39 scene_move_plan(&s,stale); assert(s.scene_move.retained && s.scene_move.active);
40 struct input release={.kind=31,.code=272,.device=8};
41 scene_move_button(&s,&release); assert(s.scene_move.active);
42 release.device=9; scene_move_button(&s,&release); assert(!s.scene_move.active);
43 assert(pop(&bridge.events,&event));
44 assert(event.word[0]==38 && event.word[1]==1 && event.word[2]==40 && event.word[3]==20 && event.word[4]==11 && event.word[5]==0);
45 scene_move_plan(&s,stale); assert(s.scene_move.retained);
46 stale[5]=140; stale[6]=120; scene_move_plan(&s,stale); assert(!s.scene_move.retained);
47 int64_t duplicate[]={1,272,40000,40000,2,1,1};
48 assert(!scene_move_start(&s,12,duplicate,7));
49 int64_t missing_owner[]={1,272,40000,40000,1,-2};
50 assert(!scene_move_start(&s,12,missing_owner,6));
51 payload[2]=INT64_MAX; assert(!scene_move_start(&s,12,payload,7)); payload[2]=80000; payload[3]=60000;
52 int64_t retired[]={1,272,80000,60000,2,1,-999};
53 assert(scene_move_start(&s,99,retired,7));
54 assert(pop(&bridge.events,&event) && event.word[4]==99 && event.word[5]==1);
55 assert(!s.scene_move.active);
56 assert(scene_move_start(&s,12,payload,7));
57 stale[5]=0; stale[6]=0; stale[11]=1;
58 scene_move_plan(&s,stale); assert(!s.scene_move.active && !s.scene_move.retained);
59 scene_move_position(&s,1,&view.tree->node,0,0); assert(view.tree->node.x==0);
60 assert(scene_move_start(&s,13,payload,7));
61 s.lock_state=1; assert(!scene_move_motion(&s,0,90,60,0,0)); assert(!s.scene_move.active);
62 s.lock_state=0; assert(scene_move_start(&s,14,payload,7));
63 view.mapped=false; assert(!scene_move_motion(&s,0,90,60,0,0)); assert(!s.scene_move.active);
64 close(bridge.event_fd); wlr_cursor_destroy(s.cursor); wlr_scene_node_destroy(&s.scene->tree.node);
65 puts("SCENE_MOVE=PASS admission stale-start retired-resource grouped-geometry stable-order stale-plans release lock unmap");
66 return 0;