aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/xcb/UiApplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/gui/xcb/UiApplication.cpp')
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index 619e71ef..462e2fde 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -1,12 +1,21 @@
#include "cru/platform/gui/xcb/UiApplication.h"
+#include "cru/platform/graphics/cairo/CairoGraphicsFactory.h"
#include "cru/platform/gui/xcb/Window.h"
#include <poll.h>
#include <xcb/xcb.h>
namespace cru::platform::gui::xcb {
-XcbUiApplication::XcbUiApplication() {
+XcbUiApplication::XcbUiApplication(
+ graphics::cairo::CairoGraphicsFactory *cairo_factory) {
+ release_cairo_factory_ = false;
+ if (cairo_factory == nullptr) {
+ cairo_factory = new graphics::cairo::CairoGraphicsFactory();
+ release_cairo_factory_ = true;
+ }
+ cairo_factory_ = cairo_factory;
+
is_quit_on_all_window_closed_ = false;
int screen_num;
@@ -21,7 +30,12 @@ XcbUiApplication::XcbUiApplication() {
this->screen_ = iter.data;
}
-XcbUiApplication::~XcbUiApplication() { xcb_disconnect(this->xcb_connection_); }
+XcbUiApplication::~XcbUiApplication() {
+ xcb_disconnect(this->xcb_connection_);
+ if (release_cairo_factory_) {
+ delete cairo_factory_;
+ }
+}
void XcbUiApplication::CheckXcbConnectionError() {
if (xcb_connection_has_error(this->xcb_connection_)) {