aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-24 01:22:11 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-24 01:22:11 +0800
commita3a0fb3488d29dd4743e6d4c22da9f5ded070ebc (patch)
treebbb9e2f5d52e208d6af1c7513bc66d2db0bf7125 /src
parent26252b0f4a24e536074aa034a88868bf8ea07b76 (diff)
downloadcru-a3a0fb3488d29dd4743e6d4c22da9f5ded070ebc.tar.gz
cru-a3a0fb3488d29dd4743e6d4c22da9f5ded070ebc.tar.bz2
cru-a3a0fb3488d29dd4743e6d4c22da9f5ded070ebc.zip
Flush xcb.
Diffstat (limited to 'src')
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp2
-rw-r--r--src/platform/gui/xcb/Window.cpp11
2 files changed, 13 insertions, 0 deletions
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index d79f42a7..1e5613b4 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -61,6 +61,8 @@ xcb_connection_t *XcbUiApplication::GetXcbConnection() {
return xcb_connection_;
}
+void XcbUiApplication::XcbFlush() { xcb_flush(xcb_connection_); }
+
xcb_screen_t *XcbUiApplication::GetFirstXcbScreen() { return screen_; }
xcb_atom_t XcbUiApplication::GetOrCreateXcbAtom(std::string name) {
diff --git a/src/platform/gui/xcb/Window.cpp b/src/platform/gui/xcb/Window.cpp
index f3480fe0..a27663a9 100644
--- a/src/platform/gui/xcb/Window.cpp
+++ b/src/platform/gui/xcb/Window.cpp
@@ -72,6 +72,7 @@ XcbWindow::~XcbWindow() { application_->UnregisterWindow(this); }
void XcbWindow::Close() {
if (xcb_window_) {
xcb_destroy_window(application_->GetXcbConnection(), *xcb_window_);
+ application_->XcbFlush();
}
}
@@ -82,6 +83,7 @@ void XcbWindow::SetParent(INativeWindow *parent) {
if (xcb_window_) {
DoSetParent(*xcb_window_);
}
+ application_->XcbFlush();
}
WindowStyleFlag XcbWindow::GetStyleFlag() { return style_; }
@@ -91,6 +93,7 @@ void XcbWindow::SetStyleFlag(WindowStyleFlag flag) {
if (xcb_window_) {
DoSetStyleFlags(*xcb_window_);
}
+ application_->XcbFlush();
}
String XcbWindow::GetTitle() { return String::FromUtf8(title_); }
@@ -100,6 +103,7 @@ void XcbWindow::SetTitle(String title) {
if (xcb_window_) {
DoSetTitle(*xcb_window_);
}
+ application_->XcbFlush();
}
namespace {
@@ -177,6 +181,8 @@ void XcbWindow::SetVisibility(WindowVisibilityType visibility) {
default:
UnreachableCode();
}
+
+ application_->XcbFlush();
}
Size XcbWindow::GetClientSize() { return GetClientRect().GetSize(); }
@@ -204,6 +210,7 @@ Rect XcbWindow::GetClientRect() {
void XcbWindow::SetClientRect(const Rect &rect) {
if (!xcb_window_) return;
DoSetClientRect(*xcb_window_, rect);
+ application_->XcbFlush();
}
Rect XcbWindow::GetWindowRect() {
@@ -236,6 +243,7 @@ bool XcbWindow::RequestFocus() {
if (!xcb_window_) return false;
xcb_set_input_focus(application_->GetXcbConnection(), XCB_NONE, *xcb_window_,
XCB_CURRENT_TIME);
+ application_->XcbFlush();
return true;
}
@@ -252,12 +260,14 @@ bool XcbWindow::CaptureMouse() {
xcb_grab_pointer(application_->GetXcbConnection(), FALSE, *xcb_window_, 0,
XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC, XCB_WINDOW_NONE,
XCB_CURSOR_NONE, XCB_CURRENT_TIME);
+ application_->XcbFlush();
return true;
}
bool XcbWindow::ReleaseMouse() {
if (!xcb_window_) return false;
xcb_ungrab_pointer(application_->xcb_connection_, XCB_CURRENT_TIME);
+ application_->XcbFlush();
return true;
}
@@ -269,6 +279,7 @@ void XcbWindow::SetToForeground() {
const static uint32_t values[] = {XCB_STACK_MODE_ABOVE};
xcb_configure_window(application_->GetXcbConnection(), *xcb_window_,
XCB_CONFIG_WINDOW_STACK_MODE, values);
+ application_->XcbFlush();
}
void XcbWindow::RequestRepaint() {