Compare commits

..

No commits in common. "8b1632f443b164709d78290683239b2e1f8c8e08" and "b95d495815fe18177c60feb796f096da25fea00d" have entirely different histories.

6 changed files with 6 additions and 68 deletions

View File

@ -1,24 +1,15 @@
#include <os/Process.h> #include <os/Process.h>
#include <signal.h>
#include <sys/wait.h>
#include <ui/App.h> #include <ui/App.h>
#include <ui/Button.h> #include <ui/Button.h>
#include <ui/Container.h> #include <ui/Container.h>
#include <ui/Image.h> #include <ui/Image.h>
#include <ui/Layout.h> #include <ui/Layout.h>
void sigchld_handler(int)
{
wait(nullptr);
}
Result<int> luna_main(int argc, char** argv) Result<int> luna_main(int argc, char** argv)
{ {
ui::App app; ui::App app;
TRY(app.init(argc, argv)); TRY(app.init(argc, argv));
signal(SIGCHLD, sigchld_handler);
ui::Rect screen = app.screen_rect(); ui::Rect screen = app.screen_rect();
ui::Rect bar = ui::Rect { ui::Point { 0, screen.height - 50 }, screen.width, 50 }; ui::Rect bar = ui::Rect { ui::Point { 0, screen.height - 50 }, screen.width, 50 };

View File

@ -102,7 +102,7 @@ namespace os
{ {
u8 response_id; u8 response_id;
auto rc = client.recv_typed(response_id); auto rc = client.recv_typed(response_id);
if (rc.has_error() && (rc.error() == EAGAIN || rc.error() == EINTR)) continue; if (rc.has_error() && rc.error() == EAGAIN) continue;
if (response_id == 0) // Error result if (response_id == 0) // Error result
{ {
@ -110,7 +110,7 @@ namespace os
{ {
int code; int code;
rc = client.recv_typed(code); rc = client.recv_typed(code);
if (rc.has_error() && (rc.error() == EAGAIN || rc.error() == EINTR)) continue; if (rc.has_error() && rc.error() == EAGAIN) continue;
return err(code); return err(code);
} }
} }
@ -126,7 +126,7 @@ namespace os
{ {
ResponseType response; ResponseType response;
rc = client.recv_typed(response); rc = client.recv_typed(response);
if (rc.has_error() && (rc.error() == EAGAIN || rc.error() == EINTR)) continue; if (rc.has_error() && rc.error() == EAGAIN) continue;
return response; return response;
} }
} }

View File

@ -18,8 +18,6 @@ namespace os::IPC
if (rc.has_error()) if (rc.has_error())
{ {
if (rc.error() == EAGAIN) return {}; // No messages, and the caller does not want us to block. if (rc.error() == EAGAIN) return {}; // No messages, and the caller does not want us to block.
if (rc.error() == EINTR)
return {}; // Let the caller check for anything having happened because a signal handler ran.
return rc.release_error(); return rc.release_error();
} }
@ -33,8 +31,6 @@ namespace os::IPC
if (rc.has_error()) if (rc.has_error())
{ {
if (rc.error() == EAGAIN) return {}; // No messages, and the caller does not want us to block. if (rc.error() == EAGAIN) return {}; // No messages, and the caller does not want us to block.
if (rc.error() == EINTR)
return {}; // Let the caller check for anything having happened because a signal handler ran.
return rc.release_error(); return rc.release_error();
} }

View File

@ -88,26 +88,13 @@ namespace ui
return window->ptr(); return window->ptr();
} }
#define READ_MESSAGE(request) \
do { \
auto rc = m_client->recv_typed(request); \
if (rc.has_error()) \
{ \
if (rc.error() == EAGAIN) { continue; } \
if (rc.error() == EINTR) { continue; } \
else \
return rc.release_error(); \
} \
break; \
} while (true)
Result<void> App::handle_ipc_event(u8 id) Result<void> App::handle_ipc_event(u8 id)
{ {
switch (id) switch (id)
{ {
case WINDOW_CLOSE_REQUEST_ID: { case WINDOW_CLOSE_REQUEST_ID: {
WindowCloseRequest request; WindowCloseRequest request;
READ_MESSAGE(request); TRY(m_client->recv_typed(request));
os::eprintln("ui: Window close request from server! Shall comply."); os::eprintln("ui: Window close request from server! Shall comply.");
auto* window = find_window(request.window); auto* window = find_window(request.window);
window->close(); window->close();
@ -115,7 +102,7 @@ namespace ui
} }
case MOUSE_EVENT_REQUEST_ID: { case MOUSE_EVENT_REQUEST_ID: {
MouseEventRequest request; MouseEventRequest request;
READ_MESSAGE(request); TRY(m_client->recv_typed(request));
auto* window = find_window(request.window); auto* window = find_window(request.window);
window->handle_mouse_move(request.position); window->handle_mouse_move(request.position);
window->handle_mouse_buttons(request.position, request.buttons); window->handle_mouse_buttons(request.position, request.buttons);

View File

@ -68,12 +68,6 @@ static Result<u32*> create_shm_region(const char* path, int* outfd, ui::Rect rec
client.rpc_id = decltype(request)::ID; \ client.rpc_id = decltype(request)::ID; \
return {}; \ return {}; \
} \ } \
if (rc.error() == EINTR) \
{ \
client.rpc_in_progress = true; \
client.rpc_id = decltype(request)::ID; \
return {}; \
} \
else \ else \
return rc.release_error(); \ return rc.release_error(); \
} \ } \
@ -208,7 +202,6 @@ namespace wind
if (rc.has_error()) if (rc.has_error())
{ {
if (rc.error() == EAGAIN) { return {}; } if (rc.error() == EAGAIN) { return {}; }
if (rc.error() == EINTR) { return {}; }
else else
return rc.release_error(); return rc.release_error();
} }

View File

@ -18,34 +18,6 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
static void debug(const Vector<Client>& clients)
{
os::println("--- wind: DEBUG OUTPUT ---");
os::println("-- wind: Listing clients --");
for (const auto& client : clients)
{
os::println("Client with fd %d, owns %zu windows", client.conn.fd(), client.windows.size());
}
os::println("-- wind: Listing windows --");
for (const auto& window : g_windows)
{
os::println("Window of client (fd %d), id %d, %sdecorated, %sdirty (\"%s\") (%d,%d,%d,%d)",
window->client->conn.fd(), window->id, window->decorated ? "" : "not ", window->dirty ? "" : "not ",
window->name.chars(), window->surface.pos.x, window->surface.pos.y, window->surface.width,
window->surface.height);
}
os::println("-- wind: Listing processes --");
system("ps");
os::println("--- wind: END DEBUG OUTPUT ---");
}
Result<int> luna_main(int argc, char** argv) Result<int> luna_main(int argc, char** argv)
{ {
srand((unsigned)time(NULL)); srand((unsigned)time(NULL));
@ -119,7 +91,7 @@ Result<int> luna_main(int argc, char** argv)
TRY(fds.try_append({ .fd = keyboard->fd(), .events = POLLIN, .revents = 0 })); TRY(fds.try_append({ .fd = keyboard->fd(), .events = POLLIN, .revents = 0 }));
TRY(fds.try_append({ .fd = server->fd(), .events = POLLIN, .revents = 0 })); TRY(fds.try_append({ .fd = server->fd(), .events = POLLIN, .revents = 0 }));
TRY(os::Security::pledge("stdio rpath wpath cpath unix signal proc exec", NULL)); TRY(os::Security::pledge("stdio rpath wpath cpath unix signal proc", NULL));
while (1) while (1)
{ {
@ -145,7 +117,6 @@ Result<int> luna_main(int argc, char** argv)
moon::KeyboardPacket packet; moon::KeyboardPacket packet;
TRY(keyboard->read_typed(packet)); TRY(keyboard->read_typed(packet));
os::println("%s key %d", packet.released ? "Released" : "Pressed", packet.key); os::println("%s key %d", packet.released ? "Released" : "Pressed", packet.key);
if (!packet.released && packet.key == moon::K_Tab) debug(clients);
} }
for (usize i = 0; i < clients.size(); i++) for (usize i = 0; i < clients.size(); i++)
{ {