diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llcommon/llversionviewer.h | 2 | ||||
-rw-r--r-- | indra/llui/lllineeditor.cpp | 36 | ||||
-rw-r--r-- | indra/llui/llpanel.cpp | 8 | ||||
-rw-r--r-- | indra/llui/lltexteditor.cpp | 32 | ||||
-rw-r--r-- | indra/llwindow/llwindowmacosx.cpp | 18 | ||||
-rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 13 | ||||
-rw-r--r-- | indra/newview/English.lproj/InfoPlist.strings | 4 | ||||
-rw-r--r-- | indra/newview/Info-SecondLife.plist | 2 | ||||
-rw-r--r-- | indra/newview/linux_tools/client-readme.txt | 30 | ||||
-rwxr-xr-x | indra/newview/linux_tools/wrapper.sh | 12 | ||||
-rw-r--r-- | indra/newview/llappviewer.cpp | 44 |
11 files changed, 85 insertions, 116 deletions
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index c5bac32e91..f8b193d643 100644 --- a/indra/llcommon/llversionviewer.h +++ b/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 = 4; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 391b28a21f..6d5e589b04 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -2317,6 +2317,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); @@ -2326,11 +2332,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) } } @@ -2343,27 +2348,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/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 4c16683704..cb732a17c6 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -212,10 +212,16 @@ 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()) @@ -230,8 +236,6 @@ void LLPanel::updateDefaultBtn() mDefaultBtn->setBorderEnabled(FALSE); } } - - LLView::draw(); } void LLPanel::refresh() diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index c76576895c..0b6f5d75cc 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -4335,6 +4335,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); @@ -4343,9 +4349,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. } } @@ -4358,28 +4365,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/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 5184a6caec..a1d97429e1 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2102,15 +2102,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; } @@ -3366,6 +3368,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/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 0bba56f74f..a5367aac8a 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -3716,6 +3716,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(); } } @@ -3859,7 +3863,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) { @@ -3869,8 +3878,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/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 76c69153c9..7ecd693ba4 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/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.4"; +CFBundleGetInfoString = "Second Life version 1.19.0.4, Copyright 2004-2007 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index c93fbe0986..50226d84aa 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ </dict> </array> <key>CFBundleVersion</key> - <string>1.19.0.2</string> + <string>1.19.0.4</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt index 89454e2ade..ff607b778a 100644 --- a/indra/newview/linux_tools/client-readme.txt +++ b/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 <http://www.secondlife.com/whatis/>. 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: <http://forums.secondlife.com/forumdisplay.php?forumid=263> This is a forum where Linux Client users can help each other out and discuss the latest updates. diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index e7c47cbba6..070d45a5bb 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/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. @@ -23,14 +23,14 @@ ## - 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 @@ -122,8 +122,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/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 106b2b1517..666fcd1301 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2599,43 +2599,36 @@ void LLAppViewer::setCrashBehavior(S32 cb) bool LLAppViewer::anotherInstanceRunning() { - // We create a marker file when the program starts and remove the file when it finishes. + // We create a marker file when the program starts and remove the file when it finishes. // If the file is currently locked, that means another process is already running. std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME); llinfos << "Checking marker file for lock..." << llendl; - // If file doesn't exist, we create it - // If file does exist, try to get writing privileges - FILE* fMarker = LLFile::fopen(marker_file.c_str(), "rb"); // Flawfinder: ignore + //Freeze case checks + apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB); if (fMarker != NULL) { // File exists, try opening with write permissions - fclose(fMarker); - fMarker = LLFile::fopen(marker_file.c_str(), "wb"); // Flawfinder: ignore + apr_file_close(fMarker); + fMarker = ll_apr_file_open(marker_file, LL_APR_WB); if (fMarker == NULL) { + // Another instance is running. Skip the rest of these operations. llinfos << "Marker file is locked." << llendl; return TRUE; } - - // *FIX:Mani - rather than have this exception here, - // LLFile::fopen() have consistent behavior across platforms? -#if LL_DARWIN || LL_LINUX || LL_SOLARIS - // Try to lock it. On Mac, this is the only way to test if it's actually locked. - if (flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) + if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) { - // Lock failed - somebody else has it. - fclose(fMarker); + apr_file_close(fMarker); llinfos << "Marker file is locked." << llendl; return TRUE; } -#endif - fclose(fMarker); + // No other instances; we'll lock this file now & delete on quit. + apr_file_close(fMarker); } llinfos << "Marker file isn't locked." << llendl; return FALSE; - } void LLAppViewer::initMarkerFile() @@ -2677,25 +2670,10 @@ void LLAppViewer::initMarkerFile() ll_apr_file_remove(error_marker_file); //Freeze case checks + if(anotherInstanceRunning()) return; fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB); if (fMarker != NULL) { - // File exists, try opening with write permissions - apr_file_close(fMarker); - fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_WB); - if (fMarker == NULL) - { - // Another instance is running. Skip the rest of these operations. - llinfos << "Marker file is locked." << llendl; - return; - } - if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) - { - apr_file_close(fMarker); - llinfos << "Marker file is locked." << llendl; - return; - } - // No other instances; we'll lock this file now & delete on quit. apr_file_close(fMarker); gLastExecEvent = LAST_EXEC_FROZE; llinfos << "Exec marker found: program froze on previous execution" << llendl; |