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
This commit is contained in:
parent
e180a8b2b0
commit
0a5b029a39
1 changed files with 10 additions and 23 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue