From 7c135df9b8057e1de3ea6a73fb785d5622b519d4 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Thu, 11 Sep 2025 23:25:49 +0800 Subject: xcb window title. --- src/platform/gui/xcb/UiApplication.cpp | 4 ++++ src/platform/gui/xcb/Window.cpp | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'src') 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 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_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 -- cgit v1.2.3