Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-75919

Override cursor has no precedence on Wayland

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P2: Important
    • 6.4.2, 6.5.0
    • 5.14
    • QPA: Wayland
    • None
    • Linux/Wayland
    • df401d596 (tqtc/lts-5.15), 2eaba7e89 (6.4), 471b21234 (dev), 4015d0cda (tqtc/lts-6.2)

    Description

      Setting an override cursor with QApplication::setOverrideCursor() only has effect as long as the mouse isn't moved. As soon as the mouse is moved, QWaylandWindow::restoreMouseCursor() kicks in and replaces the override cursor.

      First breakpoint hit when setting the override cursor:

      #0  QtWaylandClient::QWaylandInputDevice::setCursor (this=0x55555559c4e0, cursor=cursor@entry=0x7fffffffd8a8, cachedBuffer=..., fallbackOutputScale=fallbackOutputScale@entry=1) at qwaylandinputdevice.cpp:542
      #1  0x00007ffff77e968d in QtWaylandClient::QWaylandCursor::changeCursor (this=<optimized out>, cursor=0x7fffffffd8a8, window=<optimized out>) at qwaylandcursor.cpp:266
      #2  0x00007ffff7205197 in applyCursor (c=..., w=0x5555555d53b0) at kernel/qguiapplication.cpp:3766
      #3  applyCursor (c=..., l=...) at kernel/qguiapplication.cpp:3781
      #4  QGuiApplication::setOverrideCursor (cursor=...) at kernel/qguiapplication.cpp:3848
      #5  0x000055555555fdfe in MainWindow::<lambda()>::operator()(void) const (__closure=0x5555555d3c80) at /home/user/eclipse/macroburst-ui/application/MainWindow.cpp:307
      #6  0x00005555555635b5 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, MainWindow::createActions()::<lambda()> >::call(MainWindow::<lambda()> &, void **) (f=..., arg=0x7fffffffda88) at /home/user/nobackup/test/qt-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:146
      #7  0x00005555555634db in QtPrivate::Functor<MainWindow::createActions()::<lambda()>, 0>::call<QtPrivate::List<>, void>(MainWindow::<lambda()> &, void *, void **) (f=..., arg=0x7fffffffda88) at /home/user/nobackup/test/qt-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:256
      #8  0x00005555555633f6 in QtPrivate::QFunctorSlotObject<MainWindow::createActions()::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x5555555d3c70, r=0x5555555d3bd0, a=0x7fffffffda88, ret=0x0) at /home/user/nobackup/test/qt-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:439
      #9  0x00007ffff6d6c4e9 in QtPrivate::QSlotObjectBase::call (a=0x7fffffffda88, r=0x5555555d3bd0, this=0x5555555d3c70) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:394
      #10 doActivate<false> (sender=sender@entry=0x5555555d3bd0, signal_index=<optimized out>, argv=<optimized out>, argv@entry=0x0) at kernel/qobject.cpp:3768
      #11 0x00007ffff6d647e7 in QMetaObject::activate (sender=sender@entry=0x5555555d3bd0, m=m@entry=0x7ffff7f9f0e0 <QShortcut::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x0) at kernel/qobject.cpp:3827
      #12 0x00007ffff7a9a5c4 in QShortcut::activated (this=this@entry=0x5555555d3bd0) at .moc/moc_qshortcut.cpp:202
      #13 0x00007ffff7a9a694 in QShortcut::event (this=0x5555555d3bd0, e=0x7fffffffdde0) at kernel/qshortcut.cpp:676
      #14 0x00007ffff7a719f0 in QApplicationPrivate::notify_helper (this=this@entry=0x55555558e3a0, receiver=receiver@entry=0x5555555d3bd0, e=e@entry=0x7fffffffdde0) at kernel/qapplication.cpp:3736
      #15 0x00007ffff7a78eab in QApplication::notify (this=0x7fffffffe2e0, receiver=0x5555555d3bd0, e=0x7fffffffdde0) at kernel/qapplication.cpp:3092
      #16 0x00007ffff6d326a8 in QCoreApplication::notifyInternal2 (receiver=0x5555555d3bd0, event=0x7fffffffdde0) at kernel/qcoreapplication.cpp:1046
      #17 0x00007ffff6d328c8 in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at kernel/qcoreapplication.cpp:1441
      #18 0x00007ffff723c666 in QShortcutMap::dispatchEvent (this=this@entry=0x55555558e468, e=e@entry=0x7fffffffde90) at kernel/qshortcutmap.cpp:700
      #19 0x00007ffff723c6d3 in QShortcutMap::tryShortcut (this=this@entry=0x55555558e468, e=e@entry=0x7fffffffde90) at kernel/qshortcutmap.cpp:351
      #20 0x00007ffff71e6ccf in QWindowSystemInterface::handleShortcutEvent (window=window@entry=0x5555555d53b0, timestamp=473303, keyCode=16777275, modifiers=..., nativeScanCode=96, nativeVirtualKey=65481, nativeModifiers=1, text=..., autorepeat=false, count=1) at kernel/qwindowsysteminterface.cpp:465
      #21 0x00007ffff7209c8d in QGuiApplicationPrivate::processKeyEvent (e=0x55555569a060) at kernel/qguiapplication.cpp:2218
      #22 0x00007ffff720e10b in QGuiApplicationPrivate::processWindowSystemEvent (e=e@entry=0x55555569a060) at kernel/qguiapplication.cpp:1854
      #23 0x00007ffff71e3d97 in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at kernel/qwindowsysteminterface.cpp:1152
      #24 0x00007ffff785b8d3 in userEventSourceDispatch (source=<optimized out>) at qeventdispatcher_glib.cpp:74
      #25 0x00007ffff61e2f2e in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
      #26 0x00007ffff61e31c8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
      #27 0x00007ffff61e325c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
      #28 0x00007ffff6d92d08 in QEventDispatcherGlib::processEvents (this=0x55555559e9f0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
      #29 0x00007ffff785ba18 in QPAEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at qeventdispatcher_glib.cpp:120
      #30 0x00007ffff6d30615 in QEventLoop::processEvents (this=this@entry=0x7fffffffe220, flags=..., flags@entry=...) at /usr/include/c++/8/bits/atomic_base.h:707
      #31 0x00007ffff6d30a34 in QEventLoop::exec (this=this@entry=0x7fffffffe220, flags=flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:120
      #32 0x00007ffff6d3a762 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:118
      #33 0x00007ffff7203f22 in QGuiApplication::exec () at kernel/qguiapplication.cpp:1786
      #34 0x00007ffff7a71965 in QApplication::exec () at kernel/qapplication.cpp:2892
      #35 0x000055555555e82b in main (argc=1, argv=0x7fffffffe448) at /home/user/eclipse/macroburst-ui/application/main.cpp:32
      

      Second hit immediately afterwards:

      #0  QtWaylandClient::QWaylandInputDevice::setCursor (this=this@entry=0x55555559c4e0, cursor=cursor@entry=0x7fffffffd988, cachedBuffer=..., fallbackOutputScale=1) at qwaylandinputdevice.cpp:542
      #1  0x00007ffff77bc17e in QtWaylandClient::QWaylandWindow::setMouseCursor (this=this@entry=0x55555567fef0, device=device@entry=0x55555559c4e0, cursor=...) at /home/user/nobackup/test/qt-dev/qtbase/include/QtCore/../../src/corelib/tools/qsharedpointer_impl.h:316
      #2  0x00007ffff77bc231 in QtWaylandClient::QWaylandWindow::restoreMouseCursor (this=0x55555567fef0, device=device@entry=0x55555559c4e0) at qwaylandwindow.cpp:967
      #3  0x00007ffff437d2c0 in QtWaylandClient::QWaylandBradientDecoration::handleMouse (this=0x5555556656d0, inputDevice=0x55555559c4e0, local=..., global=..., b=..., mods=...) at main.cpp:281
      #4  0x00007ffff77bc27b in QtWaylandClient::QWaylandWindow::handleMouseEventWithDecoration (this=this@entry=0x55555567fef0, inputDevice=inputDevice@entry=0x55555559c4e0, e=...) at /home/user/nobackup/test/qt-dev/qtbase/include/QtCore/../../src/corelib/global/qflags.h:133
      #5  0x00007ffff77bc5be in QtWaylandClient::QWaylandWindow::handleMouse (this=0x55555567fef0, inputDevice=0x55555559c4e0, e=...) at qwaylandwindow.cpp:846
      #6  0x00007ffff77ae0bb in QtWaylandClient::QWaylandInputDevice::Pointer::flushFrameEvent (this=this@entry=0x555555591290) at qwaylandinputdevice.cpp:1025
      #7  0x00007ffff77ae8da in QtWaylandClient::QWaylandInputDevice::Pointer::setFrameEvent (this=this@entry=0x555555591290, event=<optimized out>) at qwaylandinputdevice.cpp:924
      #8  0x00007ffff77aec03 in QtWaylandClient::QWaylandInputDevice::Pointer::pointer_motion (this=0x555555591290, time=474564, surface_x=<optimized out>, surface_y=<optimized out>) at /home/user/nobackup/test/qt-dev/qtbase/include/QtCore/../../src/corelib/tools/qpoint.h:120
      #9  0x00007ffff77f19e1 in QtWayland::wl_pointer::handle_motion (data=<optimized out>, object=<optimized out>, time=<optimized out>, surface_x=<optimized out>, surface_y=<optimized out>) at qwayland-wayland.cpp:1641
      #10 0x00007ffff60a38ee in ffi_call_unix64 () from /lib/x86_64-linux-gnu/libffi.so.6
      #11 0x00007ffff60a32bf in ffi_call () from /lib/x86_64-linux-gnu/libffi.so.6
      #12 0x00007ffff772a28d in ?? () from /lib/x86_64-linux-gnu/libwayland-client.so.0
      #13 0x00007ffff7726ac9 in ?? () from /lib/x86_64-linux-gnu/libwayland-client.so.0
      #14 0x00007ffff7727f94 in wl_display_dispatch_queue_pending () from /lib/x86_64-linux-gnu/libwayland-client.so.0
      #15 0x00007ffff77b2f66 in QtWaylandClient::QWaylandDisplay::flushRequests (this=0x5555555955b0) at qwaylanddisplay.cpp:206
      #16 0x00007ffff77f43de in QtWaylandClient::QWaylandDisplay::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at .moc/moc_qwaylanddisplay_p.cpp:77
      #17 0x00007ffff6d6c67c in doActivate<false> (sender=sender@entry=0x55555559e9f0, signal_index=<optimized out>, argv=<optimized out>, argv@entry=0x0) at kernel/qobject_p.h:207
      #18 0x00007ffff6d647e7 in QMetaObject::activate (sender=sender@entry=0x55555559e9f0, m=m@entry=0x7ffff70eae20 <QAbstractEventDispatcher::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x0) at kernel/qobject.cpp:3827
      #19 0x00007ffff6d2f0c6 in QAbstractEventDispatcher::awake (this=this@entry=0x55555559e9f0) at .moc/moc_qabstracteventdispatcher.cpp:149
      #20 0x00007ffff6d92d59 in QEventDispatcherGlib::processEvents (this=0x55555559e9f0, flags=...) at kernel/qeventdispatcher_glib.cpp:430
      #21 0x00007ffff785ba18 in QPAEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at qeventdispatcher_glib.cpp:120
      #22 0x00007ffff6d30615 in QEventLoop::processEvents (this=this@entry=0x7fffffffe220, flags=..., flags@entry=...) at /usr/include/c++/8/bits/atomic_base.h:707
      #23 0x00007ffff6d30a34 in QEventLoop::exec (this=this@entry=0x7fffffffe220, flags=flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:120
      #24 0x00007ffff6d3a762 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:118
      #25 0x00007ffff7203f22 in QGuiApplication::exec () at kernel/qguiapplication.cpp:1786
      #26 0x00007ffff7a71965 in QApplication::exec () at kernel/qapplication.cpp:2892
      #27 0x000055555555e82b in main (argc=1, argv=0x7fffffffe448) at /home/user/eclipse/macroburst-ui/application/main.cpp:32
      

      Attachments

        Issue Links

          For Gerrit Dashboard: QTBUG-75919
          # Subject Branch Project Status CR V

          Activity

            People

              zzag Vlad Zahorodnii
              baherwig Björn Herwig
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes