[fix] restore remote cursors on Linux without a pointing device, refs #130

This commit is contained in:
dijunkun
2026-10-29 10:43:53 +08:00
parent 273cbc0adf
commit 199d29a6dd
9 changed files with 381 additions and 21 deletions
@@ -13,11 +13,16 @@ bool g_cursor_state_available = false;
} // namespace
void PublishSharedCursorState(bool visible, RemoteCursorShape shape) {
void PublishSharedCursorState(CursorRenderMode mode, RemoteCursorShape shape) {
std::lock_guard<std::mutex> lock(g_cursor_state_mutex);
++g_cursor_state.generation;
g_cursor_state.visible = visible;
g_cursor_state.shape = visible ? shape : RemoteCursorShape::none;
g_cursor_state.visible = mode == CursorRenderMode::separate;
g_cursor_state.shape = g_cursor_state.visible ? shape : RemoteCursorShape::none;
g_cursor_state.render_mode = mode;
g_cursor_state.hidden_reason = mode == CursorRenderMode::hidden
? CursorHiddenReason::system_hidden
: mode == CursorRenderMode::unknown ? CursorHiddenReason::sampling_failed
: CursorHiddenReason::unspecified;
g_cursor_state_available = true;
}
@@ -38,6 +43,8 @@ void ClearSharedCursorState() {
++g_cursor_state.generation;
g_cursor_state.visible = false;
g_cursor_state.shape = RemoteCursorShape::none;
g_cursor_state.render_mode = CursorRenderMode::unknown;
g_cursor_state.hidden_reason = CursorHiddenReason::sampling_failed;
g_cursor_state_available = false;
}
@@ -3,7 +3,7 @@
#include <cstdint>
#include <remote_cursor_shape.h>
#include <remote_action.h>
namespace crossdesk {
@@ -11,9 +11,11 @@ struct SharedCursorState {
uint64_t generation = 0;
bool visible = false;
RemoteCursorShape shape = RemoteCursorShape::default_cursor;
CursorRenderMode render_mode = CursorRenderMode::unknown;
CursorHiddenReason hidden_reason = CursorHiddenReason::sampling_failed;
};
void PublishSharedCursorState(bool visible, RemoteCursorShape shape);
void PublishSharedCursorState(CursorRenderMode mode, RemoteCursorShape shape);
bool GetSharedCursorState(SharedCursorState* state);
void ClearSharedCursorState();