diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index cdd537752..2af557b96 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -9698,33 +9698,36 @@ class ListObjectEnablePay : public view_listener_t } }; +void list_for_each_object(std::function func) +{ + for (const auto& id : LFIDBearer::getActiveSelectedIDs()) + if (auto obj = gObjectList.findObject(id)) + func(obj); +} + class ListObjectTouch : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - for (const auto& id : LFIDBearer::getActiveSelectedIDs()) - if (auto obj = gObjectList.findObject(id)) - if (enable_object_touch(obj)) - handle_object_touch(obj); + list_for_each_object([](LLViewerObject* obj) { if (enable_object_touch(obj)) handle_object_touch(obj); }); return true; } }; +bool list_has_valid_object(std::function func) +{ + for (const auto& id : LFIDBearer::getActiveSelectedIDs()) + if (func(gObjectList.findObject(id))) + return true; // First is fine enough, we'll use all we can + return false; +} + // One object must have touch sensor class ListObjectEnableTouch : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - bool value = false; - for (const auto& id : LFIDBearer::getActiveSelectedIDs()) - { - if (enable_object_touch(gObjectList.findObject(id))) - { - value = true; - break; // First touchable is fine enough, we'll touch all we can - } - } - gMenuHolder->findControl(userdata["control"].asString())->setValue(value); + gMenuHolder->findControl(userdata["control"].asString())->setValue(list_has_valid_object([](LLViewerObject* obj){ return enable_object_touch(obj); })); return true; } };