Tracker FindPanel: Make a copy of fDeviceIcon

... so that it gets deleted by destructor and not the original
This commit is contained in:
John Scipione 2016-07-31 18:47:19 -07:00
parent 4a319b9c40
commit 9d37e7411c
2 changed files with 22 additions and 2 deletions

View File

@ -69,7 +69,7 @@ class IconMenuItem : public PositionPassingMenuItem {
virtual void DrawContent();
virtual void SetMarked(bool mark);
virtual void SetIcon(BBitmap* icon) { fDeviceIcon = icon; };
virtual void SetIcon(BBitmap* icon);
BBitmap* Icon() const { return fDeviceIcon; };
virtual void SetIconSize(icon_size which) { fWhich = which; };

View File

@ -257,10 +257,12 @@ IconMenuItem::IconMenuItem(const char* label, BMessage* message, BBitmap* icon,
icon_size which)
:
PositionPassingMenuItem(label, message),
fDeviceIcon(icon),
fDeviceIcon(NULL),
fHeightDelta(0),
fWhich(which)
{
SetIcon(icon);
// IconMenuItem is used in synchronously invoked menus, make sure
// we invoke with a timeout
SetTimeout(kSynchMenuInvokeTimeout);
@ -505,3 +507,21 @@ IconMenuItem::SetMarked(bool mark)
topLevelIconMenuItem->SetIcon(fDeviceIcon);
menu->Invalidate();
}
void
IconMenuItem::SetIcon(BBitmap* icon)
{
if (icon != NULL) {
if (fDeviceIcon != NULL)
delete fDeviceIcon;
fDeviceIcon = new BBitmap(BRect(0, 0, fWhich - 1, fWhich - 1),
icon->ColorSpace());
fDeviceIcon->SetBits(icon->Bits(), icon->BitsLength(), 0,
icon->ColorSpace());
} else {
delete fDeviceIcon;
fDeviceIcon = NULL;
}
}