summaryrefslogtreecommitdiff
path: root/userland/windowserver/ws.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-10-23 14:27:22 +0200
committerAnton Kling <anton@kling.gg>2023-10-23 14:27:22 +0200
commitb8ca0766a2006e4a11451cf447ac02372c996c12 (patch)
tree4e0d70324aaac483e84af5808f016e4224a2d738 /userland/windowserver/ws.c
parente8643790b093a4b25651aff14b85c492ffcae3f2 (diff)
WindowServer: Make the wallpaper be stored in a shared memory region.
This allow other processes to easily modify the wallpaper by opening the memory region and poking into memory.
Diffstat (limited to 'userland/windowserver/ws.c')
-rw-r--r--userland/windowserver/ws.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/userland/windowserver/ws.c b/userland/windowserver/ws.c
index da1bdaa..6c7e6ee 100644
--- a/userland/windowserver/ws.c
+++ b/userland/windowserver/ws.c
@@ -69,6 +69,17 @@ void setup_display(DISPLAY *disp, const char *path, uint64_t size) {
disp->true_buffer = mmap(NULL, size, 0, 0, disp->vga_fd, 0);
disp->back_buffer = malloc(size + 0x1000);
disp->clients = clients;
+
+ disp->wallpaper_fd = shm_open("wallpaper", O_RDWR, 0);
+ assert(disp->wallpaper_fd >= 0);
+ ftruncate(disp->wallpaper_fd, size);
+ void *rc = mmap(NULL, size, 0, 0, disp->wallpaper_fd, 0);
+ assert(rc);
+ disp->wallpaper_buffer = rc;
+ for (int i = 0; i < disp->size / BPP; i++) {
+ uint32_t *p = disp->wallpaper_buffer + i * sizeof(uint32_t);
+ *p = 0xFFFFFF;
+ }
}
void setup(void) {