From 6fa6022a3f6d5bf71d97a59ec89929575f2ffd11 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:30 -0500 Subject: Second Life viewer sources 1.19.0.3 --- .../linux_crash_logger/llcrashloggerlinux.cpp | 2 - linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llcrashlogger/llcrashlogger.cpp | 4 +- linden/indra/llui/llbutton.cpp | 12 +- linden/indra/llui/llcombobox.cpp | 4 + linden/indra/llui/llcombobox.h | 2 +- linden/indra/llui/llfloater.cpp | 17 +- linden/indra/llui/lllineeditor.cpp | 36 ++-- linden/indra/llui/llpanel.cpp | 13 +- linden/indra/llui/llpanel.h | 1 + linden/indra/llui/llscrolllistctrl.cpp | 30 +--- linden/indra/llui/llscrolllistctrl.h | 3 +- linden/indra/llui/lltexteditor.cpp | 32 ++-- linden/indra/llwindow/llwindowmacosx.cpp | 18 +- linden/indra/llwindow/llwindowwin32.cpp | 13 +- .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/linux_tools/client-readme.txt | 30 ++-- linden/indra/newview/linux_tools/wrapper.sh | 12 +- linden/indra/newview/llappviewer.cpp | 14 +- linden/indra/newview/llappviewermacosx.cpp | 5 +- linden/indra/newview/llcontroldef.cpp | 1 + linden/indra/newview/llpanelgroupvoting.cpp | 100 ++++++++--- linden/indra/newview/llpanelgroupvoting.h | 7 +- linden/indra/newview/llstatusbar.cpp | 2 + linden/indra/newview/lltexturecache.cpp | 6 +- linden/indra/newview/llviewerimagelist.cpp | 6 +- .../newview/macview.xcodeproj/project.pbxproj | 3 +- linden/indra/newview/releasenotes.txt | 14 ++ linden/indra/newview/res/newViewRes.rc | 8 +- linden/indra/newview/skins/xui/de/alerts.xml | 6 +- .../newview/skins/xui/de/floater_about_land.xml | 2 +- .../newview/skins/xui/de/floater_directory.xml | 6 +- .../skins/xui/de/floater_instant_message.xml | 2 +- .../indra/newview/skins/xui/de/floater_tools.xml | 2 +- .../indra/newview/skins/xui/de/panel_chat_bar.xml | 2 +- .../indra/newview/skins/xui/de/panel_friends.xml | 8 +- .../newview/skins/xui/de/panel_place_small.xml | 2 +- .../skins/xui/de/panel_preferences_graphics1.xml | 2 +- .../newview/skins/xui/de/panel_region_estate.xml | 2 +- .../indra/newview/skins/xui/de/panel_toolbar.xml | 2 +- .../newview/skins/xui/de/panel_voice_controls.xml | 10 +- .../newview/skins/xui/en-us/floater_about.xml | 8 +- .../newview/skins/xui/en-us/floater_directory.xml | 2 +- .../indra/newview/skins/xui/en-us/floater_html.xml | 4 +- .../skins/xui/en-us/floater_land_holdings.xml | 8 +- .../newview/skins/xui/en-us/floater_tools.xml | 2 +- .../indra/newview/skins/xui/en-us/panel_login.xml | 6 +- .../skins/xui/en-us/panel_preferences_chat.xml | 4 +- .../xui/en-us/panel_preferences_graphics2.xml | 4 +- .../skins/xui/en-us/panel_preferences_voice.xml | 4 +- .../indra/newview/skins/xui/ja/floater_tools.xml | 4 +- .../indra/newview/skins/xui/ja/panel_chat_bar.xml | 2 +- linden/indra/newview/skins/xui/ja/panel_login.xml | 2 +- .../skins/xui/ja/panel_preferences_general.xml | 4 +- .../skins/xui/ja/panel_preferences_graphics1.xml | 4 +- .../skins/xui/ja/panel_preferences_graphics3.xml | 2 +- .../indra/newview/skins/xui/ja/panel_toolbar.xml | 2 +- .../newview/skins/xui/ko/floater_about_land.xml | 34 ++-- .../newview/skins/xui/ko/floater_buy_currency.xml | 18 +- .../newview/skins/xui/ko/floater_customize.xml | 184 ++++++++++----------- .../newview/skins/xui/ko/floater_directory.xml | 37 +++-- .../indra/newview/skins/xui/ko/floater_gesture.xml | 2 +- .../newview/skins/xui/ko/floater_mute_object.xml | 4 +- linden/indra/newview/skins/xui/ko/panel_groups.xml | 2 +- .../indra/newview/skins/xui/ko/panel_toolbar.xml | 4 +- .../newview/skins/xui/ko/panel_voice_controls.xml | 8 +- linden/indra/test/lluri_tut.cpp | 4 +- .../win_crash_logger/llcrashloggerwindows.cpp | 4 +- 69 files changed, 433 insertions(+), 379 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/linux_crash_logger/llcrashloggerlinux.cpp b/linden/indra/linux_crash_logger/llcrashloggerlinux.cpp index e96264e..f90fea2 100644 --- a/linden/indra/linux_crash_logger/llcrashloggerlinux.cpp +++ b/linden/indra/linux_crash_logger/llcrashloggerlinux.cpp @@ -55,8 +55,6 @@ static const char dialog_text[] = "Second Life appears to have crashed or frozen last time it ran.\n" "This crash reporter collects information about your computer's hardware, operating system, and some Second Life logs, all of which are used for debugging purposes only.\n" -"In the space below, please briefly describe what you were doing or trying to do just prior to the crash. Thank you for your help!\n" -"This report is NOT read by Customer Support. If you have billing or other questions, contact support by visiting http://www.secondlife.com/support\n" "\n" "Send crash report?"; diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index e85fa5d..e23403c 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 19; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 2; +const S32 LL_VERSION_BUILD = 3; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llcrashlogger/llcrashlogger.cpp b/linden/indra/llcrashlogger/llcrashlogger.cpp index 8b1fffa..ab464bd 100755 --- a/linden/indra/llcrashlogger/llcrashlogger.cpp +++ b/linden/indra/llcrashlogger/llcrashlogger.cpp @@ -83,7 +83,9 @@ void LLCrashLoggerText::updateApplication(LLString message) } LLCrashLogger::LLCrashLogger() : -mSentCrashLogs(false) + mCrashBehavior(CRASH_BEHAVIOR_ASK), + mCrashInPreviousExec(false), + mSentCrashLogs(false) { } diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp index 9fa1c8e..7513fc2 100644 --- a/linden/indra/llui/llbutton.cpp +++ b/linden/indra/llui/llbutton.cpp @@ -956,37 +956,37 @@ S32 round_up(S32 grid, S32 value) void LLButton::setImageUnselected(const LLString &image_name) { - setImageUnselected(LLUI::getUIImageByName(image_name)); + setImageUnselected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageUnselectedName = image_name; } void LLButton::setImageSelected(const LLString &image_name) { - setImageSelected(LLUI::getUIImageByName(image_name)); + setImageSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageSelectedName = image_name; } void LLButton::setImageHoverSelected(const LLString &image_name) { - setImageHoverSelected(LLUI::getUIImageByName(image_name)); + setImageHoverSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageHoverSelectedName = image_name; } void LLButton::setImageHoverUnselected(const LLString &image_name) { - setImageHoverUnselected(LLUI::getUIImageByName(image_name)); + setImageHoverUnselected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageHoverUnselectedName = image_name; } void LLButton::setImageDisabled(const LLString &image_name) { - setImageDisabled(LLUI::getUIImageByName(image_name)); + setImageDisabled(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageDisabledName = image_name; } void LLButton::setImageDisabledSelected(const LLString &image_name) { - setImageDisabledSelected(LLUI::getUIImageByName(image_name)); + setImageDisabledSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); mImageDisabledSelectedName = image_name; } diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp index 96092b4..0e0f5f2 100644 --- a/linden/indra/llui/llcombobox.cpp +++ b/linden/indra/llui/llcombobox.cpp @@ -1086,6 +1086,10 @@ BOOL LLComboBox::operateOnAll(EOperation op) return FALSE; } +BOOL LLComboBox::selectItemRange( S32 first, S32 last ) +{ + return mList->selectItemRange(first, last); +} // diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h index 7511449..db1c251 100644 --- a/linden/indra/llui/llcombobox.h +++ b/linden/indra/llui/llcombobox.h @@ -156,7 +156,7 @@ public: virtual BOOL getCanSelect() const { return TRUE; } virtual BOOL selectFirstItem() { return setCurrentByIndex(0); } virtual BOOL selectNthItem( S32 index ) { return setCurrentByIndex(index); } - virtual BOOL selectItemRange( S32 first, S32 last ) { return setCurrentByIndex(first); } + virtual BOOL selectItemRange( S32 first, S32 last ); virtual S32 getFirstSelectedIndex() const { return getCurrentIndex(); } virtual BOOL setCurrentByID( const LLUUID& id ); virtual LLUUID getCurrentID(); // LLUUID::null if no items in menu diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp index 496b67f..6d86652 100644 --- a/linden/indra/llui/llfloater.cpp +++ b/linden/indra/llui/llfloater.cpp @@ -1434,21 +1434,7 @@ void LLFloater::draw() } } - if( mDefaultBtn) - { - if (gFocusMgr.childHasKeyboardFocus( this ) && mDefaultBtn->getEnabled()) - { - LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus(); - // is this button a direct descendent and not a nested widget (e.g. checkbox)? - BOOL focus_is_child_button = focus_ctrl->getWidgetType() == WIDGET_TYPE_BUTTON && focus_ctrl->getParent() == this; - // only enable default button when current focus is not a button - mDefaultBtn->setBorderEnabled(!focus_is_child_button); - } - else - { - mDefaultBtn->setBorderEnabled(FALSE); - } - } + LLPanel::updateDefaultBtn(); // draw children LLView* focused_child = gFocusMgr.getKeyboardFocus(); @@ -1459,6 +1445,7 @@ void LLFloater::draw() focused_child->setVisible(FALSE); } + // don't call LLPanel::draw() since we've implemented custom background rendering LLView::draw(); if( mBgVisible ) diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp index 88c8d75..b091bb7 100644 --- a/linden/indra/llui/lllineeditor.cpp +++ b/linden/indra/llui/lllineeditor.cpp @@ -2418,6 +2418,12 @@ void LLLineEditor::resetPreedit() { if (hasPreeditString()) { + if (hasSelection()) + { + llwarns << "Preedit and selection!" << llendl; + deselect(); + } + const S32 preedit_pos = mPreeditPositions.front(); mText.erase(preedit_pos, mPreeditPositions.back() - preedit_pos); mText.insert(preedit_pos, mPreeditOverwrittenWString); @@ -2427,11 +2433,10 @@ void LLLineEditor::resetPreedit() mPreeditOverwrittenWString.clear(); mPreeditPositions.clear(); - mKeystrokeTimer.reset(); - if (mKeystrokeCallback) - { - mKeystrokeCallback(this, mCallbackUserData); - } + // Don't reset key stroke timer nor invoke keystroke callback, + // because a call to updatePreedit should be follow soon in + // normal course of operation, and timer and callback will be + // maintained there. Doing so here made an odd sound. (VWR-3410) } } @@ -2444,27 +2449,10 @@ void LLLineEditor::updatePreedit(const LLWString &preedit_string, return; } - if (hasSelection()) - { - if (hasPreeditString()) - { - llwarns << "Preedit and selection!" << llendl; - deselect(); - } - else - { - deleteSelection(); - } - } + // Note that call to updatePreedit is always preceeded by resetPreedit, + // so we have no existing selection/preedit. S32 insert_preedit_at = getCursor(); - if (hasPreeditString()) - { - insert_preedit_at = mPreeditPositions.front(); - //mText.replace(insert_preedit_at, mPreeditPositions.back() - insert_preedit_at, mPreeditOverwrittenWString); - mText.erase(insert_preedit_at, mPreeditPositions.back() - insert_preedit_at); - mText.insert(insert_preedit_at, mPreeditOverwrittenWString); - } mPreeditWString = preedit_string; mPreeditPositions.resize(preedit_segment_lengths.size() + 1); diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp index 7430e50..b72e104 100644 --- a/linden/indra/llui/llpanel.cpp +++ b/linden/indra/llui/llpanel.cpp @@ -214,6 +214,17 @@ void LLPanel::draw() } } + updateDefaultBtn(); + + LLView::draw(); +} + +void LLPanel::updateDefaultBtn() +{ + // This method does not call LLView::draw() so callers will need + // to take care of that themselves at the appropriate place in + // their rendering sequence + if( mDefaultBtn) { if (gFocusMgr.childHasKeyboardFocus( this ) && mDefaultBtn->getEnabled()) @@ -228,8 +239,6 @@ void LLPanel::draw() mDefaultBtn->setBorderEnabled(FALSE); } } - - LLView::draw(); } void LLPanel::refresh() diff --git a/linden/indra/llui/llpanel.h b/linden/indra/llui/llpanel.h index bcbda2c..aeba6d9 100644 --- a/linden/indra/llui/llpanel.h +++ b/linden/indra/llui/llpanel.h @@ -119,6 +119,7 @@ public: void setBackgroundOpaque(BOOL b) { mBgOpaque = b; } void setDefaultBtn(LLButton* btn = NULL); void setDefaultBtn(const LLString& id); + void updateDefaultBtn(); void setLabel(const LLStringExplicit& label) { mLabel = label; } LLString getLabel() const { return mLabel; } diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp index 36a7b00..043caa9 100644 --- a/linden/indra/llui/llscrolllistctrl.cpp +++ b/linden/indra/llui/llscrolllistctrl.cpp @@ -220,22 +220,14 @@ LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font, : LLScrollListCell(width), mText( text ), mFont( font ), + mColor(color), + mUseColor(use_color), mFontStyle( font_style ), mFontAlignment( font_alignment ), mVisible( visible ), mHighlightCount( 0 ), mHighlightOffset( 0 ) { - if (use_color) - { - mColor = new LLColor4(); - mColor->setVec(color); - } - else - { - mColor = NULL; - } - sCount++; // initialize rounded rect image @@ -248,7 +240,6 @@ LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font, LLScrollListText::~LLScrollListText() { sCount--; - delete mColor; } S32 LLScrollListText::getContentWidth() const @@ -259,11 +250,8 @@ S32 LLScrollListText::getContentWidth() const void LLScrollListText::setColor(const LLColor4& color) { - if (!mColor) - { - mColor = new LLColor4(); - } - *mColor = color; + mColor = color; + mUseColor = TRUE; } void LLScrollListText::setText(const LLStringExplicit& text) @@ -273,14 +261,14 @@ void LLScrollListText::setText(const LLStringExplicit& text) void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_color) const { - const LLColor4* display_color; - if (mColor) + LLColor4 display_color; + if (mUseColor) { display_color = mColor; } else { - display_color = &color; + display_color = color; } if (mHighlightCount > 0) @@ -327,7 +315,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col } mFont->render(mText.getWString(), 0, start_x, 2.f, - *display_color, + display_color, mFontAlignment, LLFontGL::BOTTOM, mFontStyle, @@ -1070,7 +1058,7 @@ BOOL LLScrollListCtrl::selectItemRange( S32 first_index, S32 last_index ) { if( itemp->getEnabled() ) { - selectItem(itemp); + selectItem(itemp, FALSE); success = TRUE; if (!success) mOriginalSelection = first_index; diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h index 71ba63d..e9486cb 100644 --- a/linden/indra/llui/llscrolllistctrl.h +++ b/linden/indra/llui/llscrolllistctrl.h @@ -111,7 +111,8 @@ public: private: LLUIString mText; const LLFontGL* mFont; - LLColor4* mColor; + LLColor4 mColor; + U8 mUseColor; U8 mFontStyle; LLFontGL::HAlign mFontAlignment; BOOL mVisible; diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp index ca9ea0a..9061ca3 100644 --- a/linden/indra/llui/lltexteditor.cpp +++ b/linden/indra/llui/lltexteditor.cpp @@ -4439,6 +4439,12 @@ void LLTextEditor::resetPreedit() { if (hasPreeditString()) { + if (hasSelection()) + { + llwarns << "Preedit and selection!" << llendl; + deselect(); + } + mCursorPos = mPreeditPositions.front(); removeStringNoUndo(mCursorPos, mPreeditPositions.back() - mCursorPos); insertStringNoUndo(mCursorPos, mPreeditOverwrittenWString); @@ -4447,9 +4453,10 @@ void LLTextEditor::resetPreedit() mPreeditOverwrittenWString.clear(); mPreeditPositions.clear(); - updateLineStartList(); - setCursorPos(mCursorPos); - // updateScrollFromCursor(); + // A call to updatePreedit should soon follow under a + // normal course of operation, so we don't need to + // maintain internal variables such as line start + // positions now. } } @@ -4462,28 +4469,9 @@ void LLTextEditor::updatePreedit(const LLWString &preedit_string, return; } - if (hasSelection()) - { - if (hasPreeditString()) - { - llwarns << "Preedit and selection!" << llendl; - deselect(); - } - else - { - deleteSelection(TRUE); - } - } - getWindow()->hideCursorUntilMouseMove(); S32 insert_preedit_at = mCursorPos; - if (hasPreeditString()) - { - insert_preedit_at = mPreeditPositions.front(); - removeStringNoUndo(insert_preedit_at, mPreeditPositions.back() - insert_preedit_at); - insertStringNoUndo(insert_preedit_at, mPreeditOverwrittenWString); - } mPreeditWString = preedit_string; mPreeditPositions.resize(preedit_segment_lengths.size() + 1); diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp index f522abb..b458d7f 100644 --- a/linden/indra/llwindow/llwindowmacosx.cpp +++ b/linden/indra/llwindow/llwindowmacosx.cpp @@ -2099,15 +2099,17 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e } // Handle preedit string. - if (preedit_string.length() > 0) + if (preedit_string.length() == 0) { - if (preedit_segment_lengths.size() == 0) - { - preedit_segment_lengths.push_back(preedit_string.length()); - preedit_standouts.push_back(FALSE); - } - mPreeditor->updatePreedit(preedit_string, preedit_segment_lengths, preedit_standouts, caret_position); + preedit_segment_lengths.clear(); + preedit_standouts.clear(); + } + else if (preedit_segment_lengths.size() == 0) + { + preedit_segment_lengths.push_back(preedit_string.length()); + preedit_standouts.push_back(FALSE); } + mPreeditor->updatePreedit(preedit_string, preedit_segment_lengths, preedit_standouts, caret_position); result = noErr; } @@ -3354,6 +3356,8 @@ void LLWindowMacOSX::interruptLanguageTextInput() { FixTSMDocument(mTSMDocument); } + // Don't we need to call resetPreedit here? + // Well, if Apple's TSM document is correct, we don't. } #endif // LL_DARWIN diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp index e9315c9..4ad044b 100644 --- a/linden/indra/llwindow/llwindowwin32.cpp +++ b/linden/indra/llwindow/llwindowwin32.cpp @@ -3703,6 +3703,10 @@ void LLWindowWin32::interruptLanguageTextInput() LLWinImm::notifyIME(himc, NI_COMPOSITIONSTR, CPS_COMPLETE, 0); LLWinImm::releaseContext(mWindowHandle, himc); } + + // Win32 document says there will be no composition string + // after NI_COMPOSITIONSTR returns. The following call to + // resetPreedit should be a NOP unless IME goes mad... mPreeditor->resetPreedit(); } } @@ -3846,7 +3850,12 @@ void LLWindowWin32::handleCompositionMessage(const U32 indexes) } } - if (preedit_string.length() > 0) + if (preedit_string.length() == 0) + { + preedit_segment_lengths.clear(); + preedit_standouts.clear(); + } + else { if (preedit_segment_lengths.size() == 0) { @@ -3856,8 +3865,8 @@ void LLWindowWin32::handleCompositionMessage(const U32 indexes) { preedit_standouts.assign(preedit_segment_lengths.size(), FALSE); } - mPreeditor->updatePreedit(preedit_string, preedit_segment_lengths, preedit_standouts, caret_position); } + mPreeditor->updatePreedit(preedit_string, preedit_segment_lengths, preedit_standouts, caret_position); // Some IME doesn't query char position after WM_IME_COMPOSITION, // so we need to update them actively. diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index 76c6915..9e5db0d 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.19.0.2"; -CFBundleGetInfoString = "Second Life version 1.19.0.2, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.19.0.3"; +CFBundleGetInfoString = "Second Life version 1.19.0.3, Copyright 2004-2007 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index c93fbe0..050aa93 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.19.0.2 + 1.19.0.3 CSResourcesFileMapped diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt index 89454e2..ff607b7 100644 --- a/linden/indra/newview/linux_tools/client-readme.txt +++ b/linden/indra/newview/linux_tools/client-readme.txt @@ -1,5 +1,5 @@ -Second Life - Linux Alpha README --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Second Life - Linux Beta README +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- This document contains information about the Second Life Linux client, and isn't meant to serve as an introduction to Second @@ -26,16 +26,14 @@ Life itself - please see . 1. INTRODUCTION -=-=-=-=-=-=-=- -Hi! This is an ALPHA release of the Second Life client for Linux. -The 'alpha' status means that not everything is implemented yet and -we're still hard at work on this version of the client, but many -residents find that it already works well 'out of the box' for accessing -Second Life. +Hi! This is a BETA release of the Second Life client for Linux. +The 'beta' status means that although we're still smoothing-out a few rough +edges, this version of the client is functionally complete and should +work quite well 'out of the box' for accessing Second Life. We encourage you to try it out and let us know of its compatibility -with your system. Be aware that although the client itself is provided -for testing purposes, any changes you make within the Second Life world -are permanent. +with your system. Be aware that although this is a 'beta' client, it connects +to the main Second Life world and changes you make there are permanent. You will have either obtained this client from secondlife.com (the official site) or from a third-party packager; if you encounter any problems then @@ -98,7 +96,7 @@ you wish. -=-=-=-=-=-=-=- These are the most commonly-encountered known issues which are specific to -the Alpha release of the Linux client. +the Beta release of the Linux client. * VISUAL EFFECTS AND PERFORMANCE - many Linux graphics drivers are not as robust as their counterparts for other operating systems, so some advanced @@ -106,9 +104,9 @@ the Alpha release of the Linux client. stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to turn these on to possibly enhance your experience. -* MISC - The following features are not currently fully implemented on the - Linux client and are therefore known not to work properly: - * Movie recording +* MISC - The following features are known to not yet be fully operational on + the Linux client: + * Movie recording (soon to be deprecated) * Full Unicode font rendering * UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client @@ -214,7 +212,7 @@ configuration options for advanced troubleshooters. you disable specific GL extensions, each of which is represented by a letter ("a"-"o"). If you can narrow down a stability problem on your system to just one or two GL extensions then please post details of your hardware - (and drivers) to the Linux Client Alpha Testers forum (see link below) along + (and drivers) to the Linux Client Testers forum (see link below) along with the minimal LL_GL_BLACKLIST which solves your problems. This will help us to improve stability for your hardware while minimally impacting performance. @@ -256,7 +254,7 @@ bugs in all Second Life releases if you find that the Troubleshooting section in this file hasn't helped (please note, however, that this is not a support forum). -Linux Client Alpha Testers forum: +Linux Client Testers forum: This is a forum where Linux Client users can help each other out and discuss the latest updates. diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh index 4ed0609..587c56f 100755 --- a/linden/indra/newview/linux_tools/wrapper.sh +++ b/linden/indra/newview/linux_tools/wrapper.sh @@ -1,7 +1,7 @@ #!/bin/bash -## Here are some configuration options for Linux Client Alpha Testers. -## These options are for self-assisted troubleshooting during this alpha +## Here are some configuration options for Linux Client Testers. +## These options are for self-assisted troubleshooting during this beta ## testing phase; you should not usually need to touch them. ## - Avoids using the ESD audio driver. @@ -21,14 +21,14 @@ export LL_GL_BASICEXT=x ## - Avoids *all* optional OpenGL extensions. This is the safest and least- ## exciting option. Enable this if you experience stability issues, and -## report whether it helps in the Linux Client Alpha Testers forum. +## report whether it helps in the Linux Client Testers forum. #export LL_GL_NOEXT=x ## - For advanced troubleshooters, this lets you disable specific GL ## extensions, each of which is represented by a letter a-o. If you can ## narrow down a stability problem on your system to just one or two ## extensions then please post details of your hardware (and drivers) to -## the Linux Client Alpha Testers forum along with the minimal +## the Linux Client Testers forum along with the minimal ## LL_GL_BLACKLIST which solves your problems. #export LL_GL_BLACKLIST=abcdefghijklmno @@ -114,8 +114,8 @@ fi echo -echo '*********************************************************' -echo 'This is an ALPHA release of the Second Life linux client.' +echo '*******************************************************' +echo 'This is a BETA release of the Second Life linux client.' echo 'Thank you for testing!' echo 'Please see README-linux.txt before reporting problems.' echo diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 2933fe9..e3d7073 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -2190,25 +2190,19 @@ bool LLAppViewer::initConfiguration() { llinfos << "Sending crash report." << llendl; - removeMarkerFile(); #if LL_WINDOWS std::string exe_path = gDirUtilp->getAppRODataDir(); exe_path += gDirUtilp->getDirDelimiter(); exe_path += "win_crash_logger.exe"; - std::string arg_string = "-previous -user "; - arg_string += gGridName; - arg_string += " -name \""; - arg_string += gSecondLife; - arg_string += "\""; + std::string arg_string = "-previous "; // Spawn crash logger. // NEEDS to wait until completion, otherwise log files will get smashed. _spawnl(_P_WAIT, exe_path.c_str(), exe_path.c_str(), arg_string.c_str(), NULL); #elif LL_DARWIN std::string command_str; command_str = "crashreporter.app/Contents/MacOS/crashreporter "; - command_str += "-previous -user "; - command_str += gGridName; + command_str += "-previous"; // XXX -- We need to exit fullscreen mode for this to work. // XXX -- system() also doesn't wait for completion. Hmm... system(command_str.c_str()); /* Flawfinder: Ignore */ @@ -2223,10 +2217,6 @@ bool LLAppViewer::initConfiguration() char* const cmdargv[] = {(char*)cmd.c_str(), (char*)"-previous", - (char*)"-user", - (char*)gGridName, - (char*)"-name", - (char*)gSecondLife.c_str(), NULL}; pid_t pid = fork(); if (pid == 0) diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp index 3e31ad7..e277425 100644 --- a/linden/indra/newview/llappviewermacosx.cpp +++ b/linden/indra/newview/llappviewermacosx.cpp @@ -112,10 +112,7 @@ void LLAppViewerMacOSX::handleCrashReporting() { // Macintosh LLString command_str; - command_str = "crashreporter.app/Contents/MacOS/crashreporter "; - command_str += "-user "; - command_str += gGridName; - command_str += " &"; // This backgrounds the command so system() doesn't block until the crashreporter exits. + command_str = "open crashreporter.app"; system(command_str.c_str()); /* Flawfinder: ignore */ // Sometimes signals don't seem to quit the viewer. diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp index c30c9a6..2255496 100644 --- a/linden/indra/newview/llcontroldef.cpp +++ b/linden/indra/newview/llcontroldef.cpp @@ -886,6 +886,7 @@ void declare_settings() //gSavedSettings.declareVec3("FocusOffsetBuild", LLVector3(4, 0, 0), "[NOT USED]"); gSavedSettings.declareVec3("FocusOffsetDefault", LLVector3(1, 0, 1), "Default focus point offset relative to avatar (x-axis is forward)"); gSavedSettings.declareBOOL("TrackFocusObject", TRUE, "Camera tracks last object zoomed on"); + gSavedSettings.declareBOOL("CameraMouseWheelZoom", TRUE, "Camera zooms in and out with mousewheel"); gSavedSettings.declareVec3d("FocusPosOnLogout", LLVector3d(0, 0, 0), "Camera focus point when last logged out (global coordinates)"); gSavedSettings.declareVec3d("CameraPosOnLogout", LLVector3d(0, 0, 0), "Camera position when last logged out (global coordinates)"); diff --git a/linden/indra/newview/llpanelgroupvoting.cpp b/linden/indra/newview/llpanelgroupvoting.cpp index b78d5c2..58a4842 100644 --- a/linden/indra/newview/llpanelgroupvoting.cpp +++ b/linden/indra/newview/llpanelgroupvoting.cpp @@ -604,9 +604,25 @@ void LLPanelGroupVoting::impl::sendGroupProposalsRequest(const LLUUID& group_id) gAgent.sendReliableMessage(); } -void LLPanelGroupVoting::handleResponse(void *userdata, ResponseType response, bool success) +void LLPanelGroupVoting::handleResponse( + const LLUUID& group_id, + ResponseType response, + bool success) { - impl* self = (impl*)userdata; + impl* self = NULL; + + //see if the voting ballot for the group is still even open + std::map::const_iterator self_iter = + LLPanelGroupVoting::impl::sGroupIDs.find(group_id); + + if ( LLPanelGroupVoting::impl::sGroupIDs.end() != self_iter ) + { + //cool, we found the panel's implementation + //(the panel is still open) + //then we want to do some other stuff :) + self = self_iter->second; + } + if ( self ) { //refresh the proposals now that we've hit no @@ -633,15 +649,44 @@ void LLPanelGroupVoting::handleResponse(void *userdata, ResponseType response, b } } +void LLPanelGroupVoting::handleFailure( + const LLUUID& group_id) +{ + impl* self = NULL; + + //see if the voting ballot for the group is still even open + std::map::const_iterator self_iter = + LLPanelGroupVoting::impl::sGroupIDs.find(group_id); + + if ( LLPanelGroupVoting::impl::sGroupIDs.end() != self_iter ) + { + //cool, we found the panel's implementation + //(the panel is still open) + //then we want to do some other stuff :) + self = self_iter->second; + } + + if ( self ) + { + self->setEnableListProposals(); + } +} + class LLStartGroupVoteResponder : public LLHTTPClient::Responder { public: - LLStartGroupVoteResponder(void *userdata) : mUserData(userdata) {}; + LLStartGroupVoteResponder(const LLUUID& group_id) + { + mGroupID = group_id; + } + //If we get back a normal response, handle it here virtual void result(const LLSD& content) { //Ack'd the proposal initialization, now let's finish up. - LLPanelGroupVoting::handleResponse(mUserData,LLPanelGroupVoting::START_VOTE); + LLPanelGroupVoting::handleResponse( + mGroupID, + LLPanelGroupVoting::START_VOTE); } //If we get back an error (not found, etc...), handle it here @@ -649,21 +694,29 @@ public: { llinfos << "LLPanelGroupVotingResponder::error " << status << ": " << reason << llendl; + + LLPanelGroupVoting::handleFailure(mGroupID); } private: - void *mUserData; + LLUUID mGroupID; }; class LLGroupProposalBallotResponder : public LLHTTPClient::Responder { public: - LLGroupProposalBallotResponder(void *userdata) : mUserData(userdata) {}; + LLGroupProposalBallotResponder(const LLUUID& group_id) + { + mGroupID = group_id; + } + //If we get back a normal response, handle it here virtual void result(const LLSD& content) { //Ack'd the proposal initialization, now let's finish up. - - LLPanelGroupVoting::handleResponse(mUserData,LLPanelGroupVoting::BALLOT,content["voted"].asBoolean()); + LLPanelGroupVoting::handleResponse( + mGroupID, + LLPanelGroupVoting::BALLOT, + content["voted"].asBoolean()); } //If we get back an error (not found, etc...), handle it here @@ -671,9 +724,11 @@ public: { llinfos << "LLPanelGroupVotingResponder::error " << status << ": " << reason << llendl; + + LLPanelGroupVoting::handleFailure(mGroupID); } private: - void *mUserData; + LLUUID mGroupID; }; void LLPanelGroupVoting::impl::sendStartGroupProposal() @@ -715,7 +770,11 @@ void LLPanelGroupVoting::impl::sendStartGroupProposal() body["duration"] = duration_seconds; body["proposal-text"] = mProposalText->getText(); - LLHTTPClient::post(url, body, new LLStartGroupVoteResponder((void*)this)); + LLHTTPClient::post( + url, + body, + new LLStartGroupVoteResponder(mGroupID), + 300); } else { //DEPRECATED!!!!!!! This is a fallback just in case our backend cap is not there. Delete this block ASAP! @@ -758,7 +817,11 @@ void LLPanelGroupVoting::impl::sendGroupProposalBallot(const char* vote) body["group-id"] = mGroupID; body["vote"] = vote; - LLHTTPClient::post(url, body, new LLGroupProposalBallotResponder((void*)this)); + LLHTTPClient::post( + url, + body, + new LLGroupProposalBallotResponder(mGroupID), + 300); } else { //DEPRECATED!!!!!!! This is a fallback just in case our backend cap is not there. Delete this block ASAP! @@ -829,23 +892,23 @@ void LLPanelGroupVoting::impl::addPendingActiveScrollListItem(unsigned int curre EAddPosition pos) { std::stringstream pending; + //*TODO: translate pending << "Retrieving active proposals (" << current << "\\" << expected << ")"; - LLSD row; - row["columns"][0]["value"] = pending.str(); - row["columns"][0]["font"] = "SANSSERIF_SMALL"; - mProposals->addElement(row, pos); + mProposals->addCommentText(pending.str()); } void LLPanelGroupVoting::impl::addNoActiveScrollListItem(EAddPosition pos) { + //*TODO: translate mProposals->addCommentText("There are currently no active proposals", pos); } void LLPanelGroupVoting::impl::addNoHistoryScrollListItem(EAddPosition pos) { + //*TODO: translate mVotesHistory->addCommentText("There are currently no archived proposals", pos); } @@ -853,16 +916,13 @@ void LLPanelGroupVoting::impl::addPendingHistoryScrollListItem(unsigned int curr unsigned int expected, EAddPosition pos) { + //*TODO: translate std::stringstream pending; pending << "Retrieving archived proposals (" << current << "\\" << expected << ")"; - LLSD row; - row["columns"][0]["value"] = pending.str(); - row["columns"][0]["font"] = "SANSSERIF_SMALL"; - - mVotesHistory->addElement(row, pos); + mVotesHistory->addCommentText(pending.str()); } diff --git a/linden/indra/newview/llpanelgroupvoting.h b/linden/indra/newview/llpanelgroupvoting.h index 3d56f69..05f53b5 100644 --- a/linden/indra/newview/llpanelgroupvoting.h +++ b/linden/indra/newview/llpanelgroupvoting.h @@ -55,7 +55,12 @@ public: virtual bool needsApply(LLString& mesg); virtual bool apply(LLString& mesg); virtual void update(LLGroupChange gc); - static void handleResponse(void *userdata, ResponseType response, bool succes=true); + static void handleResponse( + const LLUUID& group_id, + ResponseType response, + bool succes=true); + static void handleFailure( const LLUUID& group_id); + protected: class impl; impl* mImpl; diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp index 29335d9..bdaf133 100644 --- a/linden/indra/newview/llstatusbar.cpp +++ b/linden/indra/newview/llstatusbar.cpp @@ -416,6 +416,8 @@ void LLStatusBar::refresh() childSetVisible("buyland", canBuyLand); if (canBuyLand) { + //HACK: layout tweak until this is all xml + x += 9; childGetRect( "buyland", buttonRect ); r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight()); childSetRect( "buyland", r ); diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index 59d50d2..11fd348 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp @@ -492,7 +492,11 @@ bool LLTextureCacheWorker::doWrite() idx = mCache->getHeaderCacheEntry(mID, true, &mImageSize); // touch entry if (idx >= 0) { - llassert_always(cur_imagesize <= 0 || mImageSize == cur_imagesize); + if(cur_imagesize > 0 && mImageSize != cur_imagesize) + { + llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl; + offset = 0; // re-write header + } mState = offset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY; } else diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp index 68edca8..99ac3a7 100644 --- a/linden/indra/newview/llviewerimagelist.cpp +++ b/linden/indra/newview/llviewerimagelist.cpp @@ -253,8 +253,10 @@ void LLViewerImageList::doPreloadImages() preloadUIImage("map_track_16.tga", LLUUID::null, FALSE); preloadUIImage("media_icon.tga", LLUUID::null, FALSE); preloadUIImage("music_icon.tga", LLUUID::null, FALSE); - preloadUIImage("noentrylines.tga", LLUUID::null, TRUE); - preloadUIImage("noentrypasslines.tga", LLUUID::null, TRUE); + image = preloadUIImage("noentrylines.tga", LLUUID::null, TRUE); + if (image) image->setClamp(FALSE, FALSE); + image = preloadUIImage("noentrypasslines.tga", LLUUID::null, TRUE); + if (image) image->setClamp(FALSE, FALSE); preloadUIImage("notify_tip_icon.tga", LLUUID::null, FALSE); preloadUIImage("notify_caution_icon.tga", LLUUID::null, FALSE); preloadUIImage("notify_box_icon.tga", LLUUID::null, FALSE); diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj index c1cb556..fdbd211 100644 --- a/linden/indra/newview/macview.xcodeproj/project.pbxproj +++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj @@ -1028,7 +1028,7 @@ 1AA2EEA30CBBE2BF0017E185 /* llfloaterurldisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterurldisplay.cpp; sourceTree = ""; }; 1AA2EEA50CBBE2D40017E185 /* llremoteparcelrequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llremoteparcelrequest.h; sourceTree = ""; }; 1AA2EEA60CBBE2D40017E185 /* llremoteparcelrequest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llremoteparcelrequest.cpp; sourceTree = ""; }; - 1AB0DADC0A52E8A0001CACEB /* message_template.msg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = message_template.msg; path = ../../scripts/messages/message_template.msg; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; }; + 1AB0DADC0A52E8A0001CACEB /* message_template.msg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = message_template.msg; path = ../../scripts/messages/message_template.msg; sourceTree = SOURCE_ROOT; }; 1AD3940C0CAB0003004BA76A /* llurlsimstring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlsimstring.h; sourceTree = ""; }; 1AD3940D0CAB0003004BA76A /* llurldispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurldispatcher.h; sourceTree = ""; }; 1AD3940E0CAB000F004BA76A /* llurlsimstring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llurlsimstring.cpp; sourceTree = ""; }; @@ -4253,7 +4253,6 @@ 20286C28FDCF999611CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = 999484580883114300EFC621 /* Build configuration list for PBXProject "macview" */; - compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; knownRegions = ( English, diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index de547c5..7aa71f9 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,17 @@ +Release Notes for Second Life 1.19.0(3) February 22nd, 2008 +===================================== + +Fixes: +* Land for sale icon in menubar overlaps push object restriction icon +* Upload Animation window: Button missing in Stopped window state +* Client crashes when viewing the proposals tab in group information +* My Landmarks dropdown list adds additional entries every time the world map is opened +* Groups > Proposals > Past Vote text gets chomped +* Defaulted buttons in floater dialogs remain highlighted when not in focus +* VWR-4556: 1.19.0: Ban lines around limited-access parcels are no longer visible +* VWR-3410: Too many typing sounds when chatting in Japanese + + Release Notes for Second Life 1.19.0(2) February 13th, 2008 ===================================== diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index 909393b..411a17a 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -228,8 +228,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,19,0,2 - PRODUCTVERSION 1,19,0,2 + FILEVERSION 1,19,0,3 + PRODUCTVERSION 1,19,0,3 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -246,12 +246,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.19.0.2" + VALUE "FileVersion", "1.19.0.3" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright ฉ 2001-2007, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.19.0.2" + VALUE "ProductVersion", "1.19.0.3" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/skins/xui/de/alerts.xml b/linden/indra/newview/skins/xui/de/alerts.xml index f09d0f6..a534508 100644 --- a/linden/indra/newview/skins/xui/de/alerts.xml +++ b/linden/indra/newview/skins/xui/de/alerts.xml @@ -446,7 +446,7 @@ Fortfahren? Fortfahren?