summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llplugin/llpluginprocesschild.cpp10
-rw-r--r--indra/llwindow/llkeyboardwin32.cpp2
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llagentwearables.cpp2
-rw-r--r--indra/newview/llfloaterpreference.cpp20
-rw-r--r--indra/newview/llfloaterpreference.h1
-rw-r--r--indra/newview/llfolderview.cpp4
-rw-r--r--indra/newview/llinventorybridge.cpp7
-rw-r--r--indra/newview/llinventorypanel.cpp21
-rw-r--r--indra/newview/llinventorypanel.h2
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp6
-rw-r--r--indra/newview/llsidepanelappearance.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp4
-rw-r--r--indra/newview/llvovolume.cpp7
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml18
17 files changed, 104 insertions, 34 deletions
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index ccf6dab942..07fc82c770 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -54,8 +54,14 @@ LLPluginProcessChild::~LLPluginProcessChild()
if(mInstance != NULL)
{
sendMessageToPlugin(LLPluginMessage("base", "cleanup"));
- delete mInstance;
- mInstance = NULL;
+
+ // IMPORTANT: under some (unknown) circumstances the apr_dso_unload() triggered when mInstance is deleted
+ // appears to fail and lock up which means that a given instance of the slplugin process never exits.
+ // This is bad, especially when users try to update their version of SL - it fails because the slplugin
+ // process as well as a bunch of plugin specific files are locked and cannot be overwritten.
+ exit( 0 );
+ //delete mInstance;
+ //mInstance = NULL;
}
}
diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp
index 35a3e7621a..ab5ecb4e63 100644
--- a/indra/llwindow/llkeyboardwin32.cpp
+++ b/indra/llwindow/llkeyboardwin32.cpp
@@ -80,7 +80,7 @@ LLKeyboardWin32::LLKeyboardWin32()
mTranslateKeyMap[VK_OEM_COMMA] = ',';
mTranslateKeyMap[VK_OEM_MINUS] = '-';
mTranslateKeyMap[VK_OEM_PERIOD] = '.';
- mTranslateKeyMap[VK_OEM_2] = KEY_PAD_DIVIDE;
+ mTranslateKeyMap[VK_OEM_2] = '/';//This used to be KEY_PAD_DIVIDE, but that breaks typing into text fields in media prims
mTranslateKeyMap[VK_OEM_3] = '`';
mTranslateKeyMap[VK_OEM_4] = '[';
mTranslateKeyMap[VK_OEM_5] = '\\';
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d43432e215..7d98a4b6ce 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4820,6 +4820,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>MyOutfitsAutofill</key>
+ <map>
+ <key>Comment</key>
+ <string>Always autofill My Outfits from library when empty (else happens just once).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NearMeRange</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index d21965568d..29530c9c05 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -911,7 +911,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
// then auto-populate outfits from the library into the My Outfits folder.
- if (LLInventoryModel::getIsFirstTimeInViewer2())
+ if (LLInventoryModel::getIsFirstTimeInViewer2() || gSavedSettings.getBOOL("MyOutfitsAutofill"))
{
gAgentWearables.populateMyOutfitsFolder();
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 11dd48056c..d0716f67b8 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -325,6 +325,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this));
+ mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable", boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this));
mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this));
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
@@ -986,6 +987,25 @@ void LLFloaterPreference::onCommitAutoDetectAspect()
}
}
+void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable()
+{
+ BOOL autoplay = getChild<LLCheckBoxCtrl>("autoplay_enabled")->get();
+
+ gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, autoplay);
+
+ lldebugs << "autoplay now = " << int(autoplay) << llendl;
+
+ if (autoplay)
+ {
+ // autoplay toggle has gone from FALSE to TRUE; ensure that
+ // the media system is thus actually turned on too.
+ gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+ llinfos << "autoplay turned on, turned all media subsystems on" << llendl;
+ }
+}
+
void LLFloaterPreference::refresh()
{
LLPanel::refresh();
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 74a53d673c..b2bc34231d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -132,6 +132,7 @@ public:
// void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
void onCommitAutoDetectAspect();
+ void onCommitParcelMediaAutoPlayEnable();
void applyResolution();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 112b23d2df..41f4d1a663 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -569,6 +569,8 @@ LLFolderViewItem* LLFolderView::getCurSelectedItem( void )
BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus)
{
+ mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
+
if( selection == this )
{
return FALSE;
@@ -596,8 +598,6 @@ BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
llassert(mSelectedItems.size() <= 1);
- mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
-
return rv;
}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 47d593ca89..2a395d79dc 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2627,6 +2627,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
mItems.push_back(std::string("Rename"));
mItems.push_back(std::string("Delete"));
+
+ // EXT-4030: disallow deletion of currently worn outfit
+ const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink();
+ if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory()))
+ {
+ mDisabledItems.push_back(std::string("Delete"));
+ }
}
}
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 2e5526a273..498a29728c 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -433,11 +433,10 @@ void LLInventoryPanel::initializeViews()
{
mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
}
- llinfos << this << " Generating views for start folder " << mStartFolderString << llendl;
rebuildViewsFor(mStartFolderID);
mViewsInitialized = true;
- defaultOpenInventory();
+ openStartFolderOrMyInventory();
}
void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
@@ -577,7 +576,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
// bit of a hack to make sure the inventory is open.
-void LLInventoryPanel::defaultOpenInventory()
+void LLInventoryPanel::openStartFolderOrMyInventory()
{
if (mStartFolderString != "")
{
@@ -585,13 +584,17 @@ void LLInventoryPanel::defaultOpenInventory()
}
else
{
- // Get the first child (it should be "My Inventory") and
- // open it up by name (just to make sure the first child is actually a folder).
- LLView* first_child = mFolders->getFirstChild();
- if (first_child)
+ // Find My Inventory folder and open it up by name
+ for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child))
{
- const std::string& first_child_name = first_child->getName();
- mFolders->openFolder(first_child_name);
+ LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
+ if (fchild && fchild->getListener() &&
+ (fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
+ {
+ const std::string& child_name = child->getName();
+ mFolders->openFolder(child_name);
+ break;
+ }
}
}
}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 4f7f0a79f6..09533b52f1 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -167,7 +167,7 @@ public:
static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
protected:
- void defaultOpenInventory(); // open the first level of inventory
+ void openStartFolderOrMyInventory(); // open the first level of inventory
LLInventoryModel* mInventory;
LLInventoryObserver* mInventoryObserver;
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 29fa4b319c..a1c12412b5 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -415,7 +415,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
if (command_name == "wear" ||
command_name == "make_outfit")
{
- const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel");
+ const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_tab");
if (!is_my_outfits)
{
return FALSE;
@@ -468,11 +468,11 @@ void LLPanelOutfitsInventory::initTabPanels()
{
mTabPanels.resize(2);
- LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
+ LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_tab");
cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
mTabPanels[0] = cof_panel;
- LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
+ LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_tab");
myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
mTabPanels[1] = myoutfits_panel;
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 0aefebce10..d870009e4f 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -213,7 +213,7 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked()
if (tab_outfits)
{
tab_outfits->changeOpenClose(FALSE);
- LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_accordionpanel");
+ LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab");
if (inventory_panel)
{
LLFolderView *folder = inventory_panel->getRootFolder();
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9d796d7299..412878eef5 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -731,7 +731,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
LLInspector::Params p;
p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
p.message(avatar_name);
- p.image(LLUI::getUIImage("Info"));
+ p.image.name("Inspector_I");
p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
p.visible_time_near(6.f);
p.visible_time_far(3.f);
@@ -822,7 +822,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
LLInspector::Params p;
p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
p.message(tooltip_msg);
- p.image(LLUI::getUIImage("Info_Off"));
+ p.image.name("Inspector_I");
p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace));
p.time_based_media(is_time_based_media);
p.web_based_media(is_web_based_media);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 70bfc67523..55609621b3 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2689,13 +2689,16 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
const LLTextureEntry* te = face->getTextureEntry();
const LLViewerTexture* img = face->getTexture();
- textures.insert(img->getID());
+ if (img)
+ {
+ textures.insert(img->getID());
+ }
if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
{
alpha++;
}
- else if (img->getPrimaryFormat() == GL_ALPHA)
+ else if (img && img->getPrimaryFormat() == GL_ALPHA)
{
invisi = 1;
}
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 614a2e2ffe..74eafb24db 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -46,8 +46,8 @@
top="0"
width="314"
mouse_opaque="true"
- name="outfitslist_accordionpanel"
- start_folder="My Outfits" />
+ name="outfitslist_tab"
+ start_folder="My Outfits" />
</tab_container>
<panel
background_visible="true"
@@ -82,10 +82,10 @@
tool_tip="Remove selected item"
top="6"
width="18" />
- <button
- follows="bottom|left"
- height="23"
- label="Make Outfit"
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Make Outfit"
layout="topleft"
name="make_outfit_btn"
tool_tip="Save appearance as an outfit"
@@ -93,8 +93,8 @@
left='10'
width="120" />
<button
- follows="bottom|right"
- height="23"
+ follows="bottom|right"
+ height="23"
label="Wear"
layout="topleft"
name="wear_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 25d7ba0903..5dd93d0f7e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -85,7 +85,10 @@
left="30"
name="autoplay_enabled"
top_pad="10"
- width="350" />
+ width="350">
+ <check_box.commit_callback
+ function="Pref.ParcelMediaAutoPlayEnable" />
+ </check_box>
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 4cef1f9c60..075d9232b1 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -14,7 +14,7 @@
<string name="min_width">300</string>
<string name="min_height">75</string>
<string name="zoom_near_padding">1.0</string>
- <string name="zoom_medium_padding">1.25</string>
+ <string name="zoom_medium_padding">1.1</string>
<string name="zoom_far_padding">1.5</string>
<string name="top_world_view_avoid_zone">50</string>
<layout_stack
@@ -113,6 +113,7 @@
</layout_panel>
<layout_panel
name="fwd"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -140,6 +141,7 @@
</layout_panel>
<layout_panel
name="home"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -167,6 +169,7 @@
</layout_panel>
<layout_panel
name="media_stop"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -194,6 +197,7 @@
</layout_panel>
<layout_panel
name="reload"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -221,6 +225,7 @@
</layout_panel>
<layout_panel
name="stop"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -248,6 +253,7 @@
</layout_panel>
<layout_panel
name="play"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -276,6 +282,7 @@
</layout_panel>
<layout_panel
name="pause"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -303,6 +310,7 @@
<!-- media URL entry -->
<layout_panel
name="media_address"
+ mouse_opaque="false"
auto_resize="true"
user_resize="false"
height="24"
@@ -367,6 +375,7 @@
</layout_panel>
<layout_panel
name="media_play_position"
+ mouse_opaque="false"
auto_resize="true"
user_resize="false"
follows="left|right"
@@ -392,6 +401,7 @@
</layout_panel>
<layout_panel
name="skip_back"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -419,6 +429,7 @@
</layout_panel>
<layout_panel
name="skip_forward"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -445,6 +456,7 @@
</layout_panel>
<layout_panel
name="media_volume"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -501,6 +513,7 @@
</layout_panel>
<layout_panel
name="zoom_frame"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -528,6 +541,7 @@
</layout_panel>
<layout_panel
name="close"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -554,6 +568,7 @@
</layout_panel>
<layout_panel
name="new_window"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -581,6 +596,7 @@
<!-- bookend panel -->
<layout_panel
name="right_bookend"
+ mouse_opaque="false"
top="0"
width="0"
layout="topleft"