aswm/test/utils.c
2025-05-17 12:14:31 +02:00

57 lines
1.5 KiB
C

#include "utils.h"
#include "test_set_up.h"
#define MAX_COLOR 65535
const time_t USER_DELAY_S = 1;
const clock_t USER_DELAY = USER_DELAY_S * CLOCKS_PER_SEC;
XColor red(float intensity) {
XColor red;
red.red = intensity * MAX_COLOR;
XAllocColor(test_display, XDefaultColormap(test_display, DefaultScreen(test_display)), &red);
return red;
}
XColor blue(float intensity) {
XColor blue;
blue.blue = intensity * MAX_COLOR;
XAllocColor(test_display, XDefaultColormap(test_display, DefaultScreen(test_display)), &blue);
return blue;
}
int wait_visibility(Display* display, Window window) {
int visibility;
XSelectInput(test_display, window, VisibilityChangeMask);
clock_t start = clock();
while((clock() - start) < USER_DELAY) {
XEvent e;
XCheckWindowEvent(test_display, window, VisibilityChangeMask, &e);
visibility = e.xvisibility.state;
}
return visibility;
}
void wait_array_visibility(Display* display, int N, Window* windows, int* visibilities) {
for(auto i = 0; i < N; i++)
XSelectInput(test_display, windows[i], VisibilityChangeMask);
clock_t user_time = clock();
while((clock() - user_time) < USER_DELAY * N) {
for(auto i = 0; i < N; i++) {
XEvent e;
XCheckWindowEvent(test_display, windows[i], VisibilityChangeMask, &e);
visibilities[i] = e.xvisibility.state;
}
}
}
Window parent(Display* display, Window window) {
Window _root;
Window parent;
Window* _children;
unsigned int _children_count;
XQueryTree(test_display, window, &_root, &parent, &_children, &_children_count);
return parent;
}