Tracker FindPanel: Make a copy of fDeviceIcon
... so that it gets deleted by destructor and not the original
This commit is contained in:
parent
4a319b9c40
commit
9d37e7411c
@ -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; };
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user