Do not clear UserActionMenu's Client after the menu closed

The Client is still needed as the invoked action might be delayed by one
event cycle to work around a crash if the operation causes the deco to
close.

BUG: 312004
FIXED-IN: 4.10 RC 2
REVIEW: 107823
This commit is contained in:
Martin Gräßlin 2012-12-20 21:26:33 +01:00
parent dc5da9b081
commit ebf1bc47a9

View file

@ -127,7 +127,7 @@ bool UserActionsMenu::isShown() const
bool UserActionsMenu::hasClient() const bool UserActionsMenu::hasClient() const
{ {
return !m_client.isNull(); return !m_client.isNull() && isShown();
} }
void UserActionsMenu::close() void UserActionsMenu::close()
@ -136,7 +136,7 @@ void UserActionsMenu::close()
return; return;
} }
m_menu->close(); m_menu->close();
m_client.clear();; m_client.clear();
} }
bool UserActionsMenu::isMenuClient(const Client *c) const bool UserActionsMenu::isMenuClient(const Client *c) const
@ -153,7 +153,7 @@ void UserActionsMenu::show(const QRect &pos, const QWeakPointer<Client> &cl)
return; return;
if (cl.isNull()) if (cl.isNull())
return; return;
if (!m_client.isNull()) // recursion if (isShown()) // recursion
return; return;
if (cl.data()->isDesktop() if (cl.data()->isDesktop()
|| cl.data()->isDock()) || cl.data()->isDock())
@ -175,7 +175,6 @@ void UserActionsMenu::show(const QRect &pos, const QWeakPointer<Client> &cl)
else else
m_menu->exec(QPoint(x, pos.top() - popupHeight)); m_menu->exec(QPoint(x, pos.top() - popupHeight));
} }
m_client.clear();;
} }
void UserActionsMenu::helperDialog(const QString& message, const QWeakPointer<Client> &c) void UserActionsMenu::helperDialog(const QString& message, const QWeakPointer<Client> &c)