aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-02 17:35:47 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-03 22:48:05 +0800
commit1b197ca9997eb407407e508eb199b1e6fae78926 (patch)
tree12f5784d37f7cd06bcc9104f3d559368ee420136
parentefce9cc6dbbeece12fe348ec742f9c501459d37d (diff)
downloadcru-1b197ca9997eb407407e508eb199b1e6fae78926.tar.gz
cru-1b197ca9997eb407407e508eb199b1e6fae78926.tar.bz2
cru-1b197ca9997eb407407e508eb199b1e6fae78926.zip
Override Run and AddOnQuitHandler.
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h8
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp17
2 files changed, 22 insertions, 3 deletions
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h
index d8702087..9b3545c2 100644
--- a/include/cru/platform/gui/xcb/UiApplication.h
+++ b/include/cru/platform/gui/xcb/UiApplication.h
@@ -3,6 +3,7 @@
#include "Base.h"
#include <xcb/xcb.h>
+#include <functional>
namespace cru::platform::gui::xcb {
class XcbUiApplication : public XcbResource, public virtual IUiApplication {
@@ -12,12 +13,12 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
void CheckXcbConnectionError();
- virtual int Run() = 0;
+ int Run() override;
// Post a quit message with given quit code.
virtual void RequestQuit(int quit_code) = 0;
- virtual void AddOnQuitHandler(std::function<void()> handler) = 0;
+ void AddOnQuitHandler(std::function<void()> handler) override;
virtual bool IsQuitOnAllWindowClosed() = 0;
virtual void SetQuitOnAllWindowClosed(bool quit_on_all_window_closed) = 0;
@@ -61,5 +62,8 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
private:
xcb_connection_t* xcb_;
xcb_screen_t* screen_;
+
+ std::vector<std::function<void()>> quit_handlers_;
+ int exit_code_;
};
} // namespace cru::platform::gui::xcb
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index 6cd0a177..fefc1335 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -3,7 +3,7 @@
#include <xcb/xcb.h>
namespace cru::platform::gui::xcb {
-XcbUiApplication::XcbUiApplication() {
+XcbUiApplication::XcbUiApplication() : exit_code_(0) {
int screen_num;
xcb_connection_t *connection = xcb_connect(NULL, &screen_num);
this->CheckXcbConnectionError();
@@ -20,4 +20,19 @@ void XcbUiApplication::CheckXcbConnectionError() {
throw XcbException("xcb_connection_has_error returned non-zero.");
}
}
+
+int XcbUiApplication::Run() {
+
+ // TODO: A Big Implement.
+
+ for (const auto &handler : this->quit_handlers_) {
+ handler();
+ }
+
+ return exit_code_;
+}
+
+void XcbUiApplication::AddOnQuitHandler(std::function<void()> handler) {
+ this->quit_handlers_.push_back(std::move(handler));
+}
} // namespace cru::platform::gui::xcb