diff --git a/src/gui/render.cpp b/src/gui/render.cpp index c5affab..ac11944 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -1546,7 +1546,8 @@ void Render::InitializeModules() { std::shared_lock lock(client_properties_mutex_); int ret = -1; for (const auto& [remote_id, props] : client_properties_) { - if (props && props->peer_ && props->connection_established_) { + if (props && props->peer_ && props->connection_established_ && + props->enable_mouse_control_) { ret = SendReliableDataFrame(props->peer_, data, size, props->clipboard_label_.c_str()); if (ret != 0) { diff --git a/src/gui/render.h b/src/gui/render.h index 400eb12..d9f2af9 100644 --- a/src/gui/render.h +++ b/src/gui/render.h @@ -95,7 +95,7 @@ class Render { bool connection_established_ = false; bool rejoin_ = false; bool net_traffic_stats_button_pressed_ = false; - bool mouse_control_button_pressed_ = true; + bool enable_mouse_control_ = true; bool mouse_controller_is_started_ = false; bool audio_capture_button_pressed_ = true; bool control_mouse_ = true; diff --git a/src/gui/render_callback.cpp b/src/gui/render_callback.cpp index edc7b44..529e89d 100644 --- a/src/gui/render_callback.cpp +++ b/src/gui/render_callback.cpp @@ -395,6 +395,13 @@ void Render::OnReceiveDataBufferCb(const char* data, size_t size, return; } else if (source_id == render->clipboard_label_) { if (size > 0) { + std::string remote_user_id(user_id, user_id_size); + auto props = + render->GetSubStreamWindowPropertiesByRemoteId(remote_user_id); + if (props && !props->enable_mouse_control_) { + return; + } + std::string clipboard_text(data, size); if (!Clipboard::SetText(clipboard_text)) { LOG_ERROR("Failed to set clipboard content from remote"); @@ -764,7 +771,7 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, const char* user_id, case ConnectionStatus::Failed: case ConnectionStatus::Closed: { props->connection_established_ = false; - props->mouse_control_button_pressed_ = false; + props->enable_mouse_control_ = false; { std::lock_guard lock(props->video_frame_mutex_); diff --git a/src/gui/toolbars/control_bar.cpp b/src/gui/toolbars/control_bar.cpp index 82037f8..9f0cf30 100644 --- a/src/gui/toolbars/control_bar.cpp +++ b/src/gui/toolbars/control_bar.cpp @@ -198,24 +198,21 @@ int Render::ControlBar(std::shared_ptr& props) { float mouse_y = ImGui::GetCursorScreenPos().y; float disable_mouse_x = mouse_x + line_padding; float disable_mouse_y = mouse_y + line_padding; - std::string mouse = props->mouse_control_button_pressed_ - ? ICON_FA_COMPUTER_MOUSE - : ICON_FA_COMPUTER_MOUSE; + std::string mouse = ICON_FA_COMPUTER_MOUSE; ImGui::SetWindowFontScale(0.5f); if (ImGui::Button(mouse.c_str(), ImVec2(button_width, button_height))) { if (props->connection_established_) { start_keyboard_capturer_ = !start_keyboard_capturer_; props->control_mouse_ = !props->control_mouse_; - props->mouse_control_button_pressed_ = - !props->mouse_control_button_pressed_; + props->enable_mouse_control_ = !props->enable_mouse_control_; props->mouse_control_button_label_ = - props->mouse_control_button_pressed_ + props->enable_mouse_control_ ? localization::release_mouse[localization_language_index_] : localization::control_mouse[localization_language_index_]; } } - if (!props->mouse_control_button_pressed_) { + if (!props->enable_mouse_control_) { draw_list->AddLine(ImVec2(disable_mouse_x, disable_mouse_y), ImVec2(mouse_x + button_width - line_padding, mouse_y + button_height - line_padding),