aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-11 23:25:49 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-11 23:25:49 +0800
commit7c135df9b8057e1de3ea6a73fb785d5622b519d4 (patch)
tree596cf74b32ba6e7c96b1a7690420e2383515f44d /src/platform
parent4122cffc95a05ecc2a136ce30bf64f3492812443 (diff)
downloadcru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.tar.gz
cru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.tar.bz2
cru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.zip
xcb window title.
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp4
-rw-r--r--src/platform/gui/xcb/Window.cpp18
2 files changed, 22 insertions, 0 deletions
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index 2fceac30..e5cab19f 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -63,6 +63,10 @@ xcb_atom_t XcbUiApplication::GetOrCreateXcbAtom(std::string name) {
return atom;
}
+xcb_atom_t XcbUiApplication::GetXcbAtom_NET_WM_NAME() {
+ return GetOrCreateXcbAtom("_NET_WM_NAME");
+}
+
xcb_atom_t XcbUiApplication::GetXcbAtom_NET_WM_WINDOW_TYPE() {
return GetOrCreateXcbAtom("_NET_WM_WINDOW_TYPE");
}
diff --git a/src/platform/gui/xcb/Window.cpp b/src/platform/gui/xcb/Window.cpp
index 9b72789b..b56b8fa9 100644
--- a/src/platform/gui/xcb/Window.cpp
+++ b/src/platform/gui/xcb/Window.cpp
@@ -89,6 +89,15 @@ void XcbWindow::SetStyleFlag(WindowStyleFlag flag) {
}
}
+String XcbWindow::GetTitle() { return String::FromUtf8(title_); }
+
+void XcbWindow::SetTitle(String title) {
+ title_ = title.ToUtf8();
+ if (xcb_window_) {
+ DoSetTitle(*xcb_window_);
+ }
+}
+
std::unique_ptr<graphics::IPainter> XcbWindow::BeginPaint() {
assert(cairo_surface_);
@@ -392,4 +401,13 @@ void XcbWindow::DoSetStyleFlags(xcb_window_t window) {
XCB_ATOM_ATOM, 32, atoms.size(), atoms.data());
}
+void XcbWindow::DoSetTitle(xcb_window_t window) {
+ for (auto atom : {static_cast<xcb_atom_t>(XCB_ATOM_WM_NAME),
+ application_->GetXcbAtom_NET_WM_NAME()}) {
+ xcb_change_property(application_->GetXcbConnection(), XCB_PROP_MODE_REPLACE,
+ window, atom, XCB_ATOM_STRING, 8, title_.size(),
+ title_.data());
+ }
+}
+
} // namespace cru::platform::gui::xcb