LibVT: Don't leave 50ms auto-scroll timer running at all times

This timer was causing wake-ups every 50ms in all terminals, just to
right back to sleep unless we were in the middle of an auto-scroll.
This commit is contained in:
Andreas Kling 2021-12-25 14:09:20 +01:00
parent d0df249666
commit 7d7950b322
Notes: sideshowbarker 2024-07-17 22:11:30 +09:00
2 changed files with 15 additions and 6 deletions

View File

@ -176,7 +176,7 @@ void TerminalWidget::set_logical_focus(bool focus)
m_cursor_blink_state = true;
m_cursor_blink_timer->start();
}
m_auto_scroll_direction = AutoScrollDirection::None;
set_auto_scroll_direction(AutoScrollDirection::None);
invalidate_cursor();
update();
}
@ -774,7 +774,7 @@ void TerminalWidget::mouseup_event(GUI::MouseEvent& event)
m_active_href_id = {};
update();
}
m_auto_scroll_direction = AutoScrollDirection::None;
set_auto_scroll_direction(AutoScrollDirection::None);
}
}
@ -873,11 +873,11 @@ void TerminalWidget::mousemove_event(GUI::MouseEvent& event)
auto adjusted_position = event.position().translated(-(frame_thickness() + m_inset), -(frame_thickness() + m_inset));
if (adjusted_position.y() < 0)
m_auto_scroll_direction = AutoScrollDirection::Up;
set_auto_scroll_direction(AutoScrollDirection::Up);
else if (adjusted_position.y() > m_terminal.rows() * m_line_height)
m_auto_scroll_direction = AutoScrollDirection::Down;
set_auto_scroll_direction(AutoScrollDirection::Down);
else
m_auto_scroll_direction = AutoScrollDirection::None;
set_auto_scroll_direction(AutoScrollDirection::None);
VT::Position old_selection_end = m_selection.end();
VT::Position old_selection_start = m_selection.start();
@ -915,7 +915,7 @@ void TerminalWidget::mousewheel_event(GUI::MouseEvent& event)
{
if (!is_scrollable())
return;
m_auto_scroll_direction = AutoScrollDirection::None;
set_auto_scroll_direction(AutoScrollDirection::None);
m_scrollbar->set_value(m_scrollbar->value() + event.wheel_delta() * scroll_length());
GUI::Frame::mousewheel_event(event);
}
@ -1286,4 +1286,11 @@ void TerminalWidget::send_non_user_input(ReadonlyBytes bytes)
VERIFY_NOT_REACHED();
}
}
void TerminalWidget::set_auto_scroll_direction(AutoScrollDirection direction)
{
m_auto_scroll_direction = direction;
m_auto_scroll_timer->set_active(direction != AutoScrollDirection::None);
}
}

View File

@ -201,6 +201,8 @@ private:
Down
};
void set_auto_scroll_direction(AutoScrollDirection);
AutoScrollDirection m_auto_scroll_direction { AutoScrollDirection::None };
RefPtr<Core::Timer> m_cursor_blink_timer;