diff --git a/include/Overlay.hpp b/include/Overlay.hpp index 283f2b1..50a38cd 100644 --- a/include/Overlay.hpp +++ b/include/Overlay.hpp @@ -56,6 +56,8 @@ namespace gsr { void save_replay(); void show_notification(const char *str, double timeout_seconds, mgl::Color icon_color, mgl::Color bg_color, NotificationType notification_type); bool is_open() const; + bool should_exit(std::string &reason) const; + void exit(); private: void xi_setup(); void handle_xi_events(); @@ -161,5 +163,8 @@ namespace gsr { std::array key_bindings; bool drawn_first_frame = false; + + bool do_exit = false; + std::string exit_reason; }; } \ No newline at end of file diff --git a/include/gui/GlobalSettingsPage.hpp b/include/gui/GlobalSettingsPage.hpp index 35b6003..c55648b 100644 --- a/include/gui/GlobalSettingsPage.hpp +++ b/include/gui/GlobalSettingsPage.hpp @@ -12,6 +12,7 @@ namespace gsr { class ScrollablePage; class Subsection; class RadioButton; + class Button; class GlobalSettingsPage : public StaticPage { public: @@ -25,9 +26,14 @@ namespace gsr { // Called with (enable, exit_status) std::function on_startup_changed; + // Called with (reason) + std::function on_click_exit_program_button; private: std::unique_ptr create_appearance_subsection(ScrollablePage *parent_page); std::unique_ptr create_startup_subsection(ScrollablePage *parent_page); + std::unique_ptr