diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-09-11 23:25:49 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-09-11 23:25:49 +0800 |
commit | 7c135df9b8057e1de3ea6a73fb785d5622b519d4 (patch) | |
tree | 596cf74b32ba6e7c96b1a7690420e2383515f44d /src/platform/gui | |
parent | 4122cffc95a05ecc2a136ce30bf64f3492812443 (diff) | |
download | cru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.tar.gz cru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.tar.bz2 cru-7c135df9b8057e1de3ea6a73fb785d5622b519d4.zip |
xcb window title.
Diffstat (limited to 'src/platform/gui')
-rw-r--r-- | src/platform/gui/xcb/UiApplication.cpp | 4 | ||||
-rw-r--r-- | src/platform/gui/xcb/Window.cpp | 18 |
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 |