desk grid: do not recreate DesktopButtonsViews

Same issue as with present windows closers: qml is slow
Interestingly "hide" means "hide" here and there're also
no visual artifacts.

BUG: 347339
REVIEW: 123668
This commit is contained in:
Thomas Lübking 2015-05-06 23:18:39 +02:00
parent b3bd9ea144
commit c56d64b837

View file

@ -1117,18 +1117,34 @@ void DesktopGridEffect::setup()
}
bool enableAdd = effects->numberOfDesktops() < 20;
bool enableRemove = effects->numberOfDesktops() > 1;
QHash< DesktopButtonsView*, EffectWindow* >::iterator it = m_desktopButtonsViews.begin();
for (int i = 0; i < effects->numScreens(); ++i) {
DesktopButtonsView* view = new DesktopButtonsView();
DesktopButtonsView *view;
if (it == m_desktopButtonsViews.end()) {
view = new DesktopButtonsView();
m_desktopButtonsViews.insert(view, NULL);
it = m_desktopButtonsViews.end(); // changed through insert!
connect(view, SIGNAL(addDesktop()), SLOT(slotAddDesktop()));
connect(view, SIGNAL(removeDesktop()), SLOT(slotRemoveDesktop()));
} else {
view = it.key();
++it;
}
view->setAddDesktopEnabled(enableAdd);
view->setRemoveDesktopEnabled(enableRemove);
connect(view, SIGNAL(addDesktop()), SLOT(slotAddDesktop()));
connect(view, SIGNAL(removeDesktop()), SLOT(slotRemoveDesktop()));
const QRect screenRect = effects->clientArea(FullScreenArea, i, 1);
view->setGeometry(screenRect.right() + 1 - view->width(),
screenRect.bottom() + 1 - view->height(),
view->width(), view->height());
view->show();
m_desktopButtonsViews.insert(view, NULL);
}
while (it != m_desktopButtonsViews.end()) {
if (*it && (*it)->isDeleted())
(*it)->unrefWindow();
DesktopButtonsView *view = it.key();
it = m_desktopButtonsViews.erase(it);
view->deleteLater();
}
}
@ -1208,15 +1224,6 @@ void DesktopGridEffect::finish()
}
m_proxy = 0;
}
QHash< DesktopButtonsView*, EffectWindow* >::iterator i = m_desktopButtonsViews.begin();
while (i != m_desktopButtonsViews.end()) {
if (*i && (*i)->isDeleted())
(*i)->unrefWindow();
DesktopButtonsView *view = i.key();
i = m_desktopButtonsViews.erase(i);
view->deleteLater();
}
}
void DesktopGridEffect::globalShortcutChanged(QAction *action, const QKeySequence& seq)