aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-10-08 22:26:14 +0800
committerYuqian Yang <crupest@crupest.life>2025-10-08 22:26:14 +0800
commit79d77619281607f9b189de21493736c61fbcac7c (patch)
tree3851228543284305e24fabc2d26b85eed4fe0ffe
parent7fffbd150b7dc54ced2cf79ed466c2beea6483b2 (diff)
downloadcru-79d77619281607f9b189de21493736c61fbcac7c.tar.gz
cru-79d77619281607f9b189de21493736c61fbcac7c.tar.bz2
cru-79d77619281607f9b189de21493736c61fbcac7c.zip
Bootstrap xcb clipboard.
-rw-r--r--include/cru/platform/gui/xcb/Clipboard.h19
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h2
-rw-r--r--src/platform/gui/xcb/CMakeLists.txt1
-rw-r--r--src/platform/gui/xcb/Clipboard.cpp13
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp5
5 files changed, 39 insertions, 1 deletions
diff --git a/include/cru/platform/gui/xcb/Clipboard.h b/include/cru/platform/gui/xcb/Clipboard.h
new file mode 100644
index 00000000..44294cbc
--- /dev/null
+++ b/include/cru/platform/gui/xcb/Clipboard.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "../Clipboard.h"
+#include "Base.h"
+
+namespace cru::platform::gui::xcb {
+class XcbUiApplication;
+class XcbClipboard : public XcbResource, public virtual IClipboard {
+ public:
+ explicit XcbClipboard(XcbUiApplication* application);
+ ~XcbClipboard() override;
+
+ String GetText() override;
+ void SetText(String text) override;
+
+ private:
+ XcbUiApplication* application_;
+};
+} // namespace cru::platform::gui::xcb
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h
index 72dd542a..3f27ffe6 100644
--- a/include/cru/platform/gui/xcb/UiApplication.h
+++ b/include/cru/platform/gui/xcb/UiApplication.h
@@ -15,6 +15,7 @@ class XcbWindow;
class XcbCursorManager;
class XcbXimInputMethodManager;
class XcbKeyboardManager;
+class XcbClipboard;
class XcbUiApplication : public XcbResource, public virtual IUiApplication {
friend XcbWindow;
@@ -107,5 +108,6 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
XcbCursorManager* cursor_manager_;
XcbXimInputMethodManager* input_method_manager_;
XcbKeyboardManager* keyboard_manager_;
+ XcbClipboard* clipboard_;
};
} // namespace cru::platform::gui::xcb
diff --git a/src/platform/gui/xcb/CMakeLists.txt b/src/platform/gui/xcb/CMakeLists.txt
index 9ae1019d..cafc2e67 100644
--- a/src/platform/gui/xcb/CMakeLists.txt
+++ b/src/platform/gui/xcb/CMakeLists.txt
@@ -4,6 +4,7 @@ find_library(LIBRARY_XCB_IMDKIT xcb-imdkit REQUIRED)
find_library(LIBRARY_XKBCOMMON xkbcommon REQUIRED)
find_library(LIBRARY_XKBCOMMON_X11 xkbcommon-x11 REQUIRED)
add_library(CruPlatformGuiXcb
+ Clipboard.cpp
Cursor.cpp
InputMethod.cpp
Keyboard.cpp
diff --git a/src/platform/gui/xcb/Clipboard.cpp b/src/platform/gui/xcb/Clipboard.cpp
new file mode 100644
index 00000000..d0d9d74f
--- /dev/null
+++ b/src/platform/gui/xcb/Clipboard.cpp
@@ -0,0 +1,13 @@
+#include "cru/platform/gui/xcb/Clipboard.h"
+#include "cru/platform/gui/xcb/UiApplication.h"
+
+namespace cru::platform::gui::xcb {
+XcbClipboard::XcbClipboard(XcbUiApplication* application)
+ : application_(application) {}
+
+XcbClipboard::~XcbClipboard() {}
+
+String XcbClipboard::GetText() { return String{}; }
+
+void XcbClipboard::SetText(String text) {}
+} // namespace cru::platform::gui::xcb
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index a943fe1f..07fd5a36 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -4,6 +4,7 @@
#include "cru/base/Guard.h"
#include "cru/platform/graphics/cairo/CairoGraphicsFactory.h"
#include "cru/platform/gui/Window.h"
+#include "cru/platform/gui/xcb/Clipboard.h"
#include "cru/platform/gui/xcb/Cursor.h"
#include "cru/platform/gui/xcb/InputMethod.h"
#include "cru/platform/gui/xcb/Keyboard.h"
@@ -40,9 +41,11 @@ XcbUiApplication::XcbUiApplication(
cursor_manager_ = new XcbCursorManager(this);
input_method_manager_ = new XcbXimInputMethodManager(this);
keyboard_manager_ = new XcbKeyboardManager(this);
+ clipboard_ = new XcbClipboard(this);
}
XcbUiApplication::~XcbUiApplication() {
+ delete clipboard_;
delete keyboard_manager_;
delete input_method_manager_;
delete cursor_manager_;
@@ -170,7 +173,7 @@ XcbUiApplication::GetGraphicsFactory() {
ICursorManager *XcbUiApplication::GetCursorManager() { return cursor_manager_; }
-IClipboard *XcbUiApplication::GetClipboard() { NotImplemented(); }
+IClipboard *XcbUiApplication::GetClipboard() { return clipboard_; }
IMenu *XcbUiApplication::GetApplicationMenu() { return nullptr; }