playground/main.c
2026-06-07 01:59:52 -04:00

65 lines
1.5 KiB
C

#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main()
{
Display *display = XOpenDisplay(NULL);
Window main_window = XDefaultRootWindow(display);
int screen = DefaultScreen(display);
GC context = XDefaultGC(display, screen);
XSetWindowAttributes attributes = {};
attributes.background_pixel = 0xffffccaa;
attributes.event_mask = ResizeRedirectMask | ExposureMask;
Window window = XCreateWindow(display, main_window,
0, 0, 1920, 1080,
1, CopyFromParent, CopyFromParent, CopyFromParent,
CWBackPixel | CWEventMask, &attributes);
XMapWindow(display, window);
XFlush(display);
Atom WM_DELETE_WINDOW = XInternAtom(display, "WM_DELETE_WINDOW", False);
if(!XSetWMProtocols(display, window, &WM_DELETE_WINDOW, 1))
{
printf("Couldn't register WM_DELETE_WINDOW property \n");
}
int is_open = 1;
while(is_open)
{
XEvent general_event = {};
XNextEvent(display, &general_event);
printf("Type: %d \n", general_event.type);
switch(general_event.type)
{
case ClientMessage:
{
XClientMessageEvent *event = (XClientMessageEvent *) &general_event;
if((Atom)event->data.l[0] == WM_DELETE_WINDOW) {
XDestroyWindow(display, window);
is_open = 0;
printf("Window destroyed \n");
}
} break;
case ResizeRequest:
{
static unsigned long color = 0x00aade87;
if(color == 0x00aade87)
color = 0xd000d087;
else
color = 0x00aade87;
XSetWindowBackground(display, window, color);
} break;
}
XClearWindow(display, window);
}
return 0;
}