Fix crash when selecting emoji after closing the IM floater the picker belongs to

master
Ansariel 2023-09-04 23:52:01 +02:00
parent ade7d26061
commit fc466df54e
2 changed files with 38 additions and 4 deletions

View File

@ -2527,9 +2527,26 @@ void FSFloaterIM::onEmojiPickerToggleBtnClicked(FSFloaterIM* self)
picker->show(
[self](llwchar emoji) { self->onEmojiPicked(emoji); },
[self]() { self->onEmojiPickerClosed(); });
if (LLFloater* root_floater = gFloaterView->getParentFloater(self))
self->addDependentFloater(picker, TRUE, TRUE);
// Adjust size and position to the conversations floater the IM floater is hosted in
if (self->getHost())
{
root_floater->addDependentFloater(picker, TRUE, TRUE);
LLRect rect = gFloaterView->findNeighboringPosition(self->getHost(), picker);
const LLRect& base = self->getHost()->getRect();
if (rect.mTop == base.mTop)
rect.mBottom = base.mBottom;
else if (rect.mLeft == base.mLeft)
rect.mRight = base.mRight;
picker->reshape(rect.getWidth(), rect.getHeight(), FALSE);
picker->setRect(rect);
picker->setSnapTarget(self->getHost()->getHandle());
gFloaterView->adjustToFitScreen(picker, FALSE, TRUE);
if (picker->isFrontmost())
{
// make sure to bring self and sibling floaters to front
gFloaterView->bringToFront(picker);
}
}
}
else

View File

@ -1025,9 +1025,26 @@ void FSFloaterNearbyChat::onEmojiPickerToggleBtnClicked(FSFloaterNearbyChat* sel
picker->show(
[self](llwchar emoji) { self->onEmojiPicked(emoji); },
[self]() { self->onEmojiPickerClosed(); });
if (LLFloater* root_floater = gFloaterView->getParentFloater(self))
self->addDependentFloater(picker, TRUE, TRUE);
// Adjust size and position to the conversations floater the nearby chat floater is hosted in
if (self->getHost())
{
root_floater->addDependentFloater(picker, TRUE, TRUE);
LLRect rect = gFloaterView->findNeighboringPosition(self->getHost(), picker);
const LLRect& base = self->getHost()->getRect();
if (rect.mTop == base.mTop)
rect.mBottom = base.mBottom;
else if (rect.mLeft == base.mLeft)
rect.mRight = base.mRight;
picker->reshape(rect.getWidth(), rect.getHeight(), FALSE);
picker->setRect(rect);
picker->setSnapTarget(self->getHost()->getHandle());
gFloaterView->adjustToFitScreen(picker, FALSE, TRUE);
if (picker->isFrontmost())
{
// make sure to bring self and sibling floaters to front
gFloaterView->bringToFront(picker);
}
}
}
else