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 @@ - +