commit 58abd0b

uint  ·  2026-08-03 18:36:25 +0000 UTC
parent b40fa8f
Wayland: closing context and window
1 files changed,  +62, -0
+62, -0
 1@@ -152,12 +152,74 @@ char* maus_clipboard_get_text(Maus* mw)
 2 
 3 void maus_close(Maus* mw)
 4 {
 5+	MausBackend* be;
 6 
 7+	if (!mw)
 8+		return;
 9+
10+	be = &mw->backend;
11+
12+	if (be->buffer)
13+		wl_buffer_destroy(be->buffer);
14+
15+	if (be->shm_data && be->shm_size > 0)
16+		munmap(be->shm_data, be->shm_size);
17+
18+	if (be->xdg_toplevel)
19+		xdg_toplevel_destroy(be->xdg_toplevel);
20+
21+	if (be->xdg_surface)
22+		xdg_surface_destroy(be->xdg_surface);
23+
24+	if (be->surface)
25+		wl_surface_destroy(be->surface);
26+
27+	if (be->wm_base)
28+		xdg_wm_base_destroy(be->wm_base);
29+
30+	if (be->shm)
31+		wl_shm_destroy(be->shm);
32+
33+	if (be->compositor)
34+		wl_compositor_destroy(be->compositor);
35+
36+	if (be->registry)
37+		wl_registry_destroy(be->registry);
38+
39+	if (be->display) {
40+		wl_display_flush(be->display);
41+		wl_display_disconnect(be->display);
42+	}
43+
44+	free(mw->bfb);
45+	free(mw);
46 }
47 
48 int8_t maus_close_window(Maus* mw)
49 {
50+	MausBackend* be = &mw->backend;
51 
52+	if (be->buffer)
53+		wl_buffer_destroy(be->buffer);
54+	if (be->shm_data && be->shm_size > 0)
55+		munmap(be->shm_data, be->shm_size);
56+
57+	if (be->xdg_toplevel)
58+		xdg_toplevel_destroy(be->xdg_toplevel);
59+	if (be->xdg_surface)
60+		xdg_surface_destroy(be->xdg_surface);
61+	if (be->surface)
62+		wl_surface_destroy(be->surface);
63+
64+	be->buffer = NULL;
65+	be->shm_data = NULL;
66+	be->shm_size = 0;
67+	be->xdg_toplevel = NULL;
68+	be->xdg_surface = NULL;
69+	be->surface = NULL;
70+	be->configured = 0;
71+
72+	return 1;
73 }
74 
75 int8_t maus_create_window(Maus* mw)