fix(ui): stop forward-wheel double-scroll on peers & console tabs
The inner scroll child (##PeersList / ConsoleOutput) uses NoScrollWithMouse + ApplySmoothScroll; ImGui forwards its wheel up to the outer scroll container, so the wheel scrolled both. Add NoScrollWithMouse to the outer containers (safe: both fill the remaining height and never overflow), matching the contacts/explorer fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -311,8 +311,12 @@ void ConsoleTab::render(ConsoleCommandExecutor& exec)
|
|||||||
computeVisibleLines(has_text_filter_, filter_lower_);
|
computeVisibleLines(has_text_filter_, filter_lower_);
|
||||||
|
|
||||||
// Main console layout
|
// Main console layout
|
||||||
|
// NoScrollWithMouse: the inner ConsoleOutput owns wheel scrolling (via ApplySmoothScroll). Without
|
||||||
|
// this, a wheel over the output would scroll BOTH the output (smooth-scroll) and this outer container
|
||||||
|
// (ImGui forwards the NoScrollWithMouse child's wheel to its scrollable ancestor) — a double-scroll.
|
||||||
|
// Safe because the output panel is sized to fill the remaining height, so this outer never overflows.
|
||||||
ImGui::BeginChild("ConsoleContainer", ImVec2(0, 0), false,
|
ImGui::BeginChild("ConsoleContainer", ImVec2(0, 0), false,
|
||||||
ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar);
|
ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
|
||||||
|
|
||||||
// Optional status header (lite: sync + last error) above the toolbar.
|
// Optional status header (lite: sync + last error) above the toolbar.
|
||||||
renderStatusHeader(exec);
|
renderStatusHeader(exec);
|
||||||
|
|||||||
@@ -98,7 +98,12 @@ void RenderPeersTab(App* app)
|
|||||||
|
|
||||||
// Scrollable child to contain all content within available space
|
// Scrollable child to contain all content within available space
|
||||||
ImVec2 peersAvail = ImGui::GetContentRegionAvail();
|
ImVec2 peersAvail = ImGui::GetContentRegionAvail();
|
||||||
ImGui::BeginChild("##PeersScroll", peersAvail, false, ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar);
|
// NoScrollWithMouse: the inner ##PeersList owns wheel scrolling (via ApplySmoothScroll). Without
|
||||||
|
// this, a wheel over the list would scroll BOTH the list (smooth-scroll) and this outer container
|
||||||
|
// (ImGui forwards the NoScrollWithMouse child's wheel to its scrollable ancestor) — a double-scroll.
|
||||||
|
// Safe because the peer panel is sized to fill the remaining height, so this outer never overflows.
|
||||||
|
ImGui::BeginChild("##PeersScroll", peersAvail, false,
|
||||||
|
ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
|
||||||
|
|
||||||
// Responsive: scale factors per frame
|
// Responsive: scale factors per frame
|
||||||
float availWidth = ImGui::GetContentRegionAvail().x;
|
float availWidth = ImGui::GetContentRegionAvail().x;
|
||||||
|
|||||||
Reference in New Issue
Block a user