From 58b4e00736c0f2f13a3e96b5fcb3c00623ed35be Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Tue, 9 Feb 2021 21:48:59 +0100 Subject: Quite many message queue fixes and impl start --- apps/wm.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'apps') diff --git a/apps/wm.c b/apps/wm.c index 9b7631d..b100770 100644 --- a/apps/wm.c +++ b/apps/wm.c @@ -281,31 +281,36 @@ int main(int argc, char **argv) gfx_write(&direct, 0, 0, FONT_32, COLOR_FG, "Welcome to Melvix!"); gfx_write(&direct, 0, 32, FONT_32, COLOR_FG, "Loading resources..."); gfx_fill(&root, COLOR_FG); - gfx_load_wallpaper(&root, "/res/wall.png"); - gfx_load_image(&cursor, "/res/cursor.png", 0, 0); + //gfx_load_wallpaper(&root, "/res/wall.png"); + //gfx_load_image(&cursor, "/res/cursor.png", 0, 0); + gfx_fill(&cursor, COLOR_BG); redraw_all(); struct message msg = { 0 }; struct event_keyboard kbd_event = { 0 }; struct event_mouse mouse_event = { 0 }; + const char *listeners[] = { "/dev/kbd", "/dev/mouse", "/proc/self/msg" }; while (1) { - if (read("/dev/kbd", &kbd_event, 0, sizeof(struct event_keyboard))) - handle_keyboard(&kbd_event); - /* else if (read("/dev/mouse", &mouse_event, 0, sizeof(struct event_mouse))) */ - /* handle_mouse(&mouse_event); */ - /* else if (msg_receive(&msg)) { */ - /* handle_message(&msg); */ - /* } */ - else { - yield(); - continue; + int poll_ret = 0; + if ((poll_ret = poll(listeners)) >= 0) { + if (poll_ret == 0) { + if (read(listeners[poll_ret], &kbd_event, 0, sizeof(kbd_event)) > 0) + handle_keyboard(&kbd_event); + continue; + } else if (poll_ret == 1) { + if (read(listeners[poll_ret], &mouse_event, 0, + sizeof(mouse_event)) > 0) + handle_mouse(&mouse_event); + continue; + } else if (poll_ret == 2) { + if (read(listeners[poll_ret], &msg, 0, sizeof(msg)) <= 0) + continue; + } + } else { + printf("POLL ERROR!\n"); + return 1; } - //if (!msg_receive(&msg)) { - yield(); - continue; - //} - switch (msg.type) { case GFX_NEW_CONTEXT: { struct context *ctx = msg.data; -- cgit v1.2.3