From f761d4ef25ab0e695c79ae5c2ede1f850f1607af Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 9 Sep 2025 19:10:14 +0800 Subject: Develop some xcb window. --- src/platform/gui/xcb/UiApplication.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/platform/gui/xcb/UiApplication.cpp') diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp index 139a5422..619e71ef 100644 --- a/src/platform/gui/xcb/UiApplication.cpp +++ b/src/platform/gui/xcb/UiApplication.cpp @@ -1,8 +1,9 @@ -#include +#include "cru/platform/gui/xcb/UiApplication.h" + +#include "cru/platform/gui/xcb/Window.h" #include #include -#include "cru/base/Base.h" namespace cru::platform::gui::xcb { XcbUiApplication::XcbUiApplication() { @@ -20,14 +21,20 @@ XcbUiApplication::XcbUiApplication() { this->screen_ = iter.data; } -XcbUiApplication::~XcbUiApplication() { xcb_disconnect(this->xcb_); } +XcbUiApplication::~XcbUiApplication() { xcb_disconnect(this->xcb_connection_); } void XcbUiApplication::CheckXcbConnectionError() { - if (xcb_connection_has_error(this->xcb_)) { + if (xcb_connection_has_error(this->xcb_connection_)) { throw XcbException("xcb_connection_has_error returned non-zero."); } } +xcb_connection_t *XcbUiApplication::GetXcbConnection() { + return xcb_connection_; +} + +xcb_screen_t *XcbUiApplication::GetFirstXcbScreen() { return screen_; } + int XcbUiApplication::Run() { auto exit_code = event_loop_.Run(); @@ -75,8 +82,15 @@ void XcbUiApplication::CancelTimer(long long id) { void XcbUiApplication::HandleXEvents() { xcb_generic_event_t *event; - while ((event = xcb_poll_for_event(xcb_))) { - NotImplemented(); + while ((event = xcb_poll_for_event(xcb_connection_))) { + auto event_xcb_window = XcbWindow::GetEventWindow(event); + for (auto window : windows_) { + if (window->GetXcbWindow() == event_xcb_window) { + window->HandleEvent(event); + break; + } + } + ::free(event); } } -- cgit v1.2.3