aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/xcb/UiApplication.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-09 02:08:28 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-09 02:08:28 +0800
commitf66b3de048daca9869e097926ed3fecb76647c7a (patch)
tree585a41c50cfdb4fcdbfb6375dbb4c8302bca8a84 /include/cru/platform/gui/xcb/UiApplication.h
parent5fde4557b2e8f9052634055d95932b95d1eb9c41 (diff)
downloadcru-f66b3de048daca9869e097926ed3fecb76647c7a.tar.gz
cru-f66b3de048daca9869e097926ed3fecb76647c7a.tar.bz2
cru-f66b3de048daca9869e097926ed3fecb76647c7a.zip
Implement more on XcbUiApplication.
Diffstat (limited to 'include/cru/platform/gui/xcb/UiApplication.h')
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h
index af1c40f4..fc20a4e2 100644
--- a/include/cru/platform/gui/xcb/UiApplication.h
+++ b/include/cru/platform/gui/xcb/UiApplication.h
@@ -8,6 +8,8 @@
#include <functional>
namespace cru::platform::gui::xcb {
+class XcbWindow;
+
class XcbUiApplication : public XcbResource, public virtual IUiApplication {
public:
XcbUiApplication();
@@ -17,12 +19,12 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
int Run() override;
- virtual void RequestQuit(int quit_code) = 0;
+ void RequestQuit(int quit_code) override;
void AddOnQuitHandler(std::function<void()> handler) override;
- virtual bool IsQuitOnAllWindowClosed() = 0;
- virtual void SetQuitOnAllWindowClosed(bool quit_on_all_window_closed) = 0;
+ bool IsQuitOnAllWindowClosed() override;
+ void SetQuitOnAllWindowClosed(bool quit_on_all_window_closed) override;
long long SetImmediate(std::function<void()> action) override;
long long SetTimeout(std::chrono::milliseconds milliseconds,
@@ -55,12 +57,17 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
virtual std::optional<std::vector<String>> ShowOpenDialog(
OpenDialogOptions options);
+ private:
+ void HandleXEvents();
+
private:
xcb_connection_t* xcb_;
xcb_screen_t* screen_;
cru::platform::unix::UnixEventLoop event_loop_;
std::vector<std::function<void()>> quit_handlers_;
- int exit_code_;
+
+ bool is_quit_on_all_window_closed_;
+ std::vector<XcbWindow*> windows_;
};
} // namespace cru::platform::gui::xcb