commit 84cdd1cd5529c9ebfb073f1b561550e92d32a73b
parent 2add23be1ff1016810454bc85346ef656ae24269
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 18 Dec 2025 09:00:08 +0900
create window in xcb
Diffstat:
2 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,10 +1,10 @@
all: xlib xcb
-xlib:
+xlib: xlib.c
$(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xlib.c -L/usr/X11R6/lib -lX11 -lXrender -o xlib
-xcb:
- $(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xcb.c -L/usr/X11R6/lib -o xcb
+xcb: xcb.c
+ $(CC) -Wall -Wpedantic -Wextra -I/usr/X11R6/include xcb.c -L/usr/X11R6/lib -lxcb -o xcb
clean:
rm -f xlib xcb
diff --git a/xcb.c b/xcb.c
@@ -1,4 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h> // for pause(void)
+#include <xcb/xcb.h>
+#include <xcb/xproto.h>
+
+void fatal(char *msg);
int main(void) {
+ xcb_connection_t *conn = xcb_connect(NULL, NULL);
+ if (xcb_connection_has_error(conn) != 0) {
+ fatal("can't connect to the display");
+ }
+ xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;
+ xcb_window_t window = xcb_generate_id(conn);
+ xcb_create_window_value_list_t attr = {
+ .event_mask = XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_EXPOSURE,
+ };
+ xcb_create_window(conn, XCB_COPY_FROM_PARENT, window, screen->root,
+ 0, 0, 800, 600, 0,
+ XCB_WINDOW_CLASS_INPUT_OUTPUT,
+ screen->root_visual,
+ XCB_CW_EVENT_MASK, &attr);
+ xcb_map_window(conn, window);
+
+ xcb_flush(conn);
+
+ pause();
+
+ xcb_disconnect(conn);
return 0;
}
+
+void fatal(char *msg) {
+ fprintf(stderr, "%s\n", msg);
+ exit(1);
+}