summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/cmake/Copy3rdPartyLibs.cmake4
-rw-r--r--indra/cmake/Variables.cmake1
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llui/lltextbase.cpp103
-rw-r--r--indra/llui/lltextbase.h4
-rw-r--r--indra/media_plugins/winmmshim/forwarding_api.cpp173
-rw-r--r--indra/media_plugins/winmmshim/forwarding_api.h1
-rw-r--r--indra/media_plugins/winmmshim/winmm_shim.cpp22
-rw-r--r--indra/newview/character/avatar_lad.xml20
-rw-r--r--indra/newview/llappviewer.cpp8
-rw-r--r--indra/newview/lldateutil.cpp4
-rw-r--r--indra/newview/llfloaterpreference.cpp36
-rw-r--r--indra/newview/llfloaterpreference.h4
-rw-r--r--indra/newview/llinventorymodel.cpp19
-rw-r--r--indra/newview/llinventorymodel.h5
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.cpp6
-rw-r--r--indra/newview/llinventoryobserver.cpp11
-rw-r--r--indra/newview/llinventoryobserver.h1
-rw-r--r--indra/newview/llpanellogin.cpp37
-rw-r--r--indra/newview/llphysicsmotion.cpp29
-rw-r--r--indra/newview/llsidetraylistener.cpp21
-rw-r--r--indra/newview/llsidetraylistener.h21
-rw-r--r--indra/newview/llsyswellwindow.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp29
-rw-r--r--indra/newview/llwearabletype.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml10
-rw-r--r--indra/newview/viewer_manifest.py4
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.cpp10
28 files changed, 450 insertions, 139 deletions
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 4698116022..1c43c4ce12 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -243,7 +243,7 @@ elseif(LINUX)
libaprutil-1.so.0
libatk-1.0.so
libbreakpad_client.so.0
- libcrypto.so.0.9.8
+ libcrypto.so.1.0.0
libdb-5.1.so
libexpat.so
libexpat.so.1
@@ -259,7 +259,7 @@ elseif(LINUX)
libtcmalloc.so
libuuid.so.16
libuuid.so.16.0.22
- libssl.so.0.9.8
+ libssl.so.1.0.0
libfontconfig.so.1.4.4
)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 77dd34d122..8c9c375790 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -135,6 +135,7 @@ set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for
set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
+set(UNATTENDED OFF CACHE BOOL "Should be set to ON for building with VC Express editions.")
if (NOT STANDALONE AND EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
set(SERVER ON CACHE BOOL "Build Second Life server software.")
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index bd6df962a1..df5afcbf1c 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -29,7 +29,7 @@
const S32 LL_VERSION_MAJOR = 2;
const S32 LL_VERSION_MINOR = 6;
-const S32 LL_VERSION_PATCH = 5;
+const S32 LL_VERSION_PATCH = 6;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 49537ef78f..82269282ef 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -157,6 +157,7 @@ LLTextBase::Params::Params()
read_only("read_only", false),
v_pad("v_pad", 0),
h_pad("h_pad", 0),
+ clip("clip", true),
clip_partial("clip_partial", true),
line_spacing("line_spacing"),
max_text_length("max_length", 255),
@@ -199,6 +200,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
mVAlign(p.font_valign),
mLineSpacingMult(p.line_spacing.multiple),
mLineSpacingPixels(p.line_spacing.pixels),
+ mClip(p.clip),
mClipPartial(p.clip_partial && !p.allow_scroll),
mTrackEnd( p.track_end ),
mScrollIndex(-1),
@@ -334,7 +336,7 @@ void LLTextBase::drawSelectionBackground()
// binary search for line that starts before top of visible buffer
line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mTop, compare_bottom());
- line_list_t::const_iterator end_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
+ line_list_t::const_iterator end_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
bool done = false;
@@ -512,7 +514,6 @@ void LLTextBase::drawText()
selection_right = llmax( mSelectionStart, mSelectionEnd );
}
- LLRect scrolled_view_rect = getVisibleDocumentRect();
std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
S32 first_line = line_range.first;
S32 last_line = line_range.second;
@@ -545,10 +546,10 @@ void LLTextBase::drawText()
line_end = next_start;
}
- LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
- line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,
- llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft,
- line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);
+ LLRect text_rect(line.mRect);
+ text_rect.mRight = llmin(mDocumentView->getRect().getWidth(), text_rect.mRight); // clamp right edge to document extents
+ text_rect.translate(mVisibleTextRect.mLeft, mVisibleTextRect.mBottom); // translate into display region of text widget
+ text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom); // adjust by scroll position
// draw a single line of text
S32 seg_start = line_start;
@@ -993,14 +994,28 @@ void LLTextBase::draw()
updateScrollFromCursor();
}
- LLRect doc_rect;
+ LLRect text_rect;
if (mScroller)
{
- mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &doc_rect, this);
+ mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &text_rect, this);
}
else
{
- doc_rect = getLocalRect();
+ LLRect visible_lines_rect;
+ std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
+ for (S32 i = line_range.first; i < line_range.second; i++)
+ {
+ if (visible_lines_rect.isEmpty())
+ {
+ visible_lines_rect = mLineInfoList[i].mRect;
+ }
+ else
+ {
+ visible_lines_rect.unionWith(mLineInfoList[i].mRect);
+ }
+ }
+ text_rect = visible_lines_rect;
+ text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom);
}
if (mBGVisible)
@@ -1010,28 +1025,37 @@ void LLTextBase::draw()
LLRect bg_rect = mVisibleTextRect;
if (mScroller)
{
- bg_rect.intersectWith(doc_rect);
+ bg_rect.intersectWith(text_rect);
}
LLColor4 bg_color = mReadOnly
? mReadOnlyBgColor.get()
: hasFocus()
? mFocusBgColor.get()
: mWriteableBgColor.get();
- gl_rect_2d(doc_rect, bg_color % alpha, TRUE);
+ gl_rect_2d(text_rect, bg_color % alpha, TRUE);
}
- // draw document view
- LLUICtrl::draw();
-
- {
- // only clip if we support scrolling...
- // since convention is that text boxes never vertically truncate their contents
- // regardless of rect bounds
- LLLocalClipRect clip(doc_rect, mScroller != NULL);
+ bool should_clip = mClip || mScroller != NULL;
+ { LLLocalClipRect clip(text_rect, should_clip);
+
+ // draw document view
+ if (mScroller)
+ {
+ drawChild(mScroller);
+ }
+ else
+ {
+ drawChild(mDocumentView);
+ }
+
drawSelectionBackground();
drawText();
drawCursor();
}
+
+ mDocumentView->setVisible(FALSE);
+ LLUICtrl::draw();
+ mDocumentView->setVisible(TRUE);
}
@@ -1415,7 +1439,7 @@ S32 LLTextBase::getFirstVisibleLine() const
return iter - mLineInfoList.begin();
}
-std::pair<S32, S32> LLTextBase::getVisibleLines(bool fully_visible)
+std::pair<S32, S32> LLTextBase::getVisibleLines(bool require_fully_visible)
{
LLRect visible_region = getVisibleDocumentRect();
line_list_t::const_iterator first_iter;
@@ -1424,14 +1448,14 @@ std::pair<S32, S32> LLTextBase::getVisibleLines(bool fully_visible)
// make sure we have an up-to-date mLineInfoList
reflow();
- if (fully_visible)
+ if (require_fully_visible)
{
first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_top());
- last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
+ last_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
}
else
{
- first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
+ first_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_top());
}
return std::pair<S32, S32>(first_iter - mLineInfoList.begin(), last_iter - mLineInfoList.begin());
@@ -2405,14 +2429,41 @@ LLRect LLTextBase::getVisibleDocumentRect() const
{
return mScroller->getVisibleContentRect();
}
- else
+ else if (mClip)
{
- // entire document rect is visible when not scrolling
+ LLRect visible_text_rect = getVisibleTextRect();
+ LLRect doc_rect = mDocumentView->getRect();
+ visible_text_rect.translate(-doc_rect.mLeft, -doc_rect.mBottom);
+
+ // reject partially visible lines
+ LLRect visible_lines_rect;
+ for (line_list_t::const_iterator it = mLineInfoList.begin(), end_it = mLineInfoList.end();
+ it != end_it;
+ ++it)
+ {
+ bool line_visible = mClipPartial ? visible_text_rect.contains(it->mRect) : visible_text_rect.overlaps(it->mRect);
+ if (line_visible)
+ {
+ if (visible_lines_rect.isEmpty())
+ {
+ visible_lines_rect = it->mRect;
+ }
+ else
+ {
+ visible_lines_rect.unionWith(it->mRect);
+ }
+ }
+ }
+ return visible_lines_rect;
+ }
+ else
+ { // entire document rect is visible
// but offset according to height of widget
+
LLRect doc_rect = mDocumentView->getLocalRect();
doc_rect.mLeft -= mDocumentView->getRect().mLeft;
// adjust for height of text above widget baseline
- doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();
+ doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mVisibleTextRect.getHeight());
return doc_rect;
}
}
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index aafcf8ceb0..7d545a1ba6 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -265,6 +265,7 @@ public:
use_ellipses,
parse_urls,
parse_highlights,
+ clip,
clip_partial;
Optional<S32> v_pad,
@@ -338,7 +339,7 @@ public:
void addDocumentChild(LLView* view);
void removeDocumentChild(LLView* view);
const LLView* getDocumentView() const { return mDocumentView; }
- LLRect getVisibleTextRect() { return mVisibleTextRect; }
+ LLRect getVisibleTextRect() const { return mVisibleTextRect; }
LLRect getTextBoundingRect();
LLRect getVisibleDocumentRect() const;
@@ -552,6 +553,7 @@ protected:
bool mTrackEnd; // if true, keeps scroll position at end of document during resize
bool mReadOnly;
bool mBGVisible; // render background?
+ bool mClip; // clip text to widget rect
bool mClipPartial; // false if we show lines that are partially inside bounding rect
bool mPlainText; // didn't use Image or Icon segments
S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes
diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp
index eff7e20451..495e08942b 100644
--- a/indra/media_plugins/winmmshim/forwarding_api.cpp
+++ b/indra/media_plugins/winmmshim/forwarding_api.cpp
@@ -389,90 +389,105 @@ void init_function_pointers(HMODULE winmm_handle)
extern "C" {
LRESULT WINAPI CloseDriver( HDRVR hDriver, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"CloseDriver\n");
return CloseDriver_orig( hDriver, lParam1, lParam2);
}
HDRVR WINAPI OpenDriver( LPCWSTR szDriverName, LPCWSTR szSectionName, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"OpenDriver\n");
return OpenDriver_orig( szDriverName, szSectionName, lParam2);
}
LRESULT WINAPI SendDriverMessage( HDRVR hDriver, UINT message, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"SendDriverMessage\n");
return SendDriverMessage_orig( hDriver, message, lParam1, lParam2);
}
HMODULE WINAPI DrvGetModuleHandle( HDRVR hDriver)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DrvGetModuleHandle\n");
return DrvGetModuleHandle_orig( hDriver);
}
HMODULE WINAPI GetDriverModuleHandle( HDRVR hDriver)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"GetDriverModuleHandle\n");
return GetDriverModuleHandle_orig( hDriver);
}
LRESULT WINAPI DefDriverProc( DWORD_PTR dwDriverIdentifier, HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DefDriverProc\n");
return DefDriverProc_orig( dwDriverIdentifier, hdrvr, uMsg, lParam1, lParam2);
}
BOOL WINAPI DriverCallback( DWORD dwCallBack, DWORD dwFlags, HDRVR hdrvr, DWORD msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DriverCallback\n");
return DriverCallback_orig(dwCallBack, dwFlags, hdrvr, msg, dwUser, dwParam1, dwParam2);
}
UINT WINAPI mmsystemGetVersion(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmsystemGetVersion\n");
return mmsystemGetVersion_orig();
}
BOOL WINAPI sndPlaySoundA( LPCSTR pszSound, UINT fuSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"sndPlaySoundA\n");
return sndPlaySoundA_orig( pszSound, fuSound);
}
BOOL WINAPI sndPlaySoundW( LPCWSTR pszSound, UINT fuSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"sndPlaySoundW\n");
return sndPlaySoundW_orig( pszSound, fuSound);
}
BOOL WINAPI PlaySoundA( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"PlaySoundA\n");
return PlaySoundA_orig( pszSound, hmod, fdwSound);
}
BOOL WINAPI PlaySoundW( LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"PlaySoundW\n");
return PlaySoundW_orig( pszSound, hmod, fdwSound);
}
UINT WINAPI waveOutGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetNumDevs\n");
return waveOutGetNumDevs_orig();
}
MMRESULT WINAPI waveOutGetDevCapsA( UINT_PTR uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetDevCapsA\n");
return waveOutGetDevCapsA_orig( uDeviceID, pwoc, cbwoc);
}
MMRESULT WINAPI waveOutGetDevCapsW( UINT_PTR uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetDevCapsW\n");
return waveOutGetDevCapsW_orig( uDeviceID, pwoc, cbwoc);
}
@@ -480,24 +495,28 @@ extern "C" {
MMRESULT WINAPI waveOutGetVolume( HWAVEOUT hwo, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetVolume\n");
return waveOutGetVolume_orig( hwo, pdwVolume);
}
MMRESULT WINAPI waveOutSetVolume( HWAVEOUT hwo, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetVolume\n");
return waveOutSetVolume_orig( hwo, dwVolume);
}
MMRESULT WINAPI waveOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetErrorTextA\n");
return waveOutGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI waveOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetErrorTextW\n");
return waveOutGetErrorTextW_orig( mmrError, pszText, cchText);
}
@@ -516,12 +535,14 @@ extern "C" {
MMRESULT WINAPI waveOutPrepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutPrepareHeader\n");
return waveOutPrepareHeader_orig( hwo, pwh, cbwh);
}
MMRESULT WINAPI waveOutUnprepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutUnprepareHeader\n");
return waveOutUnprepareHeader_orig( hwo, pwh, cbwh);
}
@@ -535,834 +556,973 @@ extern "C" {
MMRESULT WINAPI waveOutPause( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutPause\n");
return waveOutPause_orig( hwo);
}
MMRESULT WINAPI waveOutRestart( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutRestart\n");
return waveOutRestart_orig( hwo);
}
MMRESULT WINAPI waveOutReset( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutReset\n");
return waveOutReset_orig( hwo);
}
MMRESULT WINAPI waveOutBreakLoop( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutBreakLoop\n");
return waveOutBreakLoop_orig( hwo);
}
MMRESULT WINAPI waveOutGetPosition( HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPosition\n");
return waveOutGetPosition_orig( hwo, pmmt, cbmmt);
}
MMRESULT WINAPI waveOutGetPitch( HWAVEOUT hwo, LPDWORD pdwPitch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPitch\n");
return waveOutGetPitch_orig( hwo, pdwPitch);
}
MMRESULT WINAPI waveOutSetPitch( HWAVEOUT hwo, DWORD dwPitch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetPitch\n");
return waveOutSetPitch_orig( hwo, dwPitch);
}
MMRESULT WINAPI waveOutGetPlaybackRate( HWAVEOUT hwo, LPDWORD pdwRate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPlaybackRate\n");
return waveOutGetPlaybackRate_orig( hwo, pdwRate);
}
MMRESULT WINAPI waveOutSetPlaybackRate( HWAVEOUT hwo, DWORD dwRate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetPlaybackRate\n");
return waveOutSetPlaybackRate_orig( hwo, dwRate);
}
MMRESULT WINAPI waveOutGetID( HWAVEOUT hwo, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetID\n");
return waveOutGetID_orig( hwo, puDeviceID);
}
MMRESULT WINAPI waveOutMessage( HWAVEOUT hwo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutMessage\n");
return waveOutMessage_orig( hwo, uMsg, dw1, dw2);
}
UINT WINAPI waveInGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetNumDevs\n");
return waveInGetNumDevs_orig();
}
MMRESULT WINAPI waveInGetDevCapsA( UINT_PTR uDeviceID, LPWAVEINCAPSA pwic, UINT cbwic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetDevCapsA\n");
return waveInGetDevCapsA_orig( uDeviceID, pwic, cbwic);
}
MMRESULT WINAPI waveInGetDevCapsW( UINT_PTR uDeviceID, LPWAVEINCAPSW pwic, UINT cbwic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetDevCapsW\n");
return waveInGetDevCapsW_orig( uDeviceID, pwic, cbwic);
}
MMRESULT WINAPI waveInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetErrorTextA\n");
return waveInGetErrorTextA_orig(mmrError, pszText, cchText);
}
MMRESULT WINAPI waveInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetErrorTextW\n");
return waveInGetErrorTextW_orig(mmrError, pszText, cchText);
}
MMRESULT WINAPI waveInOpen( LPHWAVEIN phwi, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInOpen\n");
return waveInOpen_orig(phwi, uDeviceID, pwfx, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI waveInClose( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInClose\n");
return waveInClose_orig( hwi);
}
MMRESULT WINAPI waveInPrepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInPrepareHeader\n");
return waveInPrepareHeader_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInUnprepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInUnprepareHeader\n");
return waveInUnprepareHeader_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInAddBuffer( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInAddBuffer\n");
return waveInAddBuffer_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInStart( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInStart\n");
return waveInStart_orig( hwi);
}
MMRESULT WINAPI waveInStop( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInStop\n");
return waveInStop_orig(hwi);
}
MMRESULT WINAPI waveInReset( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInReset\n");
return waveInReset_orig(hwi);
}
MMRESULT WINAPI waveInGetPosition( HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetPosition\n");
return waveInGetPosition_orig( hwi, pmmt, cbmmt);
}
MMRESULT WINAPI waveInGetID( HWAVEIN hwi, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetID\n");
return waveInGetID_orig( hwi, puDeviceID);
}
MMRESULT WINAPI waveInMessage( HWAVEIN hwi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInMessage\n");
return waveInMessage_orig( hwi, uMsg, dw1, dw2);
}
UINT WINAPI midiOutGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetNumDevs\n");
return midiOutGetNumDevs_orig();
}
MMRESULT WINAPI midiStreamOpen( LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamOpen\n");
return midiStreamOpen_orig( phms, puDeviceID, cMidi, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiStreamClose( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamClose\n");
return midiStreamClose_orig( hms);
}
MMRESULT WINAPI midiStreamProperty( HMIDISTRM hms, LPBYTE lppropdata, DWORD dwProperty)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamProperty\n");
return midiStreamProperty_orig( hms, lppropdata, dwProperty);
}
MMRESULT WINAPI midiStreamPosition( HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamPosition\n");
return midiStreamPosition_orig( hms, lpmmt, cbmmt);
}
MMRESULT WINAPI midiStreamOut( HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamOut\n");
return midiStreamOut_orig( hms, pmh, cbmh);
}
MMRESULT WINAPI midiStreamPause( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamPause\n");
return midiStreamPause_orig( hms);
}
MMRESULT WINAPI midiStreamRestart( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamRestart\n");
return midiStreamRestart_orig( hms);
}
MMRESULT WINAPI midiStreamStop( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamStop\n");
return midiStreamStop_orig( hms);
}
MMRESULT WINAPI midiConnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiConnect\n");
return midiConnect_orig( hmi, hmo, pReserved);
}
MMRESULT WINAPI midiDisconnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiDisconnect\n");
return midiDisconnect_orig( hmi, hmo, pReserved);
}
MMRESULT WINAPI midiOutGetDevCapsA( UINT_PTR uDeviceID, LPMIDIOUTCAPSA pmoc, UINT cbmoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetDevCapsA\n");
return midiOutGetDevCapsA_orig( uDeviceID, pmoc, cbmoc);
}
MMRESULT WINAPI midiOutGetDevCapsW( UINT_PTR uDeviceID, LPMIDIOUTCAPSW pmoc, UINT cbmoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetDevCapsW\n");
return midiOutGetDevCapsW_orig( uDeviceID, pmoc, cbmoc);
}
MMRESULT WINAPI midiOutGetVolume( HMIDIOUT hmo, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetVolume\n");
return midiOutGetVolume_orig( hmo, pdwVolume);
}
MMRESULT WINAPI midiOutSetVolume( HMIDIOUT hmo, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutSetVolume\n");
return midiOutSetVolume_orig( hmo, dwVolume);
}
MMRESULT WINAPI midiOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetErrorTextA\n");
return midiOutGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetErrorTextW\n");
return midiOutGetErrorTextW_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiOutOpen( LPHMIDIOUT phmo, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutOpen\n");
return midiOutOpen_orig(phmo, uDeviceID, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiOutClose( HMIDIOUT hmo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutClose\n");
return midiOutClose_orig( hmo);
}
MMRESULT WINAPI midiOutPrepareHeader( HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutPrepareHeader\n");
return midiOutPrepareHeader_orig( hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutUnprepareHeader\n");
return midiOutUnprepareHeader_orig(hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutShortMsg( HMIDIOUT hmo, DWORD dwMsg)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutShortMsg\n");
return midiOutShortMsg_orig( hmo, dwMsg);
}
MMRESULT WINAPI midiOutLongMsg(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutLongMsg\n");
return midiOutLongMsg_orig(hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutReset( HMIDIOUT hmo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutReset\n");
return midiOutReset_orig( hmo);
}
MMRESULT WINAPI midiOutCachePatches( HMIDIOUT hmo, UINT uBank, LPWORD pwpa, UINT fuCache)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutCachePatches\n");
return midiOutCachePatches_orig( hmo, uBank, pwpa, fuCache);
}
MMRESULT WINAPI midiOutCacheDrumPatches( HMIDIOUT hmo, UINT uPatch, LPWORD pwkya, UINT fuCache)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutCacheDrumPatches\n");
return midiOutCacheDrumPatches_orig( hmo, uPatch, pwkya, fuCache);
}
MMRESULT WINAPI midiOutGetID( HMIDIOUT hmo, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetID\n");
return midiOutGetID_orig( hmo, puDeviceID);
}
MMRESULT WINAPI midiOutMessage( HMIDIOUT hmo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutMessage\n");
return midiOutMessage_orig( hmo, uMsg, dw1, dw2);
}
UINT WINAPI midiInGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetNumDevs\n");
return midiInGetNumDevs_orig();
}
MMRESULT WINAPI midiInGetDevCapsA( UINT_PTR uDeviceID, LPMIDIINCAPSA pmic, UINT cbmic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetDevCapsA\n");
return midiInGetDevCapsA_orig( uDeviceID, pmic, cbmic);
}
MMRESULT WINAPI midiInGetDevCapsW( UINT_PTR uDeviceID, LPMIDIINCAPSW pmic, UINT cbmic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetDevCapsW\n");
return midiInGetDevCapsW_orig( uDeviceID, pmic, cbmic);
}
MMRESULT WINAPI midiInGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetErrorTextA\n");
return midiInGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiInGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetErrorTextW\n");
return midiInGetErrorTextW_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiInOpen( LPHMIDIIN phmi, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInOpen\n");
return midiInOpen_orig(phmi, uDeviceID, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiInClose( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInClose\n");
return midiInClose_orig( hmi);
}
MMRESULT WINAPI midiInPrepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInPrepareHeader\n");
return midiInPrepareHeader_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInUnprepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInUnprepareHeader\n");
return midiInUnprepareHeader_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInAddBuffer( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInAddBuffer\n");
return midiInAddBuffer_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInStart( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInStart\n");
return midiInStart_orig( hmi);
}
MMRESULT WINAPI midiInStop( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInStop\n");
return midiInStop_orig(hmi);
}
MMRESULT WINAPI midiInReset( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInReset\n");
return midiInReset_orig( hmi);
}
MMRESULT WINAPI midiInGetID( HMIDIIN hmi, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetID\n");
return midiInGetID_orig( hmi, puDeviceID);
}
MMRESULT WINAPI midiInMessage( HMIDIIN hmi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInMessage\n");
return midiInMessage_orig( hmi, uMsg, dw1, dw2);
}
UINT WINAPI auxGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetNumDevs\n");
return auxGetNumDevs_orig();
}
MMRESULT WINAPI auxGetDevCapsA( UINT_PTR uDeviceID, LPAUXCAPSA pac, UINT cbac)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetDevCapsA\n");
return auxGetDevCapsA_orig( uDeviceID, pac, cbac);
}
MMRESULT WINAPI auxGetDevCapsW( UINT_PTR uDeviceID, LPAUXCAPSW pac, UINT cbac)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetDevCapsW\n");
return auxGetDevCapsW_orig( uDeviceID, pac, cbac);
}
MMRESULT WINAPI auxSetVolume( UINT uDeviceID, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxSetVolume\n");
return auxSetVolume_orig( uDeviceID, dwVolume);
}
MMRESULT WINAPI auxGetVolume( UINT uDeviceID, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetVolume\n");
return auxGetVolume_orig( uDeviceID, pdwVolume);
}
MMRESULT WINAPI auxOutMessage( UINT uDeviceID, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxOutMessage\n");
return auxOutMessage_orig( uDeviceID, uMsg, dw1, dw2);
}
UINT WINAPI mixerGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetNumDevs\n");
return mixerGetNumDevs_orig();
}
MMRESULT WINAPI mixerGetDevCapsA( UINT_PTR uMxId, LPMIXERCAPSA pmxcaps, UINT cbmxcaps)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetDevCapsA\n");
return mixerGetDevCapsA_orig( uMxId, pmxcaps, cbmxcaps);
}
MMRESULT WINAPI mixerGetDevCapsW( UINT_PTR uMxId, LPMIXERCAPSW pmxcaps, UINT cbmxcaps)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetDevCapsW\n");
return mixerGetDevCapsW_orig( uMxId, pmxcaps, cbmxcaps);
}
MMRESULT WINAPI mixerOpen( LPHMIXER phmx, UINT uMxId, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerOpen\n");
return mixerOpen_orig( phmx, uMxId, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI mixerClose( HMIXER hmx)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerClose\n");
return mixerClose_orig( hmx);
}
DWORD WINAPI mixerMessage( HMIXER hmx, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerMessage\n");
return mixerMessage_orig( hmx, uMsg, dwParam1, dwParam2);
}
MMRESULT WINAPI mixerGetLineInfoA( HMIXEROBJ hmxobj, LPMIXERLINEA pmxl, DWORD fdwInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineInfoA\n");
return mixerGetLineInfoA_orig( hmxobj, pmxl, fdwInfo);
}
MMRESULT WINAPI mixerGetLineInfoW( HMIXEROBJ hmxobj, LPMIXERLINEW pmxl, DWORD fdwInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineInfoW\n");
return mixerGetLineInfoW_orig( hmxobj, pmxl, fdwInfo);
}
MMRESULT WINAPI mixerGetID( HMIXEROBJ hmxobj, UINT FAR *puMxId, DWORD fdwId)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetID\n");
return mixerGetID_orig( hmxobj, puMxId, fdwId);
}
MMRESULT WINAPI mixerGetLineControlsA( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSA pmxlc, DWORD fdwControls)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineControlsA\n");
return mixerGetLineControlsA_orig( hmxobj, pmxlc, fdwControls);
}
MMRESULT WINAPI mixerGetLineControlsW( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxlc, DWORD fdwControls)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineControlsW\n");
return mixerGetLineControlsW_orig( hmxobj, pmxlc, fdwControls);
}
MMRESULT WINAPI mixerGetControlDetailsA( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetControlDetailsA\n");
return mixerGetControlDetailsA_orig( hmxobj, pmxcd, fdwDetails);
}
MMRESULT WINAPI mixerGetControlDetailsW( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetControlDetailsW\n");
return mixerGetControlDetailsW_orig( hmxobj, pmxcd, fdwDetails);
}
MMRESULT WINAPI mixerSetControlDetails( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerSetControlDetails\n");
return mixerSetControlDetails_orig( hmxobj, pmxcd, fdwDetails);
}
DWORD WINAPI mmGetCurrentTask(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmGetCurrentTask\n");
return mmGetCurrentTask_orig();
}
void WINAPI mmTaskBlock(DWORD val)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskBlock\n");
return mmTaskBlock_orig(val);
}
UINT WINAPI mmTaskCreate(LPTASKCALLBACK a, HANDLE* b, DWORD_PTR c)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskCreate\n");
return mmTaskCreate_orig(a, b, c);
}
BOOL WINAPI mmTaskSignal(DWORD a)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskSignal\n");
return mmTaskSignal_orig(a);
}
VOID WINAPI mmTaskYield()
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskYield\n");
mmTaskYield_orig();
}
MMRESULT WINAPI timeGetSystemTime( LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetSystemTime\n");
return timeGetSystemTime_orig( pmmt, cbmmt);
}
DWORD WINAPI timeGetTime(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetTime\n");
return timeGetTime_orig();
}
MMRESULT WINAPI timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK fptc, DWORD_PTR dwUser, UINT fuEvent)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeSetEvent\n");
return timeSetEvent_orig(uDelay, uResolution, fptc, dwUser, fuEvent);
}
MMRESULT WINAPI timeKillEvent( UINT uTimerID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeKillEvent\n");
return timeKillEvent_orig( uTimerID);
}
MMRESULT WINAPI timeGetDevCaps( LPTIMECAPS ptc, UINT cbtc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetDevCaps\n");
return timeGetDevCaps_orig( ptc, cbtc);
}
MMRESULT WINAPI timeBeginPeriod( UINT uPeriod)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeBeginPeriod\n");
return timeBeginPeriod_orig( uPeriod);
}
MMRESULT WINAPI timeEndPeriod( UINT uPeriod)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeEndPeriod\n");
return timeEndPeriod_orig( uPeriod);
}
UINT WINAPI joyGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetNumDevs\n");
return joyGetNumDevs_orig();
}
MMRESULT WINAPI joyConfigChanged(DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyConfigChanged\n");
return joyConfigChanged_orig(dwFlags);
}
MMRESULT WINAPI joyGetDevCapsA( UINT_PTR uJoyID, LPJOYCAPSA pjc, UINT cbjc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetDevCapsA\n");
return joyGetDevCapsA_orig( uJoyID, pjc, cbjc);
}
MMRESULT WINAPI joyGetDevCapsW( UINT_PTR uJoyID, LPJOYCAPSW pjc, UINT cbjc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetDevCapsW\n");
return joyGetDevCapsW_orig( uJoyID, pjc, cbjc);
}
MMRESULT WINAPI joyGetPos( UINT uJoyID, LPJOYINFO pji)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetPos\n");
return joyGetPos_orig( uJoyID, pji);
}
MMRESULT WINAPI joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetPosEx\n");
return joyGetPosEx_orig( uJoyID, pji);
}
MMRESULT WINAPI joyGetThreshold( UINT uJoyID, LPUINT puThreshold)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetThreshold\n");
return joyGetThreshold_orig( uJoyID, puThreshold);
}
MMRESULT WINAPI joyReleaseCapture( UINT uJoyID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyReleaseCapture\n");
return joyReleaseCapture_orig( uJoyID);
}
MMRESULT WINAPI joySetCapture( HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joySetCapture\n");
return joySetCapture_orig(hwnd, uJoyID, uPeriod, fChanged);
}
MMRESULT WINAPI joySetThreshold( UINT uJoyID, UINT uThreshold)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joySetThreshold\n");
return joySetThreshold_orig( uJoyID, uThreshold);
}
BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciDriverNotify\n");
return mciDriverNotify_orig(hwndCallback, uDeviceID, uStatus);
}
UINT WINAPI mciDriverYield(UINT uDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciDriverYield\n");
return mciDriverYield_orig(uDeviceID);
}
FOURCC WINAPI mmioStringToFOURCCA( LPCSTR sz, UINT uFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioStringToFOURCCA\n");
return mmioStringToFOURCCA_orig( sz, uFlags);
}
FOURCC WINAPI mmioStringToFOURCCW( LPCWSTR sz, UINT uFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioStringToFOURCCW\n");
return mmioStringToFOURCCW_orig( sz, uFlags);
}
LPMMIOPROC WINAPI mmioInstallIOProcA( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioInstallIOProcA\n");
return mmioInstallIOProcA_orig( fccIOProc, pIOProc, dwFlags);
}
LPMMIOPROC WINAPI mmioInstallIOProcW( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioInstallIOProcW\n");
return mmioInstallIOProcW_orig( fccIOProc, pIOProc, dwFlags);
}
HMMIO WINAPI mmioOpenA( LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioOpenA\n");
return mmioOpenA_orig( pszFileName, pmmioinfo, fdwOpen);
}
HMMIO WINAPI mmioOpenW( LPWSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioOpenW\n");
return mmioOpenW_orig( pszFileName, pmmioinfo, fdwOpen);
}
MMRESULT WINAPI mmioRenameA( LPCSTR pszFileName, LPCSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRenameA\n");
return mmioRenameA_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
}
MMRESULT WINAPI mmioRenameW( LPCWSTR pszFileName, LPCWSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRenameW\n");
return mmioRenameW_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
}
MMRESULT WINAPI mmioClose( HMMIO hmmio, UINT fuClose)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioClose\n");
return mmioClose_orig( hmmio, fuClose);
}
LONG WINAPI mmioRead( HMMIO hmmio, HPSTR pch, LONG cch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRead\n");
return mmioRead_orig( hmmio, pch, cch);
}
LONG WINAPI mmioWrite( HMMIO hmmio, const char _huge* pch, LONG cch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioWrite\n");
return mmioWrite_orig( hmmio, pch, cch);
}
LONG WINAPI mmioSeek( HMMIO hmmio, LONG lOffset, int iOrigin)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSeek\n");
return mmioSeek_orig(hmmio, lOffset, iOrigin);
}
MMRESULT WINAPI mmioGetInfo( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioGetInfo\n");
return mmioGetInfo_orig( hmmio, pmmioinfo, fuInfo);
}
MMRESULT WINAPI mmioSetInfo( HMMIO hmmio, LPCMMIOINFO pmmioinfo, UINT fuInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSetInfo\n");
return mmioSetInfo_orig( hmmio, pmmioinfo, fuInfo);
}
MMRESULT WINAPI mmioSetBuffer( HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, UINT fuBuffer)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSetBuffer\n");
return mmioSetBuffer_orig(hmmio, pchBuffer, cchBuffer, fuBuffer);
}
MMRESULT WINAPI mmioFlush( HMMIO hmmio, UINT fuFlush)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioFlush\n");
return mmioFlush_orig( hmmio, fuFlush);
}
MMRESULT WINAPI mmioAdvance( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuAdvance)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioAdvance\n");
return mmioAdvance_orig( hmmio, pmmioinfo, fuAdvance);
}
LRESULT WINAPI mmioSendMessage( HMMIO hmmio, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSendMessage\n");
return mmioSendMessage_orig(hmmio, uMsg, lParam1, lParam2);
}
MMRESULT WINAPI mmioDescend( HMMIO hmmio, LPMMCKINFO pmmcki, const MMCKINFO FAR* pmmckiParent, UINT fuDescend)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioDescend\n");
return mmioDescend_orig(hmmio, pmmcki, pmmckiParent, fuDescend);
}
MMRESULT WINAPI mmioAscend( HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuAscend)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioAscend\n");
return mmioAscend_orig( hmmio, pmmcki, fuAscend);
}
MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuCreate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioCreateChunk\n");
return mmioCreateChunk_orig(hmmio, pmmcki, fuCreate);
}
MCIERROR WINAPI mciSendCommandA( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendCommandA\n");
return mciSendCommandA_orig( mciId, uMsg, dwParam1, dwParam2);
}
MCIERROR WINAPI mciSendCommandW( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendCommandW\n");
return mciSendCommandW_orig( mciId, uMsg, dwParam1, dwParam2);
}
MCIERROR WINAPI mciSendStringA( LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendStringA\n");
return mciSendStringA_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
}
MCIERROR WINAPI mciSendStringW( LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendStringW\n");
return mciSendStringW_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
}
@@ -1375,72 +1535,84 @@ extern "C" {
MCIDEVICEID WINAPI mciGetDeviceIDW( LPCWSTR pszDevice)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDW\n");
return mciGetDeviceIDW_orig( pszDevice);
}
MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA( DWORD dwElementID, LPCSTR lpstrType )
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDFromElementIDA\n");
return mciGetDeviceIDFromElementIDA_orig( dwElementID, lpstrType );
}
MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW( DWORD dwElementID, LPCWSTR lpstrType )
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDFromElementIDW\n");
return mciGetDeviceIDFromElementIDW_orig( dwElementID, lpstrType );
}
DWORD_PTR WINAPI mciGetDriverData(UINT uDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDriverData\n");
return mciGetDriverData_orig(uDeviceID);
}
BOOL WINAPI mciGetErrorStringA( MCIERROR mcierr, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetErrorStringA\n");
return mciGetErrorStringA_orig( mcierr, pszText, cchText);
}
BOOL WINAPI mciGetErrorStringW( MCIERROR mcierr, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetErrorStringW\n");
return mciGetErrorStringW_orig( mcierr, pszText, cchText);
}
BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSetDriverData_type\n");
return mciSetDriverData_orig( uDeviceID, dwData );
}
BOOL WINAPI mciSetYieldProc( MCIDEVICEID mciId, YIELDPROC fpYieldProc, DWORD dwYieldData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSetYieldProc\n");
return mciSetYieldProc_orig(mciId, fpYieldProc, dwYieldData);
}
BOOL WINAPI mciFreeCommandResource(UINT uTable)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciFreeCommandResource\n");
return mciFreeCommandResource_orig(uTable);
}
HTASK WINAPI mciGetCreatorTask( MCIDEVICEID mciId)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetCreatorTask\n");
return mciGetCreatorTask_orig( mciId);
}
YIELDPROC WINAPI mciGetYieldProc( MCIDEVICEID mciId, LPDWORD pdwYieldData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetYieldProc\n");
return mciGetYieldProc_orig( mciId, pdwYieldData);
}
UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciLoadCommandResource");
return mciLoadCommandResource_orig(hInstance, lpResName, uType);
}
@@ -1448,6 +1620,7 @@ extern "C" {
BOOL WINAPI mciExecute(LPCSTR pszCommand)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciExecute\n");
return mciExecute_orig(pszCommand);
}
diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h
index 89a6b347f3..076a08f769 100644
--- a/indra/media_plugins/winmmshim/forwarding_api.h
+++ b/indra/media_plugins/winmmshim/forwarding_api.h
@@ -30,6 +30,7 @@
#include <mmsystem.h>
void init_function_pointers(HMODULE winmm_handle);
+void ll_winmm_shim_initialize();
typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp
index 9563a3b664..47a1e5c018 100644
--- a/indra/media_plugins/winmmshim/winmm_shim.cpp
+++ b/indra/media_plugins/winmmshim/winmm_shim.cpp
@@ -32,14 +32,21 @@ using std::wstring;
static float sVolumeLevel = 1.f;
static bool sMute = false;
+static CRITICAL_SECTION sCriticalSection;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
+ InitializeCriticalSection(&sCriticalSection);
+ return TRUE;
+}
+
+void ll_winmm_shim_initialize(){
static bool initialized = false;
// do this only once
+ EnterCriticalSection(&sCriticalSection);
if (!initialized)
{ // bind to original winmm.dll
TCHAR system_path[MAX_PATH];
@@ -54,13 +61,15 @@ BOOL APIENTRY DllMain( HMODULE hModule,
{ // we have a dll, let's get out pointers!
initialized = true;
init_function_pointers(winmm_handle);
- return true;
+ ::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n");
+ }
+ else
+ {
+ // failed to initialize real winmm.dll
+ ::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n");
}
-
- // failed to initialize real winmm.dll
- return false;
}
- return true;
+ LeaveCriticalSection(&sCriticalSection);
}
@@ -79,6 +88,7 @@ extern "C"
MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
if (pwfx->wFormatTag != WAVE_FORMAT_PCM
|| (pwfx->wBitsPerSample != 8 && pwfx->wBitsPerSample != 16))
{ // uncompressed 8 and 16 bit sound are the only types we support
@@ -97,6 +107,7 @@ extern "C"
MMRESULT WINAPI waveOutClose( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
if (found_it != sWaveOuts.end())
{ // forget what we know about this handle
@@ -108,6 +119,7 @@ extern "C"
MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
MMRESULT result = MMSYSERR_NOERROR;
if (sMute)
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 85899603ee..ec162e3608 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -4339,8 +4339,8 @@
wearable="shape"
edit_group="driven"
value_default="0"
- value_min="-2"
- value_max="2">
+ value_min="-3"
+ value_max="3">
<param_morph />
</param>
@@ -4352,8 +4352,8 @@
wearable="shape"
edit_group="driven"
value_default="0"
- value_min="-1"
- value_max="1">
+ value_min="-1.5"
+ value_max="1.5">
<param_morph />
</param>
@@ -11916,7 +11916,7 @@ render_pass="bump">
edit_group="physics_breasts_updown"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
@@ -11971,7 +11971,7 @@ render_pass="bump">
edit_group="physics_breasts_inout"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
@@ -12058,7 +12058,7 @@ render_pass="bump">
edit_group="physics_belly_updown"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
@@ -12144,7 +12144,7 @@ render_pass="bump">
edit_group="physics_butt_updown"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
@@ -12193,7 +12193,7 @@ render_pass="bump">
edit_group="physics_butt_leftright"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
@@ -12244,7 +12244,7 @@ render_pass="bump">
edit_group="physics_breasts_leftright"
value_default=".1"
value_min="0"
- value_max="1">
+ value_max="3">
<param_driver />
</param>
<param
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index cbd996f909..061ef7268e 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2467,6 +2467,14 @@ bool LLAppViewer::initConfiguration()
}
}
+ // If automatic login from command line with --login switch
+ // init StartSLURL location. In interactive login, LLPanelLogin
+ // will take care of it.
+ if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl"))
+ {
+ LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));
+ }
+
if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
{
//
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index fcc73a07bc..18ae6107e7 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -32,9 +32,9 @@
#include "llui.h"
static S32 DAYS_PER_MONTH_NOLEAP[] =
- { 31, 28, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static S32 DAYS_PER_MONTH_LEAP[] =
- { 31, 29, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static S32 days_from_month(S32 year, S32 month)
{
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 10a8585920..b4b12024aa 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -286,8 +286,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mOriginalIMViaEmail(false),
mLanguageChanged(false),
mAvatarDataInitialized(false),
- mDoubleClickActionDirty(false),
- mFavoritesRecordMayExist(false)
+ mDoubleClickActionDirty(false)
{
//Build Floater is now Called from LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
@@ -567,34 +566,6 @@ void LLFloaterPreference::apply()
updateDoubleClickSettings();
mDoubleClickActionDirty = false;
}
-
- if (mFavoritesRecordMayExist && !gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"))
- {
- removeFavoritesRecordOfUser();
- }
-}
-
-void LLFloaterPreference::removeFavoritesRecordOfUser()
-{
- mFavoritesRecordMayExist = false;
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
- LLSD fav_llsd;
- llifstream file;
- file.open(filename);
- if (!file.is_open()) return;
- LLSDSerialize::fromXML(fav_llsd, file);
-
- LLAvatarName av_name;
- LLAvatarNameCache::get( gAgentID, &av_name );
- if (fav_llsd.has(av_name.getLegacyName()))
- {
- fav_llsd.erase(av_name.getLegacyName());
- }
-
- llofstream out_file;
- out_file.open(filename);
- LLSDSerialize::toPrettyXML(fav_llsd, out_file);
-
}
void LLFloaterPreference::cancel()
@@ -680,11 +651,6 @@ void LLFloaterPreference::onOpen(const LLSD& key)
getChildView("maturity_desired_combobox")->setVisible( false);
}
- if (LLStartUp::getStartupState() == STATE_STARTED)
- {
- mFavoritesRecordMayExist = gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin");
- }
-
// Forget previous language changes.
mLanguageChanged = false;
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 5d5e066ec5..4d8a2489be 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -159,8 +159,6 @@ public:
void buildPopupLists();
static void refreshSkin(void* data);
- // Remove record of current user's favorites from file on disk.
- void removeFavoritesRecordOfUser();
private:
static std::string sSkin;
// set true if state of double-click action checkbox or radio-group was changed by user
@@ -172,8 +170,6 @@ private:
bool mAvatarDataInitialized;
bool mOriginalHideOnlineStatus;
- // Record of current user's favorites may be stored in file on disk.
- bool mFavoritesRecordMayExist;
std::string mDirectoryVisibility;
LLAvatarData mAvatarProperties;
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 53835f0166..b1975c7261 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1059,12 +1059,11 @@ void LLInventoryModel::idleNotifyObservers()
{
return;
}
- notifyObservers("");
+ notifyObservers();
}
// Call this method when it's time to update everyone on a new state.
-// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
-void LLInventoryModel::notifyObservers(const std::string service_name)
+void LLInventoryModel::notifyObservers()
{
if (mIsNotifyObservers)
{
@@ -1081,15 +1080,7 @@ void LLInventoryModel::notifyObservers(const std::string service_name)
{
LLInventoryObserver* observer = *iter;
- if (service_name.empty())
- {
- observer->changed(mModifyMask);
- }
- else
- {
- observer->mMessageName = service_name;
- observer->changed(mModifyMask);
- }
+ observer->changed(mModifyMask);
// safe way to increment since changed may delete entries! (@!##%@!@&*!)
iter = mObservers.upper_bound(observer);
@@ -1187,7 +1178,7 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
{
changes |= gInventory.updateItem(*it);
}
- gInventory.notifyObservers("fetchinventory");
+ gInventory.notifyObservers();
gViewerWindow->getWindow()->decBusyCount();
}
@@ -1196,7 +1187,7 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str
{
llinfos << "fetchInventory::error "
<< status << ": " << reason << llendl;
- gInventory.notifyObservers("fetchinventory");
+ gInventory.notifyObservers();
}
bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index f6728fd575..15da09990f 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -425,9 +425,8 @@ public:
// has been indicated.
void idleNotifyObservers();
- // Call to explicitly update everyone on a new state. The optional argument
- // 'service_name' is used by Agent Inventory Service [DEV-20328]
- void notifyObservers(const std::string service_name="");
+ // Call to explicitly update everyone on a new state.
+ void notifyObservers();
// Allows outsiders to tell the inventory if something has
// been changed 'under the hood', but outside the control of the
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index e31360fcbc..7b1ff102e7 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -388,7 +388,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
titem->setParent(lost_uuid);
titem->updateParentOnServer(FALSE);
gInventory.updateItem(titem);
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
}
@@ -464,7 +464,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
fetcher->setAllFoldersFetched();
}
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
// If we get back an error (not found, etc...), handle it here.
@@ -496,7 +496,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str
fetcher->setAllFoldersFetched();
}
}
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 0fd4b2bee5..6bf19e346d 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -572,16 +572,7 @@ void LLInventoryAddedObserver::changed(U32 mask)
// the network, figure out which item was updated.
LLMessageSystem* msg = gMessageSystem;
- std::string msg_name;
- if (mMessageName.empty())
- {
- msg_name = msg->getMessageName();
- }
- else
- {
- msg_name = mMessageName;
- }
-
+ std::string msg_name = msg->getMessageName();
if (msg_name.empty())
{
return;
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index f2a2049a51..2d9021961e 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -63,7 +63,6 @@ public:
LLInventoryObserver();
virtual ~LLInventoryObserver();
virtual void changed(U32 mask) = 0;
- std::string mMessageName; // used by Agent Inventory Service only. [DEV-20328]
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 7820ac3ecd..979d96ca0d 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -81,6 +81,9 @@ const S32 MAX_PASSWORD = 16;
LLPanelLogin *LLPanelLogin::sInstance = NULL;
BOOL LLPanelLogin::sCapslockDidNotification = FALSE;
+// Helper for converting a user name into the canonical "Firstname Lastname" form.
+// For new accounts without a last name "Resident" is added as a last name.
+static std::string canonicalize_username(const std::string& name);
class LLLoginRefreshHandler : public LLCommandHandler
{
@@ -302,7 +305,14 @@ void LLPanelLogin::addFavoritesToStartLocation()
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
{
- if(iter->first != getChild<LLComboBox>("username_combo")->getSimple()) continue;
+ std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple();
+
+ // The account name in stored_favorites.xml has Resident last name even if user has
+ // a single word account name, so it can be compared case-insensitive with the
+ // user defined "firstname lastname".
+ S32 res = LLStringUtil::compareInsensitive(canonicalize_username(user_defined_name), iter->first);
+ if (res != 0) continue;
+
combo->addSeparator();
LLSD user_llsd = iter->second;
for (LLSD::array_const_iterator iter1 = user_llsd.beginArray();
@@ -1186,3 +1196,28 @@ void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& n
break;
}
}
+
+std::string canonicalize_username(const std::string& name)
+{
+ std::string cname = name;
+ LLStringUtil::trim(cname);
+
+ // determine if the username is a first/last form or not.
+ size_t separator_index = cname.find_first_of(" ._");
+ std::string first = cname.substr(0, separator_index);
+ std::string last;
+ if (separator_index != cname.npos)
+ {
+ last = cname.substr(separator_index+1, cname.npos);
+ LLStringUtil::trim(last);
+ }
+ else
+ {
+ // ...on Linden grids, single username users as considered to have
+ // last name "Resident"
+ last = "Resident";
+ }
+
+ // Username in traditional "firstname lastname" form.
+ return first + ' ' + last;
+}
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
index 968e62a8c3..23fa0cbd9c 100644
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -121,7 +121,8 @@ protected:
return mCharacter->getVisualParamWeight(param_name.c_str());
}
void setParamValue(LLViewerVisualParam *param,
- const F32 new_value_local);
+ const F32 new_value_local,
+ F32 behavior_maxeffect);
F32 toLocal(const LLVector3 &world);
F32 calculateVelocity_local(const F32 time_delta);
@@ -472,9 +473,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
F32 behavior_maxeffect = getParamValue("MaxEffect");
if (physics_test)
behavior_maxeffect = 1.0f;
- // Maximum effect is [0,1] range.
- const F32 min_val = 0.5f-behavior_maxeffect/2.0;
- const F32 max_val = 0.5f+behavior_maxeffect/2.0;
// mPositon_local should be in normalized 0,1 range already. Just making sure...
F32 position_current_local = llclamp(mPosition_local,
@@ -572,12 +570,12 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
position_new_local = position_user_local;
// Zero out the velocity if the param is being pushed beyond its limits.
- if ((position_new_local < min_val && velocity_new_local < 0) ||
- (position_new_local > max_val && velocity_new_local > 0))
+ if ((position_new_local < 0 && velocity_new_local < 0) ||
+ (position_new_local > 1 && velocity_new_local > 0))
{
velocity_new_local = 0;
}
-
+
// Check for NaN values. A NaN value is detected if the variables doesn't equal itself.
// If NaN, then reset everything.
if ((mPosition_local != mPosition_local) ||
@@ -595,8 +593,8 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
}
const F32 position_new_local_clamped = llclamp(position_new_local,
- min_val,
- max_val);
+ 0.0f,
+ 1.0f);
LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver);
llassert_always(driver_param);
@@ -617,7 +615,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
{
LLDrivenEntry &entry = (*iter);
LLViewerVisualParam *driven_param = entry.mParam;
- setParamValue(driven_param,position_new_local_clamped);
+ setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect);
}
}
@@ -699,12 +697,19 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
// Range of new_value_local is assumed to be [0 , 1] normalized.
void LLPhysicsMotion::setParamValue(LLViewerVisualParam *param,
- F32 new_value_normalized)
+ F32 new_value_normalized,
+ F32 behavior_maxeffect)
{
const F32 value_min_local = param->getMinWeight();
const F32 value_max_local = param->getMaxWeight();
+ const F32 min_val = 0.5f-behavior_maxeffect/2.0;
+ const F32 max_val = 0.5f+behavior_maxeffect/2.0;
- const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_normalized;
+ // Scale from [0,1] to [min_val,max_val]
+ const F32 new_value_rescaled = min_val + (max_val-min_val) * new_value_normalized;
+
+ // Scale from [0,1] to [value_min_local,value_max_local]
+ const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_rescaled;
mCharacter->setVisualParamWeight(param,
new_value_local,
diff --git a/indra/newview/llsidetraylistener.cpp b/indra/newview/llsidetraylistener.cpp
index 6db13e517d..cd6fa28948 100644
--- a/indra/newview/llsidetraylistener.cpp
+++ b/indra/newview/llsidetraylistener.cpp
@@ -4,8 +4,25 @@
* @date 2011-02-15
* @brief Implementation for llsidetraylistener.
*
- * $LicenseInfo:firstyear=2011&license=lgpl$
- * Copyright (c) 2011, Linden Research, Inc.
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/llsidetraylistener.h b/indra/newview/llsidetraylistener.h
index 0dd2067433..51e2137762 100644
--- a/indra/newview/llsidetraylistener.h
+++ b/indra/newview/llsidetraylistener.h
@@ -4,8 +4,25 @@
* @date 2011-02-15
* @brief
*
- * $LicenseInfo:firstyear=2011&license=lgpl$
- * Copyright (c) 2011, Linden Research, Inc.
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index e7b5c13860..cb49976e5f 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -310,7 +310,7 @@ void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD&
S32 new_text_left = mChiclet->getRect().mRight + CHICLET_HPAD;
LLRect text_rect = text->getRect();
text_rect.mLeft = new_text_left;
- text->setRect(text_rect);
+ text->setShape(text_rect);
}
//---------------------------------------------------------------------------------
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 519514d99c..42750f8b3f 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1450,6 +1450,9 @@ private:
void saveFavoritesSLURLs();
+ // Remove record of current user's favorites from file on disk.
+ void removeFavoritesRecordOfUser();
+
void onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark);
void storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl);
@@ -1534,6 +1537,10 @@ void LLFavoritesOrderStorage::destroyClass()
{
LLFavoritesOrderStorage::instance().saveFavoritesSLURLs();
}
+ else
+ {
+ LLFavoritesOrderStorage::instance().removeFavoritesRecordOfUser();
+ }
}
void LLFavoritesOrderStorage::load()
@@ -1602,6 +1609,28 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
LLSDSerialize::toPrettyXML(fav_llsd, file);
}
+void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()
+{
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ LLSD fav_llsd;
+ llifstream file;
+ file.open(filename);
+ if (!file.is_open()) return;
+ LLSDSerialize::fromXML(fav_llsd, file);
+
+ LLAvatarName av_name;
+ LLAvatarNameCache::get( gAgentID, &av_name );
+ if (fav_llsd.has(av_name.getLegacyName()))
+ {
+ fav_llsd.erase(av_name.getLegacyName());
+ }
+
+ llofstream out_file;
+ out_file.open(filename);
+ LLSDSerialize::toPrettyXML(fav_llsd, out_file);
+
+}
+
void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark)
{
if (!landmark) return;
diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp
index f933be4d8f..9e95604712 100644
--- a/indra/newview/llwearabletype.cpp
+++ b/indra/newview/llwearabletype.cpp
@@ -144,6 +144,7 @@ BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)
{
const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
const WearableEntry *entry = dict->lookup(type);
+ if (!entry) return FALSE;
return entry->mDisableCameraSwitch;
}
@@ -152,6 +153,7 @@ BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)
{
const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
const WearableEntry *entry = dict->lookup(type);
+ if (!entry) return FALSE;
return entry->mAllowMultiwear;
}
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 51610c0ae0..a5115b0faa 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3113,6 +3113,16 @@
function="ToggleControl"
parameter="ImagePipelineUseHTTP" />
</menu_item_check>
+ <menu_item_check
+ label="HTTP Inventory"
+ name="HTTP Inventory">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="UseHTTPInventory" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="UseHTTPInventory" />
+ </menu_item_check>
<menu_item_call
label="Compress Images"
name="Compress Images">
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f0b1973fdf..f671c770ea 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -939,9 +939,9 @@ class Linux_i686Manifest(LinuxManifest):
self.path("libdb-5.1.so")
self.path("libdb-5.so")
self.path("libdb.so")
- self.path("libcrypto.so.0.9.8")
+ self.path("libcrypto.so.1.0.0")
self.path("libexpat.so.1.5.2")
- self.path("libssl.so.0.9.8")
+ self.path("libssl.so.1.0.0")
self.path("libuuid.so")
self.path("libuuid.so.16")
self.path("libuuid.so.16.0.22")
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index e9d4d99753..7164934b26 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -2233,7 +2233,13 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
case MEDIA_EVENT_LINK_HOVERED:
{
std::cerr << "Media event: MEDIA_EVENT_LINK_HOVERED, hover text is: " << self->getHoverText() << std::endl;
- };
+ }
+ break;
+
+ default:
+ {
+ std::cerr << "Media event: <unknown>, code is: " << int(event) << std::endl;
+ }
break;
}
}