Don't freak out when can't warp the pointer.

This commit is contained in:
Alex Shvartzkop 2023-09-22 05:10:42 +03:00
parent a1708637fc
commit 3ee2086f95
5 changed files with 30 additions and 10 deletions

View File

@ -276,10 +276,12 @@ void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
{ {
if( !justWarped ) if( !justWarped )
{ {
KIPLATFORM::UI::WarpPointer( m_parentPanel, x + warpX, y + warpY ); if( KIPLATFORM::UI::WarpPointer( m_parentPanel, x + warpX, y + warpY ) )
{
m_dragStartPoint += VECTOR2D( warpX, warpY ); m_dragStartPoint += VECTOR2D( warpX, warpY );
justWarped = true; justWarped = true;
} }
}
else else
justWarped = false; justWarped = false;
} }
@ -837,9 +839,13 @@ void WX_VIEW_CONTROLS::CenterOnCursor()
if( GetMousePosition( false ) != screenCenter ) if( GetMousePosition( false ) != screenCenter )
{ {
m_view->SetCenter( GetCursorPosition() ); VECTOR2D newCenter = GetCursorPosition();
if( KIPLATFORM::UI::WarpPointer( m_parentPanel, screenCenter.x, screenCenter.y ) )
{
m_view->SetCenter( newCenter );
m_dragStartPoint = screenCenter; m_dragStartPoint = screenCenter;
KIPLATFORM::UI::WarpPointer( m_parentPanel, screenCenter.x, screenCenter.y ); }
} }
} }

View File

@ -250,11 +250,12 @@ wxPoint KIPLATFORM::UI::GetMousePosition()
#endif #endif
void KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY ) bool KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY )
{ {
if( !wxGetEnv( wxT( "WAYLAND_DISPLAY" ), nullptr ) ) if( !wxGetEnv( wxT( "WAYLAND_DISPLAY" ), nullptr ) )
{ {
aWindow->WarpPointer( aX, aY ); aWindow->WarpPointer( aX, aY );
return true;
} }
else else
{ {
@ -277,7 +278,13 @@ void KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY )
wxLogTrace( traceWayland, wxS( "Set warped from %d %d to %d %d" ), s_warped_from.x, wxLogTrace( traceWayland, wxS( "Set warped from %d %d to %d %d" ), s_warped_from.x,
s_warped_from.y, s_warped_to.x, s_warped_to.y ); s_warped_from.y, s_warped_to.x, s_warped_to.y );
return true;
} }
wxLogTrace( traceWayland, wxS( "*** Warp to %d %d failed ***" ), aX, aY );
return false;
} }
#endif #endif
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
@ -293,9 +300,13 @@ void KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY )
gdk_window_set_cursor( win, blank_cursor ); gdk_window_set_cursor( win, blank_cursor );
aWindow->WarpPointer( aX, aY ); aWindow->WarpPointer( aX, aY );
gdk_window_set_cursor( win, cur_cursor ); gdk_window_set_cursor( win, cur_cursor );
return true;
} }
#endif #endif
} }
return false;
} }

View File

@ -149,8 +149,9 @@ namespace KIPLATFORM
* @param aWindow Window in which to position to mouse cursor * @param aWindow Window in which to position to mouse cursor
* @param aX destination x position * @param aX destination x position
* @param aY destination y position * @param aY destination y position
* @return true if the warp was successful
*/ */
void WarpPointer( wxWindow* aWindow, int aX, int aY ); bool WarpPointer( wxWindow* aWindow, int aX, int aY );
/** /**
* Configures the IME mode of a given control handle * Configures the IME mode of a given control handle

View File

@ -164,9 +164,10 @@ wxPoint KIPLATFORM::UI::GetMousePosition()
} }
void KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY ) bool KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY )
{ {
aWindow->WarpPointer( aX, aY ); aWindow->WarpPointer( aX, aY );
return true;
} }

View File

@ -172,9 +172,10 @@ wxPoint KIPLATFORM::UI::GetMousePosition()
} }
void KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY ) bool KIPLATFORM::UI::WarpPointer( wxWindow* aWindow, int aX, int aY )
{ {
aWindow->WarpPointer( aX, aY ); aWindow->WarpPointer( aX, aY );
return true;
} }