Mouse cursor jumps

When doing any operation, drag, move, duplicate, add symbol… , mouse cursor jumps to another location. seemingly some where upper left.

This does not happen if I only use cursor keys.

how to disable this “feature”?

Debian Linux 12, XFCE, with screen set to 180 DPI .

Application: KiCad Schematic Editor

Version: 6.0.6+dfsg-1, release build

Libraries:
	wxWidgets 3.0.5
	libcurl/7.84.0 OpenSSL/3.0.4 zlib/1.2.11 brotli/1.0.9 zstd/1.5.2 libidn2/2.3.3 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.10.0 nghttp2/1.48.0 librtmp/2.3 OpenLDAP/2.5.12

Platform: Linux 5.18.0-3-amd64 x86_64, 64 bit, Little endian, wxGTK, lightdm-xsession, x11

Build Info:
	Date: Jun 20 2022 18:00:05
	wxWidgets: 3.0.5 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
	Boost: 1.74.0
	OCC: 7.5.2
	Curl: 7.83.1
	ngspice: 37
	Compiler: GCC 11.3.0 with C++ ABI 1016

Build settings:
	KICAD_USE_OCC=ON
	KICAD_SPICE=ON

Probably "Center and Warp Cursor on Zoom.

Preferences / preferences / Mouse and Touchpad.

The:

… function should put the cursor in the center of the screen. It did take me some time to get used to it, but now I’m wishing for other programs to also have this ability.

The “Center and Warp Cursor on Zoom” also only activates on zooming (Which I usually activate with the scroll wheel), and not:

I’m guessing it may be some kind of bug

Thanks, but none of items in settings work.

Generally a program SHOULD NOT manipulate OS’ cursor location, it could be very annoying and unpredictable. or, at least, give us an options to turn it off.

Another scenario. if Schematic Editor window is not maximized.

  1. place a text
  2. type text
  3. use mouse to place text

then KiCAD moves mouse cursor to top left corner of entire screen, out side of sch window, then trapped there.

That’s definitely some kind of bug or other problem somewhere (not necessarily in KiCad!), KiCad doesn’t behave that way.

please test it before “doesn’t behave that way.”

 % grep -riIn "setmouse" *
common/tool/common_tools.cpp:147:        evt.SetMousePosition( getViewControls()->GetCursorPosition() );
common/tool/action_toolbar.cpp:732:    // (This is the equivalent of calling the DoResetMouseState() private function)
common/tool/tool_dispatcher.cpp:244:            evt->setMouseDragOrigin( st->dragOrigin );
common/tool/tool_dispatcher.cpp:245:            evt->setMouseDelta( m_lastMousePos - st->dragOrigin );
common/tool/tool_dispatcher.cpp:251:        evt->SetMousePosition( isClick ? st->downPosition : m_lastMousePos );
common/tool/tool_dispatcher.cpp:507:                evt->SetMousePosition( pos );
common/tool/tool_manager.cpp:324:        event.SetMousePosition( GetCursorPosition() );
common/tool/tool_manager.cpp:362:    evt.SetMousePosition( aPosition );
common/tool/tool_manager.cpp:396:    evt.SetMousePosition( GetCursorPosition() );
common/tool/action_menu.cpp:539:            evt->SetMousePosition( g_menu_open_position );
common/tool/action_menu.cpp:551:            evt->SetMousePosition( getToolManager()->GetMousePosition() );
eeschema/tools/ee_selection_tool.cpp:435:                        newEvt->SetMousePosition( snappedCursorPos );
include/tool/tool_event.h:189:            setMouseButtons( aExtraParam & BUT_BUTTON_MASK );
include/tool/tool_event.h:465:    void SetMousePosition( const VECTOR2D& aP )
include/tool/tool_event.h:475:    void setMouseDragOrigin( const VECTOR2D& aP )
include/tool/tool_event.h:480:    void setMouseDelta( const VECTOR2D& aP )
include/tool/tool_event.h:485:    void setMouseButtons( int aButtons )
include/gal/cairo/cairo_gal.h:414:    void SetMouseListener( wxEvtHandler* aMouseListener )
include/gal/opengl/opengl_gal.h:275:    void SetMouseListener( wxEvtHandler* aMouseListener )
pcbnew/router/pns_line_placer.cpp:1160:    m_mouseTrailTracer.SetMouseDisabled( !Settings().GetAutoPosture() );
pcbnew/router/pns_mouse_trail_tracer.h:57:    void SetMouseDisabled( bool aDisabled = true ) { m_disableMouse = aDisabled; }

Thanks!

but, if “Center and Warp Cursor on Zoom.” is on, zoom snaps the cursor to a point, I check with screenshot and GIMP, x:460, y:252.

Seemingly some where it got the resolution/windowsize wrong.

I know pretty well how KiCad behaves in this respect. It moves the mouse cursor in some situations, but not when

As I said, if this happens, it’s definitely a bug or some other problem, not how KiCad normally behaves or should behave, regardless of any settings. I just tested, it works OK, so this may have something to do with your system or some sw combination.

I commented out most ->WarpPointer and building from source.

if you use MacOS, ->WarpPointer() doesn’t work at all, no work, no bug.

It works! Disable all ->WarpPointer and build it. works perfectly fine like good old KiCAD. Thank you guys!

I don’t use MacOS, I use – well, currently only test regularly – KiCad on Linux and Windows. There’s no such bug there. You should probably report it with detailed information about the use case and exact steps to reproduce it. Even better if you could track it down yourself because you apparently can read and edit the code. Great if commenting out code works for you, but it doesn’t help other users or the developers. The latter need more information to fix it if it works for them on MacOS.

2 Likes

sure, in the past KiCAD 3, 4, 5 all works fine, no this kind of issue.

currently it’s really messy and might be

  • debian’s package
  • 6.0.6 / 6.0.7?
  • buggy wxWidgets
  • many other

Also I didn’t even try building from original 6.0.7 src.

kind of in the middle of a large project, have not much time to get this pinned down. just need some quick & dirty walk around for me to finish that first, then dig deeper.

thanks!

btw, which DE do you guys test on Linux?

I’m on the current Debian and build my own. Mine seems to be fine.
Application: KiCad

Version: 6.0.7, release build

Libraries:
wxWidgets 3.0.5
libcurl/7.84.0 OpenSSL/1.1.1n zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.9.0 nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.4.59

Platform: Linux 5.18.0-0.bpo.1-amd64 x86_64, 64 bit, Little endian, wxGTK, plasma, x11

Build Info:
Date: Jul 27 2022 16:30:11
wxWidgets: 3.0.5 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
Boost: 1.74.0
OCC: 7.5.1
Curl: 7.84.0
ngspice: 37
Compiler: GCC 10.2.1 with C++ ABI 1014

Build settings:
KICAD_USE_OCC=ON
KICAD_SPICE=ON

built from untouched 6.0.7, cursor still jumps, when doing actions and first mouse move.

Application: KiCad

Version: 6.0.7, release build

Libraries:
	wxWidgets 3.0.5
	libcurl/7.84.0 OpenSSL/3.0.4 zlib/1.2.11 brotli/1.0.9 zstd/1.5.2 libidn2/2.3.3 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.10.0 nghttp2/1.48.0 librtmp/2.3 OpenLDAP/2.5.12

Platform: Linux 5.18.0-3-amd64 x86_64, 64 bit, Little endian, wxGTK, lightdm-xsession, x11

Build Info:
	Date: Aug 13 2022 01:21:39
	wxWidgets: 3.0.5 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
	Boost: 1.74.0
	OCC: 7.5.2
	Curl: 7.84.0
	ngspice: 37
	Compiler: GCC 11.2.0 with C++ ABI 1016

Build settings:
	KICAD_USE_OCC=ON
	KICAD_SPICE=ON

only one needs to be commented out.

in common/view/wx_view_controls.cpp

void WX_VIEW_CONTROLS::WarpCursor(...
    ...
    // m_parentPanel->WarpPointer( screenPos.x, screenPos.y );
    ...

does this warp cursor to its current position?? :thinking: