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...
This commit is contained in:
parent
6e70dd0ba2
commit
4805316c0a
1 changed files with 19 additions and 5 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue