SUMMARY Dragging a window to the top or bottom of the screen when "screen edge snap zone" is set to "None" causes a full graphical freeze. Screen remains stuck even after 5 minutes, mouse does not move, cannot change tty. Setting "screen edge snap zone" to 1 px or higher stops the issue. STEPS TO REPRODUCE 1. Window Behavior > Movement > Screen edge snap zone > Set to "None" 2. Drag a window with a titlebar to the top or bottom of the screen (sides seem to be fine) OBSERVED RESULT Screen will freeze, does not recover without a hard reset EXPECTED RESULT Does not freeze. SOFTWARE/OS VERSIONS Operating System: Arch Linux KDE Plasma Version: 5.92.0 KDE Frameworks Version: 5.248.0 Qt Version: 6.7.0 Kernel Version: 6.7.0-zen3-1-zen (64-bit) Graphics Platform: Wayland Processors: 32 × AMD Ryzen 9 7950X 16-Core Processor Memory: 30.5 GiB of RAM Graphics Processor: AMD Radeon RX 6800 XT Manufacturer: ASUS ADDITIONAL INFORMATION Happened in QT 6.6 so it is not QT 6.7 related. The freeze is purely graphical since SSH still works and commands run fine. It only happens with windows with a titlebar, so borderless and GTK apps are fine. There is nothing in journalctl and no coredump when this happens. No logs of any kind as far as I can tell. I can provide more information if needed but I am hoping it is reproducible on other systems so that won't be necessary.
I can reproduce this on git master under wayland when *both* screen edge snap zone and window snap zone are set to None.
gdb backtrace when attaching to stuck kwin_wayland: +bt #0 0x000079ccbdacc57d in QRect::QRect(int, int, int, int) (aheight=<optimized out>, awidth=<optimized out>, atop=<optimized out>, aleft=<optimized out>, this=<optimized out>) at /usr/include/qt6/QtCore/qrect.h:155 #1 QRectF::toRect() const (this=<optimized out>) at /usr/include/qt6/QtCore/qrect.h:854 #2 KWin::Window::handleInteractiveMoveResize(double, double, double, double) (this=this@entry=0x611583b35d70, x=<optimized out>, y=<optimized out>, x_root=<optimized out>, y_root=<optimized out>) at /home/yifan/kde/src/kwin/src/window.cpp:1690 #3 0x000079ccbdaccf7d in KWin::Window::handleInteractiveMoveResize(QPointF const&, QPointF const&) (this=this@entry=0x611583b35d70, local=..., global=...) at /usr/include/qt6/QtCore/qpoint.h:335 #4 0x000079ccbdacd578 in KWin::Window::updateInteractiveMoveResize(QPointF const&) (this=this@entry=0x611583b35d70, currentGlobalCursor=...) at /home/yifan/kde/src/kwin/src/window.cpp:1380 #5 0x000079ccbd956308 in KWin::MoveResizeFilter::pointerEvent(KWin::MouseEvent*, unsigned int) (this=<optimized out>, event=<optimized out>, nativeButton=<optimized out>) at /home/yifan/kde/src/kwin/src/input.cpp:604 #6 0x000079ccbd9f06dd in std::__invoke_impl<bool, bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&>(std::__invoke_memfun_deref, bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&) (__f=<optimized out>, __t=@0x6115839910e8: 0x6115839bc7e0) at /usr/include/c++/13.2.1/bits/invoke.h:71 #7 std::__invoke<bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&>(bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&) (__fn=<optimized out>) at /usr/include/c++/13.2.1/bits/invoke.h:96 #8 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::__call<bool, KWin::InputEventFilter* const&, 0ul, 1ul, 2ul>(std::tuple<KWin::InputEventFilter* const&>&&, std::_Index_tuple<0ul, 1ul, 2ul>) (__args=<optimized out>, this=<optimized out>) at /usr/include/c++/13.2.1/functional:506 #9 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::operator()<KWin::InputEventFilter* const&, bool>(KWin::InputEventFilter* const&) (this=<optimized out>) at /usr/include/c++/13.2.1/functional:591 #10 __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >::operator()<QList<KWin::InputEventFilter*>::const_iterator>(QList<KWin::InputEventFilter*>::const_iterator) (__it=..., this=<optimized out>) at /usr/include/c++/13.2.1/bits/predefined_ops.h:318 #11 std::__find_if<QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >, std::random_access_iterator_tag) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algobase.h:2076 #12 std::__find_if<QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algobase.h:2117 #13 std::find_if<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:3923 #14 std::none_of<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:477 #15 std::any_of<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:496 #16 KWin::InputRedirection::processFilters<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (function=..., this=<optimized out>) at /home/yifan/kde/src/kwin/src/input.h:194 #17 KWin::PointerInputRedirection::processMotionInternal(QPointF const&, QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=0x61158362d8d0, pos=<optimized out>, delta=<optimized out>, deltaNonAccelerated=<optimized out>, time=std::chrono::duration = { <optimized out>us }, device=<optimized out>) at /home/yifan/kde/src/kwin/src/pointer_input.cpp:248 #18 0x000079ccbd9f158c in KWin::PointerInputRedirection::processMotion(QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=<optimized out>, delta=<optimized out>, deltaNonAccelerated=<optimized out>, time=std::chrono::duration = { <optimized out>us }, device=<optimized out>) at /home/yifan/kde/src/kwin/src/pointer_input.cpp:225 #19 0x000079ccba7beaa9 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffdd34e0e50, r=0x61158362d8d0, this=0x6115839b1dd0, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobjectdefs_impl.h:469 #20 doActivate<false>(QObject*, int, void**) (sender=0x611583bbb380, signal_index=6, argv=0x7ffdd34e0e50) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobject.cpp:4044 #21 0x000079ccbd8ab2a1 in KWin::InputDevice::pointerMotion(QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=this@entry=0x611583bbb380, _t1=..., _t2=..., _t3=_t3@entry=std::chrono::duration = { 328552452us }, _t4=<optimized out>) at /home/yifan/kde/build/kwin/src/kwin_autogen/include/moc_inputdevice.cpp:828 #22 0x000079ccbdb91477 in KWin::LibInput::Connection::processEvents() (this=<optimized out>) at /home/yifan/kde/src/kwin/src/backends/libinput/connection.cpp:373 #23 0x000079ccba7afc74 in QObject::event(QEvent*) (this=0x611583708cf0, e=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobject.cpp:1446 #24 0x000079ccbb97bf4b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x611583708cf0, e=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/widgets/kernel/qapplication.cpp:3290 #25 0x000079ccba765488 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x611583708cf0, event=event@entry=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1134 #26 0x000079ccba765814 in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x79cc8c04bf70, receiver=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1575 #27 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x6115835008c0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1946 #28 0x000079ccba8d89cb in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x61158351ddd0, flags=flags@entry=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventdispatcher_unix.cpp:415 #29 0x000079ccbb3f2ce2 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/gui/platform/unix/qunixeventdispatcher.cpp:27 #30 0x000079ccba76d67e in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=..., this=0x7ffdd34e1320) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventloop.cpp:100 #31 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffdd34e1320, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventloop.cpp:182 #32 0x000079ccba7690b8 in QCoreApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/global/qflags.h:74 #33 0x000079ccbb97849a in QApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/widgets/kernel/qapplication.cpp:2568 #34 0x000061158318ddc7 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/yifan/kde/src/kwin/src/main_wayland.cpp:609 +frame 2 #2 KWin::Window::handleInteractiveMoveResize (this=this@entry=0x611583b35d70, x=<optimized out>, y=<optimized out>, x_root=<optimized out>, y_root=<optimized out>) at /home/yifan/kde/src/kwin/src/window.cpp:1690 1690 const QRect r = rect & titleRect.toRect(); +finish Run till exit from #2 KWin::Window::handleInteractiveMoveResize (this=this@entry=0x611583b35d70, x=<optimized out>, y=<optimized out>, x_root=<optimized out>, y_root=<optimized out>) at /home/yifan/kde/src/kwin/src/window.cpp:1690 [Thread 0x79cc724006c0 (LWP 6016) exited] [Thread 0x79cc71a006c0 (LWP 6018) exited] [Thread 0x79cc72e006c0 (LWP 6017) exited] [Thread 0x79cc738006c0 (LWP 6015) exited] Thread 1 "kwin_wayland" received signal SIGINT, Interrupt. 0x000079ccbdacc594 in KWin::Window::handleInteractiveMoveResize (this=this@entry=0x611583b35d70, x=<optimized out>, y=<optimized out>, x_root=<optimized out>, y_root=<optimized out>) at /home/yifan/kde/src/kwin/src/window.cpp:1692 1692 (!transposed && r.height() == titleRect.height())) { // ...prevents long slim areas +where #0 0x000079ccbdacc594 in KWin::Window::handleInteractiveMoveResize(double, double, double, double) (this=this@entry=0x611583b35d70, x=<optimized out>, y=<optimized out>, x_root=<optimized out>, y_root=<optimized out>) at /home/yifan/kde/src/kwin/src/window.cpp:1692 #1 0x000079ccbdaccf7d in KWin::Window::handleInteractiveMoveResize(QPointF const&, QPointF const&) (this=this@entry=0x611583b35d70, local=..., global=...) at /usr/include/qt6/QtCore/qpoint.h:335 #2 0x000079ccbdacd578 in KWin::Window::updateInteractiveMoveResize(QPointF const&) (this=this@entry=0x611583b35d70, currentGlobalCursor=...) at /home/yifan/kde/src/kwin/src/window.cpp:1380 #3 0x000079ccbd956308 in KWin::MoveResizeFilter::pointerEvent(KWin::MouseEvent*, unsigned int) (this=<optimized out>, event=<optimized out>, nativeButton=<optimized out>) at /home/yifan/kde/src/kwin/src/input.cpp:604 #4 0x000079ccbd9f06dd in std::__invoke_impl<bool, bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&>(std::__invoke_memfun_deref, bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&) (__f=<optimized out>, __t=@0x6115839910e8: 0x6115839bc7e0) at /usr/include/c++/13.2.1/bits/invoke.h:71 #5 std::__invoke<bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&>(bool (KWin::InputEventFilter::*&)(KWin::MouseEvent*, unsigned int), KWin::InputEventFilter* const&, KWin::MouseEvent*&, int&) (__fn=<optimized out>) at /usr/include/c++/13.2.1/bits/invoke.h:96 #6 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::__call<bool, KWin::InputEventFilter* const&, 0ul, 1ul, 2ul>(std::tuple<KWin::InputEventFilter* const&>&&, std::_Index_tuple<0ul, 1ul, 2ul>) (__args=<optimized out>, this=<optimized out>) at /usr/include/c++/13.2.1/functional:506 #7 std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>::operator()<KWin::InputEventFilter* const&, bool>(KWin::InputEventFilter* const&) (this=<optimized out>) at /usr/include/c++/13.2.1/functional:591 #8 __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >::operator()<QList<KWin::InputEventFilter*>::const_iterator>(QList<KWin::InputEventFilter*>::const_iterator) (__it=..., this=<optimized out>) at /usr/include/c++/13.2.1/bits/predefined_ops.h:318 #9 std::__find_if<QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >, std::random_access_iterator_tag) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algobase.h:2076 #10 std::__find_if<QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> > >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, __gnu_cxx::__ops::_Iter_pred<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algobase.h:2117 #11 std::find_if<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:3923 #12 std::none_of<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:477 #13 std::any_of<QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(QList<KWin::InputEventFilter*>::const_iterator, QList<KWin::InputEventFilter*>::const_iterator, std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (__pred=..., __last=..., __first=...) at /usr/include/c++/13.2.1/bits/stl_algo.h:496 #14 KWin::InputRedirection::processFilters<std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)> >(std::_Bind<bool (KWin::InputEventFilter::*(std::_Placeholder<1>, KWin::MouseEvent*, int))(KWin::MouseEvent*, unsigned int)>) (function=..., this=<optimized out>) at /home/yifan/kde/src/kwin/src/input.h:194 #15 KWin::PointerInputRedirection::processMotionInternal(QPointF const&, QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=0x61158362d8d0, pos=<optimized out>, delta=<optimized out>, deltaNonAccelerated=<optimized out>, time=std::chrono::duration = { <optimized out>us }, device=<optimized out>) at /home/yifan/kde/src/kwin/src/pointer_input.cpp:248 #16 0x000079ccbd9f158c in KWin::PointerInputRedirection::processMotion(QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=<optimized out>, delta=<optimized out>, deltaNonAccelerated=<optimized out>, time=std::chrono::duration = { <optimized out>us }, device=<optimized out>) at /home/yifan/kde/src/kwin/src/pointer_input.cpp:225 #17 0x000079ccba7beaa9 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffdd34e0e50, r=0x61158362d8d0, this=0x6115839b1dd0, this=<optimized out>, r=<optimized out>, a=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobjectdefs_impl.h:469 #18 doActivate<false>(QObject*, int, void**) (sender=0x611583bbb380, signal_index=6, argv=0x7ffdd34e0e50) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobject.cpp:4044 #19 0x000079ccbd8ab2a1 in KWin::InputDevice::pointerMotion(QPointF const&, QPointF const&, std::chrono::duration<long, std::ratio<1l, 1000000l> >, KWin::InputDevice*) (this=this@entry=0x611583bbb380, _t1=..., _t2=..., _t3=_t3@entry=std::chrono::duration = { 328552452us }, _t4=<optimized out>) at /home/yifan/kde/build/kwin/src/kwin_autogen/include/moc_inputdevice.cpp:828 #20 0x000079ccbdb91477 in KWin::LibInput::Connection::processEvents() (this=<optimized out>) at /home/yifan/kde/src/kwin/src/backends/libinput/connection.cpp:373 #21 0x000079ccba7afc74 in QObject::event(QEvent*) (this=0x611583708cf0, e=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qobject.cpp:1446 #22 0x000079ccbb97bf4b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x611583708cf0, e=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/widgets/kernel/qapplication.cpp:3290 #23 0x000079ccba765488 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x611583708cf0, event=event@entry=0x79cc8c04bf70) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1134 #24 0x000079ccba765814 in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x79cc8c04bf70, receiver=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1575 #25 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x6115835008c0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qcoreapplication.cpp:1946 #26 0x000079ccba8d89cb in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x61158351ddd0, flags=flags@entry=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventdispatcher_unix.cpp:415 #27 0x000079ccbb3f2ce2 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/gui/platform/unix/qunixeventdispatcher.cpp:27 #28 0x000079ccba76d67e in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=..., this=0x7ffdd34e1320) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventloop.cpp:100 #29 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffdd34e1320, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/kernel/qeventloop.cpp:182 #30 0x000079ccba7690b8 in QCoreApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/corelib/global/qflags.h:74 #31 0x000079ccbb97849a in QApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.7.0-beta1/src/widgets/kernel/qapplication.cpp:2568 #32 0x000061158318ddc7 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/yifan/kde/src/kwin/src/main_wayland.cpp:609 +l 1687 const QRectF titleRect(bTitleRect.translated(currentTry.topLeft())); 1688 int visiblePixels = 0; 1689 for (const QRect &rect : availableArea) { 1690 const QRect r = rect & titleRect.toRect(); 1691 if ((transposed && r.width() == titleRect.width()) || // Only the full size regions... 1692 (!transposed && r.height() == titleRect.height())) { // ...prevents long slim areas 1693 visiblePixels += r.width() * r.height(); 1694 } 1695 } 1696 if (visiblePixels >= requiredPixels) {
Fyi the MR https://invent.kde.org/plasma/kwin/-/merge_requests/4302 proposes a refactoring of KWin::Window::handleInteractiveMoveResize
I plan to work on this.
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/4941
Git commit 2dba3d30af510a03e2e0bce870b65dad8b763edc by Yifan Zhu. Committed on 17/01/2024 at 19:05. Pushed by fanzhuyifan into branch 'master'. window: don't use exact comparison for QRectFs With fractional geometries, we can only guarantee that nextMoveResizeGeom eventually is within one unit of currentMoveResizeGeom. FIXED-IN: 6.0 M +5 -1 src/window.cpp https://invent.kde.org/plasma/kwin/-/commit/2dba3d30af510a03e2e0bce870b65dad8b763edc
Git commit 33077cb81c0504263eda6152bd6fa3776a7a470d by Yifan Zhu. Committed on 17/01/2024 at 19:37. Pushed by fanzhuyifan into branch 'Plasma/6.0'. window: don't use exact comparison for QRectFs With fractional geometries, we can only guarantee that nextMoveResizeGeom eventually is within one unit of currentMoveResizeGeom. FIXED-IN: 6.0 (cherry picked from commit 2dba3d30af510a03e2e0bce870b65dad8b763edc) M +5 -1 src/window.cpp https://invent.kde.org/plasma/kwin/-/commit/33077cb81c0504263eda6152bd6fa3776a7a470d
MR https://invent.kde.org/plasma/kwin/-/merge_requests/5468 introduced this bug on master again. (and systemd now restarts kwin in case of hang, yay)
(In reply to serfreeman1337 from comment #8) > MR https://invent.kde.org/plasma/kwin/-/merge_requests/5468 introduced this > bug on master again. > (and systemd now restarts kwin in case of hang, yay) Ooops...... Maybe we should just wait for the rerwite in https://invent.kde.org/plasma/kwin/-/merge_requests/5296.....
(In reply to serfreeman1337 from comment #8) > MR https://invent.kde.org/plasma/kwin/-/merge_requests/5468 introduced this > bug on master again. > (and systemd now restarts kwin in case of hang, yay) FWIW I can't reproduce on master using fractional scaling, and when *both* screen edge snap zone and window snap zone are set to None. But if you can reproduce consistently and are certain the MR is causing the issue, I would suggest reverting the MR, since having windows move by 1px increments is far less annoying than kwin hanging.