fix mouse chasing in 2x2 & floating layouts

QTimer was getting new connections added w/o removing existing ones; fix the same in FreezePointer
zero check is seemingly not needed now; zeros spam was caused by this QTimer misuse
This commit is contained in:
Garux 2024-01-09 04:12:08 +06:00
parent 2d11fdee43
commit 27dff0c888
2 changed files with 6 additions and 6 deletions

View File

@ -159,6 +159,7 @@ protected:
// handle runaways with released buttons; FIXME: need more elegant way to persistently grab in this case
if( !m_widget->rect().contains( mouseEvent->pos() ) ){ // bomb cursor via timer to get it back to the widget
if( !m_rescueTimer.isActive() ){
m_rescueTimer.disconnect(); // disconnect everything
m_rescueTimer.callOnTimeout( [center = center](){ QCursor::setPos( center ); } );
m_rescueTimer.start( 33 );
}

View File

@ -295,13 +295,11 @@ static QTimer g_chasemouse_caller;
void XYWnd::ChaseMouse(){
const float multiplier = g_chasemouse_timer.elapsed_msec() / 10.0f;
if( multiplier != 0 ){ // a lot of zeros happen = torn, slow, inconsistent motion 🤔
g_chasemouse_timer.start();
Scroll( float_to_integer( multiplier * m_chasemouse_delta_x ), float_to_integer( multiplier * -m_chasemouse_delta_y ) );
//globalOutputStream() << "chasemouse: multiplier=" << multiplier << " x=" << m_chasemouse_delta_x << " y=" << m_chasemouse_delta_y << '\n';
g_chasemouse_timer.start();
Scroll( float_to_integer( multiplier * m_chasemouse_delta_x ), float_to_integer( multiplier * -m_chasemouse_delta_y ) );
//globalOutputStream() << "chasemouse: multiplier=" << multiplier << " x=" << m_chasemouse_delta_x << " y=" << m_chasemouse_delta_y << '\n';
XY_MouseMoved( m_chasemouse_current_x, m_chasemouse_current_y, getButtonState() );
}
XY_MouseMoved( m_chasemouse_current_x, m_chasemouse_current_y, getButtonState() );
}
bool XYWnd::chaseMouseMotion( const int x, const int y ){
@ -332,6 +330,7 @@ bool XYWnd::chaseMouseMotion( const int x, const int y ){
if ( !g_chasemouse_caller.isActive() ) {
//globalOutputStream() << "chasemouse timer start... ";
g_chasemouse_timer.start();
g_chasemouse_caller.disconnect(); // disconnect everything
g_chasemouse_caller.callOnTimeout( [this](){ ChaseMouse(); } );
g_chasemouse_caller.start( 4 ); // with 0 consumes entire thread by spamming calls 🤷‍♀️
}