Network preference: Fix icon initialization and destruction

- Add more check for icon initialization in _PopulateBitmaps().
- Delete icons in destructor.

Change-Id: Id49861af3df66dcd670524466920a37e5b5d8c22
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3658
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Murai Takashi
2021-01-23 19:54:12 +00:00
committed by Adrien Destugues
parent 4cf4daf212
commit 672f7a7d8c
+37 -16
View File
@@ -37,6 +37,9 @@ InterfaceListItem::InterfaceListItem(const char* name,
BListItem(0, false), BListItem(0, false),
fType(type), fType(type),
fIcon(NULL), fIcon(NULL),
fIconOffline(NULL),
fIconPending(NULL),
fIconOnline(NULL),
fFirstLineOffset(0), fFirstLineOffset(0),
fLineOffset(0), fLineOffset(0),
fDisabled(false), fDisabled(false),
@@ -51,6 +54,9 @@ InterfaceListItem::InterfaceListItem(const char* name,
InterfaceListItem::~InterfaceListItem() InterfaceListItem::~InterfaceListItem()
{ {
delete fIcon; delete fIcon;
delete fIconOffline;
delete fIconPending;
delete fIconOnline;
} }
@@ -194,6 +200,9 @@ InterfaceListItem::_PopulateBitmaps(const char* mediaType)
const uint8* onlineHVIF; const uint8* onlineHVIF;
BBitmap* interfaceBitmap = NULL; BBitmap* interfaceBitmap = NULL;
BBitmap* offlineBitmap = NULL;
BBitmap* pendingBitmap = NULL;
BBitmap* onlineBitmap = NULL;
BResources* resources = BApplication::AppResources(); BResources* resources = BApplication::AppResources();
@@ -212,12 +221,12 @@ InterfaceListItem::_PopulateBitmaps(const char* mediaType)
interfaceHVIF = (const uint8*)resources->LoadResource( interfaceHVIF = (const uint8*)resources->LoadResource(
B_VECTOR_ICON_TYPE, "ether", &iconSize); B_VECTOR_ICON_TYPE, "ether", &iconSize);
if (interfaceHVIF) { if (interfaceHVIF != NULL) {
// Now build the bitmap // Now build the bitmap
interfaceBitmap = new BBitmap(BRect(0, 0, ICON_SIZE, ICON_SIZE), interfaceBitmap = new(std::nothrow) BBitmap(
0, B_RGBA32); BRect(0, 0, ICON_SIZE, ICON_SIZE), 0, B_RGBA32);
if (BIconUtils::GetVectorIcon(interfaceHVIF, if (BIconUtils::GetVectorIcon(interfaceHVIF,
iconSize, interfaceBitmap) == B_OK) iconSize, interfaceBitmap) == B_OK)
fIcon = interfaceBitmap; fIcon = interfaceBitmap;
else else
delete interfaceBitmap; delete interfaceBitmap;
@@ -227,28 +236,40 @@ InterfaceListItem::_PopulateBitmaps(const char* mediaType)
offlineHVIF = (const uint8*)resources->LoadResource( offlineHVIF = (const uint8*)resources->LoadResource(
B_VECTOR_ICON_TYPE, "offline", &iconSize); B_VECTOR_ICON_TYPE, "offline", &iconSize);
if (offlineHVIF) { if (offlineHVIF != NULL) {
fIconOffline = new BBitmap(BRect(0, 0, ICON_SIZE, ICON_SIZE), offlineBitmap = new(std::nothrow) BBitmap(
0, B_RGBA32); BRect(0, 0, ICON_SIZE, ICON_SIZE), 0, B_RGBA32);
BIconUtils::GetVectorIcon(offlineHVIF, iconSize, fIconOffline); if (BIconUtils::GetVectorIcon(offlineHVIF,
iconSize, offlineBitmap) == B_OK)
fIconOffline = offlineBitmap;
else
delete offlineBitmap;
} }
pendingHVIF = (const uint8*)resources->LoadResource( pendingHVIF = (const uint8*)resources->LoadResource(
B_VECTOR_ICON_TYPE, "pending", &iconSize); B_VECTOR_ICON_TYPE, "pending", &iconSize);
if (pendingHVIF) { if (pendingHVIF != NULL) {
fIconPending = new BBitmap(BRect(0, 0, ICON_SIZE, ICON_SIZE), pendingBitmap = new(std::nothrow) BBitmap(
0, B_RGBA32); BRect(0, 0, ICON_SIZE, ICON_SIZE), 0, B_RGBA32);
BIconUtils::GetVectorIcon(pendingHVIF, iconSize, fIconPending); if (BIconUtils::GetVectorIcon(pendingHVIF,
iconSize, pendingBitmap) == B_OK)
fIconPending = pendingBitmap;
else
delete pendingBitmap;
} }
onlineHVIF = (const uint8*)resources->LoadResource( onlineHVIF = (const uint8*)resources->LoadResource(
B_VECTOR_ICON_TYPE, "online", &iconSize); B_VECTOR_ICON_TYPE, "online", &iconSize);
if (onlineHVIF) { if (onlineHVIF != NULL) {
fIconOnline = new BBitmap(BRect(0, 0, ICON_SIZE, ICON_SIZE), onlineBitmap = new(std::nothrow) BBitmap(
0, B_RGBA32); BRect(0, 0, ICON_SIZE, ICON_SIZE), 0, B_RGBA32);
BIconUtils::GetVectorIcon(onlineHVIF, iconSize, fIconOnline); if (BIconUtils::GetVectorIcon(onlineHVIF,
iconSize, onlineBitmap) == B_OK)
fIconOnline = onlineBitmap;
else
delete onlineBitmap;
} }
} }