Reduce duplicate code calculating popup position

Summary: The popup/exec if was duplicated three times, only to calculate the y position.

Reviewers: #kwin, romangg, zzag

Reviewed By: #kwin, romangg, zzag

Subscribers: zzag, romangg, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D23102
icc-effect-5.17.5
Frederik Gladhorn 2019-08-13 08:37:25 +02:00
parent e180a8b2b0
commit 0a5b029a39
1 changed files with 10 additions and 23 deletions

View File

@ -148,36 +148,23 @@ void UserActionsMenu::show(const QRect &pos, AbstractClient *client)
}
m_client = cl;
init();
Workspace *ws = Workspace::self();
int x = pos.left();
int y = pos.bottom();
const bool needsPopup = kwinApp()->shouldUseWaylandForCompositing();
m_client->blockActivityUpdates(true);
if (y == pos.top()) {
if (needsPopup) {
m_menu->popup(QPoint(x, y));
} else {
m_menu->exec(QPoint(x, y));
}
} else {
QRect area = ws->clientArea(ScreenArea, QPoint(x, y), VirtualDesktopManager::self()->current());
if (y != pos.top()) {
const QRect area = Workspace::self()->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()) {
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 (y + popupHeight >= area.height()) {
y = pos.top() - popupHeight;
}
}
if (kwinApp()->shouldUseWaylandForCompositing()) {
m_menu->popup(QPoint(x, y));
} else {
m_menu->exec(QPoint(x, y));
}
if (m_client) {
m_client->blockActivityUpdates(false);
}