Use popup instead of exec on useractions menu on Wayland

With exec we might hit a dead lock. With popup we don't hit that.
Not happy about this change, but well...
icc-effect-5.14.5
Martin Gräßlin 2015-11-09 13:57:41 +01:00
parent 6e70dd0ba2
commit 4805316c0a
1 changed files with 19 additions and 5 deletions

View File

@ -144,9 +144,14 @@ void UserActionsMenu::show(const QRect &pos, const QWeakPointer<AbstractClient>
Workspace *ws = Workspace::self();
int x = pos.left();
int y = pos.bottom();
const bool needsPopup = kwinApp()->shouldUseWaylandForCompositing();
if (y == pos.top()) {
m_client.data()->blockActivityUpdates(true);
m_menu->exec(QPoint(x, y));
if (needsPopup) {
m_menu->popup(QPoint(x, y));
} else {
m_menu->exec(QPoint(x, y));
}
if (!m_client.isNull())
m_client.data()->blockActivityUpdates(false);
}
@ -155,10 +160,19 @@ void UserActionsMenu::show(const QRect &pos, const QWeakPointer<AbstractClient>
QRect area = ws->clientArea(ScreenArea, QPoint(x, y), VirtualDesktopManager::self()->current());
menuAboutToShow(); // needed for sizeHint() to be correct :-/
int popupHeight = m_menu->sizeHint().height();
if (y + popupHeight < area.height())
m_menu->exec(QPoint(x, y));
else
m_menu->exec(QPoint(x, pos.top() - popupHeight));
if (y + popupHeight < area.height()) {
if (needsPopup) {
m_menu->popup(QPoint(x, y));
} else {
m_menu->exec(QPoint(x, y));
}
} else {
if (needsPopup) {
m_menu->popup(QPoint(x, pos.top() - popupHeight));
} else {
m_menu->exec(QPoint(x, pos.top() - popupHeight));
}
}
if (!m_client.isNull())
m_client.data()->blockActivityUpdates(true);
}