plasma: disable "under mouse" checks while updating launcher layouts

as optimization

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-05-24 11:02:30 +03:00
parent e9ae856f8c
commit 59a9976052

View file

@ -619,6 +619,7 @@ protected:
LauncherApplet* b_launcherapplet; LauncherApplet* b_launcherapplet;
QGraphicsLinearLayout* b_layout; QGraphicsLinearLayout* b_layout;
QList<LauncherWidget*> b_launcherwidgets; QList<LauncherWidget*> b_launcherwidgets;
bool b_disableundercheck;
private Q_SLOTS: private Q_SLOTS:
void slotTimeout(); void slotTimeout();
@ -631,6 +632,7 @@ LauncherWidgetBase::LauncherWidgetBase(QGraphicsWidget *parent, LauncherApplet *
: QGraphicsWidget(parent), : QGraphicsWidget(parent),
b_launcherapplet(launcherapplet), b_launcherapplet(launcherapplet),
b_layout(nullptr), b_layout(nullptr),
b_disableundercheck(false),
m_undertimer(nullptr) m_undertimer(nullptr)
{ {
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
@ -641,29 +643,31 @@ LauncherWidgetBase::LauncherWidgetBase(QGraphicsWidget *parent, LauncherApplet *
QVariant LauncherWidgetBase::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) QVariant LauncherWidgetBase::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{ {
const QVariant result = QGraphicsWidget::itemChange(change, value); const QVariant result = QGraphicsWidget::itemChange(change, value);
switch (change) { if (!b_disableundercheck) {
case QGraphicsItem::ItemPositionHasChanged: { switch (change) {
if (!m_undertimer) { case QGraphicsItem::ItemPositionHasChanged: {
m_undertimer = new QTimer(this); if (!m_undertimer) {
m_undertimer->setInterval(s_undertimeout); m_undertimer = new QTimer(this);
m_undertimer->setSingleShot(true); m_undertimer->setInterval(s_undertimeout);
connect( m_undertimer->setSingleShot(true);
m_undertimer, SIGNAL(timeout()), connect(
this, SLOT(slotTimeout()) m_undertimer, SIGNAL(timeout()),
); this, SLOT(slotTimeout())
} );
if (!m_undertimer->isActive()) {
QMutexLocker locker(&b_mutex);
foreach (LauncherWidget* launcherwidget, b_launcherwidgets) {
launcherwidget->setUnderMouse(false);
} }
if (!m_undertimer->isActive()) {
QMutexLocker locker(&b_mutex);
foreach (LauncherWidget* launcherwidget, b_launcherwidgets) {
launcherwidget->setUnderMouse(false);
}
}
// compresses checks until position stop changing
m_undertimer->start();
break;
}
default: {
break;
} }
// compresses checks until position stop changing
m_undertimer->start();
break;
}
default: {
break;
} }
} }
return result; return result;
@ -671,12 +675,15 @@ QVariant LauncherWidgetBase::itemChange(QGraphicsItem::GraphicsItemChange change
void LauncherWidgetBase::clearLauncherWidgets() void LauncherWidgetBase::clearLauncherWidgets()
{ {
Q_ASSERT(b_disableundercheck == false);
b_disableundercheck = true;
foreach (LauncherWidget* launcherwidget, b_launcherwidgets) { foreach (LauncherWidget* launcherwidget, b_launcherwidgets) {
b_layout->removeItem(launcherwidget); b_layout->removeItem(launcherwidget);
} }
qDeleteAll(b_launcherwidgets); qDeleteAll(b_launcherwidgets);
b_launcherwidgets.clear(); b_launcherwidgets.clear();
adjustSize(); adjustSize();
b_disableundercheck = false;
} }
void LauncherWidgetBase::checkUnderMouse() void LauncherWidgetBase::checkUnderMouse()
@ -762,6 +769,7 @@ void LauncherSearch::query(const QString &text)
void LauncherSearch::slotUpdateLayout() void LauncherSearch::slotUpdateLayout()
{ {
QMutexLocker locker(&b_mutex); QMutexLocker locker(&b_mutex);
b_disableundercheck = true;
const QList<Plasma::QueryMatch> matches = m_runnermanager->matches(); const QList<Plasma::QueryMatch> matches = m_runnermanager->matches();
m_busywidget->setRunning(false); m_busywidget->setRunning(false);
m_busywidget->setVisible(false); m_busywidget->setVisible(false);
@ -806,6 +814,7 @@ void LauncherSearch::slotUpdateLayout()
this, SLOT(slotActivated()) this, SLOT(slotActivated())
); );
} }
b_disableundercheck = false;
locker.unlock(); locker.unlock();
checkUnderMouse(); checkUnderMouse();
emit queryFinished(); emit queryFinished();
@ -887,6 +896,7 @@ void LauncherFavorites::slotUpdateLayout()
{ {
QMutexLocker locker(&b_mutex); QMutexLocker locker(&b_mutex);
clearLauncherWidgets(); clearLauncherWidgets();
b_disableundercheck = true;
bool isfirsttime = true; bool isfirsttime = true;
KBookmarkGroup bookmarkgroup = m_bookmarkmanager->root(); KBookmarkGroup bookmarkgroup = m_bookmarkmanager->root();
@ -962,6 +972,7 @@ void LauncherFavorites::slotUpdateLayout()
m_bookmarkmanager->blockSignals(false); m_bookmarkmanager->blockSignals(false);
} }
b_disableundercheck = false;
locker.unlock(); locker.unlock();
checkUnderMouse(); checkUnderMouse();
} }
@ -1130,6 +1141,7 @@ LauncherServiceWidget::LauncherServiceWidget(QGraphicsWidget *parent, LauncherAp
m_bookmarkmanager(launcherapplet->bookmarkManager()), m_bookmarkmanager(launcherapplet->bookmarkManager()),
m_serviceid(serviceid) m_serviceid(serviceid)
{ {
b_disableundercheck = true;
KServiceGroup::Ptr servicegroup = KServiceGroup::group(serviceid); KServiceGroup::Ptr servicegroup = KServiceGroup::group(serviceid);
if (!servicegroup.isNull() && servicegroup->isValid()) { if (!servicegroup.isNull() && servicegroup->isValid()) {
const QSizeF iconsize = kIconSize(); const QSizeF iconsize = kIconSize();
@ -1170,6 +1182,7 @@ LauncherServiceWidget::LauncherServiceWidget(QGraphicsWidget *parent, LauncherAp
} else { } else {
kWarning() << "invalid serivce group" << serviceid; kWarning() << "invalid serivce group" << serviceid;
} }
b_disableundercheck = false;
checkUnderMouse(); checkUnderMouse();
slotCheckBookmarks(); slotCheckBookmarks();
@ -1424,6 +1437,7 @@ void LauncherRecent::slotUpdateLayout()
{ {
QMutexLocker locker(&b_mutex); QMutexLocker locker(&b_mutex);
clearLauncherWidgets(); clearLauncherWidgets();
b_disableundercheck = true;
const QSizeF iconsize = kIconSize(); const QSizeF iconsize = kIconSize();
foreach (const QString &recent, KRecentDocument::recentDocuments()) { foreach (const QString &recent, KRecentDocument::recentDocuments()) {
@ -1453,6 +1467,7 @@ void LauncherRecent::slotUpdateLayout()
); );
} }
b_disableundercheck = false;
locker.unlock(); locker.unlock();
checkUnderMouse(); checkUnderMouse();
} }
@ -1528,6 +1543,7 @@ void LauncherLeave::slotUpdateLayout()
{ {
QMutexLocker locker(&b_mutex); QMutexLocker locker(&b_mutex);
clearLauncherWidgets(); clearLauncherWidgets();
b_disableundercheck = true;
if (m_systemseparator) { if (m_systemseparator) {
b_layout->removeItem(m_systemseparator); b_layout->removeItem(m_systemseparator);
@ -1638,6 +1654,7 @@ void LauncherLeave::slotUpdateLayout()
this, SLOT(slotActivated()) this, SLOT(slotActivated())
); );
b_disableundercheck = false;
locker.unlock(); locker.unlock();
checkUnderMouse(); checkUnderMouse();
} }