diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 04ba473e4b..3686e35d8a 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -2743,6 +2743,14 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
}
}
break;
+ default:
+ {
+ if (gDebugWindowProc)
+ {
+ LL_INFOS("Window") << "Unhandled windows message code: " << U32(u_msg) << LL_ENDL;
+ }
+ }
+ break;
}
window_imp->mCallbacks->handlePauseWatchdog(window_imp);
diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h
index 2691a91d3a..1f4fa0a69f 100644
--- a/indra/newview/llfilepicker.h
+++ b/indra/newview/llfilepicker.h
@@ -206,6 +206,4 @@ public:
~LLFilePicker();
};
-const std::string upload_pick(void* data);
-
#endif
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 8bfaa488f9..5faefbcf64 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1631,18 +1631,22 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
//static
void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id, BOOL main_panel, BOOL take_keyboard_focus, BOOL reset_filter)
{
- LLInventoryPanel *active_panel;
+ // Use correct inventory floater
+ //LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory");
+ //sidepanel_inventory->showInventoryPanel();
+ //
+
bool in_inbox = (gInventory.isObjectDescendentOf(obj_id, gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX)));
bool show_inbox = gSavedSettings.getBOOL("FSShowInboxFolder"); // Optional hiding of Received Items folder aka Inbox
// FIRE-22167: Make "Show in Main View" work properly
//if (main_panel && !in_inbox)
//{
- // LLFloaterSidePanelContainer::getPanel("inventory")->selectAllItemsPanel();
+ // sidepanel_inventory->selectAllItemsPanel();
//}
//
- active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
+ LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
if (active_panel)
{
@@ -1658,7 +1662,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
if (in_inbox && !show_inbox)
//
{
- LLSidepanelInventory * sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory");
+ LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory"); // Use correct inventory floater
LLInventoryPanel * inventory_panel = NULL;
sidepanel_inventory->openInbox();
inventory_panel = sidepanel_inventory->getInboxPanel();
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 8109f1da84..08cba5c71c 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -49,6 +49,7 @@
#include "llui.h"
#include "llviewercontrol.h" // For user-defined default save format for textures
#include "llviewerinventory.h"
+#include "llviewermenufile.h" // LLFilePickerReplyThread
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "lluictrlfactory.h"
@@ -398,12 +399,9 @@ void LLPreviewTexture::saveAs()
void LLPreviewTexture::saveAs(EFileformatType format)
{
- if( mLoadingFullImage )
+ if (mLoadingFullImage)
return;
- LLFilePicker& file_picker = LLFilePicker::instance();
- const LLInventoryItem* item = getItem() ;
-
loaded_callback_func callback;
LLFilePicker::ESaveFilter saveFilter;
@@ -420,15 +418,21 @@ void LLPreviewTexture::saveAs(EFileformatType format)
break;
}
- // FIRE-14111: File extension missing on Linux when saving a texture
- //if( !file_picker.getSaveFile( saveFilter, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) )
- if( !file_picker.getSaveFile( saveFilter, item ? checkFileExtension(LLDir::getScrubbedFileName(item->getName()), format) : LLStringUtil::null) )
+ // Undo MAINT-2897 and use our own texture format selection
+ //std::string filename = getItem() ? LLDir::getScrubbedFileName(getItem()->getName()) : LLStringUtil::null;
+ //(new LLFilePickerReplyThread(boost::bind(&LLPreviewTexture::saveTextureToFile, this, _1), LLFilePicker::FFSAVE_TGAPNG, filename))->getFile();
+ std::string filename = getItem() ? checkFileExtension(LLDir::getScrubbedFileName(getItem()->getName()), format) : LLStringUtil::null;
+ (new LLFilePickerReplyThread(boost::bind(&LLPreviewTexture::saveTextureToFile, this, _1, format, callback), saveFilter, filename))->getFile();
//
- {
- // User canceled or we failed to acquire save file.
- return;
- }
- if(mPreviewToSave)
+}
+
+// Undo MAINT-2897 and use our own texture format selection
+//void LLPreviewTexture::saveTextureToFile(const std::vector& filenames)
+void LLPreviewTexture::saveTextureToFile(const std::vector& filenames, EFileformatType format, loaded_callback_func callback)
+//
+{
+ const LLInventoryItem* item = getItem();
+ if (item && mPreviewToSave)
{
mPreviewToSave = FALSE;
LLFloaterReg::showTypedInstance("preview_texture", item->getUUID());
@@ -436,15 +440,18 @@ void LLPreviewTexture::saveAs(EFileformatType format)
// remember the user-approved/edited file name.
// FIRE-14111: File extension missing on Linux when saving a texture
- //mSaveFileName = file_picker.getFirstFile();
- mSaveFileName = checkFileExtension(file_picker.getFirstFile(), format);
+ //mSaveFileName = filenames[0];
+ mSaveFileName = checkFileExtension(filenames[0], format);
//
mLoadingFullImage = TRUE;
getWindow()->incBusyCount();
- mImage->forceToSaveRawImage(0) ;//re-fetch the raw image if the old one is removed.
- mImage->setLoadedCallback( callback,
- 0, TRUE, FALSE, new LLUUID( mItemUUID ), &mCallbackTextureList );
+ mImage->forceToSaveRawImage(0);//re-fetch the raw image if the old one is removed.
+ // Undo MAINT-2897 and use our own texture format selection
+ //mImage->setLoadedCallback(LLPreviewTexture::onFileLoadedForSave,
+ mImage->setLoadedCallback(callback,
+ //
+ 0, TRUE, FALSE, new LLUUID(mItemUUID), &mCallbackTextureList);
}
// virtual
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index b60bcf92f4..2c8341f322 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -80,6 +80,11 @@ public:
BOOL final,
void* userdata );
void openToSave();
+
+ // Undo MAINT-2897 and use our own texture format selection
+ //void saveTextureToFile(const std::vector& filenames);
+ void saveTextureToFile(const std::vector& filenames, EFileformatType format, loaded_callback_func callback);
+ //
static void onSaveAsBtn(LLUICtrl* ctrl, void* data);
diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp
index 0428c83e6c..b727d8ef3e 100644
--- a/indra/newview/llviewerassetupload.cpp
+++ b/indra/newview/llviewerassetupload.cpp
@@ -55,6 +55,9 @@
#include "llviewernetwork.h"
#include "llviewercontrol.h"
+#include "llfloatersidepanelcontainer.h"
+#include "llsidepanelinventory.h"
+
void dialog_refresh_all();
static const U32 LL_ASSET_UPLOAD_TIMEOUT_SEC = 60;
@@ -802,14 +805,20 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti
// Show the preview panel for textures and sounds to let
// user know that the image (or snapshot) arrived intact.
LLInventoryPanel* panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
- if (panel)
+ // Use correct inventory floater for showing the upload
+ if (!panel)
{
- panel->setSelection(serverInventoryItem, TAKE_FOCUS_NO);
- }
- else
- {
- LLInventoryPanel::openInventoryPanelAndSetSelection(TRUE, serverInventoryItem, TRUE, TAKE_FOCUS_NO, TRUE);
+ // Having no active panel here could either mean the primary inventory floater
+ // is the most-active inventory, but showing the object properties panel, or
+ // no inventory floater is open. In that case we make sure to show the inventory
+ // panel on the primary inventory floater. We don't have to deal with selecting
+ // the correct floater because only the primary inventory floater can show
+ // object properties.
+ LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory");
+ sidepanel_inventory->showInventoryPanel();
}
+ //
+ LLInventoryPanel::openInventoryPanelAndSetSelection(TRUE, serverInventoryItem, TRUE, TAKE_FOCUS_NO, (panel == NULL));
// restore keyboard focus
gFocusMgr.setKeyboardFocus(focus);
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 11a6496ad1..ef1e0cf42c 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -440,125 +440,6 @@ const void upload_bulk(const std::vector& filenames, LLFilePicker::
}
}
-
-#if 0
-/**
- char* upload_pick(void* data)
-
- If applicable, brings up a file chooser in which the user selects a file
- to upload for a particular task. If the file is valid for the given action,
- returns the string to the full path filename, else returns NULL.
- Data is the load filter for the type of file as defined in LLFilePicker.
-**/
-const std::string upload_pick(void* data)
-{
- if( gAgentCamera.cameraMouselook() )
- {
- gAgentCamera.changeCameraToDefault();
- // This doesn't seem necessary. JC
- // display();
- }
-
- LLFilePicker::ELoadFilter type;
- if(data)
- {
- type = (LLFilePicker::ELoadFilter)((intptr_t)data);
- }
- else
- {
- type = LLFilePicker::FFLOAD_ALL;
- }
-
- LLFilePicker& picker = LLFilePicker::instance();
- if (!picker.getOpenFile(type))
- {
- LL_INFOS() << "Couldn't import objects from file" << LL_ENDL;
- return std::string();
- }
-
-
- const std::string& filename = picker.getFirstFile();
- std::string ext = gDirUtilp->getExtension(filename);
-
- //strincmp doesn't like NULL pointers
- if (ext.empty())
- {
- std::string short_name = gDirUtilp->getBaseFileName(filename);
-
- // No extension
- LLSD args;
- args["FILE"] = short_name;
- LLNotificationsUtil::add("NoFileExtension", args);
- return std::string();
- }
- else
- {
- //so there is an extension
- //loop over the valid extensions and compare to see
- //if the extension is valid
-
- //now grab the set of valid file extensions
- std::string valid_extensions = build_extensions_string(type);
-
- BOOL ext_valid = FALSE;
-
- typedef boost::tokenizer > tokenizer;
- boost::char_separator sep(" ");
- tokenizer tokens(valid_extensions, sep);
- tokenizer::iterator token_iter;
-
- //now loop over all valid file extensions
- //and compare them to the extension of the file
- //to be uploaded
- for( token_iter = tokens.begin();
- token_iter != tokens.end() && ext_valid != TRUE;
- ++token_iter)
- {
- const std::string& cur_token = *token_iter;
-
- if (cur_token == ext || cur_token == "*.*")
- {
- //valid extension
- //or the acceptable extension is any
- ext_valid = TRUE;
- }
- }//end for (loop over all tokens)
-
- if (ext_valid == FALSE)
- {
- //should only get here if the extension exists
- //but is invalid
- LLSD args;
- args["EXTENSION"] = ext;
- args["VALIDS"] = valid_extensions;
- LLNotificationsUtil::add("InvalidFileExtension", args);
- return std::string();
- }
- }//end else (non-null extension)
-
- //valid file extension
-
- //now we check to see
- //if the file is actually a valid image/sound/etc.
- if (type == LLFilePicker::FFLOAD_WAV)
- {
- // pre-qualify wavs to make sure the format is acceptable
- std::string error_msg;
- if (check_for_invalid_wav_formats(filename,error_msg))
- {
- LL_INFOS() << error_msg << ": " << filename << LL_ENDL;
- LLSD args;
- args["FILE"] = filename;
- LLNotificationsUtil::add( error_msg, args );
- return std::string();
- }
- }//end if a wave/sound file
-
-
- return filename;
-}
-#endif
-
class LLFileUploadImage : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 59b95ec447..0e1b2d00b3 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2418,6 +2418,15 @@ void LLViewerWindow::shutdownViews()
RecordToChatConsole::getInstance()->stopRecorder();
LL_INFOS() << "Warning logger is cleaned." << LL_ENDL ;
+ gFocusMgr.unlockFocus();
+ gFocusMgr.setMouseCapture(NULL);
+ gFocusMgr.setKeyboardFocus(NULL);
+ gFocusMgr.setTopCtrl(NULL);
+ if (mWindow)
+ {
+ mWindow->allowLanguageTextInput(NULL, FALSE);
+ }
+
delete mDebugText;
mDebugText = NULL;
@@ -2450,7 +2459,11 @@ void LLViewerWindow::shutdownViews()
view_listener_t::cleanup();
LL_INFOS() << "view listeners destroyed." << LL_ENDL ;
-
+
+ // Clean up pointers that are going to be invalid. (todo: check sMenuContainer)
+ mProgressView = NULL;
+ mPopupView = NULL;
+
// Delete all child views.
delete mRootView;
mRootView = NULL;
diff --git a/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml
index 703f568dab..9d45eb9045 100644
--- a/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
index acb41eed5d..5becf2565d 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
@@ -253,7 +253,7 @@
follows="left|top"
height="16"
layout="topleft"
- name="ShadersText"
+ name="HardwareText"
top_delta="20"
left="10"
width="128">
@@ -426,7 +426,7 @@
follows="left|top"
height="16"
layout="topleft"
- name="AvatarText"
+ name="MeshText"
top_delta="20"
left="400"
top="21"
@@ -917,7 +917,7 @@ are saved in a preset file. -->
label="RenderAvatarMaxComplexity"
layout="topleft"
left="0"
- name="RenderAvatarMaxNonImpostors"
+ name="RenderAvatarMaxComplexity"
top_delta="0"
width="0">
diff --git a/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml
index 1cc3af5826..5e16707340 100644
--- a/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml
@@ -53,7 +53,7 @@
+ name="MuteParticles">
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 4fa89b08f6..b9f2b4d85e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -11112,13 +11112,13 @@ Cannot save to object contents: This would modify the attachment permissions.
Your attachments contain too much inventory to add more.
-
+
-
- fail
- The attachment has requested a nonexistent point on the avatar. It has been attached to the chest instead.
-
-
Models
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 762eedc82c..557c8e8437 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2821,8 +2821,7 @@ Try enclosing path to the editor with double quotes.
Control Camera
Teleport
Permission
- Unknown: [Permission]
-
+
Conversations are not being logged. To begin keeping a log, choose "Save: Log only" or "Save: Log and transcripts" under Preferences > Privacy.
diff --git a/indra/newview/skins/default/xui/pl/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/pl/menu_people_blocked_gear.xml
index 42f34e25ce..acfce11003 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_blocked_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_blocked_gear.xml
@@ -3,7 +3,7 @@
-
+