Bug 522233 - system monitor can't end any processes or applications when used in RtL language
Summary: system monitor can't end any processes or applications when used in RtL language
Status: RESOLVED FIXED
Alias: None
Product: plasma-systemmonitor
Classification: Applications
Component: general (other bugs)
Version First Reported In: 6.6.4
Platform: Kubuntu Linux
: HI major
Target Milestone: ---
Assignee: KSysGuard Developers
URL:
Keywords: rtl
Depends on:
Blocks:
 
Reported: 2026-06-26 14:41 UTC by basel
Modified: 2026-08-24 14:59 UTC (History)
6 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.7.5
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description basel 2026-06-26 14:41:25 UTC
When the system is switched to Arabic language
the system monitor ending process and applications ability stops working.

SOFTWARE/OS VERSIONS
Operating System :Kubuntu 26.04 LTS
KDE Plasma Version: 6.6.4
KDE Frameworks Version: 6.24.0
Qt Version: 6.10.2
Comment 1 Nate Graham 2026-06-26 16:53:56 UTC
I can reproduce this issue on current git master, too.

Testable with `LANGUAGE=ar_AR plasma-systemmonitor` and then try to kill a process.
Comment 2 cwo 2026-06-27 08:33:17 UTC
Causes a ton of errors to be printed, like 

QSortFilterProxyModel: index from wrong model passed to mapToSource
file:///home/wolki/kde/usr/share/ksysguard/sensorfaces/org.kde.ksysguard.processtable/contents/ui/ProcessTableView.qml:189:17: Unable to assign [undefined] to double
QSortFilterProxyModel: index from wrong model passed to mapToSource
file:///home/wolki/kde/usr/share/ksysguard/sensorfaces/org.kde.ksysguard.processtable/contents/ui/ProcessTableView.qml:189:17: Unable to assign [undefined] to double
QSortFilterProxyModel: index from wrong model passed to mapToSource
qt.core.qabstractitemmodel.checkindex: Index QModelIndex(-1,-1,0x0,QObject(0x0)) is not valid (expected valid)
file:///home/wolki/kde/usr/share/ksysguard/sensorfaces/org.kde.ksysguard.processtable/contents/ui/ProcessTableView.qml:163: TypeError: Cannot read property 'split' of undefined


Sorting the table also does not work.

Does not seem to be specific to ar_AR, same problem happens in he_IL. It does apparently not happen in a LtR language with special characters like ja_JP, so RtL is likely the relevant factor.

While testing, I managed to get it to crash once in he_IL, immediately after launching an app so I could try to kill it, with the system monitor already open. I haven't been able to reproduce the same crash again using similar steps. It does crash in the model though, so may be relevant.

Full trace:

#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=11, no_tid=no_tid@entry=0)
    at pthread_kill.c:44
#1  0x00007f3344c7be93 in __pthread_kill_internal (threadid=<optimized out>, signo=11) at pthread_kill.c:89
#2  0x00007f3344c20f8e in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
#3  0x00007f33486e1d0f in KCrash::defaultCrashHandler (sig=11)
    at /home/wolki/kde/src/kcrash/src/kcrash.cpp:630
#4  0x00007f3344c210b0 in <signal handler called> () at /lib64/libc.so.6
#5  QtPrivate::QModelIndexWrapper::QModelIndexWrapper (this=0x7fff4f7263d0, i=...)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qabstractitemmodel_p.h:46
#6  QSortFilterProxyModelPrivate::index_to_iterator (proxy_index=..., this=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:271
#7  QSortFilterProxyModel::parent (this=0x3c21a6d0, child=...)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:2153
#8  0x00007f33450da4d0 in QModelIndex::parent (this=0x7fff4f726400)
    at /usr/include/qt6/QtCore/qabstractitemmodel.h:507
#9  KRearrangeColumnsProxyModel::parent (this=0x3c205b00, child=<optimized out>)
    at /home/wolki/kde/src/kitemmodels/src/core/krearrangecolumnsproxymodel.cpp:126
#10 0x00007f3344934bc2 in QModelIndex::parent (this=<optimized out>)
    at /usr/include/qt6/QtCore/qabstractitemmodel.h:506
#11 QQmlTreeModelToTableModel::modelDataChanged
    (this=0x3c1d6630, topLeft=..., bottomRight=..., roles=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtdeclarative-6.11.1-2.fc44.x86_64/src/qmlmodels/qqmltreemodeltotablemodel.cpp:645
#12 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3c1d6630, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#13 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f726670)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#14 0x00007f334537ab47 in QMetaObject::activate
    (sender=sender@entry=0x3c205b00, m=m@entry=0x7f33459219e0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f726670)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#15 0x00007f33455cbcb1 in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> >
    (sender=0x3c205b00, mo=0x7f33459219e0, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#16 QAbstractItemModel::dataChanged
    (this=this@entry=0x3c205b00, _t1=..., _t2=..., _t3=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#17 0x00007f3345621e9d in QIdentityProxyModelPrivate::sourceDataChanged
    (this=<optimized out>, topLeft=..., bottomRight=<optimized out>, roles=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qidentityproxymodel.cpp:478
#18 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3c205b00, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#19 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f726820)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#20 0x00007f334537ab47 in QMetaObject::activate
    (sender=sender@entry=0x3, m=m@entry=0x7f33459219e0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f726820)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#21 0x00007f33455cbcb1 in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> >
    (sender=0x3, mo=0x7f33459219e0, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#22 QAbstractItemModel::dataChanged
    (this=this@entry=0x3c21a6d0, _t1=..., _t2=..., _t3=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#23 0x00007f334563ddd4 in QSortFilterProxyModelPrivate::_q_sourceDataChanged
    (this=0x3d31afb0, source_top_left=<optimized out>, source_bottom_right=<optimized out>, roles=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1530
#24 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3c21a6d0, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#25 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f726bb0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#26 0x00007f334537ab47 in QMetaObject::activate
    (sender=sender@entry=0x3cd9b6f0, m=m@entry=0x7f33459219e0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f726bb0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#27 0x00007f33455cbcb1 in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> >
    (sender=0x3cd9b6f0, mo=0x7f33459219e0, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#28 QAbstractItemModel::dataChanged
    (this=this@entry=0x3cd9b6f0, _t1=..., _t2=..., _t3=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#29 0x00007f3345621e9d in QIdentityProxyModelPrivate::sourceDataChanged
    (this=<optimized out>, topLeft=..., bottomRight=<optimized out>, roles=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qidentityproxymodel.cpp:478
#30 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3cd9b6f0, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#31 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f726d60)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#32 0x00007f334537ab47 in QMetaObject::activate
    (sender=sender@entry=0x3cd9b4c0, m=m@entry=0x7f33459219e0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f726d60)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#33 0x00007f33455cbcb1 in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> >
    (sender=0x3cd9b4c0, mo=0x7f33459219e0, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#34 QAbstractItemModel::dataChanged
    (this=this@entry=0x3cd9b4c0, _t1=..., _t2=..., _t3=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#35 0x00007f3345621e9d in QIdentityProxyModelPrivate::sourceDataChanged
    (this=<optimized out>, topLeft=..., bottomRight=<optimized out>, roles=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/itemmodels/qidentityproxymodel.cpp:478
#36 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3cd9b4c0, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#37 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f726f10)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#38 0x00007f334537ab47 in QMetaObject::activate
    (sender=sender@entry=0x3cd812d0, m=m@entry=0x7f33459219e0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f726f10)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#39 0x00007f33455cbcb1 in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> >
    (sender=0x3cd812d0, mo=0x7f33459219e0, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#40 QAbstractItemModel::dataChanged
    (this=this@entry=0x3cd812d0, _t1=..., _t2=..., _t3=QList<int> (size = 3) = {...})
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#41 0x00007f3344b0e9f5 in KSysGuard::ProcessDataModel::Private::handleChangedProcesses (this=<optimized out>)
    at /home/wolki/kde/src/libksysguard/processcore/process_data_model.cpp:527
#42 0x00007f3345384eb7 in QtPrivate::QSlotObjectBase::call
    (this=<optimized out>, r=0x3cd812d0, a=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs_impl.h:462
#43 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=argv@entry=0x7fff4f7271a0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4372
#44 0x00007f334537ab47 in QMetaObject::activate
    (sender=<optimized out>, m=m@entry=0x7f334591d400 <QTimer::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff4f7271a0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:4432
#45 0x00007f3345395233 in QMetaObject::activate<void, QTimer::QPrivateSignal>
    (sender=<optimized out>, mo=0x7f334591d400 <QTimer::staticMetaObject>, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobjectdefs.h:320
#46 QTimer::timeout (this=<optimized out>, _t1=...)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qtimer.cpp:182
#47 0x00007f3345380793 in QObject::event (this=<optimized out>, e=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qobject.cpp:1509
#48 0x00007f3347e3f92e in QApplicationPrivate::notify_helper
    (this=<optimized out>, receiver=0x3cc56b30, e=0x7fff4f727350)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/widgets/kernel/qapplication.cpp:3276
#49 0x00007f334530f7b8 in QCoreApplication::notifyInternal2 (receiver=0x3cc56b30, event=0x7fff4f727350)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qcoreapplication.cpp:1114
#50 0x00007f334530f7fd in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qcoreapplication.cpp:1559
#51 0x00007f334550b669 in QTimerInfoList::activateTimers (this=0x39b40d90)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qtimerinfo_unix.cpp:427
#52 0x00007f33456697b9 in timerSourceDispatch (source=<optimized out>)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:153
#53 0x00007f3344793f24 in g_main_dispatch (context=0x7f332c000f00) at ../glib/gmain.c:3591
#54 g_main_context_dispatch_unlocked (context=0x7f332c000f00) at ../glib/gmain.c:4451
#55 0x00007f3344798038 in g_main_context_iterate_unlocked
    (context=context@entry=0x7f332c000f00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4516
#56 0x00007f33447981e3 in g_main_context_iteration (context=0x7f332c000f00, may_block=1)
    at ../glib/gmain.c:4582
#57 0x00007f3345669a9d in QEventDispatcherGlib::processEvents (this=0x39b2eed0, flags=...)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:402
#58 0x00007f334531d57b in QEventLoop::exec (this=this@entry=0x7fff4f7275f0, flags=..., flags@entry=...)
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/global/qflags.h:78
#59 0x00007f3345318992 in QCoreApplication::exec ()
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/corelib/kernel/qcoreapplication.cpp:1457
#60 0x00007f33468eff1d in QGuiApplication::exec ()
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/gui/kernel/qguiapplication.cpp:2005
#61 0x00007f3347e3f899 in QApplication::exec ()
    at /usr/src/debug/qt6-qtbase-6.11.1-1.fc44.x86_64/src/widgets/kernel/qapplication.cpp:2546
#62 0x0000000000402442 in main (argc=<optimized out>, argv=<optimized out>)
    at /home/wolki/kde/src/plasma-systemmonitor/src/main.cpp:112
Comment 3 Jakob Petsovits 2026-08-13 20:21:46 UTC
> QSortFilterProxyModel: index from wrong model passed to mapToSource

This line is the first error we get to see, so it's likely closer to the root cause than subsequent warnings. It gets printed by QSortFilterProxyModelPrivate::proxy_to_source(), the actual implementation of QSortFilterProxyModel::mapToSource(): https://codebrowser.dev/qt6/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp.html#544

I caught a call in gdb when it prints this. It looks like mapToSource() gets called on ProcessSortFilterModel (a subclass of QSortFilterProxyModel in plasma-systemmonitor) with an index whose model pointer refers to a ReverseColumnsProxyModel (another class in plasma-systemmonitor that indirectly derives from QSortFilterProxyModel).

The stack trace looks like below - basically not very useful, except that it tells us that the call came from QV4 i.e. somewhere in executed JavaScript within a QML file. That's not terrible though, it should narrow things down to one of the few calls of mapToSource() in System Monitor's table views (ProcessTableView.qml and/or ApplicationsTableView.qml, I'm currently starting with the former).

If we can figure out where this index comes from exactly and why it gets passed to the wrong proxy model, perhaps this will point us to the error.

#0  QSortFilterProxyModelPrivate::proxy_to_source (this=0x5555575cc720, proxy_index=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:546
#1  QSortFilterProxyModel::mapToSource (this=0x5555576094d0, proxyIndex=...)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:3334
#2  0x00007ffff4a5f649 in QAbstractProxyModel::qt_static_metacall
    (_o=_o@entry=0x5555576094d0, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=8, _a=_a@entry=0x7fffffffbde8)
    at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qabstractproxymodel.cpp:143
#3  0x00007ffff4a5f917 in QAbstractProxyModel::qt_metacall
    (this=0x5555576094d0, _c=<optimized out>, _id=8, _a=0x7fffffffbde8)
    at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qabstractproxymodel.cpp:207
#4  0x00007ffff4a7e12e in QSortFilterProxyModel::qt_metacall
    (this=0x5555576094d0, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, _a=0x7fffffffbde8)
    at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qsortfilterproxymodel.cpp:264
#5  0x00007ffff7b008cd in ProcessSortFilterModel::qt_metacall
    (this=0x5555576094d0, _c=QMetaObject::InvokeMetaMethod, _id=84, _a=0x7fffffffbde8)
    at /home/kpetso/build/kde/plasma/plasma-systemmonitor/src/table/PlasmaSystemMonitorTable_autogen/include/moc_ProcessSortFilterModel.cpp:200
#6  0x00007ffff5367363 in QQmlObjectOrGadget::metacall
    (this=<optimized out>, type=<optimized out>, index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlobjectorgadget.cpp:15
#7  0x00007ffff51fc8db in QV4::CallMethod
    (object=..., index=84, returnType=..., argCount=argCount@entry=1, argTypes=0x7fffffffc148, engine=0x55555572b370, callArgs=0x7fffec2015d0, callType=QMetaObject::InvokeMetaMethod) at /usr/include/qt6/QtCore/qvarlengtharray.h:91
#8  0x00007ffff51fe708 in QV4::QObjectMethod::callPrecise
    (object=..., data=<optimized out>, engine=<optimized out>, callArgs=<optimized out>, callType=QMetaObject::InvokeMetaMethod)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2094
#9  0x00007ffff5207dc5 in operator() (__closure=<optimized out>)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3123
#10 operator()<QV4::QObjectMethod::callInternal(const QV4::Value*, const QV4::Value*, int) const::<lambda()> > (__closure=<synthetic pointer>, call=<optimized out>)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3100
#11 QV4::QObjectMethod::callInternal
    (this=0x7fffffffc318, thisObject=<optimized out>, argv=0x7fffec201560, argc=1)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3123
#12 0x00007ffff52270c6 in QV4::FunctionObject::call
    (this=0x7fffffffc318, thisObject=0x7fffec201570, argv=0x7fffec201560, argc=1)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4functionobject_p.h:188
#13 QV4::Runtime::CallPropertyLookup::call
    (engine=0x55555572b370, base=..., index=<optimized out>, argv=0x7fffec201560, argc=1)
    at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4runtime.cpp:1563
#14 0x00007fffc800052e in ??? ()
#15 0x00007fffec201528 in ??? ()
#16 0x0000000000000000 in ??? ()
Comment 4 Jakob Petsovits 2026-08-13 21:12:06 UTC
It looks like this snippet in BaseTableView.qml (which both ProcessTableView and ApplicationsTableView derive from) is relevant:

            // FIXME Until Tableview correctly reverses its columns, see QTBUG-90547
            model: root.model
            Binding on model {
                when: scrollView.LayoutMirroring.enabled
                value: Table.ReverseColumnsProxyModel {
                    sourceModel: root.model
                }
            }

So this replaces the actual `model` property of the BaseTableView with a ReverseColumnsProxyModel that wraps it. Then if some other JavaScript code calls mapToSource() on the original model with an index that was generated from the ReverseColumnsProxyModel, we'd get this kind of warning and a bunch of failing functionality from mapToSource() refusing to map the index.
Comment 5 Bug Janitor Service 2026-08-14 17:09:22 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-systemmonitor/-/merge_requests/455
Comment 6 Jakob Petsovits 2026-08-24 14:00:28 UTC
Git commit 63f848e3c32bd6ada696f7b80e8d18dfa948348e by Jakob Petsovits.
Committed on 24/08/2026 at 13:59.
Pushed by jpetso into branch 'master'.

Fix process termination when used in RtL language

Also makes icons properly appear in the Processes page.

When the layout is mirrored, BaseTableView.qml replaces the original
app model (or process model) with a ReverseColumnsProxyModel that
wraps the original model. When calling mapToSource() on the original
model with a model index that was generated for the wrapper model,
QSortFilterProxyModel will refuse to map the index.

This caused various warnings to be printed, and made termination
fail because without a valid index, no app/process data could be
retrieved either.

Fix this by expecting another layer of mapping between the known
sortColumnFilter (Applications) or rowFilter (Processes) model
and the actual model currently in use by the TreeView.

M  +6    -1    src/faces/applicationstable/contents/ui/ApplicationsTableView.qml
M  +10   -3    src/faces/processtable/contents/ui/ProcessTableView.qml

https://invent.kde.org/plasma/plasma-systemmonitor/-/commit/63f848e3c32bd6ada696f7b80e8d18dfa948348e
Comment 7 Jakob Petsovits 2026-08-24 14:12:31 UTC
Git commit b1bac46f8f21414b71f19603e16d9b48e9bd5a25 by Jakob Petsovits.
Committed on 24/08/2026 at 14:09.
Pushed by jpetso into branch 'Plasma/6.7'.

Fix process termination when used in RtL language

Also makes icons properly appear in the Processes page.

When the layout is mirrored, BaseTableView.qml replaces the original
app model (or process model) with a ReverseColumnsProxyModel that
wraps the original model. When calling mapToSource() on the original
model with a model index that was generated for the wrapper model,
QSortFilterProxyModel will refuse to map the index.

This caused various warnings to be printed, and made termination
fail because without a valid index, no app/process data could be
retrieved either.

Fix this by expecting another layer of mapping between the known
sortColumnFilter (Applications) or rowFilter (Processes) model
and the actual model currently in use by the TreeView.


(cherry picked from commit 63f848e3c32bd6ada696f7b80e8d18dfa948348e)

Co-authored-by: Jakob Petsovits <jpetso@petsovits.com>

M  +6    -1    src/faces/applicationstable/contents/ui/ApplicationsTableView.qml
M  +10   -3    src/faces/processtable/contents/ui/ProcessTableView.qml

https://invent.kde.org/plasma/plasma-systemmonitor/-/commit/b1bac46f8f21414b71f19603e16d9b48e9bd5a25