From 40b71c16670a3a52d0b647b860a441318b65ae96 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Wed, 10 Sep 2008 11:34:56 +0000 Subject: [PATCH] Use dynamic_cast before calling DeleteReplicant. This fixes bug #2712. I'm not sure why, though. Also call unload_add_on() as last operation (and yes, doing just that was not sufficient to fix the bug) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27400 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Shelf.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/kits/interface/Shelf.cpp b/src/kits/interface/Shelf.cpp index e21d03ce7d..ed1eba45a8 100644 --- a/src/kits/interface/Shelf.cpp +++ b/src/kits/interface/Shelf.cpp @@ -531,10 +531,12 @@ void BShelf::MessageReceived(BMessage *msg) { if (msg->what == kDeleteReplicant) { - BView *replicant = NULL; - if (msg->FindPointer("_target", (void **)&replicant) == B_OK && replicant != NULL) - DeleteReplicant(replicant); - + BHandler *replicant = NULL; + if (msg->FindPointer("_target", (void **)&replicant) == B_OK) { + BView *view = dynamic_cast(replicant); + if (view != NULL) + DeleteReplicant(view); + } return; } @@ -1152,11 +1154,13 @@ BShelf::_DeleteReplicant(replicant_data* item) delete item->dragger; } - if (loadedImage && item->image >= 0) - unload_add_on(item->image); + image_id image = item->image; delete item; + if (loadedImage && image >= 0) + unload_add_on(image); + return B_OK; }