diff options
| author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-09 11:25:45 +0100 |
|---|---|---|
| committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-09 11:25:45 +0100 |
| commit | 7efc691e26189b0560ee8b0615c53b0d8bf35e3e (patch) | |
| tree | fded5ed43cb07bc681bcd9b3276f210d55e9cf98 /indra/newview/llpopupview.cpp | |
| parent | dc8f5a7b03a7ab19d134b4da9060028fd7db1cce (diff) | |
| parent | 4ed913c3760308ea67db8beb9e6330933104a8ab (diff) | |
merge from viewer-trunk
Diffstat (limited to 'indra/newview/llpopupview.cpp')
| -rw-r--r-- | indra/newview/llpopupview.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp index b010f4d72f..7cde350d5a 100644 --- a/indra/newview/llpopupview.cpp +++ b/indra/newview/llpopupview.cpp @@ -104,8 +104,13 @@ BOOL LLPopupView::handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)> func S32 x, S32 y, bool close_popups) { - for (popup_list_t::iterator popup_it = mPopups.begin(); - popup_it != mPopups.end();) + BOOL handled = FALSE; + + // make a copy of list of popups, in case list is modified during mouse event handling + popup_list_t popups(mPopups); + for (popup_list_t::iterator popup_it = popups.begin(), popup_end = popups.end(); + popup_it != popup_end; + ++popup_it) { LLView* popup = popup_it->get(); if (!popup @@ -121,23 +126,19 @@ BOOL LLPopupView::handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)> func { if (func(popup, popup_x, popup_y)) { - return TRUE; + handled = TRUE; + break; } } if (close_popups) { - popup_list_t::iterator cur_popup_it = popup_it++; - mPopups.erase(cur_popup_it); + mPopups.remove(*popup_it); popup->onTopLost(); } - else - { - ++popup_it; - } } - return FALSE; + return handled; } |
