aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
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