From 1d44f6791d21690ce81fded7afa96b7824e03872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 8 Dec 2005 10:46:54 +0000 Subject: [PATCH] Now checks if locking the looper succeeded. Now hides the window before removing itself to prevent a superfluous drawing update. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15410 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Menu.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 3bb0976856..2cd0140661 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -1056,12 +1056,20 @@ BMenu::_show(bool selectFirstItem) void BMenu::_hide() { - if (fCachedMenuWindow != NULL) { - fCachedMenuWindow->Lock(); - fCachedMenuWindow->ChildAt(0)->RemoveChild(this); - fCachedMenuWindow->Quit(); - fCachedMenuWindow = NULL; + if (!LockLooper()) + return; + if (fCachedMenuWindow == NULL) { + // Huh? What did happen here? - we're trying to be on the safe side + UnlockLooper(); + return; } + + fCachedMenuWindow->Hide(); + fCachedMenuWindow->ChildAt(0)->RemoveChild(this); + // we don't want to be deleted when the window is removed + + fCachedMenuWindow->Quit(); + fCachedMenuWindow = NULL; }