movableink / webkit

Unofficial mirror of the WebKit SVN repository
http://www.webkit.org/
59 stars 11 forks source link

Anyone tried compiling PyQt5 against this? #16

Open PluMGMK opened 1 year ago

PluMGMK commented 1 year ago

Hello! First off, thanks to all involved for your efforts to keep QtWebKit alive!

I heard about this from https://github.com/qutebrowser/qutebrowser/issues/4039#issuecomment-1493410426 and decided to try it out, but PyQt can't seem to build against it. I started on a road of stripping out references to things like qwebpluginfactory (part of the "Legacy" API?) but didn't get very far, and I'm worried I'd just screw it up entirely if I kept going...

Basically, do the PyQt bindings need to be rewritten for the non-"Legacy" API? I'm not too familiar with it, so I'm not sure what's involved...

mnutt commented 9 months ago

My intention is that we maintain backwards-compatibility and PyQt bindings should not need to be rewritten. What error are you seeing? (unfortunately the plugins API is one area where I unintentionally broke compatibility since upstream no longer supports them, but I'd like to get back to a place where the API is unchanged)

PluMGMK commented 9 months ago

There were a couple of headers that no longer exist. I'll need to try building PyQt again to check which ones, and I can't remember how I did it when I raised this issue. Building PyQt seems to have gotten harder in recent years…

FabioLolix commented 9 months ago

I can try to build it in the weekend

FabioLolix commented 9 months ago

Had to make unexpected webkit builds so here we are, using webkit build from this repo today

$ cat python-pyqt5-webkit-5.15.10-1-x86_64-build.log | grep "fatal error"
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory
/build/python-pyqt5-webkit/src/PyQt5-5.15.10/sip/QtWebKit/qwebpluginfactory.sip:26:10: fatal error: qwebpluginfactory.h: No such file or directory

python-pyqt5-webkit-5.15.10-1-x86_64-build.log

PluMGMK commented 9 months ago

Ah yes, now I remember, it's qwebpluginfactory, which gels with what was said above about the plugin API!

mnutt commented 8 months ago

@FabioLolix @PluMGMK I've readded the (now non-functional) plugin APIs in https://github.com/movableink/webkit/tree/plugin-stubs-readded, would you mind trying the PyQt5 build against that? I have it successfully building, but I'm not super familiar with PyQt so not sure how to install/test it.

FabioLolix commented 8 months ago

would you mind trying the PyQt5 build against that?

I'm behind with other AUR pkgbuilds (31 are out of date) and some issue to report, after that I can

mnutt commented 8 months ago

I also have it working with PyQt6 via https://github.com/movableink/webkit/tree/plugin-stubs-readded-qt6 although it requires a new PyQt6-QtWebKit package as well as changes to qutebrowser itself. (QtWebEngine doesn't exercise much of Qt6 so there are some breaking Qt6 changes that need to be addressed) I'm going to work on getting those sorted though I've never done much with python packaging.

mnutt commented 8 months ago

PyQt6-QtWebKit is here: https://github.com/mnutt/PyQt6-QtWebKit

PluMGMK commented 8 months ago

Thanks for this! Unfortunately I've had serious problems getting it to work. I'm sure the issues are at my end (possibly even between the keyboard and chair!) but here goes:

GDB log including (long!) backtrace:

Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
0x00007fffcc081900 in QPainterPath::QPainterPath(QPainterPath const&) () from /opt/qt5/lib/libQt5Gui.so.5
(gdb) bt
#0  0x00007fffcc081900 in QPainterPath::QPainterPath(QPainterPath const&) () from /opt/qt5/lib/libQt5Gui.so.5
#1  0x00007fffc53e9d47 in WebCore::GraphicsContextQt::fillPath(WebCore::Path const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#2  0x00007fffc652eaba in WebCore::GraphicsContext::fillEllipseAsPath(WebCore::FloatRect const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#3  0x00007fffc67e69ed in WebCore::RenderListMarker::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#4  0x00007fffc6726c62 in WebCore::RenderElement::paintAsInlineBlock(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#5  0x00007fffc624185c in WebCore::LayoutIntegration::InlineContentPainter::paintDisplayBox(WebCore::InlineDisplay::Box const&) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#6  0x00007fffc6241ada in WebCore::LayoutIntegration::InlineContentPainter::paint() () from /opt/qt5/lib/libQt5WebKit.so.5
#7  0x00007fffc6243c3b in WebCore::LayoutIntegration::LineLayout::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::RenderInline const*) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#8  0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#9  0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#10 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#11 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#12 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#13 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#14 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#15 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#16 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#17 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#18 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#19 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#20 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#21 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#22 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#23 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#24 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#25 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#26 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#27 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#28 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#29 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#30 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
--Type <RET> for more, q to quit, c to continue without paging--
   from /opt/qt5/lib/libQt5WebKit.so.5
#31 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#32 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#33 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#34 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#35 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#36 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#37 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#38 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#39 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#40 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#41 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#42 0x00007fffc66ccdd3 in WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&, WebCore::LayoutPoint const&, WebCore::PaintInfo&, bool) ()
   from /opt/qt5/lib/libQt5WebKit.so.5
#43 0x00007fffc66c01a3 in WebCore::RenderBlock::paintContents(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#44 0x00007fffc670b96d in WebCore::RenderBlock::paintObject(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#45 0x00007fffc66e7c60 in WebCore::RenderBlock::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#46 0x00007fffc6797357 in WebCore::RenderLayer::paintForegroundForFragmentsWithPhase(WebCore::PaintPhase, WTF::Vector<WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc> const&, WebCore::GraphicsContext&, WebCore::RenderLayer::LayerPaintingInfo const&, WTF::OptionSet<WebCore::PaintBehavior>, WebCore::RenderObject*) () from /opt/qt5/lib/libQt5WebKit.so.5
#47 0x00007fffc679d41b in WebCore::RenderLayer::paintForegroundForFragments(WTF::Vector<WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc> const&, WebCore::GraphicsContext&, WebCore::GraphicsContext&, WebCore::LayoutRect const&, bool, WebCore::RenderLayer::LayerPaintingInfo const&, WTF::OptionSet<WebCore::PaintBehavior>, WebCore::RenderObject*) () from /opt/qt5/lib/libQt5WebKit.so.5
#48 0x00007fffc67a198b in WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext&, WebCore::RenderLayer::LayerPaintingInfo const&, WTF::OptionSet<WebCore::RenderLayer::PaintLayerFlag>) () from /opt/qt5/lib/libQt5WebKit.so.5
#49 0x00007fffc67a3beb in WebCore::RenderLayer::paintList(WebCore::RenderLayer::LayerList, WebCore::GraphicsContext&, WebCore::RenderLayer::LayerPaintingInfo const&, WTF::OptionSet<WebCore::RenderLayer::PaintLayerFlag>) () from /opt/qt5/lib/libQt5WebKit.so.5
#50 0x00007fffc67a122d in WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext&, WebCore::RenderLayer::LayerPaintingInfo const&, WTF::OptionSet<WebCore::RenderLayer::PaintLayerFlag>) () from /opt/qt5/lib/libQt5WebKit.so.5
#51 0x00007fffc67a30a5 in WebCore::RenderLayer::paint(WebCore::GraphicsContext&, WebCore::LayoutRect const&, WebCore::LayoutSize const&, WTF::OptionSet<WebCore::PaintBehavior>, WebCore::RenderObject*, WTF::OptionSet<WebCore::RenderLayer::PaintLayerFlag>, WebCore::RenderLayer::SecurityOriginPaintPolicy, WebCore::RegionContext*) () from /opt/qt5/lib/libQt5WebKit.so.5
#52 0x00007fffc63a264e in WebCore::LocalFrameView::paintContents(WebCore::GraphicsContext&, WebCore::IntRect const&, WebCore::Widget::SecurityOriginPaintPolicy, WebCore::RegionContext*) () from /opt/qt5/lib/libQt5WebKit.so.5
#53 0x00007fffc53a808a in QWebFrameAdapter::renderRelativeCoords(QPainter*, int, QRegion const&) () from /opt/qt5/lib/libQt5WebKit.so.5
#54 0x00007fffc0032539 in QWebView::paintEvent(QPaintEvent*) () from /opt/qt5/lib/libQt5WebKitWidgets.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#55 0x00007fffc072983f in meth_QWebView_paintEvent () from /usr/lib/python3.12/site-packages/PyQt5/QtWebKitWidgets.abi3.so
#56 0x00007ffff7a74962 in cfunction_call (func=0x7fffb8429850, args=0x7fff400711e0, kwargs=0x0) at ../Objects/methodobject.c:548
#57 0x00007ffff7a1e39c in _PyObject_MakeTpCall (tstate=0x7ffff7f646c8 <_PyRuntime+459656>, callable=callable@entry=0x7fffb8429850, 
    args=args@entry=0x7ffff7f802a8, nargs=1, keywords=0x0) at ../Objects/call.c:240
#58 0x00007ffff7a1e701 in _PyObject_VectorcallTstate (kwnames=<optimized out>, nargsf=<optimized out>, args=0x7ffff7f802a8, callable=0x7fffb8429850, 
    tstate=<optimized out>) at ../Include/internal/pycore_call.h:90
#59 0x00007ffff79bf7bf in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/bytecodes.c:2706
#60 0x00007ffff7a2194e in _PyObject_VectorcallTstate (kwnames=0x0, nargsf=2, args=0x7fffffffb930, callable=0x7fff227c8d60, 
    tstate=0x7ffff7f646c8 <_PyRuntime+459656>) at ../Include/internal/pycore_call.h:92
#61 method_vectorcall (method=<optimized out>, args=0x7fffc1949948, nargsf=<optimized out>, kwnames=0x0) at ../Objects/classobject.c:91
#62 0x00007fffd18b13a3 in call_method (va=0x7fffffffb9a8, fmt=0x7fffc0740039 "D", method=0x7fffc1ba3ec0) at siplib.c:2269
#63 sip_api_call_procedure_method (gil_state=PyGILState_UNLOCKED, error_handler=0x7fffd06059d0 <sipVEH_QtCore_PyQt5(_sipSimpleWrapper*, PyGILState_STATE)>, 
    py_self=0x7fffb83ec560, method=0x7fffc1ba3ec0, fmt=0x7fffc0740039 "D") at siplib.c:2291
#64 0x00007fffc07229cd in sipVH_QtWebKitWidgets_51(PyGILState_STATE, void (*)(_sipSimpleWrapper*, PyGILState_STATE), _sipSimpleWrapper*, _object*, QPaintEvent*) () from /usr/lib/python3.12/site-packages/PyQt5/QtWebKitWidgets.abi3.so
#65 0x00007fffc07296cb in sipQWebView::paintEvent(QPaintEvent*) () from /usr/lib/python3.12/site-packages/PyQt5/QtWebKitWidgets.abi3.so
#66 0x00007fffcc4dbb20 in QWidget::event(QEvent*) () from /opt/qt5/lib/libQt5Widgets.so.5
#67 0x00007fffc0727e73 in sipQWebView::event(QEvent*) () from /usr/lib/python3.12/site-packages/PyQt5/QtWebKitWidgets.abi3.so
#68 0x00007fffcc49d15e in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /opt/qt5/lib/libQt5Widgets.so.5
#69 0x00007fffccd0bc1e in sipQApplication::notify(QObject*, QEvent*) () from /usr/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so
#70 0x00007fffd026f7c8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /opt/qt5/lib/libQt5Core.so.5
#71 0x00007fffcc4d49b5 in QWidgetPrivate::sendPaintEvent(QRegion const&) () from /opt/qt5/lib/libQt5Widgets.so.5
#72 0x00007fffcc4d5283 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#73 0x00007fffcc4d652e in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#74 0x00007fffcc4d4efa in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#75 0x00007fffcc4d652e in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#76 0x00007fffcc4d4efa in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#77 0x00007fffcc4d652e in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#78 0x00007fffcc4d4efa in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#79 0x00007fffcc4d652e in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#80 0x00007fffcc4d6385 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#81 0x00007fffcc4d4efa in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#82 0x00007fffcc4d652e in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#83 0x00007fffcc4d6385 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#84 0x00007fffcc4d4efa in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /opt/qt5/lib/libQt5Widgets.so.5
#85 0x00007fffcc4ad9c5 in ?? () from /opt/qt5/lib/libQt5Widgets.so.5
#86 0x00007fffcc4ae13a in ?? () from /opt/qt5/lib/libQt5Widgets.so.5
#87 0x00007fffcc4f6dc2 in ?? () from /opt/qt5/lib/libQt5Widgets.so.5
#88 0x00007fffcc49d15e in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /opt/qt5/lib/libQt5Widgets.so.5
#89 0x00007fffccd0bc1e in sipQApplication::notify(QObject*, QEvent*) () from /usr/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so
#90 0x00007fffd026f7c8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /opt/qt5/lib/libQt5Core.so.5
#91 0x00007fffcbd95cf7 in QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) () from /opt/qt5/lib/libQt5Gui.so.5
#92 0x00007fffcbd6924c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/qt5/lib/libQt5Gui.so.5
#93 0x00007fffc1864710 in ?? () from /opt/qt5/lib/libQt5WaylandClient.so.5
#94 0x00007fffd0d08484 in g_main_dispatch () from /usr/lib64/libglib-2.0.so.0
#95 0x00007fffd0d0b628 in g_main_context_iterate_unlocked.isra () from /usr/lib64/libglib-2.0.so.0
#96 0x00007fffd0d0bddc in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#97 0x00007fffd02c5026 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/qt5/lib/libQt5Core.so.5
#98 0x00007fffd026e3cb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/qt5/lib/libQt5Core.so.5
#99 0x00007fffd0276180 in QCoreApplication::exec() () from /opt/qt5/lib/libQt5Core.so.5
#100 0x00007fffccd0aed2 in meth_QApplication_exec () from /usr/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so
#101 0x00007ffff7a74962 in cfunction_call (func=0x7fffb8401a80, args=0x7ffff7f06d28 <_PyRuntime+76264>, kwargs=0x0) at ../Objects/methodobject.c:548
#102 0x00007ffff7a1e39c in _PyObject_MakeTpCall (tstate=0x7ffff7f646c8 <_PyRuntime+459656>, callable=callable@entry=0x7fffb8401a80, 
    args=args@entry=0x7ffff7f80218, nargs=0, keywords=0x0) at ../Objects/call.c:240
#103 0x00007ffff7a1e701 in _PyObject_VectorcallTstate (kwnames=<optimized out>, nargsf=<optimized out>, args=0x7ffff7f80218, callable=0x7fffb8401a80, 
    tstate=<optimized out>) at ../Include/internal/pycore_call.h:90
#104 0x00007ffff79bf7bf in _PyEval_EvalFrameDefault (tstate=tstate@entry=0x7ffff7f646c8 <_PyRuntime+459656>, frame=<optimized out>, 
    frame@entry=0x7ffff7f80020, throwflag=throwflag@entry=0) at Python/bytecodes.c:2706
#105 0x00007ffff7b304b7 in _PyEval_EvalFrame (throwflag=0, frame=0x7ffff7f80020, tstate=0x7ffff7f646c8 <_PyRuntime+459656>)
    at ../Include/internal/pycore_ceval.h:89
#106 _PyEval_Vector (args=0x0, argcount=0, kwnames=0x0, locals=0x7fffd224dbc0, func=0x7fffd222e480, tstate=0x7ffff7f646c8 <_PyRuntime+459656>)
    at ../Python/ceval.c:1683
#107 PyEval_EvalCode (co=co@entry=0x40b250, globals=globals@entry=0x7fffd224dbc0, locals=locals@entry=0x7fffd224dbc0) at ../Python/ceval.c:578
--Type <RET> for more, q to quit, c to continue without paging--
#108 0x00007ffff7b88696 in run_eval_code_obj (tstate=tstate@entry=0x7ffff7f646c8 <_PyRuntime+459656>, co=co@entry=0x40b250, 
    globals=globals@entry=0x7fffd224dbc0, locals=locals@entry=0x7fffd224dbc0) at ../Python/pythonrun.c:1691
#109 0x00007ffff7b887a9 in run_mod (mod=<optimized out>, filename=filename@entry=0x7fffd224dd30, globals=globals@entry=0x7fffd224dbc0, 
    locals=locals@entry=0x7fffd224dbc0, flags=flags@entry=0x7fffffffd748, arena=arena@entry=0x7fffd216fe10) at ../Python/pythonrun.c:1712
#110 0x00007ffff7b8b46c in pyrun_file (flags=0x7fffffffd748, closeit=1, locals=0x7fffd224dbc0, globals=0x7fffd224dbc0, start=257, filename=0x7fffd224dd30, 
    fp=0x406590) at ../Python/pythonrun.c:1612
#111 _PyRun_SimpleFileObject (fp=fp@entry=0x406590, filename=filename@entry=0x7fffd224dd30, closeit=closeit@entry=1, flags=flags@entry=0x7fffffffd748)
    at ../Python/pythonrun.c:433
#112 0x00007ffff7b8ba4c in _PyRun_AnyFileObject (fp=0x406590, filename=filename@entry=0x7fffd224dd30, closeit=closeit@entry=1, 
    flags=flags@entry=0x7fffffffd748) at ../Python/pythonrun.c:78
#113 0x00007ffff7bb16f9 in pymain_run_file_obj (skip_source_first_line=0, filename=0x7fffd224dd30, program_name=0x7fffd203b4b0) at ../Modules/main.c:360
#114 pymain_run_file (config=0x7ffff7f072a8 <_PyRuntime+77672>) at ../Modules/main.c:379
#115 pymain_run_python (exitcode=exitcode@entry=0x7fffffffd84c) at ../Modules/main.c:629
#116 0x00007ffff7bb1b36 in Py_RunMain () at ../Modules/main.c:709
#117 0x00007ffff7bb1ca7 in pymain_main (args=0x7fffffffd870) at ../Modules/main.c:739
#118 Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at ../Modules/main.c:763
#119 0x00007ffff75a7c4a in __libc_start_call_main (main=main@entry=0x401040 <main>, argc=argc@entry=2, argv=argv@entry=0x7fffffffd9e8)
    at ../sysdeps/nptl/libc_start_call_main.h:58
#120 0x00007ffff75a7d05 in __libc_start_main_impl (main=0x401040 <main>, argc=2, argv=0x7fffffffd9e8, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7fffffffd9d8) at ../csu/libc-start.c:360
#121 0x0000000000401071 in _start () at ../sysdeps/x86_64/start.S:115
(gdb) x/i $rip
=> 0x7fffcc081900 <_ZN12QPainterPathC2ERKS_>:   mov    rax,QWORD PTR [rsi]
(gdb) i r rsi
rsi            0x0                 0
(gdb) disas
Dump of assembler code for function _ZN12QPainterPathC2ERKS_:
=> 0x00007fffcc081900 <+0>: mov    rax,QWORD PTR [rsi]
   0x00007fffcc081903 <+3>: mov    QWORD PTR [rdi],rax
   0x00007fffcc081906 <+6>: test   rax,rax
   0x00007fffcc081909 <+9>: je     0x7fffcc08190f <_ZN12QPainterPathC2ERKS_+15>
   0x00007fffcc08190b <+11>:    lock add DWORD PTR [rax],0x1
   0x00007fffcc08190f <+15>:    ret
End of assembler dump.