diff options
Diffstat (limited to 'linden')
23 files changed, 276 insertions, 262 deletions
diff --git a/linden/indra/llcommon/llsdserialize_xml.cpp b/linden/indra/llcommon/llsdserialize_xml.cpp index dab6c1d..3545309 100644 --- a/linden/indra/llcommon/llsdserialize_xml.cpp +++ b/linden/indra/llcommon/llsdserialize_xml.cpp | |||
@@ -358,7 +358,9 @@ static unsigned get_till_eol(std::istream& input, char *buf, unsigned bufsize) | |||
358 | char c = input.get(); | 358 | char c = input.get(); |
359 | buf[count++] = c; | 359 | buf[count++] = c; |
360 | if (is_eol(c)) | 360 | if (is_eol(c)) |
361 | { | ||
361 | break; | 362 | break; |
363 | } | ||
362 | } | 364 | } |
363 | return count; | 365 | return count; |
364 | } | 366 | } |
@@ -391,14 +393,36 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data) | |||
391 | 393 | ||
392 | if (status == XML_STATUS_ERROR) | 394 | if (status == XML_STATUS_ERROR) |
393 | { | 395 | { |
394 | std::string error_string( XML_ErrorString(XML_GetErrorCode( mParser ))); | 396 | std::string error_string(XML_ErrorString(XML_GetErrorCode( mParser ))); |
395 | if ("parsing aborted" != error_string )//end of input | 397 | if (input.gcount() == 0) |
398 | { | ||
399 | // nothing to do -- MC | ||
400 | data = LLSD(); | ||
401 | return LLSDParser::PARSE_FAILURE; | ||
402 | } | ||
403 | else if (error_string != "parsing aborted") // end of input | ||
396 | { | 404 | { |
397 | S32 line_number = XML_GetCurrentLineNumber( mParser ); | 405 | S32 line_number = XML_GetCurrentLineNumber( mParser ); |
398 | llwarns << "LLXmlTree parse failed. Line " << line_number << ": " | 406 | // This parses LLCurl::Responder::completedRaw always, even |
399 | << error_string << llendl; | 407 | // when not using XML. We have to do this little ugliness |
408 | // in order to make this error message meaningful. | ||
409 | // See Expat's xmlparse.c for the full list of errors -- MC | ||
410 | if (error_string == "not well-formed (invalid token)") | ||
411 | { | ||
412 | std::string text((char*)buffer); | ||
413 | if ((text.find('>') != std::string::npos) || | ||
414 | (text.find('<') != std::string::npos)) | ||
415 | { | ||
416 | llwarns << "LLSDXMLParser::Impl::parse error. Line " << line_number << ": " | ||
417 | << error_string << llendl; | ||
418 | } | ||
419 | break; | ||
420 | } | ||
421 | |||
422 | llinfos << "Possible LLSDXMLParser::Impl::parse error. Line " << line_number << ": " | ||
423 | << error_string << llendl; | ||
400 | } | 424 | } |
401 | 425 | // Always break here -- MC | |
402 | break; | 426 | break; |
403 | } | 427 | } |
404 | } | 428 | } |
@@ -417,14 +441,13 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data) | |||
417 | ((char*) buffer)[count ? count - 1 : 0] = '\0'; | 441 | ((char*) buffer)[count ? count - 1 : 0] = '\0'; |
418 | } | 442 | } |
419 | 443 | ||
420 | |||
421 | data = LLSD(); | 444 | data = LLSD(); |
422 | return LLSDParser::PARSE_FAILURE; | 445 | return LLSDParser::PARSE_FAILURE; |
423 | } | 446 | } |
424 | 447 | ||
425 | clear_eol(input); | 448 | clear_eol(input); |
426 | data = mResult; | 449 | data = mResult; |
427 | return mParseCount; | 450 | return mParseCount; // why return mParseCount?! -- MC |
428 | } | 451 | } |
429 | 452 | ||
430 | 453 | ||
@@ -499,7 +522,7 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data) | |||
499 | if ("parsing aborted" != error_string )//end of input | 522 | if ("parsing aborted" != error_string )//end of input |
500 | { | 523 | { |
501 | S32 line_number = XML_GetCurrentLineNumber( mParser ); | 524 | S32 line_number = XML_GetCurrentLineNumber( mParser ); |
502 | llwarns << "LLXmlTree parse failed. Line " << line_number << ": " | 525 | llwarns << "LLSDXMLParser::Impl::parseLines failed. Line " << line_number << ": " |
503 | << error_string << llendl; | 526 | << error_string << llendl; |
504 | } | 527 | } |
505 | return LLSDParser::PARSE_FAILURE; | 528 | return LLSDParser::PARSE_FAILURE; |
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index 9ccaac8..ecbeb9b 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt | |||
@@ -1292,7 +1292,7 @@ set_source_files_properties(${viewer_CHARACTER_FILES} | |||
1292 | list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES}) | 1292 | list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES}) |
1293 | 1293 | ||
1294 | if (WINDOWS) | 1294 | if (WINDOWS) |
1295 | file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi) | 1295 | file(GLOB viewer_INSTALLER_FILES installers/windows/*.iss) |
1296 | 1296 | ||
1297 | source_group("Installer Files" FILES ${viewer_INSTALLER_FILES}) | 1297 | source_group("Installer Files" FILES ${viewer_INSTALLER_FILES}) |
1298 | 1298 | ||
diff --git a/linden/indra/newview/app_settings/logcontrol.xml b/linden/indra/newview/app_settings/logcontrol.xml index 74a8189..c979d73 100644 --- a/linden/indra/newview/app_settings/logcontrol.xml +++ b/linden/indra/newview/app_settings/logcontrol.xml | |||
@@ -53,7 +53,7 @@ | |||
53 | <!--<string>AudioEngine</string>--> | 53 | <!--<string>AudioEngine</string>--> |
54 | <!--<string>BodyPhysics</string>--> | 54 | <!--<string>BodyPhysics</string>--> |
55 | <!--<string>InitInfo</string>--> | 55 | <!--<string>InitInfo</string>--> |
56 | <string>Inventory</string> | 56 | <!--<string>Inventory</string>--> |
57 | <!--<string>isOwnedSelf</string>--> | 57 | <!--<string>isOwnedSelf</string>--> |
58 | <!--<string>HUDEffect</string>--> | 58 | <!--<string>HUDEffect</string>--> |
59 | <!--<string>MarkerFile</string>--> | 59 | <!--<string>MarkerFile</string>--> |
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 0ac7841..e701c3e 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml | |||
@@ -7926,17 +7926,6 @@ | |||
7926 | <key>Value</key> | 7926 | <key>Value</key> |
7927 | <string>default</string> | 7927 | <string>default</string> |
7928 | </map> | 7928 | </map> |
7929 | <key>TranslateChat</key> | ||
7930 | <map> | ||
7931 | <key>Comment</key> | ||
7932 | <string>Translate incoming chat messages</string> | ||
7933 | <key>Persist</key> | ||
7934 | <integer>1</integer> | ||
7935 | <key>Type</key> | ||
7936 | <string>Boolean</string> | ||
7937 | <key>Value</key> | ||
7938 | <integer>0</integer> | ||
7939 | </map> | ||
7940 | <key>LastFeatureVersion</key> | 7929 | <key>LastFeatureVersion</key> |
7941 | <map> | 7930 | <map> |
7942 | <key>Comment</key> | 7931 | <key>Comment</key> |
diff --git a/linden/indra/newview/installers/windows/meta-impy_installer_template.iss b/linden/indra/newview/installers/windows/meta-impy_installer_template.iss index 833c2f1..6731402 100644 --- a/linden/indra/newview/installers/windows/meta-impy_installer_template.iss +++ b/linden/indra/newview/installers/windows/meta-impy_installer_template.iss | |||
@@ -46,7 +46,7 @@ Name: english; MessagesFile: compiler:Default.isl | |||
46 | 46 | ||
47 | [Tasks] | 47 | [Tasks] |
48 | Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce | 48 | Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce |
49 | Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce | 49 | Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce; OnlyBelowVersion: 0,6.1 |
50 | Name: slurlassociate; Description: Associate meta-impy with SLURLs; GroupDescription: Associations:; Languages: ; Flags: checkedonce | 50 | Name: slurlassociate; Description: Associate meta-impy with SLURLs; GroupDescription: Associations:; Languages: ; Flags: checkedonce |
51 | ; TODO: use scripting for something like this on uninstall: | 51 | ; TODO: use scripting for something like this on uninstall: |
52 | ; Name: uninstallsettings; Description: Remove user settings; Flags: checkablealone; Languages: ; GroupDescription: Uninstall: | 52 | ; Name: uninstallsettings; Description: Remove user settings; Flags: checkablealone; Languages: ; GroupDescription: Uninstall: |
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp index 681cbb2..f1749ac 100644 --- a/linden/indra/newview/llfloaterchat.cpp +++ b/linden/indra/newview/llfloaterchat.cpp | |||
@@ -115,8 +115,6 @@ LLFloaterChat::LLFloaterChat(const LLSD& seed) | |||
115 | LLUICtrlFactory::getInstance()->buildFloater(this,"floater_chat_history.xml",&getFactoryMap(),no_open); | 115 | LLUICtrlFactory::getInstance()->buildFloater(this,"floater_chat_history.xml",&getFactoryMap(),no_open); |
116 | 116 | ||
117 | childSetCommitCallback("show mutes",onClickToggleShowMute,this); //show mutes | 117 | childSetCommitCallback("show mutes",onClickToggleShowMute,this); //show mutes |
118 | childSetCommitCallback("translate chat",onClickToggleTranslateChat,this); | ||
119 | childSetValue("translate chat", gSavedSettings.getBOOL("TranslateChat")); | ||
120 | childSetVisible("Chat History Editor with mute",FALSE); | 118 | childSetVisible("Chat History Editor with mute",FALSE); |
121 | childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this); | 119 | childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this); |
122 | setDefaultBtn("Chat"); | 120 | setDefaultBtn("Chat"); |
@@ -446,26 +444,6 @@ void LLFloaterChat::onClickToggleShowMute(LLUICtrl* caller, void *data) | |||
446 | } | 444 | } |
447 | } | 445 | } |
448 | 446 | ||
449 | // Update the "TranslateChat" pref after "translate chat" checkbox is toggled in | ||
450 | // the "Local Chat" floater. | ||
451 | //static | ||
452 | void LLFloaterChat::onClickToggleTranslateChat(LLUICtrl* caller, void *data) | ||
453 | { | ||
454 | LLFloaterChat* floater = (LLFloaterChat*)data; | ||
455 | |||
456 | BOOL translate_chat = floater->getChild<LLCheckBoxCtrl>("translate chat")->get(); | ||
457 | gSavedSettings.setBOOL("TranslateChat", translate_chat); | ||
458 | } | ||
459 | |||
460 | // Update the "translate chat" checkbox after the "TranslateChat" pref is set in | ||
461 | // some other place (e.g. prefs dialog). | ||
462 | //static | ||
463 | void LLFloaterChat::updateSettings() | ||
464 | { | ||
465 | BOOL translate_chat = gSavedSettings.getBOOL("TranslateChat"); | ||
466 | LLFloaterChat::getInstance(LLSD())->getChild<LLCheckBoxCtrl>("translate chat")->set(translate_chat); | ||
467 | } | ||
468 | |||
469 | BOOL checkStringInText(const std::string &text_line, std::string textToMatch) | 447 | BOOL checkStringInText(const std::string &text_line, std::string textToMatch) |
470 | { | 448 | { |
471 | boost::smatch what; | 449 | boost::smatch what; |
diff --git a/linden/indra/newview/llfloaterchat.h b/linden/indra/newview/llfloaterchat.h index f8683b9..14c2242 100644 --- a/linden/indra/newview/llfloaterchat.h +++ b/linden/indra/newview/llfloaterchat.h | |||
@@ -66,7 +66,6 @@ public: | |||
66 | virtual void onVisibilityChange(BOOL cur_visibility); | 66 | virtual void onVisibilityChange(BOOL cur_visibility); |
67 | virtual void setMinimized(BOOL); | 67 | virtual void setMinimized(BOOL); |
68 | void updateConsoleVisibility(); | 68 | void updateConsoleVisibility(); |
69 | void updateSettings(); | ||
70 | 69 | ||
71 | static void setHistoryCursorAndScrollToEnd(); | 70 | static void setHistoryCursorAndScrollToEnd(); |
72 | 71 | ||
@@ -82,7 +81,6 @@ public: | |||
82 | 81 | ||
83 | static void onClickMute(void *data); | 82 | static void onClickMute(void *data); |
84 | static void onClickToggleShowMute(LLUICtrl* caller, void *data); | 83 | static void onClickToggleShowMute(LLUICtrl* caller, void *data); |
85 | static void onClickToggleTranslateChat(LLUICtrl* caller, void *data); | ||
86 | static void onClickToggleActiveSpeakers(void* userdata); | 84 | static void onClickToggleActiveSpeakers(void* userdata); |
87 | static void chatFromLogFile(LLLogChat::ELogLineType type,std::string line, void* userdata); | 85 | static void chatFromLogFile(LLLogChat::ELogLineType type,std::string line, void* userdata); |
88 | static void loadHistory(); | 86 | static void loadHistory(); |
diff --git a/linden/indra/newview/llfloateropenobject.cpp b/linden/indra/newview/llfloateropenobject.cpp index fc483dd..5f62e87 100644 --- a/linden/indra/newview/llfloateropenobject.cpp +++ b/linden/indra/newview/llfloateropenobject.cpp | |||
@@ -155,29 +155,76 @@ void LLFloaterOpenObject::moveToInventory(bool wear) | |||
155 | { | 155 | { |
156 | parent_category_id = gAgent.getInventoryRootID(); | 156 | parent_category_id = gAgent.getInventoryRootID(); |
157 | } | 157 | } |
158 | |||
159 | LLCategoryCreate* cat_data = new LLCategoryCreate(object_id, wear); | ||
158 | LLUUID category_id = gInventory.createNewCategory(parent_category_id, | 160 | LLUUID category_id = gInventory.createNewCategory(parent_category_id, |
159 | LLAssetType::AT_NONE, | 161 | LLAssetType::AT_NONE, |
160 | name); | 162 | name, |
161 | 163 | callbackCreateInventoryCategory, | |
162 | LLCatAndWear* data = new LLCatAndWear; | 164 | (void*)cat_data); |
163 | data->mCatID = category_id; | 165 | |
164 | data->mWear = wear; | ||
165 | |||
166 | // Copy and/or move the items into the newly created folder. | ||
167 | // Ignore any "you're going to break this item" messages. | ||
168 | BOOL success = move_inv_category_world_to_agent(object_id, category_id, TRUE, | ||
169 | callbackMoveInventory, | ||
170 | (void*)data); | ||
171 | if (!success) | ||
172 | { | ||
173 | delete data; | ||
174 | data = NULL; | ||
175 | 166 | ||
176 | LLNotifications::instance().add("OpenObjectCannotCopy"); | 167 | // If we get a null category ID, we are using a capability in |
168 | // createNewCategory and we will handle the following in the | ||
169 | // callbackCreateInventoryCategory routine. | ||
170 | if (category_id.notNull()) | ||
171 | { | ||
172 | delete cat_data; | ||
173 | |||
174 | LLCatAndWear* data = new LLCatAndWear; | ||
175 | data->mCatID = category_id; | ||
176 | data->mWear = wear; | ||
177 | data->mFolderResponded = false; | ||
178 | |||
179 | // Copy and/or move the items into the newly created folder. | ||
180 | // Ignore any "you're going to break this item" messages. | ||
181 | BOOL success = move_inv_category_world_to_agent(object_id, category_id, TRUE, | ||
182 | callbackMoveInventory, | ||
183 | (void*)data); | ||
184 | if (!success) | ||
185 | { | ||
186 | delete data; | ||
187 | data = NULL; | ||
188 | |||
189 | LLNotifications::instance().add("OpenObjectCannotCopy"); | ||
190 | } | ||
177 | } | 191 | } |
178 | } | 192 | } |
179 | 193 | ||
180 | // static | 194 | // static |
195 | void LLFloaterOpenObject::callbackCreateInventoryCategory(const LLSD& result, void* data) | ||
196 | { | ||
197 | LLCategoryCreate* cat_data = (LLCategoryCreate*)data; | ||
198 | if (result.has("failure") && result["failure"]) | ||
199 | { | ||
200 | delete cat_data; | ||
201 | return; | ||
202 | } | ||
203 | |||
204 | LLUUID category_id = result["folder_id"].asUUID(); | ||
205 | LLCatAndWear* wear_data = new LLCatAndWear; | ||
206 | |||
207 | wear_data->mCatID = category_id; | ||
208 | wear_data->mWear = cat_data->mWear; | ||
209 | wear_data->mFolderResponded = true; | ||
210 | |||
211 | // Copy and/or move the items into the newly created folder. | ||
212 | // Ignore any "you're going to break this item" messages. | ||
213 | |||
214 | BOOL success = move_inv_category_world_to_agent(cat_data->mObjectID, category_id, TRUE, | ||
215 | callbackMoveInventory, | ||
216 | (void*)wear_data); | ||
217 | if (!success) | ||
218 | { | ||
219 | delete wear_data; | ||
220 | wear_data = NULL; | ||
221 | |||
222 | LLNotifications::instance().add("OpenObjectCannotCopy"); | ||
223 | } | ||
224 | delete cat_data; | ||
225 | } | ||
226 | |||
227 | // static | ||
181 | void LLFloaterOpenObject::callbackMoveInventory(S32 result, void* data) | 228 | void LLFloaterOpenObject::callbackMoveInventory(S32 result, void* data) |
182 | { | 229 | { |
183 | LLCatAndWear* cat = (LLCatAndWear*)data; | 230 | LLCatAndWear* cat = (LLCatAndWear*)data; |
diff --git a/linden/indra/newview/llfloateropenobject.h b/linden/indra/newview/llfloateropenobject.h index 27653a5..4b89158 100644 --- a/linden/indra/newview/llfloateropenobject.h +++ b/linden/indra/newview/llfloateropenobject.h | |||
@@ -50,10 +50,24 @@ public: | |||
50 | static void show(); | 50 | static void show(); |
51 | static void dirty(); | 51 | static void dirty(); |
52 | 52 | ||
53 | class LLCategoryCreate | ||
54 | { | ||
55 | public: | ||
56 | LLCategoryCreate(LLUUID object_id, bool wear) | ||
57 | : mObjectID(object_id), | ||
58 | mWear(wear) | ||
59 | {} | ||
60 | |||
61 | public: | ||
62 | LLUUID mObjectID; | ||
63 | bool mWear; | ||
64 | }; | ||
65 | |||
53 | struct LLCatAndWear | 66 | struct LLCatAndWear |
54 | { | 67 | { |
55 | LLUUID mCatID; | 68 | LLUUID mCatID; |
56 | bool mWear; | 69 | bool mWear; |
70 | bool mFolderResponded; | ||
57 | }; | 71 | }; |
58 | 72 | ||
59 | protected: | 73 | protected: |
@@ -67,6 +81,7 @@ protected: | |||
67 | 81 | ||
68 | static void onClickMoveToInventory(void* data); | 82 | static void onClickMoveToInventory(void* data); |
69 | static void onClickMoveAndWear(void* data); | 83 | static void onClickMoveAndWear(void* data); |
84 | static void callbackCreateInventoryCategory(const LLSD& result, void* data); | ||
70 | static void callbackMoveInventory(S32 result, void* data); | 85 | static void callbackMoveInventory(S32 result, void* data); |
71 | static void* createPanelInventory(void* data); | 86 | static void* createPanelInventory(void* data); |
72 | 87 | ||
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp index f71df2d..eb2170a 100644 --- a/linden/indra/newview/llinventorybridge.cpp +++ b/linden/indra/newview/llinventorybridge.cpp | |||
@@ -1610,18 +1610,21 @@ void LLRightClickInventoryFetchDescendentsObserver::done() | |||
1610 | class LLInventoryCopyAndWearObserver : public LLInventoryObserver | 1610 | class LLInventoryCopyAndWearObserver : public LLInventoryObserver |
1611 | { | 1611 | { |
1612 | public: | 1612 | public: |
1613 | LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} | 1613 | LLInventoryCopyAndWearObserver(const LLUUID& cat_id, |
1614 | int count, | ||
1615 | bool folder_added = false) | ||
1616 | : mCatID(cat_id), | ||
1617 | mContentsCount(count), | ||
1618 | mFolderAdded(folder_added) {} | ||
1614 | virtual ~LLInventoryCopyAndWearObserver() {} | 1619 | virtual ~LLInventoryCopyAndWearObserver() {} |
1615 | virtual void changed(U32 mask); | 1620 | virtual void changed(U32 mask); |
1616 | 1621 | ||
1617 | protected: | 1622 | protected: |
1618 | LLUUID mCatID; | 1623 | LLUUID mCatID; |
1619 | int mContentsCount; | 1624 | int mContentsCount; |
1620 | BOOL mFolderAdded; | 1625 | bool mFolderAdded; |
1621 | }; | 1626 | }; |
1622 | 1627 | ||
1623 | |||
1624 | |||
1625 | void LLInventoryCopyAndWearObserver::changed(U32 mask) | 1628 | void LLInventoryCopyAndWearObserver::changed(U32 mask) |
1626 | { | 1629 | { |
1627 | if((mask & (LLInventoryObserver::ADD)) != 0) | 1630 | if((mask & (LLInventoryObserver::ADD)) != 0) |
@@ -2331,13 +2334,16 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response | |||
2331 | 2334 | ||
2332 | if(option == 0 && object) | 2335 | if(option == 0 && object) |
2333 | { | 2336 | { |
2334 | if (cat_and_wear && cat_and_wear->mWear) | 2337 | if (cat_and_wear && cat_and_wear->mWear) // && !cat_and_wear->mFolderResponded) |
2335 | { | 2338 | { |
2336 | InventoryObjectList inventory_objects; | 2339 | InventoryObjectList inventory_objects; |
2337 | object->getInventoryContents(inventory_objects); | 2340 | object->getInventoryContents(inventory_objects); |
2338 | int contents_count = inventory_objects.size()-1; //subtract one for containing folder | 2341 | int contents_count = inventory_objects.size()-1; //subtract one for containing folder |
2339 | 2342 | ||
2340 | LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count); | 2343 | LLInventoryCopyAndWearObserver* inventoryObserver; |
2344 | inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, | ||
2345 | contents_count, | ||
2346 | cat_and_wear->mFolderResponded); | ||
2341 | gInventory.addObserver(inventoryObserver); | 2347 | gInventory.addObserver(inventoryObserver); |
2342 | } | 2348 | } |
2343 | 2349 | ||
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp index 58a2bdc..3f74965 100644 --- a/linden/indra/newview/llinventorymodel.cpp +++ b/linden/indra/newview/llinventorymodel.cpp | |||
@@ -60,6 +60,7 @@ | |||
60 | #include "llvoavatar.h" | 60 | #include "llvoavatar.h" |
61 | #include "llsdutil.h" | 61 | #include "llsdutil.h" |
62 | #include <deque> | 62 | #include <deque> |
63 | #include "llfloateropenobject.h" | ||
63 | 64 | ||
64 | // [RLVa:KB] | 65 | // [RLVa:KB] |
65 | #include "rlvhandler.h" | 66 | #include "rlvhandler.h" |
@@ -396,25 +397,83 @@ LLUUID LLInventoryModel::findCategoryByName(std::string name) | |||
396 | return LLUUID::null; | 397 | return LLUUID::null; |
397 | } | 398 | } |
398 | 399 | ||
400 | class LLCreateInventoryCategoryResponder : public LLHTTPClient::Responder | ||
401 | { | ||
402 | public: | ||
403 | LLCreateInventoryCategoryResponder(LLInventoryModel* model, | ||
404 | void (*callback)(const LLSD&, void*), | ||
405 | void* user_data) | ||
406 | : mModel(model), | ||
407 | mCallback(callback), | ||
408 | mData(user_data) | ||
409 | { | ||
410 | } | ||
411 | |||
412 | virtual void error(U32 status, const std::string& reason) | ||
413 | { | ||
414 | llwarns << "CreateInventoryCategory failed. status = " << status | ||
415 | << ", reason = \"" << reason << "\"" << llendl; | ||
416 | } | ||
417 | |||
418 | virtual void result(const LLSD& content) | ||
419 | { | ||
420 | // Server has created folder. | ||
421 | |||
422 | LLUUID category_id = content["folder_id"].asUUID(); | ||
423 | |||
424 | // Add the category to the internal representation | ||
425 | LLPointer<LLViewerInventoryCategory> cat; | ||
426 | cat = new LLViewerInventoryCategory(category_id, | ||
427 | content["parent_id"].asUUID(), | ||
428 | (LLAssetType::EType)content["type"].asInteger(), | ||
429 | content["name"].asString(), | ||
430 | gAgent.getID()); | ||
431 | cat->setVersion(LLViewerInventoryCategory::VERSION_INITIAL); | ||
432 | cat->setDescendentCount(0); | ||
433 | LLInventoryModel::LLCategoryUpdate update(cat->getParentUUID(), 1); | ||
434 | mModel->accountForUpdate(update); | ||
435 | mModel->updateCategory(cat); | ||
436 | |||
437 | if (mCallback && mData) | ||
438 | { | ||
439 | mCallback(content, mData); | ||
440 | } | ||
441 | } | ||
442 | |||
443 | private: | ||
444 | void (*mCallback)(const LLSD&, void*); | ||
445 | void* mData; | ||
446 | LLInventoryModel* mModel; | ||
447 | }; | ||
448 | |||
399 | // Convenience function to create a new category. You could call | 449 | // Convenience function to create a new category. You could call |
400 | // updateCategory() with a newly generated UUID category, but this | 450 | // updateCategory() with a newly generated UUID category, but this |
401 | // version will take care of details like what the name should be | 451 | // version will take care of details like what the name should be |
402 | // based on preferred type. Returns the UUID of the new category. | 452 | // based on preferred type. Returns the UUID of the new category. |
403 | LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, | 453 | LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, |
404 | LLAssetType::EType preferred_type, | 454 | LLAssetType::EType preferred_type, const std::string& pname, |
405 | const std::string& pname) | 455 | void (*callback)(const LLSD&, void*), |
456 | void* user_data) | ||
406 | { | 457 | { |
458 | llassert_always(NULL != callback); | ||
459 | |||
407 | LLUUID id; | 460 | LLUUID id; |
461 | |||
408 | if(!isInventoryUsable()) | 462 | if(!isInventoryUsable()) |
409 | { | 463 | { |
410 | llwarns << "Inventory is broken." << llendl; | 464 | llwarns << "Inventory is broken." << llendl; |
411 | return id; | 465 | LLSD result; |
412 | } | 466 | result["failure"] = true; |
467 | callback(result, user_data); | ||
468 | } | ||
469 | |||
413 | 470 | ||
414 | if(preferred_type == LLAssetType::AT_SIMSTATE) | 471 | if(preferred_type == LLAssetType::AT_SIMSTATE) |
415 | { | 472 | { |
416 | LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL; | 473 | LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL; |
417 | return id; | 474 | LLSD result; |
475 | result["failure"] = true; | ||
476 | callback(result, user_data); | ||
418 | } | 477 | } |
419 | 478 | ||
420 | id.generate(); | 479 | id.generate(); |
@@ -433,6 +492,54 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, | |||
433 | name.assign(NEW_CATEGORY_NAME); | 492 | name.assign(NEW_CATEGORY_NAME); |
434 | } | 493 | } |
435 | 494 | ||
495 | if (user_data) // callback required for acked message. | ||
496 | { | ||
497 | |||
498 | |||
499 | LLViewerRegion* viewer_region = gAgent.getRegion(); | ||
500 | |||
501 | if (!viewer_region->capabilitiesReceived()) | ||
502 | { | ||
503 | LL_DEBUGS("Inventory") << "We didn't get the region caps yet." << LL_ENDL; | ||
504 | } | ||
505 | |||
506 | std::string url; | ||
507 | if (viewer_region) | ||
508 | { | ||
509 | url = viewer_region->getCapability("CreateInventoryCategory"); | ||
510 | } | ||
511 | |||
512 | if (!url.empty()) | ||
513 | { | ||
514 | LL_DEBUGS("Inventory") << "Using the CreateInventoryCategory capability." << LL_ENDL; | ||
515 | // Let's use the new capability. | ||
516 | LLSD request, body; | ||
517 | body["folder_id"] = id; | ||
518 | body["parent_id"] = parent_id; | ||
519 | body["type"] = (LLSD::Integer) preferred_type; | ||
520 | body["name"] = name; | ||
521 | |||
522 | request["message"] = "CreateInventoryCategory"; | ||
523 | request["payload"] = body; | ||
524 | |||
525 | LLHTTPClient::post(url, body, | ||
526 | new LLCreateInventoryCategoryResponder(this, | ||
527 | callback, | ||
528 | user_data)); | ||
529 | return LLUUID::null; | ||
530 | } | ||
531 | else | ||
532 | { | ||
533 | LL_DEBUGS("Inventory") << "Cap url empty" << LL_ENDL; | ||
534 | } | ||
535 | } | ||
536 | else //NULL == user_data | ||
537 | { | ||
538 | // user_data is a LLCategoryCreate object instantiated in the calling | ||
539 | // function - bug (or low memory - any leaks?). | ||
540 | llwarns << "NULL user_data" << llendl; | ||
541 | } | ||
542 | |||
436 | // Add the category to the internal representation | 543 | // Add the category to the internal representation |
437 | LLPointer<LLViewerInventoryCategory> cat = | 544 | LLPointer<LLViewerInventoryCategory> cat = |
438 | new LLViewerInventoryCategory(id, parent_id, preferred_type, name, gAgent.getID()); | 545 | new LLViewerInventoryCategory(id, parent_id, preferred_type, name, gAgent.getID()); |
@@ -2090,6 +2197,9 @@ bool LLInventoryModel::loadSkeleton(const LLInventoryModel::options_t& options, | |||
2090 | 2197 | ||
2091 | if (cit == temp_cats.end()) | 2198 | if (cit == temp_cats.end()) |
2092 | { | 2199 | { |
2200 | llwarns << "Can't load " << inventory_filename | ||
2201 | << " because cit == temp_cats.end()" | ||
2202 | << llendl; | ||
2093 | continue; // cache corruption?? not sure why this happens -SJB | 2203 | continue; // cache corruption?? not sure why this happens -SJB |
2094 | } | 2204 | } |
2095 | LLViewerInventoryCategory* tcat = *cit; | 2205 | LLViewerInventoryCategory* tcat = *cit; |
@@ -2098,6 +2208,9 @@ bool LLInventoryModel::loadSkeleton(const LLInventoryModel::options_t& options, | |||
2098 | // not sent down in the skeleton. | 2208 | // not sent down in the skeleton. |
2099 | if (cit == not_cached) | 2209 | if (cit == not_cached) |
2100 | { | 2210 | { |
2211 | llwarns << "Can't load " << inventory_filename | ||
2212 | << " because cit == not_cached" | ||
2213 | << llendl; | ||
2101 | continue; | 2214 | continue; |
2102 | } | 2215 | } |
2103 | 2216 | ||
@@ -3173,7 +3286,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**) | |||
3173 | // << titem->getParentUUID() << llendl; | 3286 | // << titem->getParentUUID() << llendl; |
3174 | U32 callback_id; | 3287 | U32 callback_id; |
3175 | msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id); | 3288 | msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id); |
3176 | if(titem->getUUID().notNull()) | 3289 | if (titem->getUUID().notNull()) // && callback_id.notNull()) |
3177 | { | 3290 | { |
3178 | items.push_back(titem); | 3291 | items.push_back(titem); |
3179 | cblist.push_back(InventoryCallbackInfo(callback_id, titem->getUUID())); | 3292 | cblist.push_back(InventoryCallbackInfo(callback_id, titem->getUUID())); |
diff --git a/linden/indra/newview/llinventorymodel.h b/linden/indra/newview/llinventorymodel.h index 7222c60..7788c34 100644 --- a/linden/indra/newview/llinventorymodel.h +++ b/linden/indra/newview/llinventorymodel.h | |||
@@ -308,9 +308,11 @@ public: | |||
308 | // based on preferred type. Returns the UUID of the new | 308 | // based on preferred type. Returns the UUID of the new |
309 | // category. If you want to use the default name based on type, | 309 | // category. If you want to use the default name based on type, |
310 | // pass in a NULL to the 'name parameter. | 310 | // pass in a NULL to the 'name parameter. |
311 | LLUUID createNewCategory(const LLUUID& parent_id, | 311 | LLUUID createNewCategory(const LLUUID& parent_id, |
312 | LLAssetType::EType preferred_type, | 312 | LLAssetType::EType preferred_type, |
313 | const std::string& name); | 313 | const std::string& name, |
314 | void (*callback)(const LLSD&, void*) = NULL, | ||
315 | void* user_data = NULL); | ||
314 | 316 | ||
315 | LLUUID findCategoryByName(std::string name); | 317 | LLUUID findCategoryByName(std::string name); |
316 | 318 | ||
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp index 1cdab46..dd4df42 100644 --- a/linden/indra/newview/llprefschat.cpp +++ b/linden/indra/newview/llprefschat.cpp | |||
@@ -111,8 +111,6 @@ BOOL LLPrefsChatImpl::postBuild() | |||
111 | childSetValue("toggle_channel_control", gSavedSettings.getBOOL("ChatChannelSelect")); | 111 | childSetValue("toggle_channel_control", gSavedSettings.getBOOL("ChatChannelSelect")); |
112 | childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity")); | 112 | childSetValue("console_opacity", gSavedSettings.getF32("ConsoleBackgroundOpacity")); |
113 | childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity")); | 113 | childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity")); |
114 | childSetValue("translate_language_combobox", gSavedSettings.getString("TranslateLanguage")); | ||
115 | childSetValue("translate_chat", gSavedSettings.getBOOL("TranslateChat")); | ||
116 | 114 | ||
117 | mChatChannel = gSavedSettings.getBOOL("ChatChannelSelect"); | 115 | mChatChannel = gSavedSettings.getBOOL("ChatChannelSelect"); |
118 | 116 | ||
@@ -205,8 +203,6 @@ void LLPrefsChatImpl::apply() | |||
205 | gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal()); | 203 | gSavedSettings.setF32("ConsoleBackgroundOpacity", childGetValue("console_opacity").asReal()); |
206 | gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal()); | 204 | gSavedSettings.setF32("ChatBubbleOpacity", childGetValue("bubble_chat_opacity").asReal()); |
207 | 205 | ||
208 | gSavedSettings.setString("TranslateLanguage", childGetValue("translate_language_combobox")); | ||
209 | gSavedSettings.setBOOL("TranslateChat", childGetValue("translate_chat")); | ||
210 | 206 | ||
211 | bool chan_check = childGetValue("toggle_channel_control"); | 207 | bool chan_check = childGetValue("toggle_channel_control"); |
212 | gSavedSettings.setBOOL("ChatChannelSelect", chan_check); | 208 | gSavedSettings.setBOOL("ChatChannelSelect", chan_check); |
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp index 59d766f..016646e 100644 --- a/linden/indra/newview/llviewercontrol.cpp +++ b/linden/indra/newview/llviewercontrol.cpp | |||
@@ -511,19 +511,6 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue) | |||
511 | return true; | 511 | return true; |
512 | } | 512 | } |
513 | 513 | ||
514 | bool handleTranslateChatPrefsChanged(const LLSD& newvalue) | ||
515 | { | ||
516 | LLFloaterChat* floaterp = LLFloaterChat::getInstance(); | ||
517 | |||
518 | if(floaterp) | ||
519 | { | ||
520 | // update "translate chat" pref in "Local Chat" floater | ||
521 | floaterp->updateSettings(); | ||
522 | } | ||
523 | return true; | ||
524 | } | ||
525 | |||
526 | |||
527 | bool handleSliderScrollWheelMultiplierChanged(const LLSD& newvalue) | 514 | bool handleSliderScrollWheelMultiplierChanged(const LLSD& newvalue) |
528 | { | 515 | { |
529 | LLSlider::setScrollWheelMultiplier( newvalue.asInteger() ); | 516 | LLSlider::setScrollWheelMultiplier( newvalue.asInteger() ); |
@@ -675,7 +662,6 @@ void settings_setup_listeners() | |||
675 | gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); | 662 | gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); |
676 | gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); | 663 | gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); |
677 | gSavedSettings.getControl("SliderScrollWheelMultiplier")->getSignal()->connect(boost::bind(&handleSliderScrollWheelMultiplierChanged, _1)); | 664 | gSavedSettings.getControl("SliderScrollWheelMultiplier")->getSignal()->connect(boost::bind(&handleSliderScrollWheelMultiplierChanged, _1)); |
678 | gSavedSettings.getControl("TranslateChat")->getSignal()->connect(boost::bind(&handleTranslateChatPrefsChanged, _1)); | ||
679 | } | 665 | } |
680 | 666 | ||
681 | template <> eControlType get_control_type<U32>(const U32& in, LLSD& out) | 667 | template <> eControlType get_control_type<U32>(const U32& in, LLSD& out) |
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index 858137a..9a0cf47 100755 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp | |||
@@ -139,7 +139,6 @@ | |||
139 | #include "llfloaterworldmap.h" | 139 | #include "llfloaterworldmap.h" |
140 | #include "llviewerdisplay.h" | 140 | #include "llviewerdisplay.h" |
141 | #include "llkeythrottle.h" | 141 | #include "llkeythrottle.h" |
142 | #include "lltranslate.h" | ||
143 | 142 | ||
144 | #include "panelradarentry.h" | 143 | #include "panelradarentry.h" |
145 | 144 | ||
@@ -2930,52 +2929,6 @@ void process_decline_callingcard(LLMessageSystem* msg, void**) | |||
2930 | LLNotifications::instance().add("CallingCardDeclined"); | 2929 | LLNotifications::instance().add("CallingCardDeclined"); |
2931 | } | 2930 | } |
2932 | 2931 | ||
2933 | class ChatTranslationReceiver : public LLTranslate::TranslationReceiver | ||
2934 | { | ||
2935 | public : | ||
2936 | ChatTranslationReceiver(const std::string &fromLang, const std::string &toLang, const LLChat &chat, | ||
2937 | const std::string &orig_mesg, const BOOL history) | ||
2938 | : LLTranslate::TranslationReceiver(fromLang, toLang), | ||
2939 | m_chat(chat), | ||
2940 | m_origMesg(orig_mesg), | ||
2941 | m_history(history) | ||
2942 | { | ||
2943 | } | ||
2944 | |||
2945 | static boost::intrusive_ptr<ChatTranslationReceiver> build(const std::string &fromLang, const std::string &toLang, const LLChat &chat, const std::string &orig_mesg, const BOOL history) | ||
2946 | { | ||
2947 | return boost::intrusive_ptr<ChatTranslationReceiver>(new ChatTranslationReceiver(fromLang, toLang, chat, orig_mesg, history)); | ||
2948 | } | ||
2949 | |||
2950 | protected: | ||
2951 | void handleResponse(const std::string &translation, const std::string &detected_language) | ||
2952 | { | ||
2953 | // filter out non-interesting responeses | ||
2954 | if ( !translation.empty() | ||
2955 | && (m_toLang != detected_language) | ||
2956 | && (LLStringUtil::compareInsensitive(translation, m_origMesg) != 0) ) | ||
2957 | { | ||
2958 | m_chat.mText += " (" + translation + ")"; | ||
2959 | } | ||
2960 | |||
2961 | add_floater_chat(m_chat, m_history); | ||
2962 | } | ||
2963 | |||
2964 | void handleFailure() | ||
2965 | { | ||
2966 | LLTranslate::TranslationReceiver::handleFailure(); | ||
2967 | |||
2968 | m_chat.mText += " (?)"; | ||
2969 | |||
2970 | add_floater_chat(m_chat, m_history); | ||
2971 | } | ||
2972 | |||
2973 | private: | ||
2974 | LLChat m_chat; | ||
2975 | std::string m_origMesg; | ||
2976 | const BOOL m_history; | ||
2977 | }; | ||
2978 | |||
2979 | void add_floater_chat(const LLChat &chat, const BOOL history) | 2932 | void add_floater_chat(const LLChat &chat, const BOOL history) |
2980 | { | 2933 | { |
2981 | if (history) | 2934 | if (history) |
@@ -2990,26 +2943,6 @@ void add_floater_chat(const LLChat &chat, const BOOL history) | |||
2990 | } | 2943 | } |
2991 | } | 2944 | } |
2992 | 2945 | ||
2993 | void check_translate_chat(const std::string &mesg, const LLChat &chat, const BOOL history) | ||
2994 | { | ||
2995 | const bool translate = gSavedSettings.getBOOL("TranslateChat"); | ||
2996 | |||
2997 | if (translate && chat.mSourceType != CHAT_SOURCE_SYSTEM) | ||
2998 | { | ||
2999 | // fromLang hardcoded to "" (autodetection) pending implementation of | ||
3000 | // SVC-4879 | ||
3001 | const std::string &fromLang = ""; | ||
3002 | const std::string &toLang = LLTranslate::getTranslateLanguage(); | ||
3003 | |||
3004 | LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(fromLang, toLang, chat, mesg, history); | ||
3005 | LLTranslate::translateMessage(result, fromLang, toLang, mesg); | ||
3006 | } | ||
3007 | else | ||
3008 | { | ||
3009 | add_floater_chat(chat, history); | ||
3010 | } | ||
3011 | } | ||
3012 | |||
3013 | void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | 2946 | void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) |
3014 | { | 2947 | { |
3015 | LLChat chat; | 2948 | LLChat chat; |
@@ -3429,12 +3362,12 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) | |||
3429 | && (is_god || !is_busy || is_owned_by_me)) | 3362 | && (is_god || !is_busy || is_owned_by_me)) |
3430 | { | 3363 | { |
3431 | // show on screen and add to history | 3364 | // show on screen and add to history |
3432 | check_translate_chat(mesg, chat, FALSE); | 3365 | add_floater_chat(chat, FALSE); |
3433 | } | 3366 | } |
3434 | else | 3367 | else |
3435 | { | 3368 | { |
3436 | // just add to chat history | 3369 | // just add to chat history |
3437 | check_translate_chat(mesg, chat, TRUE); | 3370 | add_floater_chat(chat, TRUE); |
3438 | } | 3371 | } |
3439 | } | 3372 | } |
3440 | } | 3373 | } |
diff --git a/linden/indra/newview/llviewermessage.h b/linden/indra/newview/llviewermessage.h index 11a3554..0201ce4 100644 --- a/linden/indra/newview/llviewermessage.h +++ b/linden/indra/newview/llviewermessage.h | |||
@@ -76,7 +76,6 @@ void process_script_question(LLMessageSystem *msg, void **user_data); | |||
76 | void process_chat_from_simulator(LLMessageSystem *mesgsys, void **user_data); | 76 | void process_chat_from_simulator(LLMessageSystem *mesgsys, void **user_data); |
77 | 77 | ||
78 | void add_floater_chat(const LLChat &chat, const BOOL history); | 78 | void add_floater_chat(const LLChat &chat, const BOOL history); |
79 | void check_translate_chat(const std::string &mesg, const LLChat &chat, const BOOL history); | ||
80 | 79 | ||
81 | //void process_agent_to_new_region(LLMessageSystem *mesgsys, void **user_data); | 80 | //void process_agent_to_new_region(LLMessageSystem *mesgsys, void **user_data); |
82 | void send_agent_update(BOOL force_send, BOOL send_reliable = FALSE); | 81 | void send_agent_update(BOOL force_send, BOOL send_reliable = FALSE); |
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp index a43e0c0..2fafe30 100644 --- a/linden/indra/newview/llviewerregion.cpp +++ b/linden/indra/newview/llviewerregion.cpp | |||
@@ -1428,6 +1428,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) | |||
1428 | LLSD capabilityNames = LLSD::emptyArray(); | 1428 | LLSD capabilityNames = LLSD::emptyArray(); |
1429 | capabilityNames.append("ChatSessionRequest"); | 1429 | capabilityNames.append("ChatSessionRequest"); |
1430 | capabilityNames.append("CopyInventoryFromNotecard"); | 1430 | capabilityNames.append("CopyInventoryFromNotecard"); |
1431 | capabilityNames.append("CreateInventoryCategory"); | ||
1431 | // Aurora settings -- MC | 1432 | // Aurora settings -- MC |
1432 | capabilityNames.append("DispatchOpenRegionSettings"); | 1433 | capabilityNames.append("DispatchOpenRegionSettings"); |
1433 | capabilityNames.append("DispatchRegionInfo"); | 1434 | capabilityNames.append("DispatchRegionInfo"); |
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index a49dde6..f9d38b1 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp | |||
@@ -2920,9 +2920,9 @@ BOOL LLViewerWindow::handlePerFrameHover() | |||
2920 | 2920 | ||
2921 | // Always update console | 2921 | // Always update console |
2922 | LLRect console_rect = getChatConsoleRect(); | 2922 | LLRect console_rect = getChatConsoleRect(); |
2923 | // Add a magic number so the pre login console does not cover the login panel. | 2923 | // Add a magic number so the pre login console does not cover the login panel. |
2924 | // TODO: Would be nice to only do this for the pre login window. | 2924 | S32 magic_num = (LLStartUp::isLoggedIn()) ? 20 : 0; |
2925 | console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad() + 20; | 2925 | console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad() + magic_num; |
2926 | gConsole->reshape(console_rect.getWidth(), console_rect.getHeight()); | 2926 | gConsole->reshape(console_rect.getWidth(), console_rect.getHeight()); |
2927 | gConsole->setRect(console_rect); | 2927 | gConsole->setRect(console_rect); |
2928 | } | 2928 | } |
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp index 4a5fb48..559bc31 100644 --- a/linden/indra/newview/llvoiceclient.cpp +++ b/linden/indra/newview/llvoiceclient.cpp | |||
@@ -1054,6 +1054,11 @@ void LLVoiceClientCapResponder::result(const LLSD& content) | |||
1054 | 1054 | ||
1055 | gVoiceClient->setSpatialChannel(uri, credentials, mResponseID); | 1055 | gVoiceClient->setSpatialChannel(uri, credentials, mResponseID); |
1056 | } | 1056 | } |
1057 | else | ||
1058 | { | ||
1059 | llwarns << "ParcelVoiceInfoRequest response malformed, disabling voice." << llendl; | ||
1060 | gVoiceClient->close(); | ||
1061 | } | ||
1057 | } | 1062 | } |
1058 | 1063 | ||
1059 | 1064 | ||
@@ -1774,11 +1779,13 @@ void LLVoiceClient::close() | |||
1774 | { | 1779 | { |
1775 | LL_DEBUGS("VoiceSession") << "Cancel Session: LLVoiceClient::close() called." | 1780 | LL_DEBUGS("VoiceSession") << "Cancel Session: LLVoiceClient::close() called." |
1776 | << llendl; | 1781 | << llendl; |
1782 | mAccountActive = false; | ||
1777 | setState(stateDisableCleanup); | 1783 | setState(stateDisableCleanup); |
1778 | } | 1784 | } |
1779 | 1785 | ||
1780 | void LLVoiceClient::start() | 1786 | void LLVoiceClient::start() |
1781 | { | 1787 | { |
1788 | mAccountActive = true; | ||
1782 | setState(stateStart); | 1789 | setState(stateStart); |
1783 | } | 1790 | } |
1784 | 1791 | ||
@@ -7219,6 +7226,11 @@ class LLViewerParcelVoiceInfo : public LLHTTPNode | |||
7219 | gVoiceClient->setPIRCapResponseID(response_id); | 7226 | gVoiceClient->setPIRCapResponseID(response_id); |
7220 | gVoiceClient->setSpatialChannel(uri, credentials, response_id); | 7227 | gVoiceClient->setSpatialChannel(uri, credentials, response_id); |
7221 | } | 7228 | } |
7229 | else | ||
7230 | { | ||
7231 | llwarns << "ParcelVoiceInfoRequest response malformed, disabling voice." << llendl; | ||
7232 | gVoiceClient->close(); | ||
7233 | } | ||
7222 | } | 7234 | } |
7223 | } | 7235 | } |
7224 | }; | 7236 | }; |
diff --git a/linden/indra/newview/llwldaycycle.cpp b/linden/indra/newview/llwldaycycle.cpp index 1d17c60..07ac2a4 100644 --- a/linden/indra/newview/llwldaycycle.cpp +++ b/linden/indra/newview/llwldaycycle.cpp | |||
@@ -51,9 +51,6 @@ LLWLDayCycle::~LLWLDayCycle() | |||
51 | 51 | ||
52 | void LLWLDayCycle::loadDayCycle(const std::string & fileName) | 52 | void LLWLDayCycle::loadDayCycle(const std::string & fileName) |
53 | { | 53 | { |
54 | // clear the first few things | ||
55 | mTimeMap.clear(); | ||
56 | |||
57 | // now load the file | 54 | // now load the file |
58 | std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, | 55 | std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, |
59 | "windlight/days", fileName)); | 56 | "windlight/days", fileName)); |
@@ -62,6 +59,9 @@ void LLWLDayCycle::loadDayCycle(const std::string & fileName) | |||
62 | llifstream day_cycle_xml(pathName); | 59 | llifstream day_cycle_xml(pathName); |
63 | if (day_cycle_xml.is_open()) | 60 | if (day_cycle_xml.is_open()) |
64 | { | 61 | { |
62 | // clear the first few things | ||
63 | mTimeMap.clear(); | ||
64 | |||
65 | // load and parse it | 65 | // load and parse it |
66 | LLSD day_data(LLSD::emptyArray()); | 66 | LLSD day_data(LLSD::emptyArray()); |
67 | LLPointer<LLSDParser> parser = new LLSDXMLParser(); | 67 | LLPointer<LLSDParser> parser = new LLSDXMLParser(); |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml index e83a930..0d80a21 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml | |||
@@ -75,12 +75,9 @@ | |||
75 | Gestures | 75 | Gestures |
76 | </combo_item> | 76 | </combo_item> |
77 | </combo_box> | 77 | </combo_box> |
78 | <check_box bottom_delta="7" enabled="true" follows="left|top" font="SansSerifSmall" | 78 | <check_box bottom_delta="0" enabled="true" follows="left|top" font="SansSerifSmall" |
79 | height="20" initial_value="false" label="Show muted text" left_delta="125" | 79 | height="20" initial_value="false" label="Show muted text" left_delta="125" |
80 | name="show mutes" radio_style="false" width="116" /> | 80 | name="show mutes" radio_style="false" width="116" /> |
81 | <check_box bottom_delta="-15" enabled="true" follows="left|top" font="SansSerifSmall" | ||
82 | height="20" initial_value="false" label="Translate chat (powered by Google)" left_delta="0" | ||
83 | name="translate chat" radio_style="false" width="100" /> | ||
84 | <button name="toggle_active_speakers_btn" | 81 | <button name="toggle_active_speakers_btn" |
85 | label="<<" label_selected=">>" follows="right|top" | 82 | label="<<" label_selected=">>" follows="right|top" |
86 | bottom_delta="0" left="262" right="305" height="20" | 83 | bottom_delta="0" left="262" right="305" height="20" |
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml index cf947ee..566fdad 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_chat.xml | |||
@@ -192,10 +192,10 @@ USE left="270" FOR TABBING OPTIONS | |||
192 | </panel> | 192 | </panel> |
193 | 193 | ||
194 | 194 | ||
195 | <!-- SPELL CHECKING AND TRANSLATE PANEL --> | 195 | <!-- SPELL CHECKING PANEL --> |
196 | 196 | ||
197 | 197 | ||
198 | <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Spell Checking & Translate" | 198 | <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Spell Checking" |
199 | left="1" mouse_opaque="true" name="spell_check_tab" width="418"> | 199 | left="1" mouse_opaque="true" name="spell_check_tab" width="418"> |
200 | 200 | ||
201 | 201 | ||
@@ -252,89 +252,7 @@ USE left="270" FOR TABBING OPTIONS | |||
252 | <button name="ac_button" label="AutoCorrect..." halign="center" | 252 | <button name="ac_button" label="AutoCorrect..." halign="center" |
253 | tool_tip="Modify the AutoCorrect word list and settings" left="50" | 253 | tool_tip="Modify the AutoCorrect word list and settings" left="50" |
254 | bottom_delta="-40" width="160" height="20" font="SansSerifSmall" follows="left|top"/> | 254 | bottom_delta="-40" width="160" height="20" font="SansSerifSmall" follows="left|top"/> |
255 | 255 | ||
256 | |||
257 | <view_border bevel_style="none" border_thickness="1" bottom_delta="-15" follows="left|top" | ||
258 | height="1" left="55" name="border" width="380" /> | ||
259 | |||
260 | |||
261 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
262 | bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top" font-style="BOLD|SHADOW" | ||
263 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="20" | ||
264 | mouse_opaque="false" name="text_translate" v_pad="0" width="128"> | ||
265 | Translate Chat: | ||
266 | </text> | ||
267 | <check_box bottom_delta="-25" control_name="TranslateChat" enabled="true" follows="left|top" | ||
268 | font="SansSerifSmall" height="16" initial_value="false" | ||
269 | label="Use machine translation while chatting (powered by Google)" left_delta="30" mouse_opaque="true" | ||
270 | name="translate_chat" radio_style="false" width="237" /> | ||
271 | |||
272 | <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
273 | bottom_delta="-16" drop_shadow_visible="true" enabled="true" follows="left|top" | ||
274 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left_delta="0" | ||
275 | mouse_opaque="false" name="text_translate_chat" v_pad="0" width="160"> | ||
276 | Translate into this language: | ||
277 | </text> | ||
278 | |||
279 | <combo_box allow_text_entry="false" bottom_delta="-5" enabled="true" | ||
280 | follows="left|top" height="16" left="270" max_chars="135" | ||
281 | mouse_opaque="true" name="translate_language_combobox" width="160"> | ||
282 | <combo_item type="string" length="1" enabled="true" name="System Default Language" value="default"> | ||
283 | System Default | ||
284 | </combo_item> | ||
285 | <combo_item type="string" length="1" enabled="true" name="English" value="en"> | ||
286 | English | ||
287 | </combo_item> | ||
288 | |||
289 | <!-- After "System Default" and "English", please keep the rest of these combo_items in alphabetical order by the first character in the string. --> | ||
290 | |||
291 | <combo_item type="string" length="1" enabled="true" name="Danish" value="da"> | ||
292 | Dansk (Danish) | ||
293 | </combo_item> | ||
294 | <combo_item type="string" length="1" enabled="true" name="Deutsch(German)" value="de"> | ||
295 | Deutsch (German) | ||
296 | </combo_item> | ||
297 | <combo_item type="string" length="1" enabled="true" name="Spanish" value="es"> | ||
298 | Español (Spanish) | ||
299 | </combo_item> | ||
300 | <combo_item type="string" length="1" enabled="true" name="French" value="fr"> | ||
301 | Français (French) | ||
302 | </combo_item> | ||
303 | <combo_item type="string" length="1" enabled="true" name="Italian" value="it"> | ||
304 | Italiano (Italian) | ||
305 | </combo_item> | ||
306 | <combo_item type="string" length="1" enabled="true" name="Hungarian" value="hu"> | ||
307 | Magyar (Hungarian) | ||
308 | </combo_item> | ||
309 | <combo_item type="string" length="1" enabled="true" name="Dutch" value="nl"> | ||
310 | Nederlands (Dutch) | ||
311 | </combo_item> | ||
312 | <combo_item type="string" length="1" enabled="true" name="Polish" value="pl"> | ||
313 | Polski (Polish) | ||
314 | </combo_item> | ||
315 | <combo_item type="string" length="1" enabled="true" name="Portugese" value="pt"> | ||
316 | Portugués (Portuguese) | ||
317 | </combo_item> | ||
318 | <combo_item type="string" length="1" enabled="true" name="Russian" value="ru"> | ||
319 | Русский (Russian) | ||
320 | </combo_item> | ||
321 | <combo_item type="string" length="1" enabled="true" name="Turkish" value="tr"> | ||
322 | Türkçe (Turkish) | ||
323 | </combo_item> | ||
324 | <combo_item type="string" length="1" enabled="true" name="Ukrainian" value="uk"> | ||
325 | Українська (Ukrainian) | ||
326 | </combo_item> | ||
327 | <combo_item type="string" length="1" enabled="true" name="Chinese" value="zh"> | ||
328 | 中文 (简体) (Chinese) | ||
329 | </combo_item> | ||
330 | <combo_item type="string" length="1" enabled="true" name="(Japanese)" value="ja"> | ||
331 | 日本語 (Japanese) | ||
332 | </combo_item> | ||
333 | <combo_item type="string" length="1" enabled="true" name="(Korean)" value="ko"> | ||
334 | 한국어 (Korean) | ||
335 | </combo_item> | ||
336 | </combo_box> | ||
337 | |||
338 | 256 | ||
339 | <button bottom="-20" follows="left|top" font="SansSerifSmall" height="18" label="?" | 257 | <button bottom="-20" follows="left|top" font="SansSerifSmall" height="18" label="?" |
340 | name="EmeraldHelp_SpellCheck" tool_tip="Click here for help regarding the settings in this page." | 258 | name="EmeraldHelp_SpellCheck" tool_tip="Click here for help regarding the settings in this page." |
diff --git a/linden/scripts/install.py b/linden/scripts/install.py index c69644b..a7c0a48 100755 --- a/linden/scripts/install.py +++ b/linden/scripts/install.py | |||
@@ -36,6 +36,7 @@ $/LicenseInfo$ | |||
36 | import sys | 36 | import sys |
37 | import os.path | 37 | import os.path |
38 | import re | 38 | import re |
39 | import string | ||
39 | 40 | ||
40 | # Look for indra/lib/python in all possible parent directories ... | 41 | # Look for indra/lib/python in all possible parent directories ... |
41 | # This is an improvement over the setup-path.py method used previously: | 42 | # This is an improvement over the setup-path.py method used previously: |
@@ -106,7 +107,7 @@ class InstallFile(object): | |||
106 | 107 | ||
107 | def _is_md5sum_match(self): | 108 | def _is_md5sum_match(self): |
108 | hasher = md5(file(self.filename, 'rb').read()) | 109 | hasher = md5(file(self.filename, 'rb').read()) |
109 | if hasher.hexdigest() == self.md5sum: | 110 | if string.lower(hasher.hexdigest()) == string.lower(self.md5sum): |
110 | return True | 111 | return True |
111 | return False | 112 | return False |
112 | 113 | ||