aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
Diffstat (limited to 'linden')
-rw-r--r--linden/doc/contributions.txt1
-rw-r--r--linden/indra/llinventory/llparcel.cpp12
-rw-r--r--linden/indra/llinventory/llparcel.h6
-rw-r--r--linden/indra/llrender/llfontgl.cpp11
-rw-r--r--linden/indra/llrender/llfontgl.h3
-rw-r--r--linden/indra/llui/llcombobox.cpp25
-rw-r--r--linden/indra/llui/llcombobox.h4
-rw-r--r--linden/indra/llui/lllineeditor.cpp20
-rw-r--r--linden/indra/llui/lllineeditor.h1
-rw-r--r--linden/indra/llui/llresmgr.cpp6
-rw-r--r--linden/indra/llui/llresmgr.h3
-rw-r--r--linden/indra/llui/llscrolllistctrl.cpp28
-rw-r--r--linden/indra/llui/llscrolllistctrl.h3
-rw-r--r--linden/indra/llui/llstyle.cpp8
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp9
-rw-r--r--linden/indra/newview/app_settings/settings.xml11
-rw-r--r--linden/indra/newview/hippogridmanager.cpp7
-rw-r--r--linden/indra/newview/hippogridmanager.h1
-rw-r--r--linden/indra/newview/installers/windows/imprudence_installer_script.iss193
-rw-r--r--linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss263
-rw-r--r--linden/indra/newview/llconsole.cpp2
-rw-r--r--linden/indra/newview/llfloaterpreference.cpp20
-rw-r--r--linden/indra/newview/llfloaterpreference.h3
-rw-r--r--linden/indra/newview/llfloatertest.cpp4
-rw-r--r--linden/indra/newview/llgroupnotify.cpp2
-rw-r--r--linden/indra/newview/llloginhandler.cpp20
-rw-r--r--linden/indra/newview/llmediaremotectrl.cpp2
-rw-r--r--linden/indra/newview/llnamelistctrl.cpp2
-rw-r--r--linden/indra/newview/llpanelaudioprefs.cpp19
-rw-r--r--linden/indra/newview/llpanelaudioprefs.h4
-rw-r--r--linden/indra/newview/llpanellandaudio.cpp8
-rw-r--r--linden/indra/newview/llpanellandaudio.h1
-rw-r--r--linden/indra/newview/llpanellandmedia.cpp38
-rw-r--r--linden/indra/newview/llpanellogin.cpp207
-rw-r--r--linden/indra/newview/llpanellogin.h20
-rw-r--r--linden/indra/newview/llprefsadvanced.cpp19
-rw-r--r--linden/indra/newview/llprefsadvanced.h3
-rw-r--r--linden/indra/newview/llstartup.cpp19
-rw-r--r--linden/indra/newview/lltexturectrl.cpp2
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp273
-rw-r--r--linden/indra/newview/llviewerparcelmedia.h40
-rw-r--r--linden/indra/newview/llviewerwindow.cpp9
-rw-r--r--linden/indra/newview/llworldmap.cpp4
-rw-r--r--linden/indra/newview/llworldmapview.cpp2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml44
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_media_filter.xml63
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml7
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_sell_land.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/fonts.xml4
-rwxr-xr-xlinden/indra/newview/skins/default/xui/en-us/mime_types_linux.xml11
-rwxr-xr-xlinden/indra/newview/skins/default/xui/en-us/mime_types_mac.xml11
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/mime_types_windows.xml15
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notifications.xml27
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_land_money.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_login.xml108
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml3
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml15
-rw-r--r--linden/indra/newview/slfloatermediafilter.cpp230
-rw-r--r--linden/indra/newview/slfloatermediafilter.h9
-rwxr-xr-xlinden/install.xml4
65 files changed, 1564 insertions, 361 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 8aab5c8..6a41ddf 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -528,6 +528,7 @@ Robin Cornelius
528 SNOW-108 528 SNOW-108
529 SNOW-196 529 SNOW-196
530 SNOW-422 530 SNOW-422
531 SNOW-466
531 SNOW-485 532 SNOW-485
532 VWR-2488 533 VWR-2488
533 VWR-9557 534 VWR-9557
diff --git a/linden/indra/llinventory/llparcel.cpp b/linden/indra/llinventory/llparcel.cpp
index 39605eb..4cbb83a 100644
--- a/linden/indra/llinventory/llparcel.cpp
+++ b/linden/indra/llinventory/llparcel.cpp
@@ -195,8 +195,6 @@ void LLParcel::init(const LLUUID &owner_id,
195 mMediaID.setNull(); 195 mMediaID.setNull();
196 mMediaAutoScale = 0; 196 mMediaAutoScale = 0;
197 mMediaLoop = TRUE; 197 mMediaLoop = TRUE;
198 mObscureMedia = 1;
199 mObscureMusic = 1;
200 mMediaWidth = 0; 198 mMediaWidth = 0;
201 mMediaHeight = 0; 199 mMediaHeight = 0;
202 setMediaCurrentURL(LLStringUtil::null); 200 setMediaCurrentURL(LLStringUtil::null);
@@ -691,8 +689,8 @@ void LLParcel::packMessage(LLSD& msg)
691 msg["auto_scale"] = getMediaAutoScale(); 689 msg["auto_scale"] = getMediaAutoScale();
692 msg["media_loop"] = getMediaLoop(); 690 msg["media_loop"] = getMediaLoop();
693 msg["media_current_url"] = getMediaCurrentURL(); 691 msg["media_current_url"] = getMediaCurrentURL();
694 msg["obscure_media"] = getObscureMedia(); 692 msg["obscure_media"] = FALSE; // OBSOLETE - no longer used
695 msg["obscure_music"] = getObscureMusic(); 693 msg["obscure_music"] = FALSE; // OBSOLETE - no longer used
696 msg["media_id"] = getMediaID(); 694 msg["media_id"] = getMediaID();
697 msg["media_allow_navigate"] = getMediaAllowNavigate(); 695 msg["media_allow_navigate"] = getMediaAllowNavigate();
698 msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom(); 696 msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom();
@@ -757,8 +755,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
757 msg->getS32("MediaData", "MediaWidth", mMediaWidth); 755 msg->getS32("MediaData", "MediaWidth", mMediaWidth);
758 msg->getS32("MediaData", "MediaHeight", mMediaHeight); 756 msg->getS32("MediaData", "MediaHeight", mMediaHeight);
759 msg->getU8 ( "MediaData", "MediaLoop", mMediaLoop ); 757 msg->getU8 ( "MediaData", "MediaLoop", mMediaLoop );
760 msg->getU8 ( "MediaData", "ObscureMedia", mObscureMedia );
761 msg->getU8 ( "MediaData", "ObscureMusic", mObscureMusic );
762 } 758 }
763 else 759 else
764 { 760 {
@@ -766,8 +762,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
766 // thats what we want -- AW 762 // thats what we want -- AW
767 setMediaDesc(std::string("No Description available without Server Upgrade")); 763 setMediaDesc(std::string("No Description available without Server Upgrade"));
768 mMediaLoop = true; 764 mMediaLoop = true;
769 mObscureMedia = true;
770 mObscureMusic = true;
771 } 765 }
772 766
773 if(msg->getNumberOfBlocks("MediaLinkSharing") > 0) 767 if(msg->getNumberOfBlocks("MediaLinkSharing") > 0)
@@ -1233,8 +1227,6 @@ void LLParcel::clearParcel()
1233 setMediaDesc(LLStringUtil::null); 1227 setMediaDesc(LLStringUtil::null);
1234 setMediaAutoScale(0); 1228 setMediaAutoScale(0);
1235 setMediaLoop(TRUE); 1229 setMediaLoop(TRUE);
1236 mObscureMedia = 1;
1237 mObscureMusic = 1;
1238 mMediaWidth = 0; 1230 mMediaWidth = 0;
1239 mMediaHeight = 0; 1231 mMediaHeight = 0;
1240 setMediaCurrentURL(LLStringUtil::null); 1232 setMediaCurrentURL(LLStringUtil::null);
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index f102ec4..52f97de 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -244,8 +244,6 @@ public:
244 void setMediaID(const LLUUID& id) { mMediaID = id; } 244 void setMediaID(const LLUUID& id) { mMediaID = id; }
245 void setMediaAutoScale ( U8 flagIn ) { mMediaAutoScale = flagIn; } 245 void setMediaAutoScale ( U8 flagIn ) { mMediaAutoScale = flagIn; }
246 void setMediaLoop (U8 loop) { mMediaLoop = loop; } 246 void setMediaLoop (U8 loop) { mMediaLoop = loop; }
247 void setObscureMedia( U8 flagIn ) { mObscureMedia = flagIn; }
248 void setObscureMusic( U8 flagIn ) { mObscureMusic = flagIn; }
249 void setMediaWidth(S32 width); 247 void setMediaWidth(S32 width);
250 void setMediaHeight(S32 height); 248 void setMediaHeight(S32 height);
251 void setMediaCurrentURL(const std::string& url); 249 void setMediaCurrentURL(const std::string& url);
@@ -352,8 +350,6 @@ public:
352 U8 getMediaAutoScale() const { return mMediaAutoScale; } 350 U8 getMediaAutoScale() const { return mMediaAutoScale; }
353 U8 getMediaLoop() const { return mMediaLoop; } 351 U8 getMediaLoop() const { return mMediaLoop; }
354 const std::string& getMediaCurrentURL() const { return mMediaCurrentURL; } 352 const std::string& getMediaCurrentURL() const { return mMediaCurrentURL; }
355 U8 getObscureMedia() const { return mObscureMedia; }
356 U8 getObscureMusic() const { return mObscureMusic; }
357 U8 getMediaURLFilterEnable() const { return mMediaURLFilterEnable; } 353 U8 getMediaURLFilterEnable() const { return mMediaURLFilterEnable; }
358 LLSD getMediaURLFilterList() const { return mMediaURLFilterList; } 354 LLSD getMediaURLFilterList() const { return mMediaURLFilterList; }
359 U8 getMediaAllowNavigate() const { return mMediaAllowNavigate; } 355 U8 getMediaAllowNavigate() const { return mMediaAllowNavigate; }
@@ -645,8 +641,6 @@ protected:
645 U8 mMediaAutoScale; 641 U8 mMediaAutoScale;
646 U8 mMediaLoop; 642 U8 mMediaLoop;
647 std::string mMediaCurrentURL; 643 std::string mMediaCurrentURL;
648 U8 mObscureMedia;
649 U8 mObscureMusic;
650 LLUUID mMediaID; 644 LLUUID mMediaID;
651 U8 mMediaURLFilterEnable; 645 U8 mMediaURLFilterEnable;
652 LLSD mMediaURLFilterList; 646 LLSD mMediaURLFilterList;
diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp
index 7baec81..306c6b9 100644
--- a/linden/indra/llrender/llfontgl.cpp
+++ b/linden/indra/llrender/llfontgl.cpp
@@ -242,7 +242,8 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
242 // This is primarily for error detection purposes. 242 // This is primarily for error detection purposes.
243 succ &= (NULL != getFontSansSerifSmall()); 243 succ &= (NULL != getFontSansSerifSmall());
244 succ &= (NULL != getFontSansSerif()); 244 succ &= (NULL != getFontSansSerif());
245 succ &= (NULL != getFontSansSerifBig()); 245 succ &= (NULL != getFontSansSerifBigger());
246 succ &= (NULL != getFontSansSerifLarge());
246 succ &= (NULL != getFontSansSerifHuge()); 247 succ &= (NULL != getFontSansSerifHuge());
247 succ &= (NULL != getFontSansSerifBold()); 248 succ &= (NULL != getFontSansSerifBold());
248 succ &= (NULL != getFontMonospace()); 249 succ &= (NULL != getFontMonospace());
@@ -313,7 +314,13 @@ LLFontGL* LLFontGL::getFontSansSerif()
313} 314}
314 315
315//static 316//static
316LLFontGL* LLFontGL::getFontSansSerifBig() 317LLFontGL* LLFontGL::getFontSansSerifBigger()
318{
319 return getFont(LLFontDescriptor("SansSerif","Bigger",0));
320}
321
322//static
323LLFontGL* LLFontGL::getFontSansSerifLarge()
317{ 324{
318 return getFont(LLFontDescriptor("SansSerif","Large",0)); 325 return getFont(LLFontDescriptor("SansSerif","Large",0));
319} 326}
diff --git a/linden/indra/llrender/llfontgl.h b/linden/indra/llrender/llfontgl.h
index 6cb1727..e3a953b 100644
--- a/linden/indra/llrender/llfontgl.h
+++ b/linden/indra/llrender/llfontgl.h
@@ -233,7 +233,8 @@ public:
233 static LLFontGL* getFontMonospace(); 233 static LLFontGL* getFontMonospace();
234 static LLFontGL* getFontSansSerifSmall(); 234 static LLFontGL* getFontSansSerifSmall();
235 static LLFontGL* getFontSansSerif(); 235 static LLFontGL* getFontSansSerif();
236 static LLFontGL* getFontSansSerifBig(); 236 static LLFontGL* getFontSansSerifBigger();
237 static LLFontGL* getFontSansSerifLarge();
237 static LLFontGL* getFontSansSerifHuge(); 238 static LLFontGL* getFontSansSerifHuge();
238 static LLFontGL* getFontSansSerifBold(); 239 static LLFontGL* getFontSansSerifBold();
239 static LLFontGL* getFontExtChar(); 240 static LLFontGL* getFontExtChar();
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index be34325..a93dc9b 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -43,6 +43,7 @@
43 43
44// newview includes 44// newview includes
45#include "llbutton.h" 45#include "llbutton.h"
46#include "llfont.h"
46#include "llkeyboard.h" 47#include "llkeyboard.h"
47#include "llscrolllistctrl.h" 48#include "llscrolllistctrl.h"
48#include "llwindow.h" 49#include "llwindow.h"
@@ -60,7 +61,7 @@ S32 MAX_COMBO_WIDTH = 500;
60 61
61static LLRegisterWidget<LLComboBox> r1("combo_box"); 62static LLRegisterWidget<LLComboBox> r1("combo_box");
62 63
63LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::string& label, 64LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::string& label, const LLFontGL* font,
64 void (*commit_callback)(LLUICtrl*,void*), 65 void (*commit_callback)(LLUICtrl*,void*),
65 void *callback_userdata 66 void *callback_userdata
66 ) 67 )
@@ -76,6 +77,15 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
76 mTextEntryCallback( NULL ), 77 mTextEntryCallback( NULL ),
77 mLabel(label) 78 mLabel(label)
78{ 79{
80 if (font)
81 {
82 mGLFont = font;
83 }
84 else
85 {
86 mGLFont = LLFontGL::getFontSansSerifSmall();
87 }
88
79 // Always use text box 89 // Always use text box
80 // Text label button 90 // Text label button
81 mButton = new LLButton(mLabel, 91 mButton = new LLButton(mLabel,
@@ -89,14 +99,14 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
89 mButton->setScaleImage(TRUE); 99 mButton->setScaleImage(TRUE);
90 100
91 mButton->setMouseDownCallback(onButtonDown); 101 mButton->setMouseDownCallback(onButtonDown);
92 mButton->setFont(LLFontGL::getFontSansSerifSmall()); 102 mButton->setFont(mGLFont);
93 mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT); 103 mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
94 mButton->setHAlign( LLFontGL::LEFT ); 104 mButton->setHAlign( LLFontGL::LEFT );
95 mButton->setRightHPad(2); 105 mButton->setRightHPad(2);
96 addChild(mButton); 106 addChild(mButton);
97 107
98 // disallow multiple selection 108 // disallow multiple selection
99 mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(), 109 mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(), mGLFont,
100 &LLComboBox::onItemSelected, this, FALSE); 110 &LLComboBox::onItemSelected, this, FALSE);
101 mList->setVisible(FALSE); 111 mList->setVisible(FALSE);
102 mList->setBgWriteableColor( LLColor4(1,1,1,1) ); 112 mList->setBgWriteableColor( LLColor4(1,1,1,1) );
@@ -167,11 +177,14 @@ LLView* LLComboBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *
167 S32 max_chars = 20; 177 S32 max_chars = 20;
168 node->getAttributeS32("max_chars", max_chars); 178 node->getAttributeS32("max_chars", max_chars);
169 179
180 LLFontGL* font = LLView::selectFont(node);
181
170 LLUICtrlCallback callback = NULL; 182 LLUICtrlCallback callback = NULL;
171 183
172 LLComboBox* combo_box = new LLComboBox(name, 184 LLComboBox* combo_box = new LLComboBox(name,
173 rect, 185 rect,
174 label, 186 label,
187 font,
175 callback, 188 callback,
176 NULL); 189 NULL);
177 combo_box->setAllowTextEntry(allow_text_entry, max_chars); 190 combo_box->setAllowTextEntry(allow_text_entry, max_chars);
@@ -540,7 +553,7 @@ void LLComboBox::updateLayout()
540 mTextEntry = new LLLineEditor(std::string("combo_text_entry"), 553 mTextEntry = new LLLineEditor(std::string("combo_text_entry"),
541 text_entry_rect, 554 text_entry_rect,
542 LLStringUtil::null, 555 LLStringUtil::null,
543 LLFontGL::getFontSansSerifSmall(), 556 mGLFont,
544 mMaxChars, 557 mMaxChars,
545 onTextCommit, 558 onTextCommit,
546 onTextEntry, 559 onTextEntry,
@@ -1153,7 +1166,7 @@ LLFlyoutButton::LLFlyoutButton(
1153 const std::string& label, 1166 const std::string& label,
1154 void (*commit_callback)(LLUICtrl*, void*) , 1167 void (*commit_callback)(LLUICtrl*, void*) ,
1155 void *callback_userdata) 1168 void *callback_userdata)
1156: LLComboBox(name, rect, LLStringUtil::null, commit_callback, callback_userdata), 1169: LLComboBox(name, rect, LLStringUtil::null, NULL, commit_callback, callback_userdata),
1157 mToggleState(FALSE), 1170 mToggleState(FALSE),
1158 mActionButton(NULL) 1171 mActionButton(NULL)
1159{ 1172{
@@ -1214,6 +1227,8 @@ LLXMLNodePtr LLFlyoutButton::getXML(bool save_children) const
1214 } 1227 }
1215 } 1228 }
1216 1229
1230 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont));
1231
1217 return node; 1232 return node;
1218} 1233}
1219 1234
diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h
index 95ad17a..596f659 100644
--- a/linden/indra/llui/llcombobox.h
+++ b/linden/indra/llui/llcombobox.h
@@ -67,7 +67,8 @@ public:
67 LLComboBox( 67 LLComboBox(
68 const std::string& name, 68 const std::string& name,
69 const LLRect &rect, 69 const LLRect &rect,
70 const std::string& label, 70 const std::string& label,
71 const LLFontGL* font = NULL,
71 void (*commit_callback)(LLUICtrl*, void*) = NULL, 72 void (*commit_callback)(LLUICtrl*, void*) = NULL,
72 void *callback_userdata = NULL 73 void *callback_userdata = NULL
73 ); 74 );
@@ -190,6 +191,7 @@ protected:
190 EPreferredPosition mListPosition; 191 EPreferredPosition mListPosition;
191 LLPointer<LLUIImage> mArrowImage; 192 LLPointer<LLUIImage> mArrowImage;
192 std::string mLabel; 193 std::string mLabel;
194 const LLFontGL* mGLFont;
193 195
194private: 196private:
195 S32 mButtonPadding; 197 S32 mButtonPadding;
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 76b8927..a21ad5d 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -2696,7 +2696,6 @@ BOOL LLLineEditor::prevalidatePrintableNotPipe(const LLWString &str)
2696 return rv; 2696 return rv;
2697} 2697}
2698 2698
2699
2700// static 2699// static
2701BOOL LLLineEditor::prevalidatePrintableNoSpace(const LLWString &str) 2700BOOL LLLineEditor::prevalidatePrintableNoSpace(const LLWString &str)
2702{ 2701{
@@ -2721,6 +2720,25 @@ BOOL LLLineEditor::prevalidatePrintableNoSpace(const LLWString &str)
2721} 2720}
2722 2721
2723// static 2722// static
2723BOOL LLLineEditor::prevalidatePrintableSpace(const LLWString &str)
2724{
2725 BOOL rv = TRUE;
2726 S32 len = str.length();
2727 if(len == 0) return rv;
2728 while(len--)
2729 {
2730 if( !(LLStringOps::isAlnum((char)str[len]) ||
2731 LLStringOps::isPunct((char)str[len]) ||
2732 ' ' == str[len]) )
2733 {
2734 rv = FALSE;
2735 break;
2736 }
2737 }
2738 return rv;
2739}
2740
2741// static
2724BOOL LLLineEditor::prevalidateASCII(const LLWString &str) 2742BOOL LLLineEditor::prevalidateASCII(const LLWString &str)
2725{ 2743{
2726 BOOL rv = TRUE; 2744 BOOL rv = TRUE;
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index d217859..43ce869 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -253,6 +253,7 @@ public:
253 static BOOL prevalidateAlphaNumSpace(const LLWString &str ); 253 static BOOL prevalidateAlphaNumSpace(const LLWString &str );
254 static BOOL prevalidatePrintableNotPipe(const LLWString &str); 254 static BOOL prevalidatePrintableNotPipe(const LLWString &str);
255 static BOOL prevalidatePrintableNoSpace(const LLWString &str); 255 static BOOL prevalidatePrintableNoSpace(const LLWString &str);
256 static BOOL prevalidatePrintableSpace(const LLWString &str);
256 static BOOL prevalidateASCII(const LLWString &str); 257 static BOOL prevalidateASCII(const LLWString &str);
257 258
258 static BOOL postvalidateFloat(const std::string &str); 259 static BOOL postvalidateFloat(const std::string &str);
diff --git a/linden/indra/llui/llresmgr.cpp b/linden/indra/llui/llresmgr.cpp
index 32d3d1f..22610ca 100644
--- a/linden/indra/llui/llresmgr.cpp
+++ b/linden/indra/llui/llresmgr.cpp
@@ -58,7 +58,8 @@ LLResMgr::LLResMgr()
58 mUSAFonts[ LLFONT_OCRA ] = LLFontGL::getFontMonospace(); 58 mUSAFonts[ LLFONT_OCRA ] = LLFontGL::getFontMonospace();
59 mUSAFonts[ LLFONT_SANSSERIF ] = LLFontGL::getFontSansSerif(); 59 mUSAFonts[ LLFONT_SANSSERIF ] = LLFontGL::getFontSansSerif();
60 mUSAFonts[ LLFONT_SANSSERIF_SMALL ] = LLFontGL::getFontSansSerifSmall(); 60 mUSAFonts[ LLFONT_SANSSERIF_SMALL ] = LLFontGL::getFontSansSerifSmall();
61 mUSAFonts[ LLFONT_SANSSERIF_BIG ] = LLFontGL::getFontSansSerifBig(); 61 mUSAFonts[ LLFONT_SANSSERIF_BIGGER ]= LLFontGL::getFontSansSerifBigger();
62 mUSAFonts[ LLFONT_SANSSERIF_LARGE ] = LLFontGL::getFontSansSerifLarge();
62 mUSAFonts[ LLFONT_SMALL ] = LLFontGL::getFontMonospace(); 63 mUSAFonts[ LLFONT_SMALL ] = LLFontGL::getFontMonospace();
63/* 64/*
64 // USA Strings 65 // USA Strings
@@ -421,7 +422,8 @@ const std::string LLFONT_ID_NAMES[] =
421 std::string("OCRA"), 422 std::string("OCRA"),
422 std::string("SANSSERIF"), 423 std::string("SANSSERIF"),
423 std::string("SANSSERIF_SMALL"), 424 std::string("SANSSERIF_SMALL"),
424 std::string("SANSSERIF_BIG"), 425 std::string("SANSSERIF_BIGGER"),
426 std::string("SANSSERIF_LARGE"),
425 std::string("SMALL"), 427 std::string("SMALL"),
426}; 428};
427 429
diff --git a/linden/indra/llui/llresmgr.h b/linden/indra/llui/llresmgr.h
index d54505c..3008244 100644
--- a/linden/indra/llui/llresmgr.h
+++ b/linden/indra/llui/llresmgr.h
@@ -51,7 +51,8 @@ enum LLFONT_ID
51 LLFONT_OCRA, 51 LLFONT_OCRA,
52 LLFONT_SANSSERIF, 52 LLFONT_SANSSERIF,
53 LLFONT_SANSSERIF_SMALL, 53 LLFONT_SANSSERIF_SMALL,
54 LLFONT_SANSSERIF_BIG, 54 LLFONT_SANSSERIF_BIGGER,
55 LLFONT_SANSSERIF_LARGE,
55 LLFONT_SMALL, 56 LLFONT_SMALL,
56 LLFONT_COUNT // Number of values in this enum. Keep at end. 57 LLFONT_COUNT // Number of values in this enum. Keep at end.
57}; 58};
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index 1248a9a..1b93abf 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -570,7 +570,7 @@ void LLScrollListItemSeparator::draw(const LLRect& rect, const LLColor4& fg_colo
570// LLScrollListCtrl 570// LLScrollListCtrl
571//--------------------------------------------------------------------------- 571//---------------------------------------------------------------------------
572 572
573LLScrollListCtrl::LLScrollListCtrl(const std::string& name, const LLRect& rect, 573LLScrollListCtrl::LLScrollListCtrl(const std::string& name, const LLRect& rect, const LLFontGL* font,
574 void (*commit_callback)(LLUICtrl* ctrl, void* userdata), 574 void (*commit_callback)(LLUICtrl* ctrl, void* userdata),
575 void* callback_user_data, 575 void* callback_user_data,
576 BOOL allow_multiple_selection, 576 BOOL allow_multiple_selection,
@@ -619,6 +619,15 @@ LLScrollListCtrl::LLScrollListCtrl(const std::string& name, const LLRect& rect,
619 mOriginalSelection(-1), 619 mOriginalSelection(-1),
620 mDrewSelected(FALSE) 620 mDrewSelected(FALSE)
621{ 621{
622 if (font)
623 {
624 mGLFont = font;
625 }
626 else
627 {
628 mGLFont = LLFontGL::getFontSansSerifSmall();
629 }
630
622 mItemListRect.setOriginAndSize( 631 mItemListRect.setOriginAndSize(
623 mBorderThickness, 632 mBorderThickness,
624 mBorderThickness, 633 mBorderThickness,
@@ -987,14 +996,14 @@ void LLScrollListCtrl::calcColumnWidths()
987 column->setWidth(new_width); 996 column->setWidth(new_width);
988 997
989 // update max content width for this column, by looking at all items 998 // update max content width for this column, by looking at all items
990 column->mMaxContentWidth = column->mHeader ? LLFontGL::getFontSansSerifSmall()->getWidth(column->mLabel) + mColumnPadding + HEADING_TEXT_PADDING : 0; 999 column->mMaxContentWidth = column->mHeader ? mGLFont->getWidth(column->mLabel) + mColumnPadding + HEADING_TEXT_PADDING : 0;
991 item_list::iterator iter; 1000 item_list::iterator iter;
992 for (iter = mItemList.begin(); iter != mItemList.end(); iter++) 1001 for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
993 { 1002 {
994 LLScrollListCell* cellp = (*iter)->getColumn(column->mIndex); 1003 LLScrollListCell* cellp = (*iter)->getColumn(column->mIndex);
995 if (!cellp) continue; 1004 if (!cellp) continue;
996 1005
997 column->mMaxContentWidth = llmax(LLFontGL::getFontSansSerifSmall()->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth); 1006 column->mMaxContentWidth = llmax(mGLFont->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth);
998 } 1007 }
999 1008
1000 max_item_width += column->mMaxContentWidth; 1009 max_item_width += column->mMaxContentWidth;
@@ -1642,7 +1651,7 @@ LLScrollListItem* LLScrollListCtrl::addStringUUIDItem(const std::string& item_te
1642 if (getItemCount() < mMaxItemCount) 1651 if (getItemCount() < mMaxItemCount)
1643 { 1652 {
1644 item = new LLScrollListItem( enabled, NULL, id ); 1653 item = new LLScrollListItem( enabled, NULL, id );
1645 item->addColumn(item_text, LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF_SMALL), column_width); 1654 item->addColumn(item_text, mGLFont, column_width);
1646 addItem( item, pos ); 1655 addItem( item, pos );
1647 } 1656 }
1648 return item; 1657 return item;
@@ -2900,6 +2909,7 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
2900 LLScrollListCtrl* scroll_list = new LLScrollListCtrl( 2909 LLScrollListCtrl* scroll_list = new LLScrollListCtrl(
2901 name, 2910 name,
2902 rect, 2911 rect,
2912 NULL,
2903 callback, 2913 callback,
2904 NULL, 2914 NULL,
2905 multi_select, 2915 multi_select,
@@ -3374,7 +3384,11 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
3374 const LLFontGL *font = LLResMgr::getInstance()->getRes(fontname); 3384 const LLFontGL *font = LLResMgr::getInstance()->getRes(fontname);
3375 if (!font) 3385 if (!font)
3376 { 3386 {
3377 font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ); 3387 font = mGLFont;
3388 if (!font)
3389 {
3390 font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
3391 }
3378 } 3392 }
3379 U8 font_style = LLFontGL::getStyleFromString(fontstyle); 3393 U8 font_style = LLFontGL::getStyleFromString(fontstyle);
3380 3394
@@ -3446,7 +3460,7 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
3446 if (new_item->getColumn(column_idx) == NULL) 3460 if (new_item->getColumn(column_idx) == NULL)
3447 { 3461 {
3448 LLScrollListColumn* column_ptr = &column_it->second; 3462 LLScrollListColumn* column_ptr = &column_it->second;
3449 new_item->setColumn(column_idx, new LLScrollListText(LLStringUtil::null, LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ), column_ptr->getWidth(), LLFontGL::NORMAL)); 3463 new_item->setColumn(column_idx, new LLScrollListText(LLStringUtil::null, mGLFont, column_ptr->getWidth(), LLFontGL::NORMAL));
3450 } 3464 }
3451 } 3465 }
3452 3466
@@ -3466,7 +3480,7 @@ LLScrollListItem* LLScrollListCtrl::addSimpleElement(const std::string& value, E
3466 3480
3467 LLScrollListItem *new_item = new LLScrollListItem(entry_id); 3481 LLScrollListItem *new_item = new LLScrollListItem(entry_id);
3468 3482
3469 const LLFontGL *font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ); 3483 const LLFontGL *font = mGLFont;
3470 3484
3471 new_item->addColumn(value, font, getRect().getWidth()); 3485 new_item->addColumn(value, font, getRect().getWidth());
3472 3486
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h
index 4be7ff7..1b7105f 100644
--- a/linden/indra/llui/llscrolllistctrl.h
+++ b/linden/indra/llui/llscrolllistctrl.h
@@ -353,6 +353,7 @@ public:
353 LLScrollListCtrl( 353 LLScrollListCtrl(
354 const std::string& name, 354 const std::string& name,
355 const LLRect& rect, 355 const LLRect& rect,
356 const LLFontGL* font,
356 void (*commit_callback)(LLUICtrl*, void*), 357 void (*commit_callback)(LLUICtrl*, void*),
357 void* callback_userdata, 358 void* callback_userdata,
358 BOOL allow_multiple_selection, 359 BOOL allow_multiple_selection,
@@ -694,6 +695,8 @@ private:
694 695
695 // HACK: Did we draw one selected item this frame? 696 // HACK: Did we draw one selected item this frame?
696 BOOL mDrewSelected; 697 BOOL mDrewSelected;
698
699 const LLFontGL* mGLFont;
697}; // end class LLScrollListCtrl 700}; // end class LLScrollListCtrl
698 701
699 702
diff --git a/linden/indra/llui/llstyle.cpp b/linden/indra/llui/llstyle.cpp
index a716cbb..61a025e 100644
--- a/linden/indra/llui/llstyle.cpp
+++ b/linden/indra/llui/llstyle.cpp
@@ -128,9 +128,13 @@ void LLStyle::setFontName(const std::string& fontname)
128 { 128 {
129 mFontID = LLFONT_SMALL; 129 mFontID = LLFONT_SMALL;
130 } 130 }
131 else if ((fontname_lc == "sansserifbig")) 131 else if ((fontname_lc == "sansserifbigger"))
132 { 132 {
133 mFontID = LLFONT_SANSSERIF_BIG; 133 mFontID = LLFONT_SANSSERIF_BIGGER;
134 }
135 else if ((fontname_lc == "sansserifhuge"))
136 {
137 mFontID = LLFONT_SANSSERIF_LARGE;
134 } 138 }
135 else if (fontname_lc == "small") 139 else if (fontname_lc == "small")
136 { 140 {
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index edfe33b..2f9de6b 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -632,6 +632,15 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
632 mWindow = SDL_SetVideoMode(width, height, bits, sdlflags); 632 mWindow = SDL_SetVideoMode(width, height, bits, sdlflags);
633 } 633 }
634 634
635 while (!mWindow && mFSAASamples > 0)
636 {
637 llwarns << "Window creating failed with " << mFSAASamples << "x FSAA."<<llendl;
638 mFSAASamples = mFSAASamples>>1;
639 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, mFSAASamples ? 1 : 0);
640 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mFSAASamples);
641 mWindow = SDL_SetVideoMode(width, height, bits, sdlflags);
642 }
643
635 if (!mWindow) 644 if (!mWindow)
636 { 645 {
637 llwarns << "createContext: window creation failure. SDL: " << SDL_GetError() << llendl; 646 llwarns << "createContext: window creation failure. SDL: " << SDL_GetError() << llendl;
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 315670c..ad9cfea 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -8063,6 +8063,17 @@
8063 <integer>100</integer> 8063 <integer>100</integer>
8064 </array> 8064 </array>
8065 </map> 8065 </map>
8066 <key>MediaFilterOnlyRemoteCommands</key>
8067 <map>
8068 <key>Comment</key>
8069 <string>Whether Media Filter should only filter actions initiated remotely</string>
8070 <key>Persist</key>
8071 <integer>1</integer>
8072 <key>Type</key>
8073 <string>Boolean</string>
8074 <key>Value</key>
8075 <integer>1</integer>
8076 </map>
8066 <key>MediaOnAPrimUI</key> 8077 <key>MediaOnAPrimUI</key>
8067 <map> 8078 <map>
8068 <key>Comment</key> 8079 <key>Comment</key>
diff --git a/linden/indra/newview/hippogridmanager.cpp b/linden/indra/newview/hippogridmanager.cpp
index 74c9997..6bf6e63 100644
--- a/linden/indra/newview/hippogridmanager.cpp
+++ b/linden/indra/newview/hippogridmanager.cpp
@@ -165,6 +165,13 @@ const std::string& HippoGridInfo::getRealCurrencySymbol() const
165 return mRealCurrencySymbol; 165 return mRealCurrencySymbol;
166} 166}
167 167
168bool HippoGridInfo::isUsernameCompat() const
169{
170 // currently only SecondLife grids support username-style logins
171 // but Aurora is working on implementing it -- MC
172 return (mPlatform == HippoGridInfo::PLATFORM_SECONDLIFE);
173}
174
168 175
169 176
170// ******************************************************************** 177// ********************************************************************
diff --git a/linden/indra/newview/hippogridmanager.h b/linden/indra/newview/hippogridmanager.h
index 8429dba..1b6fbc5 100644
--- a/linden/indra/newview/hippogridmanager.h
+++ b/linden/indra/newview/hippogridmanager.h
@@ -55,6 +55,7 @@ public:
55 const std::string& getVoiceConnector() const { return mVoiceConnector; } 55 const std::string& getVoiceConnector() const { return mVoiceConnector; }
56 std::string getSearchUrl(SearchType ty, bool is_web) const; 56 std::string getSearchUrl(SearchType ty, bool is_web) const;
57 bool isRenderCompat() const; 57 bool isRenderCompat() const;
58 bool isUsernameCompat() const;
58 int getMaxAgentGroups() const { return mMaxAgentGroups; } 59 int getMaxAgentGroups() const { return mMaxAgentGroups; }
59 60
60 const std::string& getCurrencySymbol() const; 61 const std::string& getCurrencySymbol() const;
diff --git a/linden/indra/newview/installers/windows/imprudence_installer_script.iss b/linden/indra/newview/installers/windows/imprudence_installer_script.iss
new file mode 100644
index 0000000..17428eb
--- /dev/null
+++ b/linden/indra/newview/installers/windows/imprudence_installer_script.iss
@@ -0,0 +1,193 @@
1; Script generated by the Inno Setup Script Wizard.
2; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
4[Setup]
5; NOTE: The value of AppId uniquely identifies this application.
6; Do not use the same AppId value in installers for other applications.
7; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
8
9; These will change
10AppId={{D7736EE8-AFCE-4735-BBE3-652CDFBBFCA8}
11AppName=Imprudence
12AppVerName=Imprudence Viewer 1.3.0 RC2 (SSE2 optimized)
13DefaultDirName={pf}\Imprudence
14DefaultGroupName=Imprudence Viewer
15VersionInfoProductName=Imprudence Viewer
16OutputBaseFilename=Imprudence-1.3.0-RC2-(SSE2-optimized)-Setup
17VersionInfoVersion=1.3.0
18VersionInfoTextVersion=1.3.0
19VersionInfoProductVersion=1.3.0
20VersionInfoCopyright=2010
21AppCopyright=2010
22
23; These won't change
24VersionInfoCompany=Imprudence
25AppPublisher=The Imprudence Project
26AppPublisherURL=http://www.imprudenceviewer.org
27AppSupportURL=http://www.imprudenceviewer.org
28AppUpdatesURL=http://www.imprudenceviewer.org
29AllowNoIcons=true
30InfoAfterFile=..\windows\README.txt
31OutputDir=C:\
32SetupIconFile=..\windows\imp_icon.ico
33Compression=lzma2/ultra64
34InternalCompressLevel=ultra64
35SolidCompression=true
36PrivilegesRequired=poweruser
37AllowRootDirectory=true
38WizardImageFile=..\windows\imprudence_installer_icon_left.bmp
39WizardSmallImageFile=..\windows\imprudence_installer_icon_right.bmp
40SetupLogging=true
41
42[Languages]
43Name: english; MessagesFile: compiler:Default.isl
44
45[Tasks]
46Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce
47Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce
48Name: slurlassociate; Description: Associate Imprudence with SLURLs; GroupDescription: Associations:; Languages: ; Flags: checkedonce
49; TODO: use scripting for something like this on uninstall:
50; Name: uninstallsettings; Description: Remove user settings; Flags: checkablealone; Languages: ; GroupDescription: Uninstall:
51
52[Files]
53Source: C:\imp_1.3\imprudence.exe; DestDir: {app}; Flags: ignoreversion
54Source: C:\imp_1.3\character\*; DestDir: {app}\character; Flags: ignoreversion recursesubdirs createallsubdirs
55Source: C:\imp_1.3\fonts\*; DestDir: {app}\fonts; Flags: ignoreversion recursesubdirs createallsubdirs
56Source: C:\imp_1.3\app_settings\*; DestDir: {app}\app_settings; Flags: ignoreversion recursesubdirs createallsubdirs
57Source: C:\imp_1.3\skins\*; DestDir: {app}\skins; Flags: ignoreversion recursesubdirs createallsubdirs
58Source: C:\imp_1.3\doc\*; DestDir: {app}\doc; Flags: ignoreversion recursesubdirs createallsubdirs
59Source: C:\imp_1.3\lib\*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs createallsubdirs
60Source: C:\imp_1.3\alut.dll; DestDir: {app}; Flags: ignoreversion
61Source: C:\imp_1.3\ChangeLog.txt; DestDir: {app}; Flags: ignoreversion
62Source: C:\imp_1.3\charset.dll; DestDir: {app}; Flags: ignoreversion
63Source: C:\imp_1.3\dbghelp.dll; DestDir: {app}; Flags: ignoreversion
64Source: C:\imp_1.3\featuretable.txt; DestDir: {app}; Flags: ignoreversion
65Source: C:\imp_1.3\freebl3.dll; DestDir: {app}; Flags: ignoreversion
66Source: C:\imp_1.3\glew32.dll; DestDir: {app}; Flags: ignoreversion
67Source: C:\imp_1.3\gpu_table.txt; DestDir: {app}; Flags: ignoreversion
68Source: C:\imp_1.3\iconv.dll; DestDir: {app}; Flags: ignoreversion
69Source: C:\imp_1.3\imprudence.exe.config; DestDir: {app}; Flags: ignoreversion
70Source: C:\imp_1.3\imprudence.url; DestDir: {app}; Flags: ignoreversion
71Source: C:\imp_1.3\intl.dll; DestDir: {app}; Flags: ignoreversion
72Source: C:\imp_1.3\js3250.dll; DestDir: {app}; Flags: ignoreversion
73Source: C:\imp_1.3\libcairo-2.dll; DestDir: {app}; Flags: ignoreversion
74Source: C:\imp_1.3\libfaad-2.dll; DestDir: {app}; Flags: ignoreversion
75Source: C:\imp_1.3\libgcrypt-11.dll; DestDir: {app}; Flags: ignoreversion
76Source: C:\imp_1.3\libgio-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
77Source: C:\imp_1.3\libglib-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
78Source: C:\imp_1.3\libgmodule-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
79Source: C:\imp_1.3\libgnutls-26.dll; DestDir: {app}; Flags: ignoreversion
80Source: C:\imp_1.3\libgobject-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
81Source: C:\imp_1.3\libgpg-error-0.dll; DestDir: {app}; Flags: ignoreversion
82Source: C:\imp_1.3\libgstapp.dll; DestDir: {app}; Flags: ignoreversion
83Source: C:\imp_1.3\libgstaudio.dll; DestDir: {app}; Flags: ignoreversion
84Source: C:\imp_1.3\libgstaudio-0.10.dll; DestDir: {app}; Flags: ignoreversion
85Source: C:\imp_1.3\libgstbase-0.10.dll; DestDir: {app}; Flags: ignoreversion
86Source: C:\imp_1.3\libgstcdda.dll; DestDir: {app}; Flags: ignoreversion
87Source: C:\imp_1.3\libgstcontroller-0.10.dll; DestDir: {app}; Flags: ignoreversion
88Source: C:\imp_1.3\libgstdataprotocol-0.10.dll; DestDir: {app}; Flags: ignoreversion
89Source: C:\imp_1.3\libgstdshow.dll; DestDir: {app}; Flags: ignoreversion
90Source: C:\imp_1.3\libgstfft.dll; DestDir: {app}; Flags: ignoreversion
91Source: C:\imp_1.3\libgstinterfaces.dll; DestDir: {app}; Flags: ignoreversion
92Source: C:\imp_1.3\libgstnet-0.10.dll; DestDir: {app}; Flags: ignoreversion
93Source: C:\imp_1.3\libgstnetbuffer.dll; DestDir: {app}; Flags: ignoreversion
94Source: C:\imp_1.3\libgstpbutils.dll; DestDir: {app}; Flags: ignoreversion
95Source: C:\imp_1.3\libgstreamer-0.10.dll; DestDir: {app}; Flags: ignoreversion
96Source: C:\imp_1.3\libgstriff.dll; DestDir: {app}; Flags: ignoreversion
97Source: C:\imp_1.3\libgstrtp.dll; DestDir: {app}; Flags: ignoreversion
98Source: C:\imp_1.3\libgstrtsp.dll; DestDir: {app}; Flags: ignoreversion
99Source: C:\imp_1.3\libgstsdp.dll; DestDir: {app}; Flags: ignoreversion
100Source: C:\imp_1.3\libgsttag.dll; DestDir: {app}; Flags: ignoreversion
101Source: C:\imp_1.3\libgstvideo.dll; DestDir: {app}; Flags: ignoreversion
102Source: C:\imp_1.3\libgthread-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
103Source: C:\imp_1.3\libjpeg.dll; DestDir: {app}; Flags: ignoreversion
104Source: C:\imp_1.3\libmp3lame-0.dll; DestDir: {app}; Flags: ignoreversion
105Source: C:\imp_1.3\libneon-27.dll; DestDir: {app}; Flags: ignoreversion
106Source: C:\imp_1.3\libogg-0.dll; DestDir: {app}; Flags: ignoreversion
107Source: C:\imp_1.3\liboil-0.3-0.dll; DestDir: {app}; Flags: ignoreversion
108Source: C:\imp_1.3\libopenjpeg-2.dll; DestDir: {app}; Flags: ignoreversion
109Source: C:\imp_1.3\libpng12-0.dll; DestDir: {app}; Flags: ignoreversion
110Source: C:\imp_1.3\libschroedinger-1.0-0.dll; DestDir: {app}; Flags: ignoreversion
111Source: C:\imp_1.3\libspeex-1.dll; DestDir: {app}; Flags: ignoreversion
112Source: C:\imp_1.3\libtheora-0.dll; DestDir: {app}; Flags: ignoreversion
113Source: C:\imp_1.3\libvorbis-0.dll; DestDir: {app}; Flags: ignoreversion
114Source: C:\imp_1.3\libvorbisenc-2.dll; DestDir: {app}; Flags: ignoreversion
115Source: C:\imp_1.3\libxml2-2.dll; DestDir: {app}; Flags: ignoreversion
116Source: C:\imp_1.3\libxml2.dll; DestDir: {app}; Flags: ignoreversion
117Source: C:\imp_1.3\llkdu.dll.2.config; DestDir: {app}; Flags: ignoreversion
118Source: C:\imp_1.3\Microsoft.VC80.CRT.manifest; DestDir: {app}; Flags: ignoreversion
119Source: C:\imp_1.3\msvcp80.dll; DestDir: {app}; Flags: ignoreversion
120Source: C:\imp_1.3\msvcr80.dll; DestDir: {app}; Flags: ignoreversion
121Source: C:\imp_1.3\nspr4.dll; DestDir: {app}; Flags: ignoreversion
122Source: C:\imp_1.3\nss3.dll; DestDir: {app}; Flags: ignoreversion
123Source: C:\imp_1.3\nssckbi.dll; DestDir: {app}; Flags: ignoreversion
124Source: C:\imp_1.3\openal32.dll; DestDir: {app}; Flags: ignoreversion
125Source: C:\imp_1.3\OpenJPEG.dll; DestDir: {app}; Flags: ignoreversion
126Source: C:\imp_1.3\plc4.dll; DestDir: {app}; Flags: ignoreversion
127Source: C:\imp_1.3\plds4.dll; DestDir: {app}; Flags: ignoreversion
128Source: C:\imp_1.3\smime3.dll; DestDir: {app}; Flags: ignoreversion
129Source: C:\imp_1.3\softokn3.dll; DestDir: {app}; Flags: ignoreversion
130Source: C:\imp_1.3\ssl3.dll; DestDir: {app}; Flags: ignoreversion
131Source: C:\imp_1.3\xpcom.dll; DestDir: {app}; Flags: ignoreversion
132Source: C:\imp_1.3\xul.dll; DestDir: {app}; Flags: ignoreversion
133Source: C:\imp_1.3\xvidcore.dll; DestDir: {app}; Flags: ignoreversion
134Source: C:\imp_1.3\zlib1.dll; DestDir: {app}; Flags: ignoreversion
135
136; Voice files
137Source: C:\imp_1.3\ortp.dll; DestDir: {app}; Flags: ignoreversion
138Source: C:\imp_1.3\SLVoice.exe; DestDir: {app}; Flags: ignoreversion
139Source: C:\imp_1.3\vivoxsdk.dll; DestDir: {app}; Flags: ignoreversion
140Source: C:\imp_1.3\wrap_oal.dll; DestDir: {app}; Flags: ignoreversion
141
142; Old files we don't use anymore
143; Source: C:\imp_1.3\dronesettings.xml; DestDir: {app}; Flags: ignoreversion
144; Source: C:\imp_1.3\volume_settings.xml; DestDir: {app}; Flags: ignoreversion
145; Source: C:\imp_1.3\srtp.dll; DestDir: {app}; Flags: ignoreversion
146; Source: C:\imp_1.3\ssleay32.dll; DestDir: {app}; Flags: ignoreversion
147; Source: C:\imp_1.3\tntk.dll; DestDir: {app}; Flags: ignoreversion
148; Source: C:\imp_1.3\libeay32.dll; DestDir: {app}; Flags: ignoreversion
149; Source: C:\imp_1.3\lsl_guide.html; DestDir: {app}; Flags: ignoreversion
150
151; NOTE: Don't use "Flags: ignoreversion" on any shared system files
152;Source: C:\imp_1.3\msvcr71.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 0,6.01; Tasks: ; Languages:
153
154[Registry]
155Root: HKCR; Subkey: secondlife; ValueType: string; Flags: uninsdeletekey deletekey; Tasks: slurlassociate; ValueName: (default); ValueData: URL:Second Life
156Root: HKCR; Subkey: secondlife; ValueType: string; Flags: uninsdeletekey deletekey; Tasks: slurlassociate; ValueName: URL Protocol
157Root: HKCR; Subkey: secondlife\DefaultIcon; Flags: uninsdeletekey deletekey; ValueType: string; Tasks: slurlassociate; ValueData: {app}\imprudence.exe
158Root: HKCR; Subkey: secondlife\shell\open\command; ValueType: expandsz; Flags: uninsdeletekey deletekey; Tasks: slurlassociate; ValueData: "{app}\imprudence.exe --settings settings_imprudence.xml -url ""%1"""; Languages:
159; Root: HKCU; Subkey: Environment; ValueType: string; ValueName: GST_PLUGIN_PATH; Flags: deletevalue uninsdeletevalue; ValueData: {app}\lib
160; Root: HKCU; Subkey: Environment; ValueType: expandsz; ValueName: PATH; ValueData: {app}
161
162[Icons]
163Name: {group}\{cm:UninstallProgram,Imprudence}; Filename: {uninstallexe}
164Name: {commondesktop}\Imprudence; Filename: {app}\imprudence.exe; Tasks: desktopicon; Parameters: --settings settings_imprudence.xml; WorkingDir: {app}; IconIndex: 0
165Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Imprudence; Filename: {app}\imprudence.exe; Tasks: quicklaunchicon; Parameters: --settings settings_imprudence.xml; WorkingDir: {app}
166Name: {group}\Imprudence; Filename: {app}\imprudence.exe; WorkingDir: {app}; Comment: imprudence; IconIndex: 0; Parameters: --settings settings_imprudence.xml
167
168[Run]
169Filename: {app}\imprudence.exe; WorkingDir: {app}; Flags: nowait postinstall
170Filename: {app}\imprudence.url; WorkingDir: {app}; Flags: nowait postinstall shellexec; Description: See what makes Imprudence different
171
172[UninstallDelete]
173Name: {userappdata}\Imprudence\user_settings\password.dat; Type: files; Languages:
174Name: {userappdata}\Imprudence\user_settings\settings.xml; Type: files; Languages:
175Name: {userappdata}\Imprudence\user_settings\settings_imprudence.xml; Type: files; Languages:
176; 1.2 and lower cache location:
177Name: {userappdata}\Imprudence\cache; Type: filesandordirs
178; 1.3 and higher cache location:
179Name: {localappdata}\Imprudence\cache; Type: filesandordirs
180Name: {userappdata}\Imprudence\logs; Type: filesandordirs
181Name: {userappdata}\Imprudence\browser_profile; Type: filesandordirs
182Name: C:\Users\{username}\.gstreamer-0.10; Type: filesandordirs
183Name: C:\Documents and Settings\{username}\.gstreamer-0.10; Type: filesandordirs
184
185[InstallDelete]
186; Name: {app}\*.dll; Type: files; Tasks: ; Languages:
187Name: {app}\lib\gstreamer-plugins\*; Type: filesandordirs; Tasks: ; Languages:
188; Name: {app}\skins\default\xui\*; Type: filesandordirs; Tasks: ; Languages:
189; Name: {app}\skins\silver\xui\*; Type: filesandordirs; Tasks: ; Languages:
190Name: C:\Documents and Settings\{username}\.gstreamer-0.10\*; Type: filesandordirs
191Name: C:\Users\{username}\.gstreamer-0.10\*; Type: filesandordirs
192; Breaks the browser if installing on top of 1.1:
193Name: {app}\gksvggdiplus.dll; Type: files; Tasks: ; Languages:
diff --git a/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
new file mode 100644
index 0000000..d89a074
--- /dev/null
+++ b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
@@ -0,0 +1,263 @@
1; Script generated by the Inno Setup Script Wizard.
2; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
4[Setup]
5; NOTE: The value of AppId uniquely identifies this application.
6; Do not use the same AppId value in installers for other applications.
7; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
8
9; These will change
10AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
11AppName=Imprudence Viewer Experimental Release
12AppVerName=Imprudence Viewer 1.4.0 Experimental 2011.03.20
13DefaultDirName={pf}\ImprudenceExperimental
14DefaultGroupName=Imprudence Viewer Experimental Release
15VersionInfoProductName=Imprudence Viewer Experimental Release
16OutputBaseFilename=Imprudence-1.4.0-Experimental-2011.03.20-Setup
17VersionInfoVersion=1.4.0
18VersionInfoTextVersion=1.4.0
19VersionInfoProductVersion=1.4.0
20VersionInfoCopyright=2011
21AppCopyright=2011
22
23; These won't change
24VersionInfoCompany=Imprudence
25AppPublisher=The Imprudence Project
26AppPublisherURL=http://kokuaviewer.org
27AppSupportURL=http://kokuaviewer.org
28AppUpdatesURL=http://kokuaviewer.org
29AllowNoIcons=true
30InfoAfterFile=..\windows\README.txt
31OutputDir=C:\imprudence_installers
32SetupIconFile=..\windows\imp_icon.ico
33Compression=lzma2/ultra64
34InternalCompressLevel=ultra64
35SolidCompression=true
36;PrivilegesRequired=poweruser
37AllowRootDirectory=true
38WizardImageFile=..\windows\imprudence_installer_icon_left.bmp
39WizardSmallImageFile=..\windows\imprudence_installer_icon_right.bmp
40SetupLogging=true
41
42[Languages]
43Name: english; MessagesFile: compiler:Default.isl
44
45[Tasks]
46Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce
47Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce
48Name: slurlassociate; Description: Associate Imprudence with SLURLs; GroupDescription: Associations:; Languages: ; Flags: checkedonce
49; TODO: use scripting for something like this on uninstall:
50; Name: uninstallsettings; Description: Remove user settings; Flags: checkablealone; Languages: ; GroupDescription: Uninstall:
51
52[Files]
53Source: ..\..\..\build-vc80\newview\release\package\imprudence.exe; DestDir: {app}; Flags: ignoreversion
54Source: ..\..\..\build-vc80\newview\release\package\character\*; DestDir: {app}\character; Flags: ignoreversion recursesubdirs createallsubdirs
55Source: ..\..\..\build-vc80\newview\release\package\fonts\*; DestDir: {app}\fonts; Flags: ignoreversion recursesubdirs createallsubdirs
56Source: ..\..\..\build-vc80\newview\release\package\app_settings\*; DestDir: {app}\app_settings; Flags: ignoreversion recursesubdirs createallsubdirs
57Source: ..\..\..\build-vc80\newview\release\package\skins\*; DestDir: {app}\skins; Flags: ignoreversion recursesubdirs createallsubdirs
58Source: ..\..\..\build-vc80\newview\release\package\doc\*; DestDir: {app}\doc; Flags: ignoreversion recursesubdirs createallsubdirs
59Source: ..\..\..\build-vc80\newview\release\package\llplugin\*; DestDir: {app}\llplugin; Flags: ignoreversion recursesubdirs createallsubdirs
60Source: ..\..\..\build-vc80\newview\release\package\alut.dll; DestDir: {app}; Flags: ignoreversion
61Source: ..\..\..\build-vc80\newview\release\package\ChangeLog.txt; DestDir: {app}; Flags: ignoreversion
62Source: ..\..\..\build-vc80\newview\release\package\dbghelp.dll; DestDir: {app}; Flags: ignoreversion
63Source: ..\..\..\build-vc80\newview\release\package\featuretable.txt; DestDir: {app}; Flags: ignoreversion
64Source: ..\..\..\build-vc80\newview\release\package\gpu_table.txt; DestDir: {app}; Flags: ignoreversion
65Source: ..\..\..\build-vc80\newview\release\package\imprudence.url; DestDir: {app}; Flags: ignoreversion
66Source: ..\..\..\build-vc80\newview\release\package\libapr-1.dll; DestDir: {app}; Flags: ignoreversion
67Source: ..\..\..\build-vc80\newview\release\package\libapriconv-1.dll; DestDir: {app}; Flags: ignoreversion
68Source: ..\..\..\build-vc80\newview\release\package\libaprutil-1.dll; DestDir: {app}; Flags: ignoreversion
69Source: ..\..\..\build-vc80\newview\release\package\libhunspell.dll; DestDir: {app}; Flags: ignoreversion
70Source: ..\..\..\build-vc80\newview\release\package\llcommon.dll; DestDir: {app}; Flags: ignoreversion
71Source: ..\..\..\build-vc80\newview\release\package\llkdu.dll.2.config; DestDir: {app}; Flags: ignoreversion
72Source: ..\..\..\build-vc80\newview\release\package\openal32.dll; DestDir: {app}; Flags: ignoreversion
73Source: ..\..\..\build-vc80\newview\release\package\OpenJPEG.dll; DestDir: {app}; Flags: ignoreversion
74Source: ..\..\..\build-vc80\newview\release\package\SLPlugin.exe; DestDir: {app}; Flags: ignoreversion
75
76; Gstreamer-specific files below
77Source: ..\..\..\build-vc80\newview\release\package\lib\*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs createallsubdirs
78Source: ..\..\..\build-vc80\newview\release\package\avcodec-gpl-52.dll; DestDir: {app}; Flags: ignoreversion
79Source: ..\..\..\build-vc80\newview\release\package\avdevice-gpl-52.dll; DestDir: {app}; Flags: ignoreversion
80Source: ..\..\..\build-vc80\newview\release\package\avfilter-gpl-1.dll; DestDir: {app}; Flags: ignoreversion
81Source: ..\..\..\build-vc80\newview\release\package\avformat-gpl-52.dll; DestDir: {app}; Flags: ignoreversion
82Source: ..\..\..\build-vc80\newview\release\package\avutil-gpl-50.dll; DestDir: {app}; Flags: ignoreversion
83Source: ..\..\..\build-vc80\newview\release\package\iconv.dll; DestDir: {app}; Flags: ignoreversion
84Source: ..\..\..\build-vc80\newview\release\package\liba52-0.dll; DestDir: {app}; Flags: ignoreversion
85Source: ..\..\..\build-vc80\newview\release\package\libbz2.dll; DestDir: {app}; Flags: ignoreversion
86Source: ..\..\..\build-vc80\newview\release\package\libcelt-0.dll; DestDir: {app}; Flags: ignoreversion
87Source: ..\..\..\build-vc80\newview\release\package\libdca-0.dll; DestDir: {app}; Flags: ignoreversion
88Source: ..\..\..\build-vc80\newview\release\package\libexpat-1.dll; DestDir: {app}; Flags: ignoreversion
89Source: ..\..\..\build-vc80\newview\release\package\libfaad-2.dll; DestDir: {app}; Flags: ignoreversion
90Source: ..\..\..\build-vc80\newview\release\package\libFLAC-8.dll; DestDir: {app}; Flags: ignoreversion
91Source: ..\..\..\build-vc80\newview\release\package\libgcrypt-11.dll; DestDir: {app}; Flags: ignoreversion
92Source: ..\..\..\build-vc80\newview\release\package\libgio-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
93Source: ..\..\..\build-vc80\newview\release\package\libglib-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
94Source: ..\..\..\build-vc80\newview\release\package\libgmodule-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
95Source: ..\..\..\build-vc80\newview\release\package\libgnutls-26.dll; DestDir: {app}; Flags: ignoreversion
96Source: ..\..\..\build-vc80\newview\release\package\libgobject-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
97Source: ..\..\..\build-vc80\newview\release\package\libgpg-error-0.dll; DestDir: {app}; Flags: ignoreversion
98Source: ..\..\..\build-vc80\newview\release\package\libgstapp-0.10.dll; DestDir: {app}; Flags: ignoreversion
99Source: ..\..\..\build-vc80\newview\release\package\libgstaudio-0.10.dll; DestDir: {app}; Flags: ignoreversion
100Source: ..\..\..\build-vc80\newview\release\package\libgstbase-0.10.dll; DestDir: {app}; Flags: ignoreversion
101Source: ..\..\..\build-vc80\newview\release\package\libgstcontroller-0.10.dll; DestDir: {app}; Flags: ignoreversion
102Source: ..\..\..\build-vc80\newview\release\package\libgstdataprotocol-0.10.dll; DestDir: {app}; Flags: ignoreversion
103Source: ..\..\..\build-vc80\newview\release\package\libgstfft-0.10.dll; DestDir: {app}; Flags: ignoreversion
104Source: ..\..\..\build-vc80\newview\release\package\libgstinterfaces-0.10.dll; DestDir: {app}; Flags: ignoreversion
105Source: ..\..\..\build-vc80\newview\release\package\libgstnet-0.10.dll; DestDir: {app}; Flags: ignoreversion
106Source: ..\..\..\build-vc80\newview\release\package\libgstnetbuffer-0.10.dll; DestDir: {app}; Flags: ignoreversion
107Source: ..\..\..\build-vc80\newview\release\package\libgstpbutils-0.10.dll; DestDir: {app}; Flags: ignoreversion
108Source: ..\..\..\build-vc80\newview\release\package\libgstphotography-0.10.dll; DestDir: {app}; Flags: ignoreversion
109Source: ..\..\..\build-vc80\newview\release\package\libgstreamer-0.10.dll; DestDir: {app}; Flags: ignoreversion
110Source: ..\..\..\build-vc80\newview\release\package\libgstriff-0.10.dll; DestDir: {app}; Flags: ignoreversion
111Source: ..\..\..\build-vc80\newview\release\package\libgstrtp-0.10.dll; DestDir: {app}; Flags: ignoreversion
112Source: ..\..\..\build-vc80\newview\release\package\libgstrtsp-0.10.dll; DestDir: {app}; Flags: ignoreversion
113Source: ..\..\..\build-vc80\newview\release\package\libgstsdp-0.10.dll; DestDir: {app}; Flags: ignoreversion
114Source: ..\..\..\build-vc80\newview\release\package\libgstsignalprocessor-0.10.dll; DestDir: {app}; Flags: ignoreversion
115Source: ..\..\..\build-vc80\newview\release\package\libgsttag-0.10.dll; DestDir: {app}; Flags: ignoreversion
116Source: ..\..\..\build-vc80\newview\release\package\libgstvideo-0.10.dll; DestDir: {app}; Flags: ignoreversion
117Source: ..\..\..\build-vc80\newview\release\package\libgthread-2.0-0.dll; DestDir: {app}; Flags: ignoreversion
118Source: ..\..\..\build-vc80\newview\release\package\libmms-0.dll; DestDir: {app}; Flags: ignoreversion
119Source: ..\..\..\build-vc80\newview\release\package\libmpeg2-0.dll; DestDir: {app}; Flags: ignoreversion
120Source: ..\..\..\build-vc80\newview\release\package\libneon-27.dll; DestDir: {app}; Flags: ignoreversion
121Source: ..\..\..\build-vc80\newview\release\package\libogg-0.dll; DestDir: {app}; Flags: ignoreversion
122Source: ..\..\..\build-vc80\newview\release\package\liboil-0.3-0.dll; DestDir: {app}; Flags: ignoreversion
123Source: ..\..\..\build-vc80\newview\release\package\libsoup-2.4-1.dll; DestDir: {app}; Flags: ignoreversion
124Source: ..\..\..\build-vc80\newview\release\package\libtasn1-3.dll; DestDir: {app}; Flags: ignoreversion
125Source: ..\..\..\build-vc80\newview\release\package\libtheora-0.dll; DestDir: {app}; Flags: ignoreversion
126Source: ..\..\..\build-vc80\newview\release\package\libtheoradec-1.dll; DestDir: {app}; Flags: ignoreversion
127Source: ..\..\..\build-vc80\newview\release\package\libvorbis-0.dll; DestDir: {app}; Flags: ignoreversion
128Source: ..\..\..\build-vc80\newview\release\package\libvorbisenc-2.dll; DestDir: {app}; Flags: ignoreversion
129Source: ..\..\..\build-vc80\newview\release\package\libvorbisfile-3.dll; DestDir: {app}; Flags: ignoreversion
130Source: ..\..\..\build-vc80\newview\release\package\libwavpack-1.dll; DestDir: {app}; Flags: ignoreversion
131Source: ..\..\..\build-vc80\newview\release\package\libx264-67.dll; DestDir: {app}; Flags: ignoreversion
132Source: ..\..\..\build-vc80\newview\release\package\libxml2-2.dll; DestDir: {app}; Flags: ignoreversion
133Source: ..\..\..\build-vc80\newview\release\package\libxml2.dll; DestDir: {app}; Flags: ignoreversion
134Source: ..\..\..\build-vc80\newview\release\package\SDL.dll; DestDir: {app}; Flags: ignoreversion
135Source: ..\..\..\build-vc80\newview\release\package\xvidcore.dll; DestDir: {app}; Flags: ignoreversion
136Source: ..\..\..\build-vc80\newview\release\package\z.dll; DestDir: {app}; Flags: ignoreversion
137
138; Voice files
139Source: ..\..\..\build-vc80\newview\release\package\ortp.dll; DestDir: {app}; Flags: ignoreversion
140Source: ..\..\..\build-vc80\newview\release\package\SLVoice.exe; DestDir: {app}; Flags: ignoreversion
141Source: ..\..\..\build-vc80\newview\release\package\vivoxsdk.dll; DestDir: {app}; Flags: ignoreversion
142Source: ..\..\..\build-vc80\newview\release\package\wrap_oal.dll; DestDir: {app}; Flags: ignoreversion
143
144; VC++ 2005 x86 redist
145Source: ..\windows\vcredist_x86_VS2005.exe; DestDir: {tmp}; DestName: vcredist_x86_2005.exe
146
147; Old files we don't use anymore:
148; Source: ..\..\..\build-vc80\newview\release\package\dronesettings.xml; DestDir: {app}; Flags: ignoreversion
149; Source: ..\..\..\build-vc80\newview\release\package\volume_settings.xml; DestDir: {app}; Flags: ignoreversion
150; Source: ..\..\..\build-vc80\newview\release\package\srtp.dll; DestDir: {app}; Flags: ignoreversion
151; Source: ..\..\..\build-vc80\newview\release\package\ssleay32.dll; DestDir: {app}; Flags: ignoreversion
152; Source: ..\..\..\build-vc80\newview\release\package\tntk.dll; DestDir: {app}; Flags: ignoreversion
153; Source: ..\..\..\build-vc80\newview\release\package\libeay32.dll; DestDir: {app}; Flags: ignoreversion
154; Source: ..\..\..\build-vc80\newview\release\package\lsl_guide.html; DestDir: {app}; Flags: ignoreversion
155
156; NOTE: Don't use "Flags: ignoreversion" on any shared system files
157;Source: ..\..\..\build-vc80\newview\release\package\msvcr71.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 0,6.01; Tasks: ; Languages:
158
159[Icons]
160Name: {group}\{cm:UninstallProgram,Imprudence Experimental}; Filename: {uninstallexe}
161Name: {commondesktop}\Imprudence Experimental; Filename: {app}\imprudence.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0
162Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Imprudence Experimental; Filename: {app}\imprudence.exe; Tasks: quicklaunchicon; WorkingDir: {app}
163Name: {group}\Imprudence Experimental; Filename: {app}\imprudence.exe; WorkingDir: {app}; Comment: imprudence; IconIndex: 0
164
165[Run]
166Filename: {app}\imprudence.exe; WorkingDir: {app}; Flags: nowait postinstall
167Filename: {app}\imprudence.url; WorkingDir: {app}; Flags: nowait postinstall shellexec; Description: See what makes Imprudence different
168Filename: {tmp}\vcredist_x86_2005.exe; Parameters: "/q:a /c:""VCREDI~1.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; Flags: runhidden
169
170[UninstallDelete]
171Name: {userappdata}\Imprudence\user_settings\password.dat; Type: files; Languages:
172Name: {userappdata}\Imprudence\user_settings\settings.xml; Type: files; Languages:
173Name: {userappdata}\Imprudence\user_settings\settings_imprudence_experimental.xml; Type: files; Languages:
174; 1.2 and lower cache location:
175Name: {userappdata}\Imprudence\cache; Type: filesandordirs
176; 1.3 and higher cache location:
177Name: {localappdata}\Imprudence\cache; Type: filesandordirs
178Name: {userappdata}\Imprudence\logs; Type: filesandordirs
179Name: {userappdata}\Imprudence\browser_profile; Type: filesandordirs
180Name: C:\Users\{username}\.gstreamer-0.10; Type: filesandordirs
181Name: C:\Documents and Settings\{username}\.gstreamer-0.10; Type: filesandordirs
182
183[InstallDelete]
184; Name: {app}\*.dll; Type: files; Tasks: ; Languages:
185Name: {app}\lib\gstreamer-plugins\*; Type: filesandordirs; Tasks: ; Languages:
186; Name: {app}\skins\default\xui\*; Type: filesandordirs; Tasks: ; Languages:
187; Name: {app}\skins\silver\xui\*; Type: filesandordirs; Tasks: ; Languages:
188Name: C:\Documents and Settings\{username}\.gstreamer-0.10\*; Type: filesandordirs
189Name: C:\Users\{username}\.gstreamer-0.10\*; Type: filesandordirs
190; Breaks the browser if installing on top of 1.1:
191Name: {app}\gksvggdiplus.dll; Type: files; Tasks: ; Languages:
192
193; Pre-plugin files:
194Name: {app}\charset.dll; Type: files; Tasks: ; Languages:
195Name: {app}\freebl3.dll; Type: files; Tasks: ; Languages:
196Name: {app}\glew32.dll; Type: files; Tasks: ; Languages:
197Name: {app}\iconv.dll; Type: files; Tasks: ; Languages:
198Name: {app}\intl.dll; Type: files; Tasks: ; Languages:
199Name: {app}\js3250.dll; Type: files; Tasks: ; Languages:
200Name: {app}\libcairo-2.dll; Type: files; Tasks: ; Languages:
201Name: {app}\libfaad-2.dll; Type: files; Tasks: ; Languages:
202Name: {app}\libgcrypt-11.dll; Type: files; Tasks: ; Languages:
203Name: {app}\libgio-2.0-0.dll; Type: files; Tasks: ; Languages:
204Name: {app}\libglib-2.0-0.dll; Type: files; Tasks: ; Languages:
205Name: {app}\libgmodule-2.0-0.dll; Type: files; Tasks: ; Languages:
206Name: {app}\libgnutls-26.dll; Type: files; Tasks: ; Languages:
207Name: {app}\libgobject-2.0-0.dll; Type: files; Tasks: ; Languages:
208Name: {app}\libgpg-error-0.dll; Type: files; Tasks: ; Languages:
209Name: {app}\libgstapp.dll; Type: files; Tasks: ; Languages:
210Name: {app}\libgstaudio.dll; Type: files; Tasks: ; Languages:
211Name: {app}\libgstaudio-0.10.dll; Type: files; Tasks: ; Languages:
212Name: {app}\libgstbase-0.10.dll; Type: files; Tasks: ; Languages:
213Name: {app}\libgstcdda.dll; Type: files; Tasks: ; Languages:
214Name: {app}\libgstcontroller-0.10.dll; Type: files; Tasks: ; Languages:
215Name: {app}\libgstdataprotocol-0.10.dll; Type: files; Tasks: ; Languages:
216Name: {app}\libgstdshow.dll; Type: files; Tasks: ; Languages:
217Name: {app}\libgstfft.dll; Type: files; Tasks: ; Languages:
218Name: {app}\libgstinterfaces.dll; Type: files; Tasks: ; Languages:
219Name: {app}\libgstnet-0.10.dll; Type: files; Tasks: ; Languages:
220Name: {app}\libgstnetbuffer.dll; Type: files; Tasks: ; Languages:
221Name: {app}\libgstpbutils.dll; Type: files; Tasks: ; Languages:
222Name: {app}\libgstreamer-0.10.dll; Type: files; Tasks: ; Languages:
223Name: {app}\libgstriff.dll; Type: files; Tasks: ; Languages:
224Name: {app}\libgstrtp.dll; Type: files; Tasks: ; Languages:
225Name: {app}\libgstrtsp.dll; Type: files; Tasks: ; Languages:
226Name: {app}\libgstsdp.dll; Type: files; Tasks: ; Languages:
227Name: {app}\libgsttag.dll; Type: files; Tasks: ; Languages:
228Name: {app}\libgstvideo.dll; Type: files; Tasks: ; Languages:
229Name: {app}\libgthread-2.0-0.dll; Type: files; Tasks: ; Languages:
230Name: {app}\libjpeg.dll; Type: files; Tasks: ; Languages:
231Name: {app}\libmp3lame-0.dll; Type: files; Tasks: ; Languages:
232Name: {app}\libneon-27.dll; Type: files; Tasks: ; Languages:
233Name: {app}\libogg-0.dll; Type: files; Tasks: ; Languages:
234Name: {app}\liboil-0.3-0.dll; Type: files; Tasks: ; Languages:
235Name: {app}\libopenjpeg-2.dll; Type: files; Tasks: ; Languages:
236Name: {app}\libpng12-0.dll; Type: files; Tasks: ; Languages:
237Name: {app}\libschroedinger-1.0-0.dll; Type: files; Tasks: ; Languages:
238Name: {app}\libspeex-1.dll; Type: files; Tasks: ; Languages:
239Name: {app}\libtheora-0.dll; Type: files; Tasks: ; Languages:
240Name: {app}\libvorbis-0.dll; Type: files; Tasks: ; Languages:
241Name: {app}\libvorbisenc-2.dll; Type: files; Tasks: ; Languages:
242Name: {app}\libxml2-2.dll; Type: files; Tasks: ; Languages:
243Name: {app}\libxml2.dll; Type: files; Tasks: ; Languages:
244Name: {app}\nspr4.dll; Type: files; Tasks: ; Languages:
245Name: {app}\nss3.dll; Type: files; Tasks: ; Languages:
246Name: {app}\nssckbi.dll; Type: files; Tasks: ; Languages:
247Name: {app}\plc4.dll; Type: files; Tasks: ; Languages:
248Name: {app}\plds4.dll; Type: files; Tasks: ; Languages:
249Name: {app}\RELEASE_NOTES.txt; Type: files; Tasks: ; Languages:
250Name: {app}\smime3.dll; Type: files; Tasks: ; Languages:
251Name: {app}\softokn3.dll; Type: files; Tasks: ; Languages:
252Name: {app}\ssl3.dll; Type: files; Tasks: ; Languages:
253Name: {app}\xpcom.dll; Type: files; Tasks: ; Languages:
254Name: {app}\xul.dll; Type: files; Tasks: ; Languages:
255Name: {app}\xvidcore.dll; Type: files; Tasks: ; Languages:
256Name: {app}\zlib1.dll; Type: files; Tasks: ; Languages:
257
258; We don't distribute the CRT like this anymore; kill old files
259Name: {app}\SLPlugin.exe.config; Type: files; Tasks: ; Languages:
260Name: {app}\Microsoft.VC80.CRT.manifest; Type: files; Tasks: ; Languages:
261Name: {app}\msvcp80.dll; Type: files; Tasks: ; Languages:
262Name: {app}\msvcr80.dll; Type: files; Tasks: ; Languages:
263Name: {app}\imprudence.exe.config; Type: files; Tasks: ; Languages:
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index 2379da3..2cea383 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -117,7 +117,7 @@ void LLConsole::setFontSize(S32 size_index)
117 } 117 }
118 else if (1 == size_index) 118 else if (1 == size_index)
119 { 119 {
120 mFont = LLFontGL::getFontSansSerifBig(); 120 mFont = LLFontGL::getFontSansSerifLarge();
121 } 121 }
122 else 122 else
123 { 123 {
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp
index 0f81be6..c99d75d 100644
--- a/linden/indra/newview/llfloaterpreference.cpp
+++ b/linden/indra/newview/llfloaterpreference.cpp
@@ -365,6 +365,7 @@ void LLPreferenceCore::setPersonalInfo(const std::string& visibility, bool im_vi
365void LLPreferenceCore::updateIsLoggedIn(bool enable) 365void LLPreferenceCore::updateIsLoggedIn(bool enable)
366{ 366{
367 mPrefsIM->preparePerAccountPrefs(enable); 367 mPrefsIM->preparePerAccountPrefs(enable);
368 mAudioPanel->updateIsLoggedIn(enable);
368} 369}
369 370
370void LLPreferenceCore::refreshEnabledGraphics() 371void LLPreferenceCore::refreshEnabledGraphics()
@@ -456,6 +457,25 @@ void LLFloaterPreference::show(void*)
456} 457}
457 458
458 459
460// static
461void LLFloaterPreference::onClickResetPrefs(void* user_data)
462{
463 LLFloaterPreference* self = (LLFloaterPreference*)user_data;
464 LLNotifications::instance().add("ConfirmResetAllPreferences", LLSD(), LLSD(), boost::bind(callbackReset, _1, _2, self));
465}
466
467// static
468bool LLFloaterPreference::callbackReset(const LLSD& notification, const LLSD& response, LLFloaterPreference *self)
469{
470 S32 option = LLNotification::getSelectedOption(notification, response);
471 if ( option == 0 )
472 {
473 gSavedSettings.setBOOL("ResetAllPreferences", TRUE);
474 }
475 return false;
476}
477
478
459// static 479// static
460void LLFloaterPreference::onBtnOK( void* userdata ) 480void LLFloaterPreference::onBtnOK( void* userdata )
461{ 481{
diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h
index 931c8b6..d5eccbc 100644
--- a/linden/indra/newview/llfloaterpreference.h
+++ b/linden/indra/newview/llfloaterpreference.h
@@ -133,6 +133,9 @@ protected:
133 static void onBtnCancel(void*); 133 static void onBtnCancel(void*);
134 static void onBtnApply(void*); 134 static void onBtnApply(void*);
135 135
136 static void onClickResetPrefs(void* user_data);
137 static bool callbackReset(const LLSD& notification, const LLSD& response, LLFloaterPreference* self);
138
136 static LLFloaterPreference* sInstance; 139 static LLFloaterPreference* sInstance;
137}; 140};
138 141
diff --git a/linden/indra/newview/llfloatertest.cpp b/linden/indra/newview/llfloatertest.cpp
index e9aada3..1934dcc 100644
--- a/linden/indra/newview/llfloatertest.cpp
+++ b/linden/indra/newview/llfloatertest.cpp
@@ -228,7 +228,9 @@ LLFloaterTestImpl::LLFloaterTestImpl()
228 combo = new LLComboBox(std::string("combo"), 228 combo = new LLComboBox(std::string("combo"),
229 LLRect(LEFT, y, LEFT+100, y-LLCOMBOBOX_HEIGHT), 229 LLRect(LEFT, y, LEFT+100, y-LLCOMBOBOX_HEIGHT),
230 std::string("Combobox Label"), 230 std::string("Combobox Label"),
231 onCommitCombo, this); 231 NULL,
232 onCommitCombo,
233 this);
232 combo->add(std::string("first item")); 234 combo->add(std::string("first item"));
233 combo->add(std::string("second item")); 235 combo->add(std::string("second item"));
234 combo->add(std::string("should go to the top"), ADD_TOP); 236 combo->add(std::string("should go to the top"), ADD_TOP);
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index 8e98cbc..81e6c21 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -186,7 +186,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
186 LLFontGL::getFontSansSerif(), 186 LLFontGL::getFontSansSerif(),
187 FALSE); 187 FALSE);
188 188
189 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig")); 189 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifLarge"));
190 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif")); 190 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif"));
191 191
192 text->appendStyledText(subject + "\n",false,false,headerstyle); 192 text->appendStyledText(subject + "\n",false,false,headerstyle);
diff --git a/linden/indra/newview/llloginhandler.cpp b/linden/indra/newview/llloginhandler.cpp
index 30b05ef..c35ba04 100644
--- a/linden/indra/newview/llloginhandler.cpp
+++ b/linden/indra/newview/llloginhandler.cpp
@@ -35,6 +35,7 @@
35#include "llloginhandler.h" 35#include "llloginhandler.h"
36 36
37// viewer includes 37// viewer includes
38#include "hippogridmanager.h"
38#include "llpanellogin.h" // save_password_to_disk() 39#include "llpanellogin.h" // save_password_to_disk()
39#include "llstartup.h" // getStartupState() 40#include "llstartup.h" // getStartupState()
40#include "llurlsimstring.h" 41#include "llurlsimstring.h"
@@ -141,10 +142,27 @@ bool LLLoginHandler::handle(const LLSD& tokens,
141 142
142 if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) //on splash page 143 if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) //on splash page
143 { 144 {
145 // if we ever support saving names based on grid, we'll have to support saving usernames too -- MC
146 LLPanelLogin::loadLoginForm();
147
144 if (!mFirstName.empty() || !mLastName.empty()) 148 if (!mFirstName.empty() || !mLastName.empty())
145 { 149 {
146 // Fill in the name, and maybe the password 150 // Fill in the name, and maybe the password
147 LLPanelLogin::setFields(mFirstName, mLastName, password); 151 if (gHippoGridManager && gHippoGridManager->getCurrentGrid()->isUsernameCompat())
152 {
153 if (mLastName == "resident" || mLastName == "Resident")
154 {
155 LLPanelLogin::setFields(mFirstName, password);
156 }
157 else
158 {
159 LLPanelLogin::setFields(mFirstName+"."+ mLastName, password);
160 }
161 }
162 else
163 {
164 LLPanelLogin::setFields(mFirstName, mLastName, password);
165 }
148 } 166 }
149 167
150 if (mWebLoginKey.isNull()) 168 if (mWebLoginKey.isNull())
diff --git a/linden/indra/newview/llmediaremotectrl.cpp b/linden/indra/newview/llmediaremotectrl.cpp
index 8186293..2f6dbdf 100644
--- a/linden/indra/newview/llmediaremotectrl.cpp
+++ b/linden/indra/newview/llmediaremotectrl.cpp
@@ -172,7 +172,7 @@ void LLMediaRemoteCtrl::enableMediaButtons()
172 { 172 {
173 // Set the tooltip 173 // Set the tooltip
174 // Put this text into xui file 174 // Put this text into xui file
175 media_url = parcel->getObscureMedia() ? mControls->getString("media_hidden_label") : parcel->getMediaURL(); 175 media_url = parcel->getMediaURL();
176 media_type = parcel->getMediaType(); 176 media_type = parcel->getMediaType();
177 177
178 play_media_enabled = true; 178 play_media_enabled = true;
diff --git a/linden/indra/newview/llnamelistctrl.cpp b/linden/indra/newview/llnamelistctrl.cpp
index e30c129..935e6ac 100644
--- a/linden/indra/newview/llnamelistctrl.cpp
+++ b/linden/indra/newview/llnamelistctrl.cpp
@@ -54,7 +54,7 @@ LLNameListCtrl::LLNameListCtrl(const std::string& name,
54 BOOL draw_border, 54 BOOL draw_border,
55 S32 name_column_index, 55 S32 name_column_index,
56 const std::string& tooltip) 56 const std::string& tooltip)
57: LLScrollListCtrl(name, rect, cb, userdata, allow_multiple_selection, 57: LLScrollListCtrl(name, rect, NULL, cb, userdata, allow_multiple_selection,
58 draw_border), 58 draw_border),
59 mNameColumnIndex(name_column_index), 59 mNameColumnIndex(name_column_index),
60 mAllowCallingCardDrop(FALSE), 60 mAllowCallingCardDrop(FALSE),
diff --git a/linden/indra/newview/llpanelaudioprefs.cpp b/linden/indra/newview/llpanelaudioprefs.cpp
index f1a8af5..25e5043 100644
--- a/linden/indra/newview/llpanelaudioprefs.cpp
+++ b/linden/indra/newview/llpanelaudioprefs.cpp
@@ -55,12 +55,14 @@
55#include "llslider.h" 55#include "llslider.h"
56#include "llsliderctrl.h" 56#include "llsliderctrl.h"
57#include "llspinctrl.h" 57#include "llspinctrl.h"
58#include "llstartup.h"
58#include "lltextbox.h" 59#include "lltextbox.h"
59#include "llui.h" 60#include "llui.h"
60#include "llviewerparcelmgr.h" 61#include "llviewerparcelmgr.h"
61#include "lluictrlfactory.h" 62#include "lluictrlfactory.h"
62#include "llviewerwindow.h" 63#include "llviewerwindow.h"
63#include "llviewercontrol.h" 64#include "llviewercontrol.h"
65#include "slfloatermediafilter.h"
64 66
65#include "hippogridmanager.h" 67#include "hippogridmanager.h"
66 68
@@ -92,6 +94,8 @@ BOOL LLPanelAudioPrefs::postBuild()
92 refreshValues(); // initialize member data from saved settings 94 refreshValues(); // initialize member data from saved settings
93 childSetLabelArg("L$ Change Threshold", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol()); 95 childSetLabelArg("L$ Change Threshold", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
94 childSetValue("mute_wind_check", !gSavedSettings.getBOOL("MuteWind")); 96 childSetValue("mute_wind_check", !gSavedSettings.getBOOL("MuteWind"));
97 childSetAction("show_media_filter", onShowMediaFilter, this);
98 updateIsLoggedIn(LLStartUp::isLoggedIn());
95 99
96 return TRUE; 100 return TRUE;
97} 101}
@@ -113,7 +117,7 @@ void LLPanelAudioPrefs::refreshValues()
113 mPreviousStreamingMusic = gSavedSettings.getBOOL("AudioStreamingMusic"); 117 mPreviousStreamingMusic = gSavedSettings.getBOOL("AudioStreamingMusic");
114 mPreviousStreamingVideo = gSavedSettings.getBOOL("AudioStreamingVideo"); 118 mPreviousStreamingVideo = gSavedSettings.getBOOL("AudioStreamingVideo");
115 mPreviousHelperWidget = gSavedSettings.getBOOL("MediaOnAPrimUI"); 119 mPreviousHelperWidget = gSavedSettings.getBOOL("MediaOnAPrimUI");
116 120 mPreviousEnableMediaFilter = gSavedSettings.getBOOL("MediaEnableFilter");
117 mPreviousMuteAudio = gSavedSettings.getBOOL("MuteAudio"); 121 mPreviousMuteAudio = gSavedSettings.getBOOL("MuteAudio");
118 mPreviousMuteWhenMinimized = gSavedSettings.getBOOL("MuteWhenMinimized"); 122 mPreviousMuteWhenMinimized = gSavedSettings.getBOOL("MuteWhenMinimized");
119} 123}
@@ -142,7 +146,18 @@ void LLPanelAudioPrefs::cancel()
142 gSavedSettings.setBOOL("AudioStreamingMusic", mPreviousStreamingMusic ); 146 gSavedSettings.setBOOL("AudioStreamingMusic", mPreviousStreamingMusic );
143 gSavedSettings.setBOOL("AudioStreamingVideo", mPreviousStreamingVideo ); 147 gSavedSettings.setBOOL("AudioStreamingVideo", mPreviousStreamingVideo );
144 gSavedSettings.setBOOL("MediaOnAPrimUI", mPreviousHelperWidget ); 148 gSavedSettings.setBOOL("MediaOnAPrimUI", mPreviousHelperWidget );
145 149 gSavedSettings.setBOOL("MediaEnableFilter", mPreviousEnableMediaFilter );
146 gSavedSettings.setBOOL("MuteAudio", mPreviousMuteAudio ); 150 gSavedSettings.setBOOL("MuteAudio", mPreviousMuteAudio );
147 gSavedSettings.setBOOL("MuteWhenMinimized", mPreviousMuteWhenMinimized ); 151 gSavedSettings.setBOOL("MuteWhenMinimized", mPreviousMuteWhenMinimized );
148} 152}
153
154//static
155void LLPanelAudioPrefs::onShowMediaFilter(void* data)
156{
157 SLFloaterMediaFilter::toggleInstance();
158}
159
160void LLPanelAudioPrefs::updateIsLoggedIn(const bool enable)
161{
162 childSetEnabled("show_media_filter", enable);
163}
diff --git a/linden/indra/newview/llpanelaudioprefs.h b/linden/indra/newview/llpanelaudioprefs.h
index 56982b8..a47a83e 100644
--- a/linden/indra/newview/llpanelaudioprefs.h
+++ b/linden/indra/newview/llpanelaudioprefs.h
@@ -54,6 +54,9 @@ public:
54 virtual BOOL postBuild(); 54 virtual BOOL postBuild();
55 55
56 static void* createVolumePanel(void* data); 56 static void* createVolumePanel(void* data);
57 static void onShowMediaFilter(void* data);
58
59 void updateIsLoggedIn(const bool);
57 60
58private: 61private:
59 void refreshValues(); 62 void refreshValues();
@@ -76,6 +79,7 @@ private:
76 BOOL mPreviousStreamingMusic; 79 BOOL mPreviousStreamingMusic;
77 BOOL mPreviousStreamingVideo; 80 BOOL mPreviousStreamingVideo;
78 BOOL mPreviousHelperWidget; 81 BOOL mPreviousHelperWidget;
82 BOOL mPreviousEnableMediaFilter;
79 BOOL mPreviousMuteAudio; 83 BOOL mPreviousMuteAudio;
80 BOOL mPreviousMuteWhenMinimized; 84 BOOL mPreviousMuteWhenMinimized;
81}; 85};
diff --git a/linden/indra/newview/llpanellandaudio.cpp b/linden/indra/newview/llpanellandaudio.cpp
index 0247009..8d902b6 100644
--- a/linden/indra/newview/llpanellandaudio.cpp
+++ b/linden/indra/newview/llpanellandaudio.cpp
@@ -91,9 +91,6 @@ BOOL LLPanelLandAudio::postBuild()
91 mMusicURLEdit = getChild<LLLineEditor>("music_url"); 91 mMusicURLEdit = getChild<LLLineEditor>("music_url");
92 childSetCommitCallback("music_url", onCommitAny, this); 92 childSetCommitCallback("music_url", onCommitAny, this);
93 93
94 mMusicUrlCheck = getChild<LLCheckBoxCtrl>("hide_music_url");
95 childSetCommitCallback("hide_music_url", onCommitAny, this);
96
97 return TRUE; 94 return TRUE;
98} 95}
99 96
@@ -117,9 +114,6 @@ void LLPanelLandAudio::refresh()
117 mMusicURLEdit->setText(parcel->getMusicURL()); 114 mMusicURLEdit->setText(parcel->getMusicURL());
118 mMusicURLEdit->setEnabled( can_change_media ); 115 mMusicURLEdit->setEnabled( can_change_media );
119 116
120 mMusicUrlCheck->set( parcel->getObscureMusic() );
121 mMusicUrlCheck->setEnabled( can_change_media );
122
123 mCheckSoundLocal->set( parcel->getSoundLocal() ); 117 mCheckSoundLocal->set( parcel->getSoundLocal() );
124 mCheckSoundLocal->setEnabled( can_change_media ); 118 mCheckSoundLocal->setEnabled( can_change_media );
125 119
@@ -154,7 +148,6 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
154 BOOL sound_local = self->mCheckSoundLocal->get(); 148 BOOL sound_local = self->mCheckSoundLocal->get();
155 int voice_setting = self->mRadioVoiceChat->getSelectedIndex(); 149 int voice_setting = self->mRadioVoiceChat->getSelectedIndex();
156 std::string music_url = self->mMusicURLEdit->getText(); 150 std::string music_url = self->mMusicURLEdit->getText();
157 U8 obscure_music = self->mMusicUrlCheck->get();
158 151
159 152
160 BOOL voice_enabled; 153 BOOL voice_enabled;
@@ -185,7 +178,6 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
185 parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan); 178 parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan);
186 parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local); 179 parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local);
187 parcel->setMusicURL(music_url); 180 parcel->setMusicURL(music_url);
188 parcel->setObscureMusic(obscure_music);
189 181
190 // Send current parcel data upstream to server 182 // Send current parcel data upstream to server
191 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); 183 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
diff --git a/linden/indra/newview/llpanellandaudio.h b/linden/indra/newview/llpanellandaudio.h
index 3d5d633..82e27f6 100644
--- a/linden/indra/newview/llpanellandaudio.h
+++ b/linden/indra/newview/llpanellandaudio.h
@@ -55,7 +55,6 @@ private:
55 LLCheckBoxCtrl* mCheckSoundLocal; 55 LLCheckBoxCtrl* mCheckSoundLocal;
56 LLRadioGroup* mRadioVoiceChat; 56 LLRadioGroup* mRadioVoiceChat;
57 LLLineEditor* mMusicURLEdit; 57 LLLineEditor* mMusicURLEdit;
58 LLCheckBoxCtrl* mMusicUrlCheck;
59 58
60 LLSafeHandle<LLParcelSelection>& mParcel; 59 LLSafeHandle<LLParcelSelection>& mParcel;
61}; 60};
diff --git a/linden/indra/newview/llpanellandmedia.cpp b/linden/indra/newview/llpanellandmedia.cpp
index b7df164..8a0be86 100644
--- a/linden/indra/newview/llpanellandmedia.cpp
+++ b/linden/indra/newview/llpanellandmedia.cpp
@@ -80,9 +80,7 @@ LLPanelLandMedia::LLPanelLandMedia(LLParcelSelectionHandle& parcel)
80 mMediaSizeCtrlLabel(NULL), 80 mMediaSizeCtrlLabel(NULL),
81 mMediaTextureCtrl(NULL), 81 mMediaTextureCtrl(NULL),
82 mMediaAutoScaleCheck(NULL), 82 mMediaAutoScaleCheck(NULL),
83 mMediaLoopCheck(NULL), 83 mMediaLoopCheck(NULL)
84 mMediaUrlCheck(NULL),
85 mMusicUrlCheck(NULL)
86{ 84{
87} 85}
88 86
@@ -132,12 +130,6 @@ BOOL LLPanelLandMedia::postBuild()
132 mMediaLoopCheck = getChild<LLCheckBoxCtrl>("media_loop"); 130 mMediaLoopCheck = getChild<LLCheckBoxCtrl>("media_loop");
133 childSetCommitCallback("media_loop", onCommitAny, this); 131 childSetCommitCallback("media_loop", onCommitAny, this);
134 132
135 mMediaUrlCheck = getChild<LLCheckBoxCtrl>("hide_media_url");
136 childSetCommitCallback("hide_media_url", onCommitAny, this);
137
138 mMusicUrlCheck = getChild<LLCheckBoxCtrl>("hide_music_url");
139 childSetCommitCallback("hide_music_url", onCommitAny, this);
140
141 mMediaURLEdit = getChild<LLLineEditor>("media_url"); 133 mMediaURLEdit = getChild<LLLineEditor>("media_url");
142 childSetCommitCallback("media_url", onCommitAny, this); 134 childSetCommitCallback("media_url", onCommitAny, this);
143 135
@@ -243,30 +235,6 @@ void LLPanelLandMedia::refresh()
243 mMediaTypeCombo->setEnabled( can_change_media ); 235 mMediaTypeCombo->setEnabled( can_change_media );
244 childSetText("mime_type", mime_type); 236 childSetText("mime_type", mime_type);
245 237
246 mMediaUrlCheck->set( parcel->getObscureMedia() );
247 mMediaUrlCheck->setEnabled( can_change_media );
248
249 mMusicUrlCheck->set( parcel->getObscureMusic() );
250 mMusicUrlCheck->setEnabled( can_change_media );
251
252 // don't display urls if you're not able to change it
253 // much requested change in forums so people can't 'steal' urls
254 // NOTE: bug#2009 means this is still vunerable - however, bug
255 // should be closed since this bug opens up major security issues elsewhere.
256 bool obscure_media = ! can_change_media && parcel->getObscureMedia();
257 bool obscure_music = ! can_change_media && parcel->getObscureMusic();
258
259 // Special code to disable asterixes for html type
260 if(mime_type == "text/html")
261 {
262 obscure_media = false;
263 mMediaUrlCheck->set( 0 );
264 mMediaUrlCheck->setEnabled( false );
265 }
266
267 mMusicURLEdit->setDrawAsterixes( obscure_music );
268 mMediaURLEdit->setDrawAsterixes( obscure_media );
269
270 mMediaAutoScaleCheck->set( parcel->getMediaAutoScale () ); 238 mMediaAutoScaleCheck->set( parcel->getMediaAutoScale () );
271 mMediaAutoScaleCheck->setEnabled ( can_change_media ); 239 mMediaAutoScaleCheck->setEnabled ( can_change_media );
272 240
@@ -413,8 +381,6 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata)
413 std::string mime_type = self->childGetText("mime_type"); 381 std::string mime_type = self->childGetText("mime_type");
414 U8 media_auto_scale = self->mMediaAutoScaleCheck->get(); 382 U8 media_auto_scale = self->mMediaAutoScaleCheck->get();
415 U8 media_loop = self->mMediaLoopCheck->get(); 383 U8 media_loop = self->mMediaLoopCheck->get();
416 U8 obscure_media = self->mMediaUrlCheck->get();
417 U8 obscure_music = self->mMusicUrlCheck->get();
418 S32 media_width = (S32)self->mMediaWidthCtrl->get(); 384 S32 media_width = (S32)self->mMediaWidthCtrl->get();
419 S32 media_height = (S32)self->mMediaHeightCtrl->get(); 385 S32 media_height = (S32)self->mMediaHeightCtrl->get();
420 LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID(); 386 LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID();
@@ -441,8 +407,6 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata)
441 parcel->setMediaID(media_id); 407 parcel->setMediaID(media_id);
442 parcel->setMediaAutoScale ( media_auto_scale ); 408 parcel->setMediaAutoScale ( media_auto_scale );
443 parcel->setMediaLoop ( media_loop ); 409 parcel->setMediaLoop ( media_loop );
444 parcel->setObscureMedia( obscure_media );
445 parcel->setObscureMusic( obscure_music );
446 410
447 // Send current parcel data upstream to server 411 // Send current parcel data upstream to server
448 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); 412 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 0b91091..e67e702 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -81,6 +81,8 @@
81 81
82#include "llglheaders.h" 82#include "llglheaders.h"
83 83
84#include <boost/algorithm/string.hpp>
85
84// [RLVa:KB] 86// [RLVa:KB]
85#include "rlvhandler.h" 87#include "rlvhandler.h"
86// [/RLVa:KB] 88// [/RLVa:KB]
@@ -208,6 +210,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
208#if !USE_VIEWER_AUTH 210#if !USE_VIEWER_AUTH
209 childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace); 211 childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace);
210 childSetPrevalidate("last_name_edit", LLLineEditor::prevalidatePrintableNoSpace); 212 childSetPrevalidate("last_name_edit", LLLineEditor::prevalidatePrintableNoSpace);
213 childSetPrevalidate("username_edit", LLLineEditor::prevalidatePrintableSpace);
211 214
212 childSetCommitCallback("password_edit", mungePassword); 215 childSetCommitCallback("password_edit", mungePassword);
213 childSetKeystrokeCallback("password_edit", onPassKey, this); 216 childSetKeystrokeCallback("password_edit", onPassKey, this);
@@ -316,6 +319,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
316 refreshLocation( false ); 319 refreshLocation( false );
317#endif 320#endif
318 321
322 loadLoginForm();
323
319 loadNewsBar(); 324 loadNewsBar();
320 325
321 LLFirstUse::useLoginScreen(); 326 LLFirstUse::useLoginScreen();
@@ -551,6 +556,26 @@ void LLPanelLogin::show(const LLRect &rect,
551 LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); 556 LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel());
552} 557}
553 558
559
560// static
561void LLPanelLogin::setFields(const std::string& username, const std::string& password)
562{
563 if (!sInstance)
564 {
565 llwarns << "Attempted fillFields with no login view shown" << llendl;
566 return;
567 }
568
569 if (!gHippoGridManager->getCurrentGrid()->isUsernameCompat())
570 {
571 llwarns << "Trying to set a username for an incompatible grid!" << llendl;
572 return;
573 }
574
575 sInstance->childSetText("username_edit", username);
576 setPassword(password);
577}
578
554// static 579// static
555void LLPanelLogin::setFields(const std::string& firstname, 580void LLPanelLogin::setFields(const std::string& firstname,
556 const std::string& lastname, 581 const std::string& lastname,
@@ -564,7 +589,13 @@ void LLPanelLogin::setFields(const std::string& firstname,
564 589
565 sInstance->childSetText("first_name_edit", firstname); 590 sInstance->childSetText("first_name_edit", firstname);
566 sInstance->childSetText("last_name_edit", lastname); 591 sInstance->childSetText("last_name_edit", lastname);
592 setPassword(password);
593}
567 594
595
596// static
597void LLPanelLogin::setPassword(const std::string& password)
598{
568 // Max "actual" password length is 16 characters. 599 // Max "actual" password length is 16 characters.
569 // Hex digests are always 32 characters. 600 // Hex digests are always 32 characters.
570 if (password.length() == 32) 601 if (password.length() == 32)
@@ -663,11 +694,25 @@ void LLPanelLogin::getFields(std::string *firstname,
663 return; 694 return;
664 } 695 }
665 696
666 *firstname = sInstance->childGetText("first_name_edit"); 697 // SL grids use a generic one-line text entry field for logins
667 LLStringUtil::trim(*firstname); 698 std::string username = sInstance->childGetText("username_edit");
699 if (!username.empty() && gHippoGridManager->getConnectedGrid()->isUsernameCompat())
700 {
701 // no need to trim here, spaces are removed
702 if (!convertUsernameToLegacy(username, *firstname, *lastname))
703 {
704 llerrs << "Invalid username accepted! Cannot proceed!" << llendl;
705 return;
706 }
707 }
708 else
709 {
710 *firstname = sInstance->childGetText("first_name_edit");
711 LLStringUtil::trim(*firstname);
668 712
669 *lastname = sInstance->childGetText("last_name_edit"); 713 *lastname = sInstance->childGetText("last_name_edit");
670 LLStringUtil::trim(*lastname); 714 LLStringUtil::trim(*lastname);
715 }
671 716
672 *password = sInstance->mMungedPassword; 717 *password = sInstance->mMungedPassword;
673} 718}
@@ -802,6 +847,54 @@ void LLPanelLogin::refreshLoginPage()
802} 847}
803 848
804 849
850// static
851void LLPanelLogin::loadLoginForm()
852{
853 if (!sInstance) return;
854
855 // toggle between username/first+last login based on grid -- MC
856 LLTextBox* firstnamet = sInstance->getChild<LLTextBox>("first_name_text");
857 LLTextBox* lastnamet = sInstance->getChild<LLTextBox>("last_name_text");
858 LLTextBox* usernamet = sInstance->getChild<LLTextBox>("username_text");
859
860 LLLineEditor* firstnamel = sInstance->getChild<LLLineEditor>("first_name_edit");
861 LLLineEditor* lastnamel = sInstance->getChild<LLLineEditor>("last_name_edit");
862 LLLineEditor* usernamel = sInstance->getChild<LLLineEditor>("username_edit");
863
864 firstnamet->setVisible(!gHippoGridManager->getCurrentGrid()->isUsernameCompat());
865 lastnamet->setVisible(!gHippoGridManager->getCurrentGrid()->isUsernameCompat());
866 usernamet->setVisible(gHippoGridManager->getCurrentGrid()->isUsernameCompat());
867
868 firstnamel->setVisible(!gHippoGridManager->getCurrentGrid()->isUsernameCompat());
869 lastnamel->setVisible(!gHippoGridManager->getCurrentGrid()->isUsernameCompat());
870 usernamel->setVisible(gHippoGridManager->getCurrentGrid()->isUsernameCompat());
871
872 // these should really REALLY be stored in the grid info -- MC
873 std::string firstnames = gSavedSettings.getString("FirstName");
874 std::string lastnames = gSavedSettings.getString("LastName");
875 if (!firstnames.empty() && !lastnames.empty())
876 {
877 if (gHippoGridManager->getCurrentGrid()->isUsernameCompat())
878 {
879 if (lastnames == "resident" || lastnames == "Resident")
880 {
881 usernamel->setText(firstnames);
882 }
883 else
884 {
885 usernamel->setText(firstnames+"."+lastnames);
886 }
887 }
888 else
889 {
890 firstnamel->setText(firstnames);
891 lastnamel->setText(lastnames);
892 }
893 }
894}
895
896
897// static
805void LLPanelLogin::loadLoginPage() 898void LLPanelLogin::loadLoginPage()
806{ 899{
807 if (!sInstance) return; 900 if (!sInstance) return;
@@ -972,6 +1065,64 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev
972//--------------------------------------------------------------------------- 1065//---------------------------------------------------------------------------
973 1066
974// static 1067// static
1068bool LLPanelLogin::convertUsernameToLegacy(std::string& username, std::string& firstname, std::string& lastname)
1069{
1070 if (!username.empty())
1071 {
1072 // trim beginning and end
1073 LLStringUtil::trim(username);
1074
1075 // minimum length for an SL grid
1076 if (username.length() < 5)
1077 {
1078 return false;
1079 }
1080 }
1081 else
1082 {
1083 return false;
1084 }
1085
1086 std::vector<std::string> names;
1087 boost::algorithm::split(names, username,
1088 boost::is_any_of(std::string(" .")));
1089
1090 // maybe they typed in a few too many spaces?
1091 if (names.size() > 2)
1092 {
1093 std::vector<std::string>::iterator vIt = names.begin();
1094 while (vIt != names.end())
1095 {
1096 if ((*vIt).empty())
1097 {
1098 vIt = names.erase(vIt);
1099 }
1100 else
1101 {
1102 ++vIt;
1103 }
1104 }
1105 }
1106
1107 if (names.size() == 1) // username
1108 {
1109 firstname = names[0];
1110 lastname = "Resident";
1111 return true;
1112 }
1113 else if (names.size() == 2) // first.last or first+" "+last
1114 {
1115 firstname = names[0];
1116 lastname = names[1];
1117 return true;
1118 }
1119 else
1120 {
1121 return false;
1122 }
1123}
1124
1125// static
975void LLPanelLogin::onClickConnect(void *) 1126void LLPanelLogin::onClickConnect(void *)
976{ 1127{
977 if (sInstance && sInstance->mCallback) 1128 if (sInstance && sInstance->mCallback)
@@ -983,17 +1134,48 @@ void LLPanelLogin::onClickConnect(void *)
983 // JC - Make sure the fields all get committed. 1134 // JC - Make sure the fields all get committed.
984 sInstance->setFocus(FALSE); 1135 sInstance->setFocus(FALSE);
985 1136
986 std::string first = sInstance->childGetText("first_name_edit"); 1137 // Note: valid logins are username or Username or First.Last or First Last -- MC
987 std::string last = sInstance->childGetText("last_name_edit"); 1138 if (gHippoGridManager->getCurrentGrid()->isUsernameCompat())
988 if (!first.empty() && !last.empty())
989 { 1139 {
990 // has both first and last name typed 1140 std::string username = sInstance->childGetText("username_edit");
991 sInstance->mCallback(0, sInstance->mCallbackData); 1141 if (!username.empty())
1142 {
1143 // todo: make this two functions, one for validating the other for converting
1144 std::string temp1;
1145 std::string temp2;
1146 if (convertUsernameToLegacy(username, temp1, temp2))
1147 {
1148 // has username typed, make sure we're just using that
1149 sInstance->childSetText("first_name_edit", LLStringUtil::null);
1150 sInstance->childSetText("last_name_edit", LLStringUtil::null);
1151 sInstance->mCallback(0, sInstance->mCallbackData);
1152 }
1153 else
1154 {
1155 LLNotifications::instance().add("InvalidLogInSecondLife", LLSD(), LLSD(),
1156 LLPanelLogin::newAccountAlertCallback);
1157 }
1158 }
1159 else
1160 {
1161 LLNotifications::instance().add("MustHaveAccountToLogIn", LLSD(), LLSD(),
1162 LLPanelLogin::newAccountAlertCallback);
1163 }
992 } 1164 }
993 else 1165 else
994 { 1166 {
995 LLNotifications::instance().add("MustHaveAccountToLogIn", LLSD(), LLSD(), 1167 std::string first = sInstance->childGetText("first_name_edit");
996 LLPanelLogin::newAccountAlertCallback); 1168 std::string last = sInstance->childGetText("last_name_edit");
1169 if (!first.empty() && !last.empty())
1170 {
1171 // has both first and last name typed
1172 sInstance->mCallback(0, sInstance->mCallbackData);
1173 }
1174 else
1175 {
1176 LLNotifications::instance().add("MustHaveAccountToLogIn", LLSD(), LLSD(),
1177 LLPanelLogin::newAccountAlertCallback);
1178 }
997 } 1179 }
998 } 1180 }
999} 1181}
@@ -1123,6 +1305,9 @@ void LLPanelLogin::updateGridCombo(std::string grid_nick)
1123 1305
1124 llinfos << "current grid set to " << grid_nick << llendl; 1306 llinfos << "current grid set to " << grid_nick << llendl;
1125 1307
1308 // switch between username/first+last name based on grid
1309 loadLoginForm();
1310
1126 // grid changed so show new splash screen (possibly) 1311 // grid changed so show new splash screen (possibly)
1127 loadLoginPage(); 1312 loadLoginPage();
1128 1313
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h
index 5830b52..947aea6 100644
--- a/linden/indra/newview/llpanellogin.h
+++ b/linden/indra/newview/llpanellogin.h
@@ -59,9 +59,9 @@ public:
59 void (*callback)(S32 option, void* user_data), 59 void (*callback)(S32 option, void* user_data),
60 void* callback_data); 60 void* callback_data);
61 61
62 // Remember password checkbox is set via gSavedSettings "RememberPassword" 62 // Sets the login screen's name and password editors. Remember password checkbox is set via gSavedSettings "RememberPassword"
63 static void setFields(const std::string& firstname, const std::string& lastname, 63 static void setFields(const std::string& firstname, const std::string& lastname, const std::string& password);
64 const std::string& password); 64 static void setFields(const std::string& username, const std::string& password);
65 65
66 static void addServer(const std::string& server); 66 static void addServer(const std::string& server);
67 static void refreshLocation( bool force_visible ); 67 static void refreshLocation( bool force_visible );
@@ -78,6 +78,7 @@ public:
78 78
79 void setSiteIsAlive( bool alive ); 79 void setSiteIsAlive( bool alive );
80 80
81 static void loadLoginForm();
81 static void loadLoginPage(); 82 static void loadLoginPage();
82 static void refreshLoginPage(); 83 static void refreshLoginPage();
83 static void giveFocus(); 84 static void giveFocus();
@@ -101,8 +102,19 @@ private:
101 static void onPassKey(LLLineEditor* caller, void* user_data); 102 static void onPassKey(LLLineEditor* caller, void* user_data);
102 static void onSelectServer(LLUICtrl*, void*); 103 static void onSelectServer(LLUICtrl*, void*);
103 static void onServerComboLostFocus(LLFocusableElement*, void*); 104 static void onServerComboLostFocus(LLFocusableElement*, void*);
105
106 // converts the following login name formats into valid firstname lastname combos:
107 // username
108 // username.Resident
109 // first.last
110 // first+" "+last
111 // " "+first+" "+last+" "
112 // returns true if name conversion successful
113 static bool convertUsernameToLegacy(std::string& username, std::string& firstname, std::string& lastname);
114
115 // set the password for the login screen
116 static void setPassword(const std::string& password);
104 117
105private:
106 LLPointer<LLUIImage> mLogoImage; 118 LLPointer<LLUIImage> mLogoImage;
107 119
108 void (*mCallback)(S32 option, void *userdata); 120 void (*mCallback)(S32 option, void *userdata);
diff --git a/linden/indra/newview/llprefsadvanced.cpp b/linden/indra/newview/llprefsadvanced.cpp
index 99bc4fd..89dc0b2 100644
--- a/linden/indra/newview/llprefsadvanced.cpp
+++ b/linden/indra/newview/llprefsadvanced.cpp
@@ -58,7 +58,6 @@ LLPrefsAdvanced::LLPrefsAdvanced()
58 childSetCommitCallback("speed_rez_check", onCommitCheckBox, this); 58 childSetCommitCallback("speed_rez_check", onCommitCheckBox, this);
59 childSetCommitCallback("command_line_check", onCommitCheckBox, this); 59 childSetCommitCallback("command_line_check", onCommitCheckBox, this);
60 60
61 childSetAction("reset_btn", onClickResetPrefs, this);
62 childSetAction("command_line_btn", onClickCommandLine, this); 61 childSetAction("command_line_btn", onClickCommandLine, this);
63} 62}
64 63
@@ -274,24 +273,6 @@ void LLPrefsAdvanced::onCommitCheckBox(LLUICtrl* ctrl, void* user_data)
274 self->refresh(); 273 self->refresh();
275} 274}
276 275
277// static
278void LLPrefsAdvanced::onClickResetPrefs(void* user_data)
279{
280 LLPrefsAdvanced* self = (LLPrefsAdvanced*)user_data;
281 LLNotifications::instance().add("ConfirmResetAllPreferences", LLSD(), LLSD(), boost::bind(callbackReset, _1, _2, self));
282}
283
284// static
285bool LLPrefsAdvanced::callbackReset(const LLSD& notification, const LLSD& response, LLPrefsAdvanced *self)
286{
287 S32 option = LLNotification::getSelectedOption(notification, response);
288 if ( option == 0 )
289 {
290 gSavedSettings.setBOOL("ResetAllPreferences", TRUE);
291 }
292 return false;
293}
294
295void LLPrefsAdvanced::onSpellAdd(void* data) 276void LLPrefsAdvanced::onSpellAdd(void* data)
296{ 277{
297 LLPrefsAdvanced* panel = (LLPrefsAdvanced*)data; 278 LLPrefsAdvanced* panel = (LLPrefsAdvanced*)data;
diff --git a/linden/indra/newview/llprefsadvanced.h b/linden/indra/newview/llprefsadvanced.h
index 84a7854..d76e602 100644
--- a/linden/indra/newview/llprefsadvanced.h
+++ b/linden/indra/newview/llprefsadvanced.h
@@ -50,11 +50,8 @@ private:
50 static LLPrefsAdvanced* sInstance; 50 static LLPrefsAdvanced* sInstance;
51 51
52 static void onCommitCheckBox(LLUICtrl* ctrl, void* user_data); 52 static void onCommitCheckBox(LLUICtrl* ctrl, void* user_data);
53 static void onClickResetPrefs(void* user_data);
54 static void onClickCommandLine(void* data); 53 static void onClickCommandLine(void* data);
55 54
56 static bool callbackReset(const LLSD& notification, const LLSD& response, LLPrefsAdvanced *self);
57
58 static void onSpellAdd(void* data); 55 static void onSpellAdd(void* data);
59 static void onSpellRemove(void* data); 56 static void onSpellRemove(void* data);
60 static void onSpellGetMore(void* data); 57 static void onSpellGetMore(void* data);
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index bcac095..ec45955 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -813,8 +813,23 @@ bool idle_startup()
813 // Show the login dialog 813 // Show the login dialog
814 login_show(); 814 login_show();
815 // connect dialog is already shown, so fill in the names 815 // connect dialog is already shown, so fill in the names
816 LLPanelLogin::setFields( firstname, lastname, password); 816 // icky how usernames get bolted on here as a kind of hack -- MC
817 817 if (gHippoGridManager && gHippoGridManager->getCurrentGrid()->isUsernameCompat())
818 {
819 if (lastname == "resident" || lastname == "Resident")
820 {
821 LLPanelLogin::setFields(firstname, password);
822 }
823 else
824 {
825 LLPanelLogin::setFields(firstname+"."+lastname, password);
826 }
827 }
828 else
829 {
830 LLPanelLogin::setFields(firstname, lastname, password);
831 }
832
818 LLPanelLogin::giveFocus(); 833 LLPanelLogin::giveFocus();
819 834
820 gSavedSettings.setBOOL("FirstRunThisInstall", FALSE); 835 gSavedSettings.setBOOL("FirstRunThisInstall", FALSE);
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index 38849f9..ccc3ab2 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -1514,7 +1514,7 @@ void LLTextureCtrl::draw()
1514 (mTexturep->getDiscardLevel() != 1) && 1514 (mTexturep->getDiscardLevel() != 1) &&
1515 (mTexturep->getDiscardLevel() != 0)) 1515 (mTexturep->getDiscardLevel() != 0))
1516 { 1516 {
1517 LLFontGL* font = LLFontGL::getFontSansSerifBig(); 1517 LLFontGL* font = LLFontGL::getFontSansSerifLarge();
1518 font->renderUTF8( 1518 font->renderUTF8(
1519 mLoadingPlaceholderString, 0, 1519 mLoadingPlaceholderString, 0,
1520 llfloor(interior.mLeft+10), 1520 llfloor(interior.mLeft+10),
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index a5d97f2..386a86e 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -49,6 +49,7 @@
49#include "llpluginclassmedia.h" 49#include "llpluginclassmedia.h"
50#include "llnotify.h" 50#include "llnotify.h"
51#include "llsdserialize.h" 51#include "llsdserialize.h"
52#include "llmemory.h"
52 53
53#include "lloverlaybar.h" 54#include "lloverlaybar.h"
54#include "slfloatermediafilter.h" 55#include "slfloatermediafilter.h"
@@ -64,6 +65,7 @@ LLSD LLViewerParcelMedia::sMediaFilterList;
64std::set<std::string> LLViewerParcelMedia::sMediaQueries; 65std::set<std::string> LLViewerParcelMedia::sMediaQueries;
65std::set<std::string> LLViewerParcelMedia::sAllowedMedia; 66std::set<std::string> LLViewerParcelMedia::sAllowedMedia;
66std::set<std::string> LLViewerParcelMedia::sDeniedMedia; 67std::set<std::string> LLViewerParcelMedia::sDeniedMedia;
68LLPointer<LLViewerParcelMediaInfo> LLViewerParcelMedia::sSavedMediaInfo;
67 69
68// Local functions 70// Local functions
69bool callback_play_media(const LLSD& notification, const LLSD& response, LLParcel* parcel); 71bool callback_play_media(const LLSD& notification, const LLSD& response, LLParcel* parcel);
@@ -186,7 +188,7 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
186} 188}
187 189
188// static 190// static
189void LLViewerParcelMedia::play(LLParcel* parcel, bool filter) 191void LLViewerParcelMedia::play(LLParcel* parcel, bool filter, const ECommandOrigin origin)
190{ 192{
191 lldebugs << "LLViewerParcelMedia::play" << llendl; 193 lldebugs << "LLViewerParcelMedia::play" << llendl;
192 194
@@ -198,12 +200,13 @@ void LLViewerParcelMedia::play(LLParcel* parcel, bool filter)
198 std::string media_url = parcel->getMediaURL(); 200 std::string media_url = parcel->getMediaURL();
199 LLStringUtil::trim(media_url); 201 LLStringUtil::trim(media_url);
200 202
201 if (!media_url.empty() && gSavedSettings.getBOOL("MediaEnableFilter") && (filter || !allowedMedia(media_url))) 203 if (!media_url.empty() && gSavedSettings.getBOOL("MediaEnableFilter") && filter
204 && (!allowedMedia(media_url) || origin == COMMAND_ORIGIN_REMOTE))
202 { 205 {
203 // If filtering is needed or in case media_url just changed 206 // If filtering is needed or in case media_url just changed
204 // to something we did not yet approve. 207 // to something we did not yet approve.
205 LLViewerParcelMediaAutoPlay::playStarted(); 208 LLViewerParcelMediaAutoPlay::playStarted();
206 filterMedia(parcel, 0); 209 filterMedia(parcel, 0, origin);
207 return; 210 return;
208 } 211 }
209 212
@@ -384,7 +387,7 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
384 else 387 else
385 { 388 {
386 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); 389 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
387 play(parcel); 390 play(parcel, true, COMMAND_ORIGIN_REMOTE);
388 } 391 }
389 } 392 }
390 else 393 else
@@ -400,7 +403,7 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
400 if(sMediaImpl.isNull()) 403 if(sMediaImpl.isNull())
401 { 404 {
402 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); 405 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
403 play(parcel); 406 play(parcel, true, COMMAND_ORIGIN_REMOTE);
404 } 407 }
405 seek(time); 408 seek(time);
406 } 409 }
@@ -437,33 +440,38 @@ void LLViewerParcelMedia::processParcelMediaUpdate( LLMessageSystem *msg, void *
437 } 440 }
438 441
439 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); 442 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
440 BOOL same = FALSE;
441 if (parcel) 443 if (parcel)
442 { 444 {
443 same = ((parcel->getMediaURL() == media_url) && 445 LLViewerParcelMediaInfo* new_info = new LLViewerParcelMediaInfo(media_url, media_type, media_id, media_width, media_height, media_auto_scale, media_loop);
444 (parcel->getMediaType() == media_type) && 446 LLViewerParcelMediaInfo* current_info = new LLViewerParcelMediaInfo(parcel);
445 (parcel->getMediaID() == media_id) && 447 if (new_info != current_info)
446 (parcel->getMediaWidth() == media_width) &&
447 (parcel->getMediaHeight() == media_height) &&
448 (parcel->getMediaAutoScale() == media_auto_scale) &&
449 (parcel->getMediaLoop() == media_loop));
450
451 if (!same)
452 { 448 {
449 if (!sSavedMediaInfo || (sSavedMediaInfo && !sSavedMediaInfo->sameParcel(parcel)))
450 {
451 // only save if no previously saved media info, because
452 // we want to remeber the original parcel media info.
453 sSavedMediaInfo = current_info;
454 }
453 // temporarily store these new values in the parcel 455 // temporarily store these new values in the parcel
454 parcel->setMediaURL(media_url); 456 new_info->applyToParcel(parcel);
455 parcel->setMediaType(media_type);
456 parcel->setMediaID(media_id);
457 parcel->setMediaWidth(media_width);
458 parcel->setMediaHeight(media_height);
459 parcel->setMediaAutoScale(media_auto_scale);
460 parcel->setMediaLoop(media_loop);
461 457
462 play(parcel); 458 play(parcel, true, COMMAND_ORIGIN_REMOTE);
463 } 459 }
464 460
465 } 461 }
466} 462}
463
464//static
465void LLViewerParcelMedia::undoParcelMediaUpdate()
466{
467 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
468 if (sSavedMediaInfo.notNull() && parcel)
469 {
470 sSavedMediaInfo->applyToParcel(parcel);
471 }
472 sSavedMediaInfo = NULL;
473}
474
467// Static 475// Static
468///////////////////////////////////////////////////////////////////////////////////////// 476/////////////////////////////////////////////////////////////////////////////////////////
469void LLViewerParcelMedia::sendMediaNavigateMessage(const std::string& url) 477void LLViewerParcelMedia::sendMediaNavigateMessage(const std::string& url)
@@ -619,7 +627,7 @@ void LLViewerParcelMedia::playStreamingMusic(LLParcel* parcel, bool filter)
619 { 627 {
620 // If filtering is needed or in case music_url just changed 628 // If filtering is needed or in case music_url just changed
621 // to something we did not yet approve. 629 // to something we did not yet approve.
622 filterMedia(parcel, 1); 630 filterMedia(parcel, 1, COMMAND_ORIGIN_LOCAL);
623 } 631 }
624 else if (gAudioStream) 632 else if (gAudioStream)
625 { 633 {
@@ -649,13 +657,18 @@ bool LLViewerParcelMedia::allowedMedia(std::string media_url)
649{ 657{
650 LLStringUtil::trim(media_url); 658 LLStringUtil::trim(media_url);
651 std::string domain = extractDomain(media_url); 659 std::string domain = extractDomain(media_url);
660 LLHost host;
661 host.setHostByName(domain);
662 std::string ip = host.getIPString();
652 if (sAllowedMedia.count(domain)) 663 if (sAllowedMedia.count(domain))
653 { 664 {
654 return true; 665 return true;
655 } 666 }
667 std::string server;
656 for (S32 i = 0; i < (S32)sMediaFilterList.size(); i++) 668 for (S32 i = 0; i < (S32)sMediaFilterList.size(); i++)
657 { 669 {
658 if (sMediaFilterList[i]["domain"].asString() == domain) 670 server = sMediaFilterList[i]["domain"].asString();
671 if (server == domain || server == ip)
659 { 672 {
660 if (sMediaFilterList[i]["action"].asString() == "allow") 673 if (sMediaFilterList[i]["action"].asString() == "allow")
661 { 674 {
@@ -670,12 +683,13 @@ bool LLViewerParcelMedia::allowedMedia(std::string media_url)
670 return false; 683 return false;
671} 684}
672 685
673void LLViewerParcelMedia::filterMedia(LLParcel* parcel, U32 type) 686void LLViewerParcelMedia::filterMedia(LLParcel* parcel, U32 type, const ECommandOrigin origin)
674{ 687{
675 std::string media_action; 688 std::string media_action;
676 std::string media_url; 689 std::string media_url;
677 std::string domain; 690 std::string domain;
678 691 std::string ip;
692
679 if (parcel != LLViewerParcelMgr::getInstance()->getAgentParcel()) 693 if (parcel != LLViewerParcelMgr::getInstance()->getAgentParcel())
680 { 694 {
681 // The parcel just changed (may occur right out after a TP) 695 // The parcel just changed (may occur right out after a TP)
@@ -703,31 +717,51 @@ void LLViewerParcelMedia::filterMedia(LLParcel* parcel, U32 type)
703 return; 717 return;
704 } 718 }
705 719
720 LLHost host;
721 host.setHostByName(domain);
722 ip = host.getIPString();
723
706 if (sIsUserAction) 724 if (sIsUserAction)
707 { 725 {
708 // This was a user manual request to play this media, so give 726 // This was a user manual request to play this media, so give
709 // it another chance... 727 // it another chance...
710 sIsUserAction = false; 728 sIsUserAction = false;
729 bool dirty = false;
711 if (sDeniedMedia.count(domain)) 730 if (sDeniedMedia.count(domain))
712 { 731 {
713 sDeniedMedia.erase(domain); 732 sDeniedMedia.erase(domain);
733 dirty = true;
734 }
735 if (sDeniedMedia.count(ip))
736 {
737 sDeniedMedia.erase(ip);
738 dirty = true;
739 }
740 if (dirty)
741 {
714 SLFloaterMediaFilter::setDirty(); 742 SLFloaterMediaFilter::setDirty();
715 } 743 }
716 } 744 }
717 745
718 if (!sMediaFilterListLoaded || sDeniedMedia.count(domain)) 746 if (media_url.empty())
747 {
748 media_action == "allow";
749 }
750 else if (!sMediaFilterListLoaded || sDeniedMedia.count(domain) || sDeniedMedia.count(ip))
719 { 751 {
720 media_action = "ignore"; 752 media_action = "ignore";
721 } 753 }
722 else if (sAllowedMedia.count(domain)) 754 else if (sAllowedMedia.count(domain) || sAllowedMedia.count(ip))
723 { 755 {
724 media_action = "allow"; 756 media_action = "allow";
725 } 757 }
726 else 758 else
727 { 759 {
760 std::string server;
728 for (S32 i = 0; i < (S32)sMediaFilterList.size(); i++) 761 for (S32 i = 0; i < (S32)sMediaFilterList.size(); i++)
729 { 762 {
730 if (sMediaFilterList[i]["domain"].asString() == domain) 763 server = sMediaFilterList[i]["domain"].asString();
764 if (server == domain || server == ip)
731 { 765 {
732 media_action = sMediaFilterList[i]["action"].asString(); 766 media_action = sMediaFilterList[i]["action"].asString();
733 break; 767 break;
@@ -735,7 +769,7 @@ void LLViewerParcelMedia::filterMedia(LLParcel* parcel, U32 type)
735 } 769 }
736 } 770 }
737 771
738 if (media_action == "allow" || media_url.empty()) 772 if (media_action == "allow")
739 { 773 {
740 if (type == 0) 774 if (type == 0)
741 { 775 {
@@ -745,47 +779,76 @@ void LLViewerParcelMedia::filterMedia(LLParcel* parcel, U32 type)
745 { 779 {
746 playStreamingMusic(parcel, false); 780 playStreamingMusic(parcel, false);
747 } 781 }
782 return;
748 } 783 }
749 else if (media_action == "deny") 784 if (media_action == "ignore")
750 { 785 {
751 LLSD args; 786 if (type == 0)
752 args["DOMAIN"] = domain; 787 {
753 LLNotifications::instance().add("MediaBlocked", args); 788 undoParcelMediaUpdate();
754 if (type == 1) 789 }
790 else if (type == 1)
755 { 791 {
756 LLViewerParcelMedia::stopStreamingMusic(); 792 LLViewerParcelMedia::stopStreamingMusic();
757 } 793 }
758 // So to avoid other "blocked" messages later in the session 794 return;
759 // for this url should it be requested again by a script.
760 sDeniedMedia.insert(domain);
761 } 795 }
762 else if (media_action == "ignore") 796 // skip local-originating play commands, unless the url is blacklisted.
797 if (gSavedSettings.getBOOL("MediaFilterOnlyRemoteCommands")
798 && (origin != COMMAND_ORIGIN_REMOTE)
799 && (media_action != "ignore"))
763 { 800 {
764 if (type == 1) 801 sAllowedMedia.insert(domain);
802 SLFloaterMediaFilter::setDirty();
803 if (type == 0)
765 { 804 {
766 LLViewerParcelMedia::stopStreamingMusic(); 805 play(parcel, false);
767 } 806 }
807 else
808 {
809 playStreamingMusic(parcel, false);
810 }
811 return;
812 }
813
814 LLSD args;
815 if (ip != domain && domain.find('/') == std::string::npos)
816 {
817 args["DOMAIN"] = domain + " (" + ip + ")";
768 } 818 }
769 else 819 else
770 { 820 {
771 sMediaQueries.insert(domain);
772 LLSD args;
773 args["DOMAIN"] = domain; 821 args["DOMAIN"] = domain;
774 if (media_url.find('?') != std::string::npos) 822 }
823
824 if (media_action == "deny")
825 {
826 LLNotifications::instance().add("MediaBlocked", args);
827 if (type == 0)
775 { 828 {
776 args["WARNING"] = " (WARNING: this URL also contains parameter(s) that could potentially be used to correlate your avatar name with your IP)"; 829 undoParcelMediaUpdate();
777 } 830 }
778 else 831 if (type == 1)
779 { 832 {
780 args["WARNING"] = ""; 833 LLViewerParcelMedia::stopStreamingMusic();
781 } 834 }
835 // So to avoid other "blocked" messages later in the session
836 // for this url should it be requested again by a script.
837 // We don't add the IP, on purpose (want to show different
838 // blocks for different domains pointing to the same IP).
839 sDeniedMedia.insert(domain);
840 }
841 else
842 {
843 sMediaQueries.insert(domain);
844 args["URL"] = media_url;
782 if (type == 0) 845 if (type == 0)
783 { 846 {
784 args["TYPE"] = "a media"; 847 args["TYPE"] = "media";
785 } 848 }
786 else 849 else
787 { 850 {
788 args["TYPE"] = "an audio"; 851 args["TYPE"] = "audio";
789 } 852 }
790 LLNotifications::instance().add("MediaAlert", args, LLSD(), boost::bind(callback_media_alert, _1, _2, parcel, type, domain)); 853 LLNotifications::instance().add("MediaAlert", args, LLSD(), boost::bind(callback_media_alert, _1, _2, parcel, type, domain));
791 } 854 }
@@ -795,8 +858,19 @@ void callback_media_alert(const LLSD &notification, const LLSD &response, LLParc
795{ 858{
796 S32 option = LLNotification::getSelectedOption(notification, response); 859 S32 option = LLNotification::getSelectedOption(notification, response);
797 860
861 LLHost host;
862 host.setHostByName(domain);
863 std::string ip = host.getIPString();
864
798 LLSD args; 865 LLSD args;
799 args["DOMAIN"] = domain; 866 if (ip != domain && domain.find('/') == std::string::npos)
867 {
868 args["DOMAIN"] = domain + " (" + ip + ")";
869 }
870 else
871 {
872 args["DOMAIN"] = domain;
873 }
800 874
801 if (option == 0 || option == 3) // Allow or Whitelist 875 if (option == 0 || option == 3) // Allow or Whitelist
802 { 876 {
@@ -807,6 +881,11 @@ void callback_media_alert(const LLSD &notification, const LLSD &response, LLParc
807 newmedia["domain"] = domain; 881 newmedia["domain"] = domain;
808 newmedia["action"] = "allow"; 882 newmedia["action"] = "allow";
809 LLViewerParcelMedia::sMediaFilterList.append(newmedia); 883 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
884 if (ip != domain && domain.find('/') == std::string::npos)
885 {
886 newmedia["domain"] = ip;
887 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
888 }
810 LLViewerParcelMedia::saveDomainFilterList(); 889 LLViewerParcelMedia::saveDomainFilterList();
811 args["LISTED"] = "whitelisted"; 890 args["LISTED"] = "whitelisted";
812 LLNotifications::instance().add("MediaListed", args); 891 LLNotifications::instance().add("MediaListed", args);
@@ -823,10 +902,19 @@ void callback_media_alert(const LLSD &notification, const LLSD &response, LLParc
823 else if (option == 1 || option == 2) // Deny or Blacklist 902 else if (option == 1 || option == 2) // Deny or Blacklist
824 { 903 {
825 LLViewerParcelMedia::sDeniedMedia.insert(domain); 904 LLViewerParcelMedia::sDeniedMedia.insert(domain);
826 if (type == 1) 905 if (ip != domain && domain.find('/') == std::string::npos)
906 {
907 LLViewerParcelMedia::sDeniedMedia.insert(ip);
908 }
909 if (type == 0)
910 {
911 LLViewerParcelMedia::undoParcelMediaUpdate();
912 }
913 else if (type == 1)
827 { 914 {
828 LLViewerParcelMedia::stopStreamingMusic(); 915 LLViewerParcelMedia::stopStreamingMusic();
829 } 916 }
917
830 if (option == 1) // Deny 918 if (option == 1) // Deny
831 { 919 {
832 LLNotifications::instance().add("MediaBlocked", args); 920 LLNotifications::instance().add("MediaBlocked", args);
@@ -837,6 +925,11 @@ void callback_media_alert(const LLSD &notification, const LLSD &response, LLParc
837 newmedia["domain"] = domain; 925 newmedia["domain"] = domain;
838 newmedia["action"] = "deny"; 926 newmedia["action"] = "deny";
839 LLViewerParcelMedia::sMediaFilterList.append(newmedia); 927 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
928 if (ip != domain && domain.find('/') == std::string::npos)
929 {
930 newmedia["domain"] = ip;
931 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
932 }
840 LLViewerParcelMedia::saveDomainFilterList(); 933 LLViewerParcelMedia::saveDomainFilterList();
841 args["LISTED"] = "blacklisted"; 934 args["LISTED"] = "blacklisted";
842 LLNotifications::instance().add("MediaListed", args); 935 LLNotifications::instance().add("MediaListed", args);
@@ -928,7 +1021,12 @@ std::string LLViewerParcelMedia::extractDomain(std::string url)
928 url = url.substr(pos + 1, count); 1021 url = url.substr(pos + 1, count);
929 } 1022 }
930 1023
931 if (url.find(gAgent.getRegion()->getHost().getHostName()) == 0 || url.find(last_region) == 0) 1024 std::string current_region = gAgent.getRegion()->getHost().getHostName();
1025 if (!current_region.size())
1026 {
1027 current_region = gAgent.getRegion()->getHost().getIPString();
1028 }
1029 if (url.find(current_region) == 0 || url.find(last_region) == 0)
932 { 1030 {
933 // This must be a scripted object rezzed in the region: 1031 // This must be a scripted object rezzed in the region:
934 // extend the concept of "domain" to encompass the 1032 // extend the concept of "domain" to encompass the
@@ -937,7 +1035,7 @@ std::string LLViewerParcelMedia::extractDomain(std::string url)
937 1035
938 // Get rid of any port number 1036 // Get rid of any port number
939 pos = url.find('/'); // We earlier made sure that there's one 1037 pos = url.find('/'); // We earlier made sure that there's one
940 url = gAgent.getRegion()->getHost().getHostName() + url.substr(pos); 1038 url = current_region + url.substr(pos);
941 1039
942 pos = url.find('?'); 1040 pos = url.find('?');
943 if (pos != std::string::npos) 1041 if (pos != std::string::npos)
@@ -972,6 +1070,73 @@ std::string LLViewerParcelMedia::extractDomain(std::string url)
972 // Remember this region, so to cope with requests occuring just after a 1070 // Remember this region, so to cope with requests occuring just after a
973 // TP out of it. 1071 // TP out of it.
974 last_region = gAgent.getRegion()->getHost().getHostName(); 1072 last_region = gAgent.getRegion()->getHost().getHostName();
1073 if (!last_region.size())
1074 {
1075 last_region = gAgent.getRegion()->getHost().getIPString();
1076 }
975 1077
976 return url; 1078 return url;
977} 1079}
1080
1081LLViewerParcelMediaInfo::LLViewerParcelMediaInfo(const std::string url,
1082 const std::string type,
1083 const LLUUID media_id,
1084 const S32 width,
1085 const S32 height,
1086 const U8 scale,
1087 const U8 loop)
1088 :
1089 mMediaURL(url),
1090 mMediaType(type),
1091 mMediaID(media_id),
1092 mMediaWidth(width),
1093 mMediaHeight(height),
1094 mMediaAutoScale(scale),
1095 mMediaLoop(loop)
1096{
1097 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
1098 mParcelLocalID = parcel ? parcel->getLocalID() : 0;
1099}
1100
1101LLViewerParcelMediaInfo::LLViewerParcelMediaInfo(const LLParcel* parcel)
1102{
1103 mMediaURL = parcel->getMediaURL();
1104 mMediaType = parcel->getMediaType();
1105 mMediaID = parcel->getMediaID();
1106 mMediaWidth = parcel->getMediaWidth();
1107 mMediaHeight = parcel->getMediaHeight();
1108 mMediaAutoScale = parcel->getMediaAutoScale();
1109 mMediaLoop = parcel->getMediaLoop();
1110 mParcelLocalID = parcel->getLocalID();
1111}
1112
1113void LLViewerParcelMediaInfo::applyToParcel(LLParcel* parcel)
1114{
1115 if (parcel && sameParcel(parcel))
1116 {
1117 parcel->setMediaURL(mMediaURL);
1118 parcel->setMediaType(mMediaType);
1119 parcel->setMediaID(mMediaID);
1120 parcel->setMediaWidth(mMediaWidth);
1121 parcel->setMediaHeight(mMediaHeight);
1122 parcel->setMediaAutoScale(mMediaAutoScale);
1123 parcel->setMediaLoop(mMediaLoop);
1124 }
1125}
1126
1127bool LLViewerParcelMediaInfo::sameParcel(const LLParcel* parcel) const
1128{
1129 return parcel && (parcel->getLocalID() == mParcelLocalID);
1130}
1131
1132bool LLViewerParcelMediaInfo::operator==(const LLViewerParcelMediaInfo &rhs) const
1133{
1134 return (mMediaURL == rhs.mMediaURL) &&
1135 (mMediaType == rhs.mMediaType) &&
1136 (mMediaID == rhs.mMediaID) &&
1137 (mMediaWidth == rhs.mMediaWidth) &&
1138 (mMediaHeight == rhs.mMediaHeight) &&
1139 (mMediaAutoScale == rhs.mMediaAutoScale) &&
1140 (mMediaLoop == rhs.mMediaLoop) &&
1141 (mParcelLocalID == rhs.mParcelLocalID);
1142} \ No newline at end of file
diff --git a/linden/indra/newview/llviewerparcelmedia.h b/linden/indra/newview/llviewerparcelmedia.h
index 7531a0f..f4c4312 100644
--- a/linden/indra/newview/llviewerparcelmedia.h
+++ b/linden/indra/newview/llviewerparcelmedia.h
@@ -34,6 +34,7 @@
34#define LLVIEWERPARCELMEDIA_H 34#define LLVIEWERPARCELMEDIA_H
35 35
36#include "llviewermedia.h" 36#include "llviewermedia.h"
37#include "llmemory.h"
37 38
38// For use by other patches so they know that media filtering is implemented. 39// For use by other patches so they know that media filtering is implemented.
39#define MEDIA_FILTERING 1 40#define MEDIA_FILTERING 1
@@ -41,6 +42,7 @@
41class LLMessageSystem; 42class LLMessageSystem;
42class LLParcel; 43class LLParcel;
43class LLViewerParcelMediaNavigationObserver; 44class LLViewerParcelMediaNavigationObserver;
45class LLViewerParcelMediaInfo;
44 46
45 47
46// This class understands land parcels, network traffic, LSL media 48// This class understands land parcels, network traffic, LSL media
@@ -49,6 +51,13 @@ class LLViewerParcelMediaNavigationObserver;
49class LLViewerParcelMedia : public LLViewerMediaObserver 51class LLViewerParcelMedia : public LLViewerMediaObserver
50{ 52{
51 LOG_CLASS(LLViewerParcelMedia); 53 LOG_CLASS(LLViewerParcelMedia);
54 private:
55 typedef enum e_command_origin
56 {
57 COMMAND_ORIGIN_LOCAL,
58 COMMAND_ORIGIN_REMOTE
59 } ECommandOrigin;
60
52 public: 61 public:
53 static void initClass(); 62 static void initClass();
54 static void cleanupClass(); 63 static void cleanupClass();
@@ -57,14 +66,14 @@ class LLViewerParcelMedia : public LLViewerMediaObserver
57 // called when the agent's parcel has a new URL, or the agent has 66 // called when the agent's parcel has a new URL, or the agent has
58 // walked on to a new parcel with media 67 // walked on to a new parcel with media
59 68
60 static void play(LLParcel* parcel, bool filter = true); 69 static void play(LLParcel* parcel, bool filter = true, const ECommandOrigin origin = COMMAND_ORIGIN_LOCAL);
61 // user clicked play button in media transport controls 70 // user clicked play button in media transport controls
62 static void playStreamingMusic(LLParcel* parcel, bool filter = true); 71 static void playStreamingMusic(LLParcel* parcel, bool filter = true);
63 // play the parcel music stream 72 // play the parcel music stream
64 static void stopStreamingMusic(); 73 static void stopStreamingMusic();
65 // stop the parcel music stream 74 // stop the parcel music stream
66 75
67 static void filterMedia(LLParcel* parcel, U32 type); // type: 0 = media, 1 = streaming music 76 static void filterMedia(LLParcel* parcel, U32 type, const ECommandOrigin origin); // type: 0 = media, 1 = streaming music
68 static bool allowedMedia(std::string media_url); 77 static bool allowedMedia(std::string media_url);
69 78
70 static bool loadDomainFilterList(); 79 static bool loadDomainFilterList();
@@ -90,6 +99,7 @@ class LLViewerParcelMedia : public LLViewerMediaObserver
90 99
91 static void processParcelMediaCommandMessage( LLMessageSystem *msg, void ** ); 100 static void processParcelMediaCommandMessage( LLMessageSystem *msg, void ** );
92 static void processParcelMediaUpdate( LLMessageSystem *msg, void ** ); 101 static void processParcelMediaUpdate( LLMessageSystem *msg, void ** );
102 static void undoParcelMediaUpdate(); // reset the parcel's media to what it was before ParcelMediaUpdate
93 static void sendMediaNavigateMessage(const std::string& url); 103 static void sendMediaNavigateMessage(const std::string& url);
94 104
95 // inherited from LLViewerMediaObserver 105 // inherited from LLViewerMediaObserver
@@ -107,6 +117,7 @@ class LLViewerParcelMedia : public LLViewerMediaObserver
107 static std::set<std::string> sMediaQueries; 117 static std::set<std::string> sMediaQueries;
108 static std::set<std::string> sAllowedMedia; 118 static std::set<std::string> sAllowedMedia;
109 static std::set<std::string> sDeniedMedia; 119 static std::set<std::string> sDeniedMedia;
120 static LLPointer<LLViewerParcelMediaInfo> sSavedMediaInfo; // The parcel original media (before a remote command is applied)
110}; 121};
111 122
112 123
@@ -120,4 +131,29 @@ public:
120 131
121}; 132};
122 133
134class LLViewerParcelMediaInfo : public LLRefCount
135{
136public:
137 LLViewerParcelMediaInfo(const std::string url,
138 const std::string type,
139 const LLUUID media_id,
140 const S32 width,
141 const S32 height,
142 const U8 scale,
143 const U8 loop);
144 LLViewerParcelMediaInfo(const LLParcel* parcel);
145 ~LLViewerParcelMediaInfo() {}
146 void applyToParcel(LLParcel* parcel);
147 bool sameParcel(const LLParcel* parcel) const;
148 bool operator==(const LLViewerParcelMediaInfo &rhs) const;
149private:
150 std::string mMediaURL;
151 std::string mMediaType;
152 LLUUID mMediaID;
153 S32 mMediaWidth;
154 S32 mMediaHeight;
155 U8 mMediaAutoScale;
156 U8 mMediaLoop;
157 S32 mParcelLocalID;
158};
123#endif 159#endif
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 57580cf..c4d5e58 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -1278,6 +1278,13 @@ LLViewerWindow::LLViewerWindow(
1278 LLAppViewer::instance()->forceExit(1); 1278 LLAppViewer::instance()->forceExit(1);
1279 } 1279 }
1280 1280
1281 const U32 real_fsaa = mWindow->getFSAASamples();
1282 if (real_fsaa != gSavedSettings.getU32("RenderFSAASamples"))
1283 {
1284 LL_WARNS("Window") << "Window created with reduced anti-aliasing samples: " << real_fsaa << "x FSAA." << LL_ENDL;
1285 gSavedSettings.setU32("RenderFSAASamples", real_fsaa);
1286 }
1287
1281 // Get the real window rect the window was created with (since there are various OS-dependent reasons why 1288 // Get the real window rect the window was created with (since there are various OS-dependent reasons why
1282 // the size of a window or fullscreen context may have been adjusted slightly...) 1289 // the size of a window or fullscreen context may have been adjusted slightly...)
1283 F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); 1290 F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
@@ -2178,7 +2185,7 @@ void LLViewerWindow::draw()
2178 { 2185 {
2179 // Used for special titles such as "Second Life - Special E3 2003 Beta" 2186 // Used for special titles such as "Second Life - Special E3 2003 Beta"
2180 const S32 DIST_FROM_TOP = 20; 2187 const S32 DIST_FROM_TOP = 20;
2181 LLFontGL::getFontSansSerifBig()->renderUTF8( 2188 LLFontGL::getFontSansSerifLarge()->renderUTF8(
2182 mOverlayTitle, 0, 2189 mOverlayTitle, 0,
2183 llround( getWindowWidth() * 0.5f), 2190 llround( getWindowWidth() * 0.5f),
2184 getWindowHeight() - DIST_FROM_TOP, 2191 getWindowHeight() - DIST_FROM_TOP,
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index bd3996d..608d720 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -81,7 +81,9 @@ LLSimInfo::LLSimInfo()
81 mAccess(0x0), 81 mAccess(0x0),
82 mRegionFlags(0x0), 82 mRegionFlags(0x0),
83 mWaterHeight(0.f), 83 mWaterHeight(0.f),
84 mAlpha(-1.f) 84 mAlpha(-1.f),
85 msizeX(REGION_WIDTH_UNITS),
86 msizeY(REGION_WIDTH_UNITS)
85{ 87{
86} 88}
87 89
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 8d9ed1b..d7a6838 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -472,7 +472,7 @@ void LLWorldMapView::draw()
472 F32 bottom = sPanY + half_height + relative_y; 472 F32 bottom = sPanY + half_height + relative_y;
473 F32 left = sPanX + half_width + relative_x; 473 F32 left = sPanX + half_width + relative_x;
474 F32 top = bottom+ (sMapScale * info->msizeY / REGION_WIDTH_METERS); 474 F32 top = bottom+ (sMapScale * info->msizeY / REGION_WIDTH_METERS);
475 F32 right = left + (sMapScale * info->msizeY / REGION_WIDTH_METERS); 475 F32 right = left + (sMapScale * info->msizeX / REGION_WIDTH_METERS);
476 476
477 // Switch to world map texture (if available for this region) if either: 477 // Switch to world map texture (if available for this region) if either:
478 // 1. Tiles are zoomed out small enough, or 478 // 1. Tiles are zoomed out small enough, or
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml b/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
index c8aacba..453bf46 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
@@ -915,32 +915,18 @@ Only large parcels can be listed in search.
915 right="-12" 915 right="-12"
916 scale_image="true" 916 scale_image="true"
917 width="70" /> 917 width="70" />
918 <check_box
919 bottom_delta="-22"
920 enabled="true"
921 follows="left|top"
922 font="SansSerifSmall"
923 height="16"
924 initial_value="false"
925 label="Hide URL"
926 left="80"
927 mouse_opaque="true"
928 name="hide_media_url"
929 radio_style="false"
930 tool_tip="Checking this option will hide the media URL from any non-authorized viewers of this parcel information. Note this is not available for HTML types."
931 width="150" />
932 <text 918 <text
933 bottom_delta="0" 919 bottom_delta="-22"
934 follows="right|top" 920 follows="right|top"
935 font="SansSerifSmall" 921 font="SansSerifSmall"
936 halign="right" 922 halign="left"
937 height="16" 923 height="16"
938 length="1" 924 length="1"
939 name="media_reset" 925 name="media_reset"
940 right="-164" 926 left="80"
941 tool_tip="Amount of time until parcel automatically reverts to default URL (0 for never return)" 927 tool_tip="Amount of time until parcel automatically reverts to default URL (0 for never return)"
942 type="string" 928 type="string"
943 width="185"> 929 width="120">
944 Return to Home URL in: 930 Return to Home URL in:
945 </text> 931 </text>
946 <spinner 932 <spinner
@@ -948,14 +934,13 @@ Only large parcels can be listed in search.
948 decimal_digits="0" 934 decimal_digits="0"
949 enabled="false" 935 enabled="false"
950 follows="right|top" 936 follows="right|top"
951 halign="right"
952 height="16" 937 height="16"
953 increment="1" 938 increment="1"
954 initial_val="0" 939 initial_val="0"
955 max_val="1024" 940 max_val="1024"
956 min_val="0" 941 min_val="0"
957 name="media_reset_time" 942 name="media_reset_time"
958 right="-90" 943 left_delta="126"
959 tool_tip="Amount of time until parcel reverts to default URL (0 for never return)" 944 tool_tip="Amount of time until parcel reverts to default URL (0 for never return)"
960 width="64" /> 945 width="64" />
961 <text 946 <text
@@ -964,12 +949,11 @@ Only large parcels can be listed in search.
964 font="SansSerifSmall" 949 font="SansSerifSmall"
965 halign="left" 950 halign="left"
966 height="16" 951 height="16"
967 left_delta="70" 952 left_delta="72"
968 length="1" 953 length="1"
969 name="minutes" 954 name="minutes"
970 right="-10"
971 type="string"> 955 type="string">
972 Minutes 956 minutes
973 </text> 957 </text>
974 <text 958 <text
975 bottom_delta="-22" 959 bottom_delta="-22"
@@ -1315,20 +1299,6 @@ Select the thumbnail to choose a different texture.
1315 name="music_url" 1299 name="music_url"
1316 right="-15" 1300 right="-15"
1317 select_on_focus="true" /> 1301 select_on_focus="true" />
1318 <check_box
1319 bottom_delta="-25"
1320 enabled="true"
1321 follows="left|top"
1322 font="SansSerifSmall"
1323 height="16"
1324 initial_value="false"
1325 label="Hide URL"
1326 left="80"
1327 mouse_opaque="true"
1328 name="hide_music_url"
1329 radio_style="false"
1330 tool_tip="Checking this option will hide the music URL from any non-authorized viewers of this parcel information."
1331 width="150" />
1332 <text 1302 <text
1333 bottom_delta="-65" 1303 bottom_delta="-65"
1334 follows="left|top" 1304 follows="left|top"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml b/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
index 3370ea8..47638d5 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
@@ -117,7 +117,7 @@ sold with objects
117 <icon follows="top|left" height="64" image_name="badge_ok.j2c" left="0" name="step_1" 117 <icon follows="top|left" height="64" image_name="badge_ok.j2c" left="0" name="step_1"
118 width="64" /> 118 width="64" />
119 <text bottom_delta="38" follows="top|left" height="16" left="72" 119 <text bottom_delta="38" follows="top|left" height="16" left="72"
120 name="account_action" right="438" width="218" font="SansSerifBig" > 120 name="account_action" right="438" width="218" font="SansSerifLarge" >
121 Upgrade you to premium membership. 121 Upgrade you to premium membership.
122 </text> 122 </text>
123 <text follows="top|left" height="16" left="72" name="account_reason" right="400" 123 <text follows="top|left" height="16" left="72" name="account_reason" right="400"
@@ -139,7 +139,7 @@ sold with objects
139 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0" 139 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
140 name="step_2" width="64" /> 140 name="step_2" width="64" />
141 <text bottom_delta="38" follows="top|left" height="16" left="72" 141 <text bottom_delta="38" follows="top|left" height="16" left="72"
142 name="land_use_action" right="438" width="218" font="SansSerifBig" > 142 name="land_use_action" right="438" width="218" font="SansSerifLarge" >
143 Increase your monthly land use fees to US$ 40/month. 143 Increase your monthly land use fees to US$ 40/month.
144 </text> 144 </text>
145 <text follows="top|left" height="32" left="72" name="land_use_reason" right="435" 145 <text follows="top|left" height="32" left="72" name="land_use_reason" right="435"
@@ -151,7 +151,7 @@ This parcel is 512 sq.m. of land.
151 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0" 151 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
152 name="step_3" width="64" /> 152 name="step_3" width="64" />
153 <text bottom_delta="38" follows="top|left" height="16" left="72" 153 <text bottom_delta="38" follows="top|left" height="16" left="72"
154 name="purchase_action" right="438" font="SansSerifBig" > 154 name="purchase_action" right="438" font="SansSerifLarge" >
155 Pay Joe Resident L$ 4000 for the land 155 Pay Joe Resident L$ 4000 for the land
156 </text> 156 </text>
157 <text follows="top|left" height="16" left="72" name="currency_reason" right="400"> 157 <text follows="top|left" height="16" left="72" name="currency_reason" right="400">
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_media_filter.xml b/linden/indra/newview/skins/default/xui/en-us/floater_media_filter.xml
index 9b7355c..f0fb3a3 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_media_filter.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_media_filter.xml
@@ -1,9 +1,22 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="floatermediafilter" title="Media Filter" rect_control="MediaFilterRect" 2<floater name="floatermediafilter" title="Media Filter" rect_control="MediaFilterRect"
3 can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" 3 can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
4 height="350" width="600" min_height="350" min_width="600"> 4 height="410" width="600" min_height="350" min_width="600">
5
6 <check_box control_name="MediaEnableFilter" name="enable_mediafilter" label="Enable Media Filter"
7 initial_value="true" tool_tip="Enables filtering media URLs by domain names."
8 font="SansSerifSmall" mouse_opaque="true"
9 left="14" height="16" bottom_delta="-45" width="4500" follows="left|top" />
10
11 <check_box control_name="MediaFilterOnlyRemoteCommands" name="filter_only_remote"
12 label="Filter only when a script initiates the stream (less secure)" initial_value="false"
13 tool_tip="This will prevent popups asking about URLs that are permanently set on a parcel.
14Only scripted changes to the media URL and scripted requests to start playing a stream will be filtered."
15 font="SansSerifSmall" mouse_opaque="true"
16 left_delta="14" height="16" width="450" follows="left|top" />
17
5 <text name="info1" font="SansSerif" mouse_opaque="true" halign="center" 18 <text name="info1" font="SansSerif" mouse_opaque="true" halign="center"
6 bottom_delta="-45" left="20" height="20" width="560" follows="left|right|top"> 19 bottom_delta="-40" left="20" height="20" width="560" follows="left|right|top">
7 Domains in bold are in the persistent list (i.e. they are whitelisted or blacklisted). 20 Domains in bold are in the persistent list (i.e. they are whitelisted or blacklisted).
8 </text> 21 </text>
9 <text name="info2" font="SansSerif" mouse_opaque="true" halign="center" 22 <text name="info2" font="SansSerif" mouse_opaque="true" halign="center"
@@ -14,48 +27,68 @@
14 <scroll_list name="whitelist_list" follows="top|bottom|left" 27 <scroll_list name="whitelist_list" follows="top|bottom|left"
15 background_visible="true" mouse_opaque="true" 28 background_visible="true" mouse_opaque="true"
16 multi_select="false" column_padding="5" draw_border="true" draw_heading="true" 29 multi_select="false" column_padding="5" draw_border="true" draw_heading="true"
17 bottom_delta="-205" left="15" height="200" width="280"> 30 bottom_delta="-200" left="15" height="200" width="280">
18 <column name="whitelist_col" label="Allowed domains/objects" dynamicwidth="true" /> 31 <column name="whitelist_col" label="Allowed domains or server objects" dynamicwidth="true" />
19 </scroll_list> 32 </scroll_list>
20 33
21 <scroll_list name="blacklist_list" follows="top|bottom|right" 34 <scroll_list name="blacklist_list" follows="top|bottom|right"
22 background_visible="true" mouse_opaque="true" 35 background_visible="true" mouse_opaque="true"
23 multi_select="false" column_padding="5" draw_border="true" draw_heading="true" 36 multi_select="false" column_padding="5" draw_border="true" draw_heading="true"
24 bottom_delta="0" right="-15" height="200" width="280"> 37 bottom_delta="0" right="-15" height="200" width="280">
25 <column name="blacklist_col" label="Blocked domains/objects" dynamicwidth="true" /> 38 <column name="blacklist_col" label="Blocked domains or server objects" dynamicwidth="true" />
26 </scroll_list> 39 </scroll_list>
27 40
28 <button name="add_whitelist" font="SansSerif" label="Add..." halign="center" 41 <button name="add_whitelist" font="SansSerif" label="Add..." halign="center"
42 tool_tip="Add a server to the whitelist"
29 enabled="true" mouse_opaque="true" follows="bottom|left" 43 enabled="true" mouse_opaque="true" follows="bottom|left"
30 bottom_delta="-25" left="30" height="20" width="80" /> 44 bottom_delta="-25" left="15" height="20" width="80" />
31 45
32 <button name="remove_whitelist" font="SansSerif" label="Remove" halign="center" 46 <button name="remove_whitelist" font="SansSerif" label="Remove" halign="center"
47 tool_tip="Remove the selected server from the whitelist"
33 enabled="true" mouse_opaque="true" follows="bottom|left" 48 enabled="true" mouse_opaque="true" follows="bottom|left"
34 bottom_delta="0" left_delta="100" height="20" width="80" /> 49 bottom_delta="0" left="100" height="20" width="80" />
35 50
36 <button name="clear_lists" font="SansSerif" label="Clear lists" halign="center" 51 <button name="clear_lists" font="SansSerif" label="Clear lists" halign="center"
37 enabled="true" mouse_opaque="true" follows="bottom|left|right" 52 tool_tip="Clear all lists"
38 bottom_delta="0" left_delta="110" height="20" width="120" /> 53 enabled="true" mouse_opaque="true" follows="bottom|left"
54 bottom_delta="0" left="205" height="20" width="90" />
55
56 <button name="show_ips" font="SansSerif" label="Show IPs" halign="center"
57 tool_tip="Show the IP associated with each domain name (makes the viewer pause while the list is refreshed, because of DNS lookups)"
58 enabled="true" mouse_opaque="true" follows="bottom|right"
59 bottom_delta="0" right="-205" height="20" width="90" />
39 60
40 <button name="add_blacklist" font="SansSerif" label="Add..." halign="center" 61 <button name="add_blacklist" font="SansSerif" label="Add..." halign="center"
62 tool_tip="Add a server to the blacklist"
41 enabled="true" mouse_opaque="true" follows="bottom|right" 63 enabled="true" mouse_opaque="true" follows="bottom|right"
42 bottom_delta="0" right="-130" height="20" width="80" /> 64 bottom_delta="0" right="-100" height="20" width="80" />
43 65
44 <button name="remove_blacklist" font="SansSerif" label="Remove" halign="center" 66 <button name="remove_blacklist" font="SansSerif" label="Remove" halign="center"
67 tool_tip="Remove the selected server from the blacklist"
45 enabled="true" mouse_opaque="true" follows="bottom|right" 68 enabled="true" mouse_opaque="true" follows="bottom|right"
46 bottom_delta="0" right="-30" height="20" width="80" /> 69 bottom_delta="0" right="-15" height="20" width="80" />
47 70
48 <text name="add_text" font="SansSerif" mouse_opaque="true" enabled="true" 71 <text name="add_text" font="SansSerif" mouse_opaque="true"
49 bottom_delta="-25" left="20" height="20" width="500" follows="left|right|bottom"> 72 bottom_delta="-25" left="20" height="20" width="450" follows="left|right|bottom">
50 New domain: 73 New domain:
51 </text> 74 </text>
52 75
76 <check_box name="match_ip" label="Add/remove matching IP" initial_value="true"
77 tool_tip="Add or remove any IP associated with the added or removed domain name"
78 font="SansSerifSmall" mouse_opaque="true" radio_style="false"
79 bottom_delta="2" right="-95" height="16" width="70" follows="right|bottom" />
80
53 <line_editor name="input_domain" max_length="255" font="SansSerif" enabled="false" 81 <line_editor name="input_domain" max_length="255" font="SansSerif" enabled="false"
82 tool_tip="Enter the new URL, domain name, IP or scripted object HTTP server path here"
54 select_all_on_focus_received="true" select_on_focus="true" 83 select_all_on_focus_received="true" select_on_focus="true"
55 bevel_style="in" border_style="line" border_thickness="1" 84 bevel_style="in" border_style="line" border_thickness="1"
56 bottom_delta="-20" right="-100" height="20" left="15" follows="left|bottom|right"/> 85 bottom_delta="-22" right="-180" height="20" left="15" follows="left|bottom|right"/>
57 86
58 <button name="commit_domain" font="SansSerif" label="Add" halign="center" enabled="false" 87 <button name="cancel_domain" font="SansSerif" label="Cancel" halign="center" enabled="false"
59 mouse_opaque="true" follows="bottom|right" 88 mouse_opaque="true" follows="bottom|right"
60 bottom_delta="0" right="-15" height="20" width="80"/> 89 bottom_delta="0" right="-15" height="20" width="80"/>
90 <button name="commit_domain" font="SansSerif" label="Add" halign="center" enabled="false"
91 tool_tip="Add to the list"
92 mouse_opaque="true" follows="bottom|right"
93 bottom_delta="0" right="-95" height="20" width="80"/>
61</floater> 94</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
index 939a877..213147a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
@@ -18,8 +18,11 @@
18 halign="center" height="20" 18 halign="center" height="20"
19 help_url="http://support.imprudenceviewer.org/" 19 help_url="http://support.imprudenceviewer.org/"
20 label="Support" left="9" mouse_opaque="true" 20 label="Support" left="9" mouse_opaque="true"
21 name="Support" scale_image="true" width="100" /> 21 name="Support" scale_image="true" width="90" />
22 <tab_container bottom="-476" enabled="true" follows="left|top|right|bottom" height="455" 22 <button bottom_delta="0" follows="left|bottom" font="SansSerif" height="20" width="160"
23 label="Reset All To Default" name="reset_btn" left_delta="95"
24 tool_tip="Reset all preferences to their default values (requires a restart)" />
25 <tab_container bottom="-476" enabled="true" follows="left|top|right|bottom" height="455"
23 left="0" mouse_opaque="false" name="pref core" tab_group="1" 26 left="0" mouse_opaque="false" name="pref core" tab_group="1"
24 tab_position="left" tab_width="120" width="620" /> 27 tab_position="left" tab_width="120" width="620" />
25</floater> 28</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_sell_land.xml b/linden/indra/newview/skins/default/xui/en-us/floater_sell_land.xml
index d91b5ff..3aeba26 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_sell_land.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_sell_land.xml
@@ -27,7 +27,7 @@
27 <icon bottom_delta="-66" follows="top|left" height="64" image_name="badge_note.j2c" 27 <icon bottom_delta="-66" follows="top|left" height="64" image_name="badge_note.j2c"
28 left="0" name="step_price" width="64" /> 28 left="0" name="step_price" width="64" />
29 <text bottom_delta="38" follows="top|left" height="16" left="72" name="price_label" 29 <text bottom_delta="38" follows="top|left" height="16" left="72" name="price_label"
30 right="-20" font="SansSerifBig" > 30 right="-20" font="SansSerifLarge" >
31 Set a price: 31 Set a price:
32 </text> 32 </text>
33 <text follows="top|left" height="16" left="72" name="price_text" right="-20"> 33 <text follows="top|left" height="16" left="72" name="price_text" right="-20">
@@ -44,7 +44,7 @@
44 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0" 44 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
45 name="step_sell_to" width="64" /> 45 name="step_sell_to" width="64" />
46 <text bottom_delta="38" follows="top|left" height="16" left="72" name="sell_to_label" 46 <text bottom_delta="38" follows="top|left" height="16" left="72" name="sell_to_label"
47 right="-20" font="SansSerifBig" > 47 right="-20" font="SansSerifLarge" >
48 Sell the land to: 48 Sell the land to:
49 </text> 49 </text>
50 <text follows="top|left" height="16" left="72" name="sell_to_text" right="-20"> 50 <text follows="top|left" height="16" left="72" name="sell_to_text" right="-20">
@@ -69,7 +69,7 @@
69 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0" 69 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
70 name="step_sell_objects" width="64" /> 70 name="step_sell_objects" width="64" />
71 <text bottom_delta="38" follows="top|left" height="16" left="72" 71 <text bottom_delta="38" follows="top|left" height="16" left="72"
72 name="sell_objects_label" right="-20" font="SansSerifBig" > 72 name="sell_objects_label" right="-20" font="SansSerifLarge" >
73 Sell the objects with the land? 73 Sell the objects with the land?
74 </text> 74 </text>
75 <text bottom_delta="-20" follows="top|left" height="16" left="72" 75 <text bottom_delta="-20" follows="top|left" height="16" left="72"
@@ -89,7 +89,7 @@
89 <button bottom_delta="4" height="16" label="Show Objects" name="show_objects" 89 <button bottom_delta="4" height="16" label="Show Objects" name="show_objects"
90 right="414" width="110" /> 90 right="414" width="110" />
91 <text bottom_delta="-35" follows="top|left" height="16" left="72" 91 <text bottom_delta="-35" follows="top|left" height="16" left="72"
92 name="nag_message_label" right="-20" font="SansSerifBig" > 92 name="nag_message_label" right="-20" font="SansSerifLarge" >
93 REMEMBER: All sales are final. 93 REMEMBER: All sales are final.
94 </text> 94 </text>
95 <button bottom="-479" follows="bottom|left" height="20" label="Set Land For Sale" 95 <button bottom="-479" follows="bottom|left" height="20" label="Set Land For Sale"
diff --git a/linden/indra/newview/skins/default/xui/en-us/fonts.xml b/linden/indra/newview/skins/default/xui/en-us/fonts.xml
index 7343ac2..e9ede83 100644
--- a/linden/indra/newview/skins/default/xui/en-us/fonts.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/fonts.xml
@@ -147,6 +147,10 @@
147 comment="Size of large font (points, or 1/72 of an inch)" 147 comment="Size of large font (points, or 1/72 of an inch)"
148 size="12" 148 size="12"
149 /> 149 />
150 <font_size name="Bigger"
151 comment="Size of medium font (points, or 1/72 of an inch)"
152 size="11"
153 />
150 <font_size name="Medium" 154 <font_size name="Medium"
151 comment="Size of medium font (points, or 1/72 of an inch)" 155 comment="Size of medium font (points, or 1/72 of an inch)"
152 size="10" 156 size="10"
diff --git a/linden/indra/newview/skins/default/xui/en-us/mime_types_linux.xml b/linden/indra/newview/skins/default/xui/en-us/mime_types_linux.xml
index e95b371..f0ba830 100755
--- a/linden/indra/newview/skins/default/xui/en-us/mime_types_linux.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/mime_types_linux.xml
@@ -431,6 +431,17 @@
431 media_plugin_gstreamer 431 media_plugin_gstreamer
432 </impl> 432 </impl>
433 </mimetype> 433 </mimetype>
434 <mimetype name="video/x-m4v">
435 <label name="video/m4v_label">
436 Movie (M4V)
437 </label>
438 <widgettype>
439 movie
440 </widgettype>
441 <impl>
442 media_plugin_gstreamer
443 </impl>
444 </mimetype>
434 <mimetype menu="1" name="video/quicktime"> 445 <mimetype menu="1" name="video/quicktime">
435 <label name="video/quicktime_label"> 446 <label name="video/quicktime_label">
436 Movie (QuickTime) 447 Movie (QuickTime)
diff --git a/linden/indra/newview/skins/default/xui/en-us/mime_types_mac.xml b/linden/indra/newview/skins/default/xui/en-us/mime_types_mac.xml
index 7931e55..e1751eb 100755
--- a/linden/indra/newview/skins/default/xui/en-us/mime_types_mac.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/mime_types_mac.xml
@@ -431,6 +431,17 @@
431 media_plugin_quicktime 431 media_plugin_quicktime
432 </impl> 432 </impl>
433 </mimetype> 433 </mimetype>
434 <mimetype name="video/x-m4v">
435 <label name="video/m4v_label">
436 Movie (M4V)
437 </label>
438 <widgettype>
439 movie
440 </widgettype>
441 <impl>
442 media_plugin_gstreamer
443 </impl>
444 </mimetype>
434 <mimetype menu="1" name="video/quicktime"> 445 <mimetype menu="1" name="video/quicktime">
435 <label name="video/quicktime_label"> 446 <label name="video/quicktime_label">
436 Movie (QuickTime) 447 Movie (QuickTime)
diff --git a/linden/indra/newview/skins/default/xui/en-us/mime_types_windows.xml b/linden/indra/newview/skins/default/xui/en-us/mime_types_windows.xml
index 5ee4ed0..26491e0 100644
--- a/linden/indra/newview/skins/default/xui/en-us/mime_types_windows.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/mime_types_windows.xml
@@ -428,8 +428,19 @@
428 movie 428 movie
429 </widgettype> 429 </widgettype>
430 <impl> 430 <impl>
431 media_plugin_quicktime 431 media_plugin_quicktime
432 </impl> 432 </impl>
433 </mimetype>
434 <mimetype name="video/x-m4v">
435 <label name="video/m4v_label">
436 Movie (M4V)
437 </label>
438 <widgettype>
439 movie
440 </widgettype>
441 <impl>
442 media_plugin_gstreamer
443 </impl>
433 </mimetype> 444 </mimetype>
434 <mimetype menu="1" name="video/quicktime"> 445 <mimetype menu="1" name="video/quicktime">
435 <label name="video/quicktime_label"> 446 <label name="video/quicktime_label">
diff --git a/linden/indra/newview/skins/default/xui/en-us/notifications.xml b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
index 27f5529..306e3b8 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
@@ -7197,6 +7197,25 @@ IM history could not be found for [NAME].
7197</notification> 7197</notification>
7198 7198
7199<notification 7199<notification
7200 icon="alertmodal.tga"
7201 name="InvalidLogInSecondLife"
7202 type="alertmodal">
7203Oops! The login name you entered wasn't formatted correctly!
7204
7205[SECOND_LIFE] accepts the following login formats:
7206
7207 - username
7208 - username.Resident
7209 - firstname.lastname
7210
7211If you don't have an account, would you like to create one now?
7212 <usetemplate
7213 name="okcancelbuttons"
7214 notext="Try again"
7215 yestext="Create an account"/>
7216</notification>
7217
7218<notification
7200 icon="alert.tga" 7219 icon="alert.tga"
7201 name="ShowLookAtInfo" 7220 name="ShowLookAtInfo"
7202 type="alert"> 7221 type="alert">
@@ -7324,11 +7343,15 @@ The Second Life Terms of Service do not allow you to opt out. By logging in to S
7324 icon="alert.tga" 7343 icon="alert.tga"
7325 name="MediaAlert" 7344 name="MediaAlert"
7326 type="alert"> 7345 type="alert">
7327The owner of this parcel has requested [TYPE] URL pertaining to the following domain or scripted object to be loaded by your viewer[WARNING]: 7346The owner of this parcel has requested the following [TYPE] URL to be loaded by your viewer:
7347
7348[URL]
7349
7350You may choose to allow or deny the corresponding domain or in-world scripted object server:
7328 7351
7329[DOMAIN] 7352[DOMAIN]
7330 7353
7331"Allow" and "Deny" apply only for this session, while "Blacklist" and "Whitelist" apply forever to the above domain or scripted object. 7354"Allow" and "Deny" apply only for this session, while "Blacklist" and "Whitelist" apply forever.
7332 <form name="form"> 7355 <form name="form">
7333 <button 7356 <button
7334 index="0" 7357 index="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
index 3e69d15..b032b09 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_general.xml
@@ -21,7 +21,7 @@ Hover your mouse over the options for more help.
21 prevalidate="ascii" v_pad="0" width="300" spell_check="true" /> 21 prevalidate="ascii" v_pad="0" width="300" spell_check="true" />
22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
23 bottom="-20" drop_shadow_visible="true" follows="left|top" 23 bottom="-20" drop_shadow_visible="true" follows="left|top"
24 font="SansSerifBig" h_pad="0" halign="left" height="16" left="7" 24 font="SansSerifLarge" h_pad="0" halign="left" height="16" left="7"
25 mouse_opaque="true" name="group_name" v_pad="0" width="300"> 25 mouse_opaque="true" name="group_name" v_pad="0" width="300">
26 Type your new group name here 26 Type your new group name here
27 </text> 27 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_land_money.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_land_money.xml
index 9341d4b..b5f7b37 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_land_money.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_land_money.xml
@@ -18,7 +18,7 @@
18 </string> 18 </string>
19 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 19 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
20 bottom="-20" drop_shadow_visible="true" follows="left|top" 20 bottom="-20" drop_shadow_visible="true" follows="left|top"
21 font="SansSerifBig" h_pad="0" halign="left" height="16" left="7" 21 font="SansSerifLarge" h_pad="0" halign="left" height="16" left="7"
22 mouse_opaque="true" name="group_land_heading" v_pad="0" width="150"> 22 mouse_opaque="true" name="group_land_heading" v_pad="0" width="150">
23 Group Owned Land 23 Group Owned Land
24 </text> 24 </text>
@@ -105,7 +105,7 @@
105 </text> 105 </text>
106 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 106 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
107 bottom_delta="-25" drop_shadow_visible="true" follows="left|top" 107 bottom_delta="-25" drop_shadow_visible="true" follows="left|top"
108 font="SansSerifBig" h_pad="0" halign="left" height="16" left="12" 108 font="SansSerifLarge" h_pad="0" halign="left" height="16" left="12"
109 mouse_opaque="true" name="group_money_heading" v_pad="0" width="150"> 109 mouse_opaque="true" name="group_money_heading" v_pad="0" width="150">
110 Group [CURRENCY] 110 Group [CURRENCY]
111 </text> 111 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
index bca87d9..e6d7604 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_notices.xml
@@ -15,7 +15,7 @@ the General tab.
15 <button bottom="-24" font="SansSerif" halign="center" height="16" label="?" 15 <button bottom="-24" font="SansSerif" halign="center" height="16" label="?"
16 label_selected="?" left="391" name="help_button" width="20" /> 16 label_selected="?" left="391" name="help_button" width="20" />
17 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-20" drop_shadow_visible="true" font="SansSerifBig" h_pad="0" 18 bottom="-20" drop_shadow_visible="true" font="SansSerifLarge" h_pad="0"
19 halign="left" height="16" left="7" mouse_opaque="true" name="lbl" v_pad="0" 19 halign="left" height="16" left="7" mouse_opaque="true" name="lbl" v_pad="0"
20 width="436"> 20 width="436">
21 Group Notices Archive 21 Group Notices Archive
@@ -51,7 +51,7 @@ Notice lists are limited to 200 notices per group on a daily basis.
51 <panel border="false" bottom="0" follows="all" height="268" label="Create New Notice" 51 <panel border="false" bottom="0" follows="all" height="268" label="Create New Notice"
52 left="1" mouse_opaque="true" name="panel_create_new_notice" width="418"> 52 left="1" mouse_opaque="true" name="panel_create_new_notice" width="418">
53 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 53 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
54 bottom="-18" drop_shadow_visible="true" font="SansSerifBig" h_pad="0" 54 bottom="-18" drop_shadow_visible="true" font="SansSerifLarge" h_pad="0"
55 halign="left" height="16" left="7" mouse_opaque="false" name="lbl" 55 halign="left" height="16" left="7" mouse_opaque="false" name="lbl"
56 v_pad="0" width="436"> 56 v_pad="0" width="436">
57 Create a Notice 57 Create a Notice
@@ -115,7 +115,7 @@ and you can&apos;t send a folder.
115 <panel border="false" bottom="0" follows="all" height="268" label="View Past Notice" 115 <panel border="false" bottom="0" follows="all" height="268" label="View Past Notice"
116 left="1" mouse_opaque="true" name="panel_view_past_notice" width="418"> 116 left="1" mouse_opaque="true" name="panel_view_past_notice" width="418">
117 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 117 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
118 bottom="-18" drop_shadow_visible="true" font="SansSerifBig" h_pad="0" 118 bottom="-18" drop_shadow_visible="true" font="SansSerifLarge" h_pad="0"
119 halign="left" height="16" left="7" mouse_opaque="false" name="lbl" 119 halign="left" height="16" left="7" mouse_opaque="false" name="lbl"
120 v_pad="0" width="436"> 120 v_pad="0" width="436">
121 Archived Notice 121 Archived Notice
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
index e5b621e..014b28d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_roles.xml
@@ -12,7 +12,7 @@
12 name="help_button" width="20" /> 12 name="help_button" width="20" />
13 <panel border="false" bottom="-24" height="24" left="7" name="members_header" 13 <panel border="false" bottom="-24" height="24" left="7" name="members_header"
14 visible="true" width="380"> 14 visible="true" width="380">
15 <text bottom_delta="-20" font="SansSerifBig" halign="left" height="16" left="0" 15 <text bottom_delta="-20" font="SansSerifLarge" halign="left" height="16" left="0"
16 name="static" width="150"> 16 name="static" width="150">
17 Members &amp; Roles 17 Members &amp; Roles
18 </text> 18 </text>
@@ -24,7 +24,7 @@ easily be customized, allowing for greater organization and flexibility.
24 </panel> 24 </panel>
25 <panel border="false" bottom_delta="0" height="24" left="7" name="roles_header" 25 <panel border="false" bottom_delta="0" height="24" left="7" name="roles_header"
26 visible="false" width="380"> 26 visible="false" width="380">
27 <text bottom_delta="-20" font="SansSerifBig" halign="left" height="16" left="0" 27 <text bottom_delta="-20" font="SansSerifLarge" halign="left" height="16" left="0"
28 name="static" width="100"> 28 name="static" width="100">
29 Roles 29 Roles
30 </text> 30 </text>
@@ -47,7 +47,7 @@ easily be customized, allowing for greater organization and flexibility.
47 </panel> 47 </panel>
48 <panel border="false" bottom_delta="-20" height="24" left="7" name="actions_header" 48 <panel border="false" bottom_delta="-20" height="24" left="7" name="actions_header"
49 visible="false" width="380"> 49 visible="false" width="380">
50 <text bottom_delta="0" font="SansSerifBig" halign="left" height="16" left="0" 50 <text bottom_delta="0" font="SansSerifLarge" halign="left" height="16" left="0"
51 name="static" width="200"> 51 name="static" width="200">
52 Abilities 52 Abilities
53 </text> 53 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml b/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
index 168b60b..64be465 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_group_voting.xml
@@ -20,7 +20,7 @@ vote on open proposals, and view old proposals.
20 name="help_button" width="20" /> 20 name="help_button" width="20" />
21 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 21 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
22 bottom="446" drop_shadow_visible="true" follows="left|top" 22 bottom="446" drop_shadow_visible="true" follows="left|top"
23 font="SansSerifBig" h_pad="0" halign="left" height="16" left="7" 23 font="SansSerifLarge" h_pad="0" halign="left" height="16" left="7"
24 mouse_opaque="false" name="proposal_header" v_pad="0" width="363"> 24 mouse_opaque="false" name="proposal_header" v_pad="0" width="363">
25 Open Group Proposals 25 Open Group Proposals
26 </text> 26 </text>
@@ -144,7 +144,7 @@ vote on open proposals, and view old proposals.
144 mouse_opaque="true" name="btn_abstain" width="63" /> 144 mouse_opaque="true" name="btn_abstain" width="63" />
145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
146 bottom="-240" drop_shadow_visible="true" follows="left|top" 146 bottom="-240" drop_shadow_visible="true" follows="left|top"
147 font="SansSerifBig" h_pad="0" halign="left" height="10" left="12" 147 font="SansSerifLarge" h_pad="0" halign="left" height="10" left="12"
148 mouse_opaque="false" name="txt" v_pad="0" width="363"> 148 mouse_opaque="false" name="txt" v_pad="0" width="363">
149 Group Voting History 149 Group Voting History
150 </text> 150 </text>
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_login.xml b/linden/indra/newview/skins/default/xui/en-us/panel_login.xml
index 16dd4ad..68991b6 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_login.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_login.xml
@@ -30,32 +30,6 @@
30 </string> 30 </string>
31 31
32 32
33 <!-- START LOCATION -->
34
35 <text name="start_location_text"
36 bottom="32" left="10" height="16" right="115"
37 follows="left|bottom" h_pad="0" halign="right" v_pad="0"
38 bg_visible="false" drop_shadow_visible="true"
39 border_visible="false" border_drop_shadow_visible="false"
40 font="SansSerifSmall" mouse_opaque="true">
41 Start location:
42 </text>
43 <combo_box name="start_location_combo"
44 bottom_delta="2" left="120" height="16" width="150"
45 follows="left|bottom" font="SansSerifSmall"
46 mouse_opaque="true" allow_text_entry="true" max_chars="128">
47 <combo_item name="MyHome" value="My Home">
48 My Home
49 </combo_item>
50 <combo_item name="MyLastLocation" value="My Last Location">
51 My Last Location
52 </combo_item>
53 <combo_item name="Typeregionname" value="&lt;Type region name&gt;">
54 &lt;Type region name&gt;
55 </combo_item>
56 </combo_box>
57
58
59 <!-- FIRST NAME --> 33 <!-- FIRST NAME -->
60 34
61 <text name="first_name_text" 35 <text name="first_name_text"
@@ -96,10 +70,30 @@
96 allow_translate="false" /> 70 allow_translate="false" />
97 71
98 72
73 <!-- SL USERNAME -->
74
75 <text name="username_text"
76 bottom="80" left="24" height="16" width="250"
77 follows="left|bottom" h_pad="0" halign="left" v_pad="0"
78 bg_visible="false" drop_shadow_visible="true"
79 border_visible="false" border_drop_shadow_visible="false"
80 font="SansSerif" mouse_opaque="true">
81 Login name:
82 </text>
83 <line_editor name="username_edit"
84 bottom_delta="-20" left_delta="0" height="20" width="250"
85 follows="left|bottom" font="SansSerif"
86 bevel_style="in" border_style="line" border_thickness="1"
87 max_length="31" mouse_opaque="true"
88 handle_edit_keys_directly="true"
89 select_all_on_focus_received="true"
90 allow_translate="false" />
91
92
99 <!-- PASSWORD --> 93 <!-- PASSWORD -->
100 94
101 <text name="password_text" 95 <text name="password_text"
102 bottom_delta="20" left_delta="130" height="16" width="120" 96 bottom_delta="20" left="285" height="16" width="120"
103 follows="left|bottom" h_pad="0" halign="left" v_pad="0" 97 follows="left|bottom" h_pad="0" halign="left" v_pad="0"
104 bg_visible="false" drop_shadow_visible="true" 98 bg_visible="false" drop_shadow_visible="true"
105 border_visible="false" border_drop_shadow_visible="false" 99 border_visible="false" border_drop_shadow_visible="false"
@@ -114,36 +108,70 @@
114 handle_edit_keys_directly="true" 108 handle_edit_keys_directly="true"
115 select_all_on_focus_received="true" 109 select_all_on_focus_received="true"
116 allow_translate="false" /> 110 allow_translate="false" />
117 <check_box name="remember_check" label="Remember password"
118 bottom_delta="-24" left_delta="0" height="16" width="140"
119 follows="left|bottom" font="SansSerifSmall" control_name="RememberPassword"
120 initial_value="false" mouse_opaque="true" />
121 111
122 112
123 <!-- GRIDS --> 113 <!-- GRIDS -->
124 114
125 <text name="grid_text" 115 <text name="grid_text"
126 bottom="80" left_delta="150" height="16" width="120" 116 bottom="80" left_delta="150" height="16" width="120"
127 follows="left|bottom" h_pad="0" halign="left" v_pad="0" 117 follows="left|bottom" h_pad="0" halign="left" v_pad="0"
128 bg_visible="false" drop_shadow_visible="true" 118 bg_visible="false" drop_shadow_visible="true"
129 border_visible="false" border_drop_shadow_visible="false" 119 border_visible="false" border_drop_shadow_visible="false"
130 font="SansSerif" mouse_opaque="true"> 120 font="SansSerif" mouse_opaque="true">
131 Grid: 121 Grid:
132 </text> 122 </text>
133 <combo_box name="server_combo" 123 <combo_box name="server_combo"
134 bottom_delta="-20" left_delta="0" height="20" width="120" 124 bottom_delta="-20" left_delta="0" height="20" width="120"
135 follows="left|bottom" allow_text_entry="false" 125 follows="left|bottom" allow_text_entry="false"
136 max_chars="20" mouse_opaque="true" /> 126 max_chars="20" mouse_opaque="true" />
137 <button name="grid_btn" label="Grid Manager" 127
138 bottom_delta="-24" left_delta="10" height="16" width="100" 128
139 follows="left|bottom" font="SansSerifSmall" halign="center" 129 <!-- START LOCATION -->
140 mouse_opaque="true" scale_image="TRUE" /> 130
131 <text name="start_location_text"
132 bottom="32" left="10" height="16" right="115"
133 follows="left|bottom" h_pad="0" halign="right" v_pad="0"
134 bg_visible="false" drop_shadow_visible="true"
135 border_visible="false" border_drop_shadow_visible="false"
136 font="SansSerifSmall" mouse_opaque="true">
137 Start location:
138 </text>
139 <combo_box name="start_location_combo"
140 bottom_delta="2" left="120" height="16" width="150"
141 follows="left|bottom" font="SansSerifSmall"
142 mouse_opaque="true" allow_text_entry="true" max_chars="128">
143 <combo_item name="MyHome" value="My Home">
144 My Home
145 </combo_item>
146 <combo_item name="MyLastLocation" value="My Last Location">
147 My Last Location
148 </combo_item>
149 <combo_item name="Typeregionname" value="&lt;Type region name&gt;">
150 &lt;Type region name&gt;
151 </combo_item>
152 </combo_box>
153
154
155 <!-- REMEMBER PASSWORD -->
156
157 <check_box name="remember_check" label="Remember password"
158 bottom_delta="-2" left="282" height="16" width="140"
159 follows="left|bottom" font="SansSerifSmall" control_name="RememberPassword"
160 initial_value="false" mouse_opaque="true" />
161
162
163 <!-- GRID MANAGER -->
164
165 <button name="grid_btn" label="Grid Manager"
166 bottom_delta="0" left="434" height="20" width="100"
167 follows="left|bottom" font="SansSerifSmall" halign="center"
168 mouse_opaque="true" scale_image="TRUE" />
141 169
142 170
143 <!-- LOG IN --> 171 <!-- LOG IN -->
144 172
145 <button name="connect_btn" label="Log In" 173 <button name="connect_btn" label="Log In"
146 bottom="58" left_delta="140" height="24" width="120" 174 bottom="58" left_delta="150" height="24" width="120"
147 follows="left|bottom" font="SansSerif" halign="center" 175 follows="left|bottom" font="SansSerif" halign="center"
148 mouse_opaque="true" scale_image="TRUE" /> 176 mouse_opaque="true" scale_image="TRUE" />
149 177
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
index 1b771b5..b8f6e7d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
@@ -128,9 +128,6 @@
128 </combo_item> 128 </combo_item>
129 </combo_box>--> 129 </combo_box>-->
130 130
131 <button bottom="10" follows="left|bottom" font="SansSerif" height="20" width="250"
132 label="Reset All Preferences To Default" name="reset_btn" left="12"
133 tool_tip="Reset all preferences to their default values (requires a restart)" />
134 </panel> 131 </panel>
135 132
136 <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="SpellCheck" 133 <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="SpellCheck"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
index 1f208e8..355d7e8 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
@@ -9,13 +9,13 @@
9 Volume: 9 Volume:
10 </text> 10 </text>
11 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 11 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
12 bottom="-190" drop_shadow_visible="true" enabled="true" follows="left|top" 12 bottom="-202" drop_shadow_visible="true" enabled="true" follows="left|top"
13 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 13 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
14 mouse_opaque="true" name="streaming_prefs_text" v_pad="0" width="128"> 14 mouse_opaque="true" name="streaming_prefs_text" v_pad="0" width="128">
15 Streaming: 15 Streaming:
16 </text> 16 </text>
17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-285" drop_shadow_visible="true" enabled="true" follows="left|top" 18 bottom="-315" drop_shadow_visible="true" enabled="true" follows="left|top"
19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> 20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128">
21 Audio: 21 Audio:
@@ -47,7 +47,16 @@
47 initial_value="true" label="Media helper widget" left="162" 47 initial_value="true" label="Media helper widget" left="162"
48 mouse_opaque="true" name="media_helper_widget" radio_style="false" 48 mouse_opaque="true" name="media_helper_widget" radio_style="false"
49 width="338" /> 49 width="338" />
50 <check_box bottom_delta="-27" control_name="MuteWhenMinimized" enabled="true" 50 <check_box bottom_delta="-20" control_name="MediaEnableFilter" enabled="true"
51 follows="left|top" font="SansSerifSmall" height="16"
52 initial_value="true" label="Filter media URLs" left="142"
53 mouse_opaque="true" name="enable_media_filter" radio_style="false"
54 width="200" />
55 <button name="show_media_filter" font="SansSerif" label="Media Filter Settings" halign="center"
56 tool_tip="Edit settings and the blocked and allowed lists for the Media Filter."
57 enabled="false" mouse_opaque="true" follows="top|right"
58 bottom_delta="-2" right="-15" height="20" width="180" />
59 <check_box bottom_delta="-33" control_name="MuteWhenMinimized" enabled="true"
51 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 60 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
52 label="Mute audio when window minimized" left="142" mouse_opaque="true" 61 label="Mute audio when window minimized" left="142" mouse_opaque="true"
53 name="mute_when_minimized" radio_style="false" width="215" /> 62 name="mute_when_minimized" radio_style="false" width="215" />
diff --git a/linden/indra/newview/slfloatermediafilter.cpp b/linden/indra/newview/slfloatermediafilter.cpp
index c47ed26..b0d9c26 100644
--- a/linden/indra/newview/slfloatermediafilter.cpp
+++ b/linden/indra/newview/slfloatermediafilter.cpp
@@ -43,6 +43,8 @@
43 43
44SLFloaterMediaFilter* SLFloaterMediaFilter::sInstance = NULL; 44SLFloaterMediaFilter* SLFloaterMediaFilter::sInstance = NULL;
45bool SLFloaterMediaFilter::sIsWhitelist = false; 45bool SLFloaterMediaFilter::sIsWhitelist = false;
46bool SLFloaterMediaFilter::sIsAdding = false;
47bool SLFloaterMediaFilter::sShowIPs = false;
46 48
47SLFloaterMediaFilter::SLFloaterMediaFilter() : LLFloater(std::string("media filter")), mIsDirty(false) 49SLFloaterMediaFilter::SLFloaterMediaFilter() : LLFloater(std::string("media filter")), mIsDirty(false)
48{ 50{
@@ -62,15 +64,18 @@ BOOL SLFloaterMediaFilter::postBuild()
62 if (mWhitelistSLC && mBlacklistSLC) 64 if (mWhitelistSLC && mBlacklistSLC)
63 { 65 {
64 childSetAction("clear_lists", onClearLists, this); 66 childSetAction("clear_lists", onClearLists, this);
67 childSetAction("show_ips", onShowIPs, this);
65 childSetAction("add_whitelist", onWhitelistAdd, this); 68 childSetAction("add_whitelist", onWhitelistAdd, this);
66 childSetAction("remove_whitelist", onWhitelistRemove, this); 69 childSetAction("remove_whitelist", onWhitelistRemove, this);
67 childSetAction("add_blacklist", onBlacklistAdd, this); 70 childSetAction("add_blacklist", onBlacklistAdd, this);
68 childSetAction("remove_blacklist", onBlacklistRemove, this); 71 childSetAction("remove_blacklist", onBlacklistRemove, this);
69 childSetAction("commit_domain", onCommitDomain, this); 72 childSetAction("commit_domain", onCommitDomain, this);
73 childSetAction("cancel_domain", onCancelDomain, this);
70 childSetUserData("whitelist_list", this); 74 childSetUserData("whitelist_list", this);
71 childSetUserData("blacklist_list", this); 75 childSetUserData("blacklist_list", this);
72 mIsDirty = true; 76 mIsDirty = true;
73 } 77 }
78 gSavedSettings.getControl("MediaEnableFilter")->getSignal()->connect(boost::bind(&onMediaEnableFilterChanged, _1));
74 79
75 return TRUE; 80 return TRUE;
76} 81}
@@ -84,6 +89,8 @@ void SLFloaterMediaFilter::draw()
84 mWhitelistSLC->deleteAllItems(); 89 mWhitelistSLC->deleteAllItems();
85 mBlacklistSLC->deleteAllItems(); 90 mBlacklistSLC->deleteAllItems();
86 std::set<std::string> listed; 91 std::set<std::string> listed;
92 LLHost host;
93 std::string ip;
87 std::string domain; 94 std::string domain;
88 std::string action; 95 std::string action;
89 LLSD element; 96 LLSD element;
@@ -92,6 +99,16 @@ void SLFloaterMediaFilter::draw()
92 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++) 99 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
93 { 100 {
94 domain = LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString(); 101 domain = LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString();
102 if (sShowIPs)
103 {
104 host.setHostByName(domain);
105 ip = host.getIPString();
106 if (ip != domain && domain.find('/') == std::string::npos)
107 {
108 domain += " (" + ip + ")";
109 }
110 }
111
95 action = LLViewerParcelMedia::sMediaFilterList[i]["action"].asString(); 112 action = LLViewerParcelMedia::sMediaFilterList[i]["action"].asString();
96 if (!domain.empty() && action == "allow") 113 if (!domain.empty() && action == "allow")
97 { 114 {
@@ -123,6 +140,15 @@ void SLFloaterMediaFilter::draw()
123 for (it = LLViewerParcelMedia::sAllowedMedia.begin(); it != LLViewerParcelMedia::sAllowedMedia.end(); it++) 140 for (it = LLViewerParcelMedia::sAllowedMedia.begin(); it != LLViewerParcelMedia::sAllowedMedia.end(); it++)
124 { 141 {
125 domain = *it; 142 domain = *it;
143 if (sShowIPs)
144 {
145 host.setHostByName(domain);
146 ip = host.getIPString();
147 if (ip != domain && domain.find('/') == std::string::npos)
148 {
149 domain += " (" + ip + ")";
150 }
151 }
126 if (listed.count(domain) == 0) 152 if (listed.count(domain) == 0)
127 { 153 {
128 element["columns"][0]["value"] = domain; 154 element["columns"][0]["value"] = domain;
@@ -133,6 +159,15 @@ void SLFloaterMediaFilter::draw()
133 for (it = LLViewerParcelMedia::sDeniedMedia.begin(); it != LLViewerParcelMedia::sDeniedMedia.end(); it++) 159 for (it = LLViewerParcelMedia::sDeniedMedia.begin(); it != LLViewerParcelMedia::sDeniedMedia.end(); it++)
134 { 160 {
135 domain = *it; 161 domain = *it;
162 if (sShowIPs)
163 {
164 host.setHostByName(domain);
165 ip = host.getIPString();
166 if (ip != domain && domain.find('/') == std::string::npos)
167 {
168 domain += " (" + ip + ")";
169 }
170 }
136 if (listed.count(domain) == 0) 171 if (listed.count(domain) == 0)
137 { 172 {
138 element["columns"][0]["value"] = domain; 173 element["columns"][0]["value"] = domain;
@@ -142,26 +177,56 @@ void SLFloaterMediaFilter::draw()
142 mWhitelistSLC->setScrollPos(whitescrollpos); 177 mWhitelistSLC->setScrollPos(whitescrollpos);
143 mBlacklistSLC->setScrollPos(blackscrollpos); 178 mBlacklistSLC->setScrollPos(blackscrollpos);
144 179
145 if (!gSavedSettings.getBOOL("MediaEnableFilter")) 180 updateWidgets();
146 {
147 childDisable("clear_lists");
148 childDisable("blacklist_list");
149 childDisable("whitelist_list");
150 childDisable("remove_whitelist");
151 childDisable("add_whitelist");
152 childDisable("remove_blacklist");
153 childDisable("add_blacklist");
154 childDisable("input_domain");
155 childDisable("commit_domain");
156 childSetText("add_text", std::string("****** WARNING: media filtering is currently DISABLED ******"));
157 }
158 181
159 mIsDirty = false; 182 mIsDirty = false;
183 sShowIPs = false;
160 } 184 }
161 185
162 LLFloater::draw(); 186 LLFloater::draw();
163} 187}
164 188
189void SLFloaterMediaFilter::updateWidgets()
190{
191 bool enabled = gSavedSettings.getBOOL("MediaEnableFilter");
192 childSetEnabled("clear_lists", enabled && !sIsAdding);
193 childSetEnabled("show_ips", enabled && !sIsAdding);
194 childSetEnabled("blacklist_list", enabled && !sIsAdding);
195 childSetEnabled("whitelist_list", enabled && !sIsAdding);
196 childSetEnabled("remove_whitelist", enabled && !sIsAdding);
197 childSetEnabled("add_whitelist", enabled && !sIsAdding);
198 childSetEnabled("remove_blacklist", enabled && !sIsAdding);
199 childSetEnabled("add_blacklist", enabled && !sIsAdding);
200 childSetEnabled("match_ip", enabled);
201 childSetEnabled("input_domain", enabled && sIsAdding);
202 childSetEnabled("commit_domain", enabled && sIsAdding);
203 childSetEnabled("cancel_domain", enabled && sIsAdding);
204 childSetEnabled("filter_only_remote", enabled);
205 childSetEnabled("info1", enabled);
206 childSetEnabled("info2", enabled);
207
208 std::string add_text("****** Media filtering is currently DISABLED ******");
209 if (enabled)
210 {
211 if (sIsAdding)
212 {
213 if (sIsWhitelist)
214 {
215 add_text = "Enter the domain/url to add to the white list:";
216 }
217 else
218 {
219 add_text = "Enter the domain/url to add to the black list:";
220 }
221 }
222 else
223 {
224 add_text = "New Domain:";
225 }
226 }
227 childSetText("add_text", add_text);
228}
229
165void SLFloaterMediaFilter::setDirty() 230void SLFloaterMediaFilter::setDirty()
166{ 231{
167 if (sInstance) 232 if (sInstance)
@@ -208,23 +273,21 @@ void SLFloaterMediaFilter::onClearLists(void* data)
208 LLViewerParcelMedia::clearDomainFilterList(); 273 LLViewerParcelMedia::clearDomainFilterList();
209} 274}
210 275
276void SLFloaterMediaFilter::onShowIPs(void* data)
277{
278 sShowIPs = true;
279 setDirty();
280}
281
211void SLFloaterMediaFilter::onWhitelistAdd(void* data) 282void SLFloaterMediaFilter::onWhitelistAdd(void* data)
212{ 283{
213 if (!sInstance) 284 if (!sInstance)
214 { 285 {
215 return; 286 return;
216 } 287 }
217 sInstance->childDisable("clear_lists");
218 sInstance->childDisable("blacklist_list");
219 sInstance->childDisable("whitelist_list");
220 sInstance->childDisable("remove_whitelist");
221 sInstance->childDisable("add_whitelist");
222 sInstance->childDisable("remove_blacklist");
223 sInstance->childDisable("add_blacklist");
224 sInstance->childEnable("input_domain");
225 sInstance->childEnable("commit_domain");
226 sInstance->childSetText("add_text", std::string("Enter the domain/url to add to the white list:"));
227 sIsWhitelist = true; 288 sIsWhitelist = true;
289 sIsAdding = true;
290 sInstance->updateWidgets();
228} 291}
229 292
230void SLFloaterMediaFilter::onWhitelistRemove(void* data) 293void SLFloaterMediaFilter::onWhitelistRemove(void* data)
@@ -238,6 +301,12 @@ void SLFloaterMediaFilter::onWhitelistRemove(void* data)
238 if (selected) 301 if (selected)
239 { 302 {
240 std::string domain = sInstance->mWhitelistSLC->getSelectedItemLabel(); 303 std::string domain = sInstance->mWhitelistSLC->getSelectedItemLabel();
304 size_t pos = domain.find(' ');
305 if (pos != std::string::npos)
306 {
307 domain = domain.substr(0, pos);
308 }
309
241 LLViewerParcelMedia::sAllowedMedia.erase(domain); 310 LLViewerParcelMedia::sAllowedMedia.erase(domain);
242 311
243 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++) 312 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
@@ -245,11 +314,32 @@ void SLFloaterMediaFilter::onWhitelistRemove(void* data)
245 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain) 314 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain)
246 { 315 {
247 LLViewerParcelMedia::sMediaFilterList.erase(i); 316 LLViewerParcelMedia::sMediaFilterList.erase(i);
248 LLViewerParcelMedia::saveDomainFilterList();
249 break; 317 break;
250 } 318 }
251 } 319 }
252 320
321 if (sInstance->childGetValue("match_ip") && domain.find('/') == std::string::npos)
322 {
323 LLHost host;
324 host.setHostByName(domain);
325 std::string ip = host.getIPString();
326
327 if (ip != domain)
328 {
329 LLViewerParcelMedia::sAllowedMedia.erase(ip);
330
331 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
332 {
333 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == ip)
334 {
335 LLViewerParcelMedia::sMediaFilterList.erase(i);
336 break;
337 }
338 }
339 }
340 }
341
342 LLViewerParcelMedia::saveDomainFilterList();
253 setDirty(); 343 setDirty();
254 } 344 }
255} 345}
@@ -260,17 +350,9 @@ void SLFloaterMediaFilter::onBlacklistAdd(void* data)
260 { 350 {
261 return; 351 return;
262 } 352 }
263 sInstance->childDisable("clear_lists");
264 sInstance->childDisable("blacklist_list");
265 sInstance->childDisable("whitelist_list");
266 sInstance->childDisable("remove_whitelist");
267 sInstance->childDisable("add_whitelist");
268 sInstance->childDisable("remove_blacklist");
269 sInstance->childDisable("add_blacklist");
270 sInstance->childEnable("input_domain");
271 sInstance->childEnable("commit_domain");
272 sInstance->childSetText("add_text", std::string("Enter the domain/url to add to the black list:"));
273 sIsWhitelist = false; 353 sIsWhitelist = false;
354 sIsAdding = true;
355 sInstance->updateWidgets();
274} 356}
275 357
276void SLFloaterMediaFilter::onBlacklistRemove(void* data) 358void SLFloaterMediaFilter::onBlacklistRemove(void* data)
@@ -284,6 +366,12 @@ void SLFloaterMediaFilter::onBlacklistRemove(void* data)
284 if (selected) 366 if (selected)
285 { 367 {
286 std::string domain = sInstance->mBlacklistSLC->getSelectedItemLabel(); 368 std::string domain = sInstance->mBlacklistSLC->getSelectedItemLabel();
369 size_t pos = domain.find(' ');
370 if (pos != std::string::npos)
371 {
372 domain = domain.substr(0, pos);
373 }
374
287 LLViewerParcelMedia::sDeniedMedia.erase(domain); 375 LLViewerParcelMedia::sDeniedMedia.erase(domain);
288 376
289 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++) 377 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
@@ -291,11 +379,32 @@ void SLFloaterMediaFilter::onBlacklistRemove(void* data)
291 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain) 379 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain)
292 { 380 {
293 LLViewerParcelMedia::sMediaFilterList.erase(i); 381 LLViewerParcelMedia::sMediaFilterList.erase(i);
294 LLViewerParcelMedia::saveDomainFilterList();
295 break; 382 break;
296 } 383 }
297 } 384 }
298 385
386 if (sInstance->childGetValue("match_ip") && domain.find('/') == std::string::npos)
387 {
388 LLHost host;
389 host.setHostByName(domain);
390 std::string ip = host.getIPString();
391
392 if (ip != domain)
393 {
394 LLViewerParcelMedia::sDeniedMedia.erase(ip);
395
396 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
397 {
398 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == ip)
399 {
400 LLViewerParcelMedia::sMediaFilterList.erase(i);
401 break;
402 }
403 }
404 }
405 }
406
407 LLViewerParcelMedia::saveDomainFilterList();
299 setDirty(); 408 setDirty();
300 } 409 }
301} 410}
@@ -308,6 +417,10 @@ void SLFloaterMediaFilter::onCommitDomain(void* data)
308 } 417 }
309 std::string domain = sInstance->childGetText("input_domain"); 418 std::string domain = sInstance->childGetText("input_domain");
310 domain = LLViewerParcelMedia::extractDomain(domain); 419 domain = LLViewerParcelMedia::extractDomain(domain);
420 LLHost host;
421 host.setHostByName(domain);
422 std::string ip = host.getIPString();
423 bool match_ip = (sInstance->childGetValue("match_ip") && ip != domain && domain.find('/') == std::string::npos);
311 424
312 if (!domain.empty()) 425 if (!domain.empty())
313 { 426 {
@@ -318,7 +431,18 @@ void SLFloaterMediaFilter::onCommitDomain(void* data)
318 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain) 431 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == domain)
319 { 432 {
320 LLViewerParcelMedia::sMediaFilterList.erase(i); 433 LLViewerParcelMedia::sMediaFilterList.erase(i);
321 break; 434 }
435 }
436 if (match_ip)
437 {
438 LLViewerParcelMedia::sDeniedMedia.erase(ip);
439 LLViewerParcelMedia::sAllowedMedia.erase(ip);
440 for (S32 i = 0; i < (S32)LLViewerParcelMedia::sMediaFilterList.size(); i++)
441 {
442 if (LLViewerParcelMedia::sMediaFilterList[i]["domain"].asString() == ip)
443 {
444 LLViewerParcelMedia::sMediaFilterList.erase(i);
445 }
322 } 446 }
323 } 447 }
324 LLSD newmedia; 448 LLSD newmedia;
@@ -332,19 +456,33 @@ void SLFloaterMediaFilter::onCommitDomain(void* data)
332 newmedia["action"] = "deny"; 456 newmedia["action"] = "deny";
333 } 457 }
334 LLViewerParcelMedia::sMediaFilterList.append(newmedia); 458 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
459 if (match_ip)
460 {
461 newmedia["domain"] = ip;
462 LLViewerParcelMedia::sMediaFilterList.append(newmedia);
463 }
335 LLViewerParcelMedia::saveDomainFilterList(); 464 LLViewerParcelMedia::saveDomainFilterList();
336 } 465 }
337 466
338 sInstance->childEnable("clear_lists");
339 sInstance->childEnable("blacklist_list");
340 sInstance->childEnable("whitelist_list");
341 sInstance->childEnable("remove_whitelist");
342 sInstance->childEnable("add_whitelist");
343 sInstance->childEnable("remove_blacklist");
344 sInstance->childEnable("add_blacklist");
345 sInstance->childDisable("input_domain");
346 sInstance->childDisable("commit_domain");
347 sInstance->childSetText("add_text", std::string("New domain:"));
348 sInstance->childSetText("input_domain", std::string("")); 467 sInstance->childSetText("input_domain", std::string(""));
468 sIsAdding = false;
469 setDirty();
470}
471
472//static
473void SLFloaterMediaFilter::onCancelDomain(void* data)
474{
475 if (!sInstance)
476 {
477 return;
478 }
479 sInstance->childSetText("input_domain", std::string(""));
480 sIsAdding = false;
481 setDirty();
482}
483
484//static
485void SLFloaterMediaFilter::onMediaEnableFilterChanged(const LLSD& newvalue)
486{
349 setDirty(); 487 setDirty();
350} 488}
diff --git a/linden/indra/newview/slfloatermediafilter.h b/linden/indra/newview/slfloatermediafilter.h
index 0f900be..9067c74 100644
--- a/linden/indra/newview/slfloatermediafilter.h
+++ b/linden/indra/newview/slfloatermediafilter.h
@@ -38,6 +38,7 @@
38 38
39class LLScrollListCtrl; 39class LLScrollListCtrl;
40class LLButton; 40class LLButton;
41class LLSD;
41 42
42class SLFloaterMediaFilter : public LLFloater 43class SLFloaterMediaFilter : public LLFloater
43{ 44{
@@ -52,14 +53,22 @@ public:
52 static void toggleInstance(); 53 static void toggleInstance();
53 54
54 static void onClearLists(void*); 55 static void onClearLists(void*);
56 static void onShowIPs(void*);
55 static void onWhitelistAdd(void*); 57 static void onWhitelistAdd(void*);
56 static void onWhitelistRemove(void*); 58 static void onWhitelistRemove(void*);
57 static void onBlacklistAdd(void*); 59 static void onBlacklistAdd(void*);
58 static void onBlacklistRemove(void*); 60 static void onBlacklistRemove(void*);
59 static void onCommitDomain(void*); 61 static void onCommitDomain(void*);
62 static void onCancelDomain(void*);
63 static void onMediaEnableFilterChanged(const LLSD& newvalue);
64
65private:
66 void updateWidgets();
60 67
61private: 68private:
62 static bool sIsWhitelist; 69 static bool sIsWhitelist;
70 static bool sShowIPs;
71 static bool sIsAdding;
63 LLScrollListCtrl* mWhitelistSLC; 72 LLScrollListCtrl* mWhitelistSLC;
64 LLScrollListCtrl* mBlacklistSLC; 73 LLScrollListCtrl* mBlacklistSLC;
65 bool mIsDirty; 74 bool mIsDirty;
diff --git a/linden/install.xml b/linden/install.xml
index 4e4a7c6..7ff8dc0 100755
--- a/linden/install.xml
+++ b/linden/install.xml
@@ -179,9 +179,9 @@
179 <key>common</key> 179 <key>common</key>
180 <map> 180 <map>
181 <key>md5sum</key> 181 <key>md5sum</key>
182 <string>a6221f9f81be1f044ec1d32c93b11ad9</string> 182 <string>940f85fb8c629b7944688e812a089549</string>
183 <key>url</key> 183 <key>url</key>
184 <uri>http://download.kokuaviewer.org/files/extras/imprudence-artwork-20110314.tar.bz2</uri> 184 <uri>http://download.kokuaviewer.org/files/extras/imprudence-artwork-20110321.tar.bz2</uri>
185 </map> 185 </map>
186 </map> 186 </map>
187 </map> 187 </map>