diff options
author | Josh Bell <josh@lindenlab.com> | 2007-11-01 23:10:05 +0000 |
---|---|---|
committer | Josh Bell <josh@lindenlab.com> | 2007-11-01 23:10:05 +0000 |
commit | 0f00eef21798520bcfe27ae03b3f1b2ae938ff13 (patch) | |
tree | 81c5b33e296d316a10a76c5a9e4cd09790aaa029 | |
parent | ef0eb8dbcf3980a057ad0864efa1c8e1575a8428 (diff) |
svn merge -r 71509:72877 svn+ssh://svn.lindenlab.com/svn/linden/branches/Branch_1-18-4-Viewer --> release
Backport patches and translations from RC branch
26 files changed, 195 insertions, 245 deletions
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 300d34b735..c13155aeb5 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -34,8 +34,8 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 18; -const S32 LL_VERSION_PATCH = 3; -const S32 LL_VERSION_BUILD = 5; +const S32 LL_VERSION_PATCH = 4; +const S32 LL_VERSION_BUILD = 2; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 906b134d2b..8ec5656e18 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -1239,6 +1239,7 @@ BOOL LLMenuItemBranchGL::handleMouseUp(S32 x, S32 y, MASK mask) doIt(); make_ui_sound("UISndClickRelease"); + return TRUE; } return FALSE; } @@ -1550,7 +1551,7 @@ public: // LLView functionality virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ); - virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ) {return FALSE; } + virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); virtual void draw( void ); virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); @@ -1674,6 +1675,11 @@ BOOL LLMenuItemBranchDownGL::handleMouseDown( S32 x, S32 y, MASK mask ) return TRUE; } +BOOL LLMenuItemBranchDownGL::handleMouseUp( S32 x, S32 y, MASK mask ) +{ + return TRUE; +} + BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask) { diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 1d2d8a7146..7af0d726cb 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -67,7 +67,6 @@ const LLColor4 UI_VERTEX_COLOR(1.f, 1.f, 1.f, 1.f); BOOL gShowTextEditCursor = TRUE; // Language for UI construction -LLString gLanguage = "english-usa"; std::map<LLString, LLString> gTranslation; std::list<LLString> gUntranslated; @@ -1515,104 +1514,6 @@ void gl_segmented_rect_3d_tex_top(const LLVector2& border_scale, const LLVector3 gl_segmented_rect_3d_tex(border_scale, border_width, border_height, width_vec, height_vec, ROUNDED_RECT_TOP); } -#if 0 // No longer used -void load_tr(const LLString& lang) -{ - LLString inname = "words." + lang + ".txt"; - LLString filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, inname.c_str()); - - llifstream file; - file.open(filename.c_str(), std::ios_base::binary); /* Flawfinder: ignore */ - if (!file) - { - llinfos << "No translation dictionary for: " << filename << llendl; - return; - } - - llinfos << "Reading language translation dictionary: " << filename << llendl; - - gTranslation.clear(); - gUntranslated.clear(); - - const S32 MAX_LINE_LEN = 1024; - char buffer[MAX_LINE_LEN]; /* Flawfinder: ignore */ - while (!file.eof()) - { - file.getline(buffer, MAX_LINE_LEN); - LLString line(buffer); - S32 commentpos = line.find("//"); - if (commentpos != LLString::npos) - { - line = line.substr(0, commentpos); - } - S32 offset = line.find('\t'); - if (offset != LLString::npos) - { - LLString english = line.substr(0,offset); - LLString translation = line.substr(offset+1); - //llinfos << "TR: " << english << " = " << translation << llendl; - gTranslation[english] = translation; - } - } - - file.close(); -} - -void init_tr(const LLString& language) -{ - if (!language.empty()) - { - gLanguage = language; - } - load_tr(gLanguage); -} - -void cleanup_tr() -{ - // Dump untranslated phrases to help with translation - if (gUntranslated.size() > 0) - { - LLString outname = "untranslated_" + gLanguage + ".txt"; - LLString outfilename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, outname.c_str()); - llofstream outfile; - outfile.open(outfilename.c_str()); /* Flawfinder: ignore */ - if (!outfile) - { - return; - } - llinfos << "Writing untranslated words to: " << outfilename << llendl; - LLString outtext; - for (std::list<LLString>::iterator iter = gUntranslated.begin(); - iter != gUntranslated.end(); ++iter) - { - // output: english_phrase english_phrase - outtext += *iter; - outtext += "\t"; - outtext += *iter; - outtext += "\n"; - } - outfile << outtext.c_str(); - outfile.close(); - } -} - -LLString tr(const LLString& english_string) -{ - std::map<LLString, LLString>::iterator it = gTranslation.find(english_string); - if (it != gTranslation.end()) - { - return it->second; - } - else - { - gUntranslated.push_back(english_string); - return english_string; - } -} - -#endif - - class LLShowXUINamesListener: public LLSimpleListener { bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) @@ -1643,12 +1544,10 @@ void LLUI::initClass(LLControlGroup* config, LLUI::sShowXUINames = LLUI::sConfigGroup->getBOOL("ShowXUINames"); LLUI::sConfigGroup->getControl("ShowXUINames")->addListener(&show_xui_names_listener); -// init_tr(language); } void LLUI::cleanupClass() { -// cleanup_tr(); } diff --git a/indra/llui/llui.h b/indra/llui/llui.h index a947e61af9..b78b046a8c 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -144,9 +144,6 @@ inline void gl_rect_2d_offset_local( const LLRect& rect, S32 pixel_offset, BOOL // Used to hide the flashing text cursor when window doesn't have focus. extern BOOL gShowTextEditCursor; -// Language -extern LLString gLanguage; - class LLImageProviderInterface; typedef void (*LLUIAudioCallback)(const LLUUID& uuid); diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index f415fe56ed..b5db6efb4d 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -42,6 +42,7 @@ #include <errno.h> #include <sys/types.h> #include <sys/stat.h> +#include <errno.h> // Utility stuff to get versions of the sh #define PACKVERSION(major,minor) MAKELONG(minor,major) diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 420236c7d6..94d1db1798 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.18.3.5"; -CFBundleGetInfoString = "Second Life version 1.18.3.5, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.18.4.2"; +CFBundleGetInfoString = "Second Life version 1.18.4.2, Copyright 2004-2007 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index 263babe019..cee5a98bff 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ </dict> </array> <key>CFBundleVersion</key> - <string>1.18.3.5</string> + <string>1.18.4.2</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index fb411315ae..a19107dd9c 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -5130,6 +5130,8 @@ void update_group_floaters(const LLUUID& group_id) // update the talk view gIMMgr->refresh(); } + + gAgent.fireEvent(new LLEvent(&gAgent, "new group"), ""); } // static @@ -5219,7 +5221,6 @@ void LLAgent::processAgentGroupDataUpdate(LLMessageSystem *msg, void **) if (need_floater_update) { update_group_floaters(group.mID); - gAgent.fireEvent(new LLEvent(&gAgent, "new group"), ""); } } @@ -5321,8 +5322,6 @@ void LLAgent::processAgentDataUpdate(LLMessageSystem *msg, void **) } update_group_floaters(active_id); - - gAgent.fireEvent(new LLEvent(&gAgent, "new group"), ""); } // static diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 5aac949f20..bccabb356f 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -116,8 +116,10 @@ BOOL LLFloaterLandHoldings::postBuild() element["columns"][0]["value"] = gAgent.mGroups.get(i).mName; element["columns"][0]["font"] = "SANSSERIF"; + LLUIString areastr = getUIString("area_string"); + areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.get(i).mContribution)); element["columns"][1]["column"] = "area"; - element["columns"][1]["value"] = llformat("%d sq. meters", gAgent.mGroups.get(i).mContribution); + element["columns"][1]["value"] = areastr; element["columns"][1]["font"] = "SANSSERIF"; list->addElement(element, ADD_SORTED); @@ -315,14 +317,7 @@ void LLFloaterLandHoldings::refreshAggregates() S32 current_area = gStatusBar->getSquareMetersCommitted(); S32 available_area = gStatusBar->getSquareMetersLeft(); - char buffer[MAX_STRING]; /* Flawfinder: ignore */ - - snprintf(buffer, MAX_STRING, "%d sq. meters", allowed_area); /* Flawfinder: ignore */ - childSetValue("allowed_text", LLSD(buffer)); - - snprintf(buffer, MAX_STRING, "%d sq. meters", current_area); /* Flawfinder: ignore */ - childSetValue("current_text", LLSD(buffer)); - - snprintf(buffer, MAX_STRING, "%d sq. meters", available_area); /* Flawfinder: ignore */ - childSetValue("available_text", LLSD(buffer)); + childSetTextArg("allowed_text", "[AREA]", llformat("%d",allowed_area)); + childSetTextArg("current_text", "[AREA]", llformat("%d",current_area)); + childSetTextArg("available_text", "[AREA]", llformat("%d",available_area)); } diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index af2a717ff7..538e8415a0 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -557,14 +557,14 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) if (is_for_sale) { radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1); - std::string numerical_price; + S32 numerical_price; numerical_price = sale_info.getSalePrice(); - childSetText("EditPrice",numerical_price); + childSetText("EditPrice",llformat("%d",numerical_price)); } else { radioSaleType->setSelectedIndex(-1); - childSetText("EditPrice",LLString::null); + childSetText("EditPrice",llformat("%d",0)); } } diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 5833c2f17d..20f3192939 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -716,10 +716,11 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() body["allow_land_resell"] = childGetValue("allow_land_resell_check"); body["agent_limit"] = childGetValue("agent_limit_spin"); body["prim_bonus"] = childGetValue("object_bonus_spin"); - body["sim_access"] = childGetValue("access_combo"); + body["sim_access"] = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str()); body["restrict_pushobject"] = childGetValue("restrict_pushobject"); body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check"); body["block_parcel_search"] = childGetValue("block_parcel_search_check"); + LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); } else diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index 15559bc1db..fb3de3ab56 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -456,15 +456,18 @@ BOOL LLManipRotate::handleMouseUp(S32 x, S32 y, MASK mask) // first, perform normal processing in case this was a quick-click handleHover(x, y, mask); - mManipPart = LL_NO_PART; + if( hasMouseCapture() ) + { + mManipPart = LL_NO_PART; - // Might have missed last update due to timing. - gSelectMgr->sendMultipleUpdate( UPD_ROTATION | UPD_POSITION ); - gSelectMgr->enableSilhouette(TRUE); - //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); + // Might have missed last update due to timing. + gSelectMgr->sendMultipleUpdate( UPD_ROTATION | UPD_POSITION ); + gSelectMgr->enableSilhouette(TRUE); + //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); - gSelectMgr->updateSelectionCenter(); - gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + gSelectMgr->updateSelectionCenter(); + gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + } return LLManip::handleMouseUp(x, y, mask); } diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 7df5311aa4..a67e3fcce6 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -374,29 +374,32 @@ BOOL LLManipScale::handleMouseUp(S32 x, S32 y, MASK mask) // first, perform normal processing in case this was a quick-click handleHover(x, y, mask); - if( (LL_FACE_MIN <= (S32)mManipPart) - && ((S32)mManipPart <= LL_FACE_MAX) ) - { - sendUpdates(TRUE,TRUE,FALSE); - } - else - if( (LL_CORNER_MIN <= (S32)mManipPart) - && ((S32)mManipPart <= LL_CORNER_MAX) ) + if( hasMouseCapture() ) { - sendUpdates(TRUE,TRUE,TRUE); - } - - //send texture update - gSelectMgr->adjustTexturesByScale(TRUE, getStretchTextures()); - - gSelectMgr->enableSilhouette(TRUE); - mManipPart = LL_NO_PART; + if( (LL_FACE_MIN <= (S32)mManipPart) + && ((S32)mManipPart <= LL_FACE_MAX) ) + { + sendUpdates(TRUE,TRUE,FALSE); + } + else + if( (LL_CORNER_MIN <= (S32)mManipPart) + && ((S32)mManipPart <= LL_CORNER_MAX) ) + { + sendUpdates(TRUE,TRUE,TRUE); + } + + //send texture update + gSelectMgr->adjustTexturesByScale(TRUE, getStretchTextures()); + + gSelectMgr->enableSilhouette(TRUE); + mManipPart = LL_NO_PART; - // Might have missed last update due to UPDATE_DELAY timing - gSelectMgr->sendMultipleUpdate( mLastUpdateFlags ); - - //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); - gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + // Might have missed last update due to UPDATE_DELAY timing + gSelectMgr->sendMultipleUpdate( mLastUpdateFlags ); + + //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); + gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + } return LLManip::handleMouseUp(x, y, mask); } diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 1f52f30c88..1963b1a8f5 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1037,16 +1037,19 @@ BOOL LLManipTranslate::handleMouseUp(S32 x, S32 y, MASK mask) // first, perform normal processing in case this was a quick-click handleHover(x, y, mask); - // make sure arrow colors go back to normal - mManipPart = LL_NO_PART; - gSelectMgr->enableSilhouette(TRUE); + if(hasMouseCapture()) + { + // make sure arrow colors go back to normal + mManipPart = LL_NO_PART; + gSelectMgr->enableSilhouette(TRUE); - // Might have missed last update due to UPDATE_DELAY timing. - gSelectMgr->sendMultipleUpdate( UPD_POSITION ); - - mInSnapRegime = FALSE; - gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); - //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); + // Might have missed last update due to UPDATE_DELAY timing. + gSelectMgr->sendMultipleUpdate( UPD_POSITION ); + + mInSnapRegime = FALSE; + gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); + //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); + } return LLManip::handleMouseUp(x, y, mask); } diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 13e6478dcb..cb75f1606e 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -701,9 +701,12 @@ void LLPanelClassified::refresh() //mEnabledCheck->setEnabled(is_self); mMatureCheck->setEnabled(is_self); - mAutoRenewCheck->setEnabled(is_self); - mAutoRenewCheck->setVisible(is_self); - + if (mAutoRenewCheck) + { + mAutoRenewCheck->setEnabled(is_self); + mAutoRenewCheck->setVisible(is_self); + } + mClickThroughText->setEnabled(is_self); mClickThroughText->setVisible(is_self); @@ -801,7 +804,10 @@ void LLPanelClassified::confirmPublish(S32 option) mLocationChanged = false; mCategoryCombo->resetDirty(); mMatureCheck->resetDirty(); - mAutoRenewCheck->resetDirty(); + if (mAutoRenewCheck) + { + mAutoRenewCheck->resetDirty(); + } } // static diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 63e25d9f2d..8dbe72fdfe 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -480,7 +480,7 @@ void LLPanelFace::getState() { F32 get(LLViewerObject* object, S32 face) { - return object->getTE(face)->mScaleS; + return object->getTE(face)->mScaleT; } } func; identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, scale_t ); diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index a96b66984b..99744c9653 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -614,6 +614,12 @@ void LLPanelGroup::draw() mRefreshTimer.stop(); childEnable("btn_refresh"); } + if (mCurrentTab) + { + LLString mesg; + childSetEnabled("btn_apply", mCurrentTab->needsApply(mesg)); + } + } void LLPanelGroup::refreshData() diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index dfb9bbb175..3ad65b5e68 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -392,9 +392,7 @@ void LLPanelGroupGeneral::openProfile(void* data) bool LLPanelGroupGeneral::needsApply(LLString& mesg) { - llinfos << "LLPanelGroupGeneral::needsApply(LLString& mesg) " << mChanged << llendl; - - mesg = "General group information has changed."; + mesg = getUIString("group_info_unchanged"); return mChanged || mGroupID.isNull(); } diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index a6ffe4f922..4c12aa2218 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -573,7 +573,7 @@ bool LLPanelGroupLandMoney::apply(LLString& mesg) { if (!mImplementationp->applyContribution() ) { - mesg.assign("Unable to set your land contribution."); + mesg.assign(getUIString("land_contrib_error")); return false; } diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 3d5723ed7d..923f4b3115 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -756,7 +756,7 @@ void LLPanelPermissions::refresh() BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); bool include_in_search; bool all_include_in_search = gSelectMgr->selectionGetIncludeInSearch(&include_in_search); - childSetEnabled("search_check", is_perm_modify && all_volume); + childSetEnabled("search_check", has_change_sale_ability && all_volume); childSetValue("search_check", include_in_search); childSetTentative("search_check", ! all_include_in_search); diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp index 48dcd69a4d..459e726f87 100644 --- a/indra/newview/llpanelplace.cpp +++ b/indra/newview/llpanelplace.cpp @@ -247,21 +247,21 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) self->mDescEditor->setText(desc_str); LLString info_text; - LLUIString traffic = self->childGetText("traffic_text"); + LLUIString traffic = self->getUIString("traffic_text"); traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell)); info_text = traffic; - LLUIString area = self->childGetText("area_text"); - area.setArg("[AREA]", llformat("%d ", actual_area)); + LLUIString area = self->getUIString("area_text"); + area.setArg("[AREA]", llformat("%d", actual_area)); info_text += area; if (flags & DFQ_FOR_SALE) { - LLUIString forsale = self->childGetText("forsale_text"); - forsale.setArg("[PRICE]", llformat("%d ", sale_price)); + LLUIString forsale = self->getUIString("forsale_text"); + forsale.setArg("[PRICE]", llformat("%d", sale_price)); info_text += forsale; } if (auction_id != 0) { - LLUIString auction = self->childGetText("auction_text"); + LLUIString auction = self->getUIString("auction_text"); auction.setArg("[ID]", llformat("%010d ", auction_id)); info_text += auction; } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d48fa405ba..3c29cfdbfc 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -2232,8 +2232,8 @@ BOOL LLSelectMgr::selectGetCreator(LLUUID& result_id, LLString& name) BOOL identical = TRUE; BOOL first = TRUE; LLUUID first_id; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) { LLSelectNode* node = *iter; if (!node->mValid) @@ -2255,7 +2255,11 @@ BOOL LLSelectMgr::selectGetCreator(LLUUID& result_id, LLString& name) } } } - + if (first_id.isNull()) + { + return FALSE; + } + result_id = first_id; if (identical) @@ -2286,8 +2290,8 @@ BOOL LLSelectMgr::selectGetOwner(LLUUID& result_id, LLString& name) BOOL first = TRUE; BOOL first_group_owned = FALSE; LLUUID first_id; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) { LLSelectNode* node = *iter; if (!node->mValid) @@ -2312,6 +2316,10 @@ BOOL LLSelectMgr::selectGetOwner(LLUUID& result_id, LLString& name) } } } + if (first_id.isNull()) + { + return FALSE; + } result_id = first_id; @@ -2354,8 +2362,8 @@ BOOL LLSelectMgr::selectGetLastOwner(LLUUID& result_id, LLString& name) BOOL identical = TRUE; BOOL first = TRUE; LLUUID first_id; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) { LLSelectNode* node = *iter; if (!node->mValid) @@ -2377,6 +2385,10 @@ BOOL LLSelectMgr::selectGetLastOwner(LLUUID& result_id, LLString& name) } } } + if (first_id.isNull()) + { + return FALSE; + } result_id = first_id; @@ -2415,8 +2427,8 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) BOOL identical = TRUE; BOOL first = TRUE; LLUUID first_id; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) { LLSelectNode* node = *iter; if (!node->mValid) @@ -2438,6 +2450,10 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) } } } + if (first_id.isNull()) + { + return FALSE; + } result_id = first_id; @@ -2452,8 +2468,8 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id) BOOL LLSelectMgr::selectIsGroupOwned() { BOOL found_one = FALSE; - for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); - iter != getSelection()->root_end(); iter++ ) + for (LLObjectSelection::root_object_iterator iter = getSelection()->root_object_begin(); + iter != getSelection()->root_object_end(); iter++ ) { LLSelectNode* node = *iter; if (!node->mValid) @@ -3965,14 +3981,8 @@ void LLSelectMgr::sendListToRegions(const LLString& message_name, push_editable(std::queue<LLSelectNode*>& n) : nodes_to_send(n) {} virtual bool apply(LLSelectNode* node) { - // look and see if this object is actually modifiable by the current agent, because if it's not, then there's little - // point in pushing it up to the server to be updated, since we couldn't change it anyway. - // That just results in errors on screen when this function gets called by other things, like pulling down a drop down menu - LLViewerObject* object = node->getObject(); - if( object && (object->permModify() || gAgent.allowOperation(PERM_MODIFY, *node->mPermissions) || gAgent.allowOperation(PERM_MOVE, *node->mPermissions))) - { - nodes_to_send.push(node); - } + + nodes_to_send.push(node); return true; } }; diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 26b919ba28..071aa15236 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -254,6 +254,18 @@ public: valid_root_iterator valid_root_begin() { return valid_root_iterator(mList.begin(), mList.end()); } valid_root_iterator valid_root_end() { return valid_root_iterator(mList.end(), mList.end()); } + struct is_root_object + { + bool operator()(LLSelectNode* node) + { + LLViewerObject* object = node->getObject(); + return (object != NULL) && (object->isRootEdit() || object->isJointChild()); + } + }; + typedef boost::filter_iterator<is_root_object, list_t::iterator > root_object_iterator; + root_object_iterator root_object_begin() { return root_object_iterator(mList.begin(), mList.end()); } + root_object_iterator root_object_end() { return root_object_iterator(mList.end(), mList.end()); } + public: LLObjectSelection(); diff --git a/indra/newview/llsrv.cpp b/indra/newview/llsrv.cpp index 150fcb1583..7271513852 100644 --- a/indra/newview/llsrv.cpp +++ b/indra/newview/llsrv.cpp @@ -51,6 +51,19 @@ std::vector<std::string> LLSRV::rewriteURI(const std::string& uri) LLPointer<Responder> resp = new Responder; gAres->rewriteURI(uri, resp); - gAres->processAll(); - return resp->mUris; + gAres->processAll(); + + // It's been observed in deployment that c-ares can return control + // to us without firing all of our callbacks, in which case the + // returned vector will be empty, instead of a singleton as we + // might wish. + + if (!resp->mUris.empty()) + { + return resp->mUris; + } + + std::vector<std::string> uris; + uris.push_back(uri); + return uris; } diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 0be4212399..1f607def58 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1409,7 +1409,46 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, { LLFirstUse::useSandbox(); } + // check if it cannot be copied, and mark as remove if it is - + // this will remove the object from inventory after rez. Only + // bother with this check if we would not normally remove from + // inventory. + if(!remove_from_inventory + && !item->getPermissions().allowCopyBy(gAgent.getID())) + { + remove_from_inventory = TRUE; + } + + // Limit raycast to a single object. + // Speeds up server raycast + avoid problems with server ray + // hitting objects that were clipped by the near plane or culled + // on the viewer. + LLUUID ray_target_id; + if( raycast_target ) + { + ray_target_id = raycast_target->getID(); + } + else + { + ray_target_id.setNull(); + } + // Check if it's in the trash. + bool is_in_trash = false; + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); + if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) + { + is_in_trash = true; + remove_from_inventory = TRUE; + } + + LLUUID source_id = from_task_inventory ? mSourceID : LLUUID::null; + + // Select the object only if we're editing. + BOOL rez_selected = gToolMgr->inEdit(); + + // Message packing code should be it's own uninterrupted block LLMessageSystem* msg = gMessageSystem; if (mSource == SOURCE_NOTECARD) { @@ -1430,55 +1469,13 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // *FIX: We can probably compress this to a single byte, since I // think folderid == mSourceID. This will be a later // optimization. - if(from_task_inventory) - { - msg->addUUIDFast(_PREHASH_FromTaskID, mSourceID); - } - else - { - msg->addUUIDFast(_PREHASH_FromTaskID, LLUUID::null); - } + msg->addUUIDFast(_PREHASH_FromTaskID, source_id); msg->addU8Fast(_PREHASH_BypassRaycast, (U8) bypass_sim_raycast); msg->addVector3Fast(_PREHASH_RayStart, regionp->getPosRegionFromGlobal(mLastCameraPos)); msg->addVector3Fast(_PREHASH_RayEnd, regionp->getPosRegionFromGlobal(mLastHitPos)); - // Limit raycast to a single object. - // Speeds up server raycast + avoid problems with server ray - // hitting objects that were clipped by the near plane or culled - // on the viewer. - LLUUID ray_target_id; - if( raycast_target ) - { - ray_target_id = raycast_target->getID(); - } - else - { - ray_target_id.setNull(); - } msg->addUUIDFast(_PREHASH_RayTargetID, ray_target_id ); msg->addBOOLFast(_PREHASH_RayEndIsIntersection, FALSE); - // Select the object only if we're editing. - BOOL rez_selected = gToolMgr->inEdit(); msg->addBOOLFast(_PREHASH_RezSelected, rez_selected); - - // check if it cannot be copied, and mark as remove if it is - - // this will remove the object from inventory after rez. Only - // bother with this check if we would not normally remove from - // inventory. - if(!remove_from_inventory - && !item->getPermissions().allowCopyBy(gAgent.getID())) - { - remove_from_inventory = TRUE; - } - - // Check if it's in the trash. - bool is_in_trash = false; - LLUUID trash_id; - trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); - if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) - { - is_in_trash = true; - remove_from_inventory = TRUE; - } msg->addBOOLFast(_PREHASH_RemoveItem, remove_from_inventory); // deal with permissions slam logic diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 188591d1f9..dc689102f3 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -898,6 +898,7 @@ void LLWorldMapView::drawAgents() { const LLItemInfo& info = *iter; S32 agent_count = info.mExtra; + sim_agent_count += info.mExtra; // Here's how we'd choose the color if info.mID were available but it's not being sent: //LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? gFriendMapColor : gAvatarMapColor; drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, gAvatarMapColor); |