From ccb914ea83c3ad6eaac5902317d8ce6d34384a4f Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Sun, 15 Jul 2012 17:45:50 -0400 Subject: [PATCH 1/4] General cleanup of OSX support - not done Updated with new cursors from LL Corrected mispackaged OSX Libs Corrected mouse flicker on menus Signed-off-by: Drake Arconis --- indra/cmake/00-Common.cmake | 25 +- indra/cmake/JPEG.cmake | 4 +- indra/cmake/JsonCpp.cmake | 2 +- indra/cmake/Linking.cmake | 6 +- indra/cmake/OpenSSL.cmake | 6 +- indra/cmake/Variables.cmake | 47 ++-- indra/llrender/llgl.cpp | 2 +- indra/llrender/llgl.h | 1 + indra/llrender/llglheaders.h | 7 +- indra/llrender/llshadermgr.cpp | 5 +- indra/llwindow/llmousehandler.h | 3 + indra/llwindow/llwindow.cpp | 3 +- indra/llwindow/llwindow.h | 5 +- indra/llwindow/llwindowcallbacks.h | 1 - indra/llwindow/llwindowheadless.h | 2 +- indra/llwindow/llwindowmacosx-objc.mm | 7 + indra/llwindow/llwindowmacosx.cpp | 242 +++++++++--------- indra/llwindow/llwindowmacosx.h | 2 +- indra/llwindow/llwindowmesaheadless.h | 2 +- indra/llwindow/llwindowsdl.cpp | 55 ++-- indra/llwindow/llwindowsdl.h | 4 +- indra/llwindow/llwindowwin32.cpp | 36 ++- indra/llwindow/llwindowwin32.h | 2 +- indra/newview/CMakeLists.txt | 43 ++-- .../newview/cursors_mac/UI_CURSOR_TOOLBUY.tif | Bin 14776 -> 59044 bytes .../cursors_mac/UI_CURSOR_TOOLOPEN.tif | Bin 15144 -> 58560 bytes .../newview/cursors_mac/UI_CURSOR_TOOLSIT.tif | Bin 15176 -> 58464 bytes indra/newview/res/toolbuy.cur | Bin 2238 -> 4286 bytes indra/newview/res/toolopen.cur | Bin 2238 -> 4286 bytes indra/newview/res/toolsit.cur | Bin 2238 -> 4286 bytes indra/newview/viewer_manifest.py | 16 +- indra/plugins/webkit/CMakeLists.txt | 4 +- indra/test_apps/llplugintest/CMakeLists.txt | 4 +- install.xml | 16 +- 34 files changed, 296 insertions(+), 256 deletions(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index d7a2ec8c9..9006b2247 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -269,14 +269,23 @@ if (DARWIN) add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE) set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") - # NOTE: it's critical that the optimization flag is put in front. - # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + if(${CMAKE_C_COMPILER} MATCHES "gcc*") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") + # NOTE: it's critical that the optimization flag is put in front. + # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + elseif(${CMAKE_C_COMPILER} MATCHES "clang*") + # NOTE: it's critical that the optimization flag is put in front. + # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3") + endif() endif (DARWIN) diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake index f3e5753a6..5c55aedbb 100644 --- a/indra/cmake/JPEG.cmake +++ b/indra/cmake/JPEG.cmake @@ -13,8 +13,8 @@ else (STANDALONE) set(JPEG_LIBRARIES jpeg) elseif (DARWIN) set(JPEG_LIBRARIES - optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a - debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a + optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libjpeg.a + debug ${ARCH_PREBUILT_DIRS_DEBUG}/libjpeg.a ) elseif (WINDOWS) set(JPEG_LIBRARIES jpeglib) diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake index 856034955..241db3570 100644 --- a/indra/cmake/JsonCpp.cmake +++ b/indra/cmake/JsonCpp.cmake @@ -14,7 +14,7 @@ else (STANDALONE) debug json_vc${MSVC_SUFFIX}d optimized json_vc${MSVC_SUFFIX}) elseif (DARWIN) - set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt) + set(JSONCPP_LIBRARIES json_linux-gcc-4.0.1_libmt) elseif (LINUX) set(JSONCPP_LIBRARIES jsoncpp) endif (WINDOWS) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 70d005d33..4b34ff47d 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -10,9 +10,9 @@ if (NOT STANDALONE) set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS}) set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS}) elseif (DARWIN) - set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) - set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) - set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE}) + set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib) + set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release) + set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug) endif (WINDOWS) endif (NOT STANDALONE) diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake index 81584c09e..60cd40c8b 100644 --- a/indra/cmake/OpenSSL.cmake +++ b/indra/cmake/OpenSSL.cmake @@ -16,8 +16,6 @@ else (STANDALONE) set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) endif (STANDALONE) -if (LINUX) +if (LINUX OR DARWIN) set(CRYPTO_LIBRARIES crypto) -elseif (DARWIN) - set(CRYPTO_LIBRARIES llcrypto) -endif (LINUX) +endif (LINUX OR DARWIN) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 964c9d684..c6035597f 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -76,37 +76,36 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(DARWIN 1) - #SDK Compiler and Deployment targets for XCode - if (${XCODE_VERSION} VERSION_LESS 4.0.0) - set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) - set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2") - else (${XCODE_VERSION} VERSION_LESS 4.0.0) + if(${CMAKE_GENERATOR} MATCHES Xcode) + #SDK Compiler and Deployment targets for XCode + if (${XCODE_VERSION} VERSION_LESS 4.0.0) + set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5) + set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2") + else (${XCODE_VERSION} VERSION_LESS 4.0.0) + set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk) + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6) + set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42") + endif (${XCODE_VERSION} VERSION_LESS 4.0.0) + else() set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk) + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6) set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42") - endif (${XCODE_VERSION} VERSION_LESS 4.0.0) + endif(${CMAKE_GENERATOR} MATCHES Xcode) - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5) + ## We currently support only 32-bit i386 builds, so use these: + set(CMAKE_OSX_ARCHITECTURES i386) + set(ARCH i386) + set(WORD_SIZE 32) - # NOTE: To attempt an i386/PPC Universal build, add this on the configure line: - # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' - # Build only for i386 by default, system default on MacOSX 10.6 is x86_64 - if (NOT CMAKE_OSX_ARCHITECTURES) - set(CMAKE_OSX_ARCHITECTURES i386) - endif (NOT CMAKE_OSX_ARCHITECTURES) - - if (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") - set(ARCH universal) - else (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") - if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") - set(ARCH ppc) - else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") - set(ARCH i386) - endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc") - endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") + ## But if you want to compile for mixed 32/64 bit, try these: + # set(CMAKE_OSX_ARCHITECTURES i386;x86_64) + # set(ARCH universal) + # set(WORD_SIZE 64) + ## Finally, set up the build output directories set(LL_ARCH ${ARCH}_darwin) set(LL_ARCH_DIR universal-darwin) - set(WORD_SIZE 32) endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 92d095b80..4603fba08 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -956,7 +956,7 @@ void LLGLManager::initExtensions() mHasFramebufferMultisample = mHasFramebufferObject && ExtensionExists("GL_EXT_framebuffer_multisample", gGLHExts.mSysExts); mHasMipMapGeneration = mHasFramebufferObject || mGLVersion >= 1.4f; - + mHasDrawBuffers = ExtensionExists("GL_ARB_draw_buffers", gGLHExts.mSysExts); mHasBlendFuncSeparate = ExtensionExists("GL_EXT_blend_func_separate", gGLHExts.mSysExts); mHasTextureRectangle = ExtensionExists("GL_ARB_texture_rectangle", gGLHExts.mSysExts); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 06f6155c9..cd2aec306 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -521,4 +521,5 @@ extern BOOL gGLActive; #ifndef GL_DEPTH24_STENCIL8 #define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_EXT #endif + #endif // LL_LLGL_H diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index 9e3d9b96f..c5823044d 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -278,7 +278,7 @@ extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT; # include "GL/glh_extensions.h" # undef __APPLE__ -#elif LL_LINUX +#elif LL_LINUX //---------------------------------------------------------------------------- // Linux, MESA headers, but not necessarily assuming MESA runtime. // quotes so we get libraries/.../GL/ version @@ -783,6 +783,7 @@ extern PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB; extern PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB; extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB; extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB; + #elif LL_DARWIN //---------------------------------------------------------------------------- // LL_DARWIN @@ -825,6 +826,7 @@ extern void glGenerateMipmapEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_A #define glGenerateMipmap glGenerateMipmapEXT #define GL_MAX_SAMPLES 0x8D57 #endif + // GL_ARB_draw_buffers extern void glDrawBuffersARB(GLsizei n, const GLenum* bufs) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; @@ -997,7 +999,7 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); } #endif -#include +#include #endif // LL_MESA / LL_WINDOWS / LL_DARWIN @@ -1029,4 +1031,5 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #endif + #endif // LL_LLGLHEADERS_H diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 0c17fbfb5..ade7480d2 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -231,7 +231,6 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) if (features->hasLighting) { - if (features->hasWaterFog) { if (features->disableTextureIndex) @@ -308,7 +307,7 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) } shader->mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1); } - } + } } // NOTE order of shader object attaching is VERY IMPORTANT!!! @@ -571,7 +570,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade return 0; } - //we can't have any lines longer than 1024 characters + //we can't have any lines longer than 1024 characters //or any shaders longer than 4096 lines... deal - DaveP GLcharARB buff[1024]; GLcharARB* text[4096]; diff --git a/indra/llwindow/llmousehandler.h b/indra/llwindow/llmousehandler.h index 7bd0f2eeb..2163b54e5 100644 --- a/indra/llwindow/llmousehandler.h +++ b/indra/llwindow/llmousehandler.h @@ -45,17 +45,20 @@ class LLMouseHandler public: LLMouseHandler() {} virtual ~LLMouseHandler() {} + typedef enum { SHOW_NEVER, SHOW_IF_NOT_BLOCKED, SHOW_ALWAYS, } EShowToolTip; + typedef enum { CLICK_LEFT, CLICK_MIDDLE, CLICK_RIGHT, CLICK_DOUBLELEFT } EClickType; + virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down); virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0; virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0; diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index 615247893..f3e28cd26 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -113,6 +113,7 @@ LLWindow::LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags) mSupportedResolutions(NULL), mNumSupportedResolutions(0), mCurrentCursor(UI_CURSOR_ARROW), + mNextCursor(UI_CURSOR_ARROW), mCursorHidden(FALSE), mBusyCount(0), mIsMouseClipping(FALSE), @@ -125,7 +126,6 @@ LLWindow::LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags) LLWindow::~LLWindow() { - } //virtual @@ -139,6 +139,7 @@ BOOL LLWindow::canDelete() { return TRUE; } + // virtual void LLWindow::incBusyCount() { diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index 99d052521..82e9e190a 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -104,12 +104,14 @@ public: virtual S32 getBusyCount() const; // Sets cursor, may set to arrow+hourglass - virtual void setCursor(ECursorType cursor) = 0; + virtual void setCursor(ECursorType cursor) { mNextCursor = cursor; }; virtual ECursorType getCursor() const; + virtual void updateCursor() = 0; virtual void captureMouse() = 0; virtual void releaseMouse() = 0; virtual void setMouseClipping( BOOL b ) = 0; + virtual BOOL isClipboardTextAvailable() = 0; virtual BOOL pasteTextFromClipboard(LLWString &dst) = 0; virtual BOOL copyTextToClipboard(const LLWString &src) = 0; @@ -196,6 +198,7 @@ protected: LLWindowResolution* mSupportedResolutions; S32 mNumSupportedResolutions; ECursorType mCurrentCursor; + ECursorType mNextCursor; BOOL mCursorHidden; S32 mBusyCount; // how deep is the "cursor busy" stack? BOOL mIsMouseClipping; // Is this window currently clipping the mouse diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h index 804d4f7d8..7da595970 100644 --- a/indra/llwindow/llwindowcallbacks.h +++ b/indra/llwindow/llwindowcallbacks.h @@ -91,5 +91,4 @@ public: }; - #endif diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h index 59fc2ec65..b73c349f9 100644 --- a/indra/llwindow/llwindowheadless.h +++ b/indra/llwindow/llwindowheadless.h @@ -61,7 +61,7 @@ public: /*virtual*/ void showCursorFromMouseMove() {}; /*virtual*/ void hideCursorUntilMouseMove() {}; /*virtual*/ BOOL isCursorHidden() {return FALSE;}; - /*virtual*/ void setCursor(ECursorType cursor) {}; + /*virtual*/ void updateCursor() {}; //virtual ECursorType getCursor() { return mCurrentCursor; }; /*virtual*/ void captureMouse() {}; /*virtual*/ void releaseMouse() {}; diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index da01c2afe..4ce225ca3 100644 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -50,6 +50,11 @@ void setupCocoa() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + // The following prevents the Cocoa command line parser from trying to open 'unknown' arguements as documents. + // ie. running './secondlife -set Language fr' would cause a pop-up saying can't open document 'fr' + // when init'ing the Cocoa App window. + [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"]; + // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor": // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html @@ -60,6 +65,8 @@ void setupCocoa() [[[NSWindow alloc] init] release]; [pool release]; + + inited = true; } } diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 06d7f237e..08a4fab67 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -226,10 +226,10 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, // Route them to a dummy callback structure until the end of constructor. LLWindowCallbacks null_callbacks; mCallbacks = &null_callbacks; - + // Voodoo for calling cocoa from carbon (see llwindowmacosx-objc.mm). setupCocoa(); - + // Initialize the keyboard gKeyboard = new LLKeyboardMacOSX(); gKeyboard->setCallbacks(callbacks); @@ -260,10 +260,10 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, mRawKeyEvent = NULL; mFSAASamples = fsaa_samples; mForceRebuild = FALSE; - + // For reasons that aren't clear to me, LLTimers seem to be created in the "started" state. // Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state. - mBounceTimer.stop(); + mBounceTimer.stop(); // Get the original aspect ratio of the main device. mOriginalAspectRatio = (double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay); @@ -276,7 +276,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator); mGlobalHandlerRef = NULL; mWindowHandlerRef = NULL; - + mDragOverrideCursor = -1; // We're not clipping yet @@ -451,7 +451,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits mFullscreenBits = -1; mFullscreenRefresh = -1; - std::string error= llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height); + std::string error= llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height); OSMessageBox(error, "Error", OSMB_OK); } } @@ -484,7 +484,6 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits true, (long)this); - if (!mWindow) { setupFailure("Window creation error", "Error", OSMB_OK); @@ -500,7 +499,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits InstallStandardEventHandler(GetWindowEventTarget(mWindow)); InstallWindowEventHandler(mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler #if LL_OS_DRAGDROP_ENABLED - InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this ); + InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this ); InstallReceiveHandler( dragReceiveHandler, mWindow, (void*)this ); #endif // LL_OS_DRAGDROP_ENABLED } @@ -581,16 +580,16 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits AGL_NO_RECOVERY, AGL_DOUBLEBUFFER, AGL_CLOSEST_POLICY, - AGL_ACCELERATED, - AGL_SAMPLE_BUFFERS_ARB, mFSAASamples > 0 ? 1 : 0, - AGL_SAMPLES_ARB, mFSAASamples, - AGL_RED_SIZE, 8, - AGL_GREEN_SIZE, 8, - AGL_BLUE_SIZE, 8, - AGL_ALPHA_SIZE, 8, - AGL_DEPTH_SIZE, 24, - AGL_STENCIL_SIZE, 8, - AGL_NONE + AGL_ACCELERATED, + AGL_SAMPLE_BUFFERS_ARB, mFSAASamples > 0 ? 1 : 0, + AGL_SAMPLES_ARB, mFSAASamples, + AGL_RED_SIZE, 8, + AGL_GREEN_SIZE, 8, + AGL_BLUE_SIZE, 8, + AGL_ALPHA_SIZE, 8, + AGL_DEPTH_SIZE, 24, + AGL_STENCIL_SIZE, 8, + AGL_NONE }; LL_DEBUGS("Window") << "createContext: creating windowed pixelformat" << LL_ENDL; @@ -797,7 +796,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits LL_DEBUGS("GLinit") << "Keeping vertical sync" << LL_ENDL; frames_per_swap = 1; } - aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap); + aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap); //enable multi-threaded OpenGL if (sUseMultGL) @@ -810,7 +809,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits if (cgl_err != kCGLNoError ) { LL_DEBUGS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL; - } + } else { LL_DEBUGS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL; @@ -1042,6 +1041,7 @@ void LLWindowMacOSX::hide() HideWindow(mWindow); } +//virtual void LLWindowMacOSX::minimize() { setMouseClipping(FALSE); @@ -1049,6 +1049,7 @@ void LLWindowMacOSX::minimize() CollapseWindow(mWindow, true); } +//virtual void LLWindowMacOSX::restore() { show(); @@ -1114,7 +1115,7 @@ BOOL LLWindowMacOSX::maximize() { ZoomWindow(mWindow, inContent, true); } - + return mMaximized; } @@ -1169,6 +1170,8 @@ void LLWindowMacOSX::gatherInput() } } + + updateCursor(); } BOOL LLWindowMacOSX::getPosition(LLCoordScreen *position) @@ -1437,11 +1440,11 @@ static void fixOrigin(void) GrafPtr port; Rect portrect; - ::GetPort(&port); + ::GetPort(&port); ::GetPortBounds(port, &portrect); if((portrect.left != 0) || (portrect.top != 0)) { - // Mozilla sometimes changes our port origin. Fuckers. + // Mozilla sometimes changes our port origin. ::SetOrigin(0,0); } } @@ -1451,17 +1454,17 @@ BOOL LLWindowMacOSX::getCursorPosition(LLCoordWindow *position) Point cursor_point; LLCoordScreen screen_pos; GrafPtr save; - + if(mWindow == NULL) return FALSE; - + ::GetPort(&save); ::SetPort(GetWindowPort(mWindow)); fixOrigin(); // gets the mouse location in local coordinates ::GetMouse(&cursor_point); - + // lldebugs << "getCursorPosition(): cursor is at " << cursor_point.h << ", " << cursor_point.v << " port origin: " << portrect.left << ", " << portrect.top << llendl; ::SetPort(save); @@ -1526,7 +1529,7 @@ F32 LLWindowMacOSX::getNativeAspectRatio() { // The constructor for this class grabs the aspect ratio of the monitor before doing any resolution // switching, and stashes it in mOriginalAspectRatio. Here, we just return it. - + if (mOverrideAspectRatio > 0.f) { return mOverrideAspectRatio; @@ -2001,7 +2004,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e if (mPreeditor && (result = GetEventParameter(event, kEventParamTextInputSendFixLen, typeLongInteger, ¶m_type, sizeof(fix_len), NULL, &fix_len)) == noErr - && typeLongInteger == param_type + && typeLongInteger == param_type && (result = GetEventParameter(event, kEventParamTextInputSendText, typeUnicodeText, ¶m_type, 0, &text_len, NULL)) == noErr && typeUnicodeText == param_type) @@ -2021,7 +2024,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e mPreeditor->markAsPreedit(location, length); } mPreeditor->resetPreedit(); - + // Receive the text from input method. U16 *const text = new U16[text_len / sizeof(U16)]; GetEventParameter(event, kEventParamTextInputSendText, typeUnicodeText, NULL, text_len, NULL, text); @@ -2060,11 +2063,11 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e GetEventParameter(event, kEventParamTextInputSendHiliteRng, typeTextRangeArray, NULL, text_range_array_size, NULL, text_range_array); - // WARNING: We assume ranges are in ascending order, + // WARNING: We assume ranges are in ascending order, // although the condition is undocumented. It seems // OK to assume this. I also assumed // the ranges are contiguous in previous versions, but I - // have heard a rumore that older versions os ATOK may + // have heard a rumore that older versions os ATOK may // return ranges with some _gap_. I don't know whether // it is true, but I'm preparing my code for the case. @@ -2128,15 +2131,16 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e } } break; - + case kEventTextInputUnicodeForKeyEvent: { UInt32 modifiers = 0; + // First, process the raw event. { EventRef rawEvent = NULL; - + // Get the original event and extract the modifier keys, so we can ignore command-key events. if (GetEventParameter(event, kEventParamTextInputSendKeyboardEvent, typeEventRef, NULL, sizeof(rawEvent), NULL, &rawEvent) == noErr) { @@ -2145,7 +2149,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e // and call this function recursively to handle the raw key event. eventHandler (myHandler, rawEvent); - + // save the raw event until we're done processing the unicode input as well. mRawKeyEvent = rawEvent; } @@ -2176,7 +2180,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e else { MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); - + llassert( actualType == typeUnicodeText ); // The result is a UTF16 buffer. Pass the characters in turn to handleUnicodeChar. @@ -2202,7 +2206,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e result = err; } break; - + case kEventTextInputOffsetToPos: { EventParamType param_type; @@ -2215,7 +2219,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e S32 preedit, preedit_length; mPreeditor->getPreeditRange(&preedit, &preedit_length); const LLWString & text = mPreeditor->getPreeditString(); - + LLCoordGL caret_coord; LLRect preedit_bounds; if (0 <= offset @@ -2229,10 +2233,10 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e qd_point.h = caret_base_coord_screen.mX; qd_point.v = caret_base_coord_screen.mY; SetEventParameter(event, kEventParamTextInputReplyPoint, typeQDPoint, sizeof(qd_point), &qd_point); - + short line_height = (short) preedit_bounds.getHeight(); SetEventParameter(event, kEventParamTextInputReplyLineHeight, typeShortInteger, sizeof(line_height), &line_height); - + result = noErr; } else @@ -2285,7 +2289,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e case kEventRawKeyRepeat: if (gDebugWindowProc) { - printf("key down, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n", + printf("key down, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n", (unsigned int)keyCode, charCode, (char)charCode, (unsigned int)modifiers); fflush(stdout); } @@ -2296,7 +2300,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e case kEventRawKeyUp: if (gDebugWindowProc) { - printf("key up, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n", + printf("key up, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n", (unsigned int)keyCode, charCode, (char)charCode, (unsigned int)modifiers); fflush(stdout); } @@ -2354,7 +2358,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e } // When the state of the 'Fn' key (the one that changes some of the mappings on a powerbook/macbook keyboard - // to an embedded keypad) changes, it may subsequently cause a key up event to be lost, which may lead to + // to an embedded keypad) changes, it may subsequently cause a key up event to be lost, which may lead to // a movement key getting "stuck" down. This is bad. // This is an OS bug -- even the GetKeys() API doesn't tell you the key has been released. // This workaround causes all held-down keys to be reset whenever the state of the Fn key changes. This isn't @@ -2364,14 +2368,14 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e if (gDebugWindowProc) printf("Fn key state change event\n"); gKeyboard->resetKeys(); } - + if (gDebugWindowProc) fflush(stdout); mLastModifiers = modifiers; result = eventNotHandledErr; break; } - + mRawKeyEvent = NULL; } break; @@ -2466,7 +2470,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e case kEventMouseButtonSecondary: mCallbacks->handleRightMouseDown(this, outCoords, mask); break; - + case kEventMouseButtonTertiary: mCallbacks->handleMiddleMouseDown(this, outCoords, mask); break; @@ -2528,7 +2532,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e case kEventClassWindow: switch(evtKind) - { + { case kEventWindowActivated: if (mTSMDocument) { @@ -2543,7 +2547,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e } mCallbacks->handleFocusLost(this); break; - + case kEventWindowBoundsChanging: { // This is where we would constrain move/resize to a particular screen @@ -2553,7 +2557,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e GetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, ¤tBounds); GetEventParameter(event, kEventParamPreviousBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &previousBounds); - + // Put an offset into window un-maximize operation since the kEventWindowGetIdealSize // event only allows the specification of size and not position. if (mMaximized) @@ -2561,7 +2565,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e short leftOffset = mPreviousWindowRect.left - currentBounds.left; currentBounds.left += leftOffset; currentBounds.right += leftOffset; - + short topOffset = mPreviousWindowRect.top - currentBounds.top; currentBounds.top += topOffset; currentBounds.bottom += topOffset; @@ -2581,7 +2585,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e { currentBounds.bottom = currentBounds.top + MIN_WINDOW_HEIGHT; } - + SetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, sizeof(Rect), ¤tBounds); result = noErr; } @@ -2592,38 +2596,38 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e // Get new window bounds Rect newBounds; GetEventParameter(event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &newBounds); - + // Get previous window bounds Rect oldBounds; GetEventParameter(event, kEventParamPreviousBounds, typeQDRectangle, NULL, sizeof(Rect), NULL, &oldBounds); - + // Determine if the new size is larger than the old bool newBoundsLarger = ((newBounds.right - newBounds.left) >= (oldBounds.right - oldBounds.left)); newBoundsLarger &= ((newBounds.bottom - newBounds.top) >= (oldBounds.bottom - oldBounds.top)); - + // Check to see if this is a zoom event (+ button on window pane) unsigned int eventParams; GetEventParameter(event, kEventParamAttributes, typeUInt32, NULL, sizeof(int), NULL, &eventParams); bool isZoomEvent = ((eventParams & kWindowBoundsChangeZoom) != 0); - + // Maximized flag is if zoom event and increasing window size mMaximized = (isZoomEvent && newBoundsLarger); - + aglUpdateContext(mContext); - + mCallbacks->handleResize(this, newBounds.right - newBounds.left, newBounds.bottom - newBounds.top); } break; - + case kEventWindowGetIdealSize: // Only recommend a new ideal size when un-maximizing if (mMaximized == TRUE) { Point nonMaximizedSize; - + nonMaximizedSize.v = mPreviousWindowRect.bottom - mPreviousWindowRect.top; nonMaximizedSize.h = mPreviousWindowRect.right - mPreviousWindowRect.left; - + SetEventParameter(event, kEventParamDimensions, typeQDPoint, sizeof(Point), &nonMaximizedSize); result = noErr; } @@ -2678,7 +2682,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e if (mPreeditor) { switch(evtKind) - { + { case kEventTSMDocumentAccessGetLength: { @@ -2697,14 +2701,14 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e { // Return the selected range, excluding preedit. // In our preeditor, preedit and selection are exclusive, so, - // when it has a preedit, there is no selection and the + // when it has a preedit, there is no selection and the // insertion point is on the preedit that corrupses into the // beginning of the preedit when the preedit was removed. S32 preedit, preedit_length; mPreeditor->getPreeditRange(&preedit, &preedit_length); const LLWString & text = mPreeditor->getPreeditString(); - + CFRange range; if (preedit_length) { @@ -2768,7 +2772,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e memcpy(target_pointer, text_utf16.c_str() + range.location, range.length * sizeof(UniChar)); // Note that result has already been set above. - } + } } break; @@ -2815,7 +2819,7 @@ const char* cursorIDToName(int id) case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY"; case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE"; case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN"; - case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE"; + case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE"; case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT"; case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY"; case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN"; @@ -2823,7 +2827,7 @@ const char* cursorIDToName(int id) } llerrs << "cursorIDToName: unknown cursor id" << id << llendl; - + return "UI_CURSOR_ARROW"; } @@ -2839,42 +2843,42 @@ static void initPixmapCursor(int cursorid, int hotspotX, int hotspotY) fullpath += gDirUtilp->getDirDelimiter(); fullpath += cursorIDToName(cursorid); fullpath += ".tif"; - + gCursors[cursorid] = createImageCursor(fullpath.c_str(), hotspotX, hotspotY); } -void LLWindowMacOSX::setCursor(ECursorType cursor) +void LLWindowMacOSX::updateCursor() { OSStatus result = noErr; - if (mDragOverrideCursor != -1) + if (mDragOverrideCursor != -1) { // A drag is in progress...remember the requested cursor and we'll // restore it when it is done - mCurrentCursor = cursor; + mCurrentCursor = mNextCursor; return; } - if (cursor == UI_CURSOR_ARROW + if (mNextCursor == UI_CURSOR_ARROW && mBusyCount > 0) { - cursor = UI_CURSOR_WORKING; + mNextCursor = UI_CURSOR_WORKING; } - if(mCurrentCursor == cursor) + if(mCurrentCursor == mNextCursor) return; // RN: replace multi-drag cursors with single versions - if (cursor == UI_CURSOR_ARROWDRAGMULTI) + if (mNextCursor == UI_CURSOR_ARROWDRAGMULTI) { - cursor = UI_CURSOR_ARROWDRAG; + mNextCursor = UI_CURSOR_ARROWDRAG; } - else if (cursor == UI_CURSOR_ARROWCOPYMULTI) + else if (mNextCursor == UI_CURSOR_ARROWCOPYMULTI) { - cursor = UI_CURSOR_ARROWCOPY; + mNextCursor = UI_CURSOR_ARROWCOPY; } - switch(cursor) + switch(mNextCursor) { default: case UI_CURSOR_ARROW: @@ -2926,7 +2930,7 @@ void LLWindowMacOSX::setCursor(ECursorType cursor) case UI_CURSOR_TOOLBUY: case UI_CURSOR_TOOLOPEN: case UI_CURSOR_TOOLPAY: - result = setImageCursor(gCursors[cursor]); + result = setImageCursor(gCursors[mNextCursor]); break; } @@ -2936,7 +2940,7 @@ void LLWindowMacOSX::setCursor(ECursorType cursor) InitCursor(); } - mCurrentCursor = cursor; + mCurrentCursor = mNextCursor; } ECursorType LLWindowMacOSX::getCursor() const @@ -2967,9 +2971,9 @@ void LLWindowMacOSX::initCursors() initPixmapCursor(UI_CURSOR_TOOLPLAY, 1, 1); initPixmapCursor(UI_CURSOR_TOOLPAUSE, 1, 1); initPixmapCursor(UI_CURSOR_TOOLMEDIAOPEN, 1, 1); - initPixmapCursor(UI_CURSOR_TOOLSIT, 1, 1); - initPixmapCursor(UI_CURSOR_TOOLBUY, 1, 1); - initPixmapCursor(UI_CURSOR_TOOLOPEN, 1, 1); + initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15); + initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15); + initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); initPixmapCursor(UI_CURSOR_TOOLPAY, 1, 1); initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10); @@ -3281,14 +3285,14 @@ void LLWindowMacOSX::setTitle(const std::string &title) LLSD LLWindowMacOSX::getNativeKeyData() { LLSD result = LLSD::emptyMap(); - + if(mRawKeyEvent) { char char_code = 0; UInt32 key_code = 0; UInt32 modifiers = 0; UInt32 keyboard_type = 0; - + GetEventParameter (mRawKeyEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &char_code); GetEventParameter (mRawKeyEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key_code); GetEventParameter (mRawKeyEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers); @@ -3298,7 +3302,7 @@ LLSD LLWindowMacOSX::getNativeKeyData() result["key_code"] = (S32)key_code; result["modifiers"] = (S32)modifiers; result["keyboard_type"] = (S32)keyboard_type; - + #if 0 // This causes trouble for control characters -- apparently character codes less than 32 (escape, control-A, etc) // cause llsd serialization to create XML that the llsd deserializer won't parse! @@ -3307,7 +3311,7 @@ LLSD LLWindowMacOSX::getNativeKeyData() EventParamType actualType = typeUTF8Text; UInt32 actualSize = 0; char *buffer = NULL; - + err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, 0, &actualSize, NULL); if(err == noErr) { @@ -3320,7 +3324,7 @@ LLSD LLWindowMacOSX::getNativeKeyData() } delete[] buffer; } - + result["unicode"] = unicode; #endif @@ -3328,7 +3332,7 @@ LLSD LLWindowMacOSX::getNativeKeyData() lldebugs << "native key data is: " << result << llendl; - + return result; } @@ -3375,17 +3379,17 @@ void *LLWindowMacOSX::getPlatformWindow() void *LLWindowMacOSX::getMediaWindow() { - /* - Mozilla needs to be initialized with a WindowRef to function properly. + /* + Mozilla needs to be initialized with a WindowRef to function properly. (There's no good reason for this, since it shouldn't be interacting with our window in any way, but that's another issue.) - If we're in windowed mode, we _could_ hand it our actual window pointer, but a subsequent switch to fullscreen will destroy that window, + If we're in windowed mode, we _could_ hand it our actual window pointer, but a subsequent switch to fullscreen will destroy that window, which trips up Mozilla. Instead of using our actual window, we create an invisible window which will persist for the lifetime of the application and pass that to Mozilla. This satisfies its deep-seated need to latch onto a WindowRef and solves the issue with switching between fullscreen and windowed modes. Note that we will never destroy this window (by design!), but since only one will ever be created per run of the application, that's okay. */ - + if(sMediaWindow == NULL) { Rect window_rect = {100, 100, 200, 200}; @@ -3394,13 +3398,13 @@ void *LLWindowMacOSX::getMediaWindow() NULL, &window_rect, (ConstStr255Param) "\p", - false, // Create the window invisible. + false, // Create the window invisible. zoomDocProc, // Window with a grow box and a zoom box kLastWindowOfClass, // create it behind other windows false, // no close box 0); } - + return (void*)sMediaWindow; } @@ -3450,7 +3454,7 @@ void LLWindowMacOSX::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) } UseInputWindow(mTSMDocument, !b); - + // Take care of old and new preeditors. if (preeditor != mPreeditor || !b) { @@ -3469,7 +3473,7 @@ void LLWindowMacOSX::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) return; } mLanguageTextInputAllowed = b; - + if (b) { if (mTSMScriptCode != smRoman) @@ -3518,7 +3522,7 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers) if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; } if(modifiers & optionKey) { mask |= MASK_ALT; } return mask; -} +} #if LL_OS_DRAGDROP_ENABLED @@ -3529,53 +3533,53 @@ OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; lldebugs << "drag tracking handler, message = " << message << llendl; - + switch(message) { case kDragTrackingInWindow: result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_TRACK); break; - + case kDragTrackingEnterHandler: result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_START_TRACKING); break; - + case kDragTrackingLeaveHandler: result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_STOP_TRACKING); break; - + default: break; } - + return result; } -OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon, +OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon, DragRef drag) -{ +{ LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; return self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_DROPPED); } OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDropAction action) -{ +{ OSErr result = dragNotAcceptedErr; // overall function result OSErr err = noErr; // for local error handling - + // Get the mouse position and modifiers of this drag. SInt16 modifiers, mouseDownModifiers, mouseUpModifiers; ::GetDragModifiers(drag, &modifiers, &mouseDownModifiers, &mouseUpModifiers); MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); - + Point mouse_point; // This will return the mouse point in global screen coords ::GetDragMouse(drag, &mouse_point, NULL); LLCoordScreen screen_coords(mouse_point.h, mouse_point.v); LLCoordGL gl_pos; convertCoords(screen_coords, &gl_pos); - + // Look at the pasteboard and try to extract an URL from it PasteboardRef pasteboard; if(GetDragPasteboard(drag, &pasteboard) == noErr) @@ -3583,22 +3587,22 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop ItemCount num_items = 0; // Treat an error here as an item count of 0 (void)PasteboardGetItemCount(pasteboard, &num_items); - + // Only deal with single-item drags. if(num_items == 1) { PasteboardItemID item_id = NULL; CFArrayRef flavors = NULL; CFDataRef data = NULL; - + err = PasteboardGetItemIdentifier(pasteboard, 1, &item_id); // Yes, this really is 1-based. - + // Try to extract an URL from the pasteboard if(err == noErr) { err = PasteboardCopyItemFlavors( pasteboard, item_id, &flavors); } - + if(err == noErr) { if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeURL)) @@ -3611,9 +3615,9 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop // This is a string that might be an URL. err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeUTF8PlainText, &data); } - + } - + if(flavors != NULL) { CFRelease(flavors); @@ -3624,12 +3628,12 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop std::string url; url.assign((char*)CFDataGetBytePtr(data), CFDataGetLength(data)); CFRelease(data); - + if(!url.empty()) { - LLWindowCallbacks::DragNDropResult res = + LLWindowCallbacks::DragNDropResult res = mCallbacks->handleDragNDrop(this, gl_pos, mask, action, url); - + switch (res) { case LLWindowCallbacks::DND_NONE: // No drop allowed if (action == LLWindowCallbacks::DNDA_TRACK) @@ -3664,7 +3668,7 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop // Restore the cursor ECursorType temp_cursor = mCurrentCursor; // get around the "setting the same cursor" code in setCursor() - mCurrentCursor = UI_CURSOR_COUNT; + mCurrentCursor = UI_CURSOR_COUNT; setCursor(temp_cursor); } else { @@ -3676,7 +3680,7 @@ OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDrop } } } - + return result; } diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 3096a0aec..c3ec80167 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -73,7 +73,7 @@ public: /*virtual*/ void showCursorFromMouseMove(); /*virtual*/ void hideCursorUntilMouseMove(); /*virtual*/ BOOL isCursorHidden(); - /*virtual*/ void setCursor(ECursorType cursor); + /*virtual*/ void updateCursor(); /*virtual*/ ECursorType getCursor() const; /*virtual*/ void captureMouse(); /*virtual*/ void releaseMouse(); diff --git a/indra/llwindow/llwindowmesaheadless.h b/indra/llwindow/llwindowmesaheadless.h index 06146afde..cb4447232 100644 --- a/indra/llwindow/llwindowmesaheadless.h +++ b/indra/llwindow/llwindowmesaheadless.h @@ -65,7 +65,7 @@ public: /*virtual*/ void showCursorFromMouseMove() {}; /*virtual*/ void hideCursorUntilMouseMove() {}; /*virtual*/ BOOL isCursorHidden() {return FALSE;}; - /*virtual*/ void setCursor(ECursorType cursor) {}; + /*virtual*/ void updateCursor() {}; //virtual ECursorType getCursor() { return mCurrentCursor; }; /*virtual*/ void captureMouse() {}; /*virtual*/ void releaseMouse() {}; diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 369b8ad88..7fb5dea03 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -39,6 +39,7 @@ #include "llwindowcallbacks.h" #include "llkeyboardsdl.h" + #include "llerror.h" #include "llgl.h" #include "llstring.h" @@ -221,15 +222,14 @@ LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks, #endif // LL_X11 #if LL_GTK - // We MUST be the first to initialize GTK, i.e. we have to beat - // our embedded Mozilla to the punch so that GTK doesn't get badly + // We MUST be the first to initialize GTK so that GTK doesn't get badly // initialized with a non-C locale and cause lots of serious random // weirdness. ll_try_gtk_init(); #endif // LL_GTK - // Get the original aspect ratio of the main device. - mOriginalAspectRatio = 1024.0 / 768.0; // !!! *FIX: ? //(double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay); + // Assume 4:3 aspect ratio until we know better + mOriginalAspectRatio = 1024.0 / 768.0; if (title.empty()) mWindowTitle = "SDL Window"; // *FIX: (???) @@ -425,7 +425,6 @@ static int x11_detect_VRAM_kb() BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync) { //bool glneedsinit = false; -// const char *gllibname = null; llinfos << "createContext, fullscreen=" << fullscreen << " size=" << width << "x" << height << llendl; @@ -856,11 +855,13 @@ void LLWindowSDL::hide() // *FIX: What to do with SDL? } +//virtual void LLWindowSDL::minimize() { // *FIX: What to do with SDL? } +//virtual void LLWindowSDL::restore() { // *FIX: What to do with SDL? @@ -1680,12 +1681,13 @@ void check_vm_bloat() } #endif // LL_LINUX } + + // virtual void LLWindowSDL::processMiscNativeEvents() { #if LL_GTK // Pump GTK events to avoid starvation for: - // * Embedded Gecko // * DBUS servicing // * Anything else which quietly hooks into the default glib/GTK loop if (ll_try_gtk_init()) @@ -1721,7 +1723,7 @@ void LLWindowSDL::processMiscNativeEvents() void LLWindowSDL::gatherInput() { - const Uint32 CLICK_THRESHOLD = 500; // milliseconds + const Uint32 CLICK_THRESHOLD = 500; // milliseconds static int leftClick = 0; static int rightClick = 0; static Uint32 lastLeftDown = 0; @@ -1747,16 +1749,17 @@ void LLWindowSDL::gatherInput() mKeyScanCode = event.key.keysym.scancode; mKeyVirtualKey = event.key.keysym.unicode; mKeyModifiers = event.key.keysym.mod; - gKeyboard->handleKeyDown(event.key.keysym.sym, event.key.keysym.mod); - // part of the fix for SL-13243 - if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0) - SDLReallyCaptureInput(TRUE); - if (event.key.keysym.unicode) - { - handleUnicodeUTF16(event.key.keysym.unicode, - gKeyboard->currentMask(FALSE)); - } + gKeyboard->handleKeyDown(event.key.keysym.sym, event.key.keysym.mod); + // part of the fix for SL-13243 + if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0) + SDLReallyCaptureInput(TRUE); + + if (event.key.keysym.unicode) + { + handleUnicodeUTF16(event.key.keysym.unicode, + gKeyboard->currentMask(FALSE)); + } break; case SDL_KEYUP: @@ -1767,8 +1770,8 @@ void LLWindowSDL::gatherInput() if (SDLCheckGrabbyKeys(event.key.keysym.sym, FALSE) == 0) SDLReallyCaptureInput(FALSE); // part of the fix for SL-13243 - gKeyboard->handleKeyUp(event.key.keysym.sym, event.key.keysym.mod); - break; + gKeyboard->handleKeyUp(event.key.keysym.sym, event.key.keysym.mod); + break; case SDL_MOUSEBUTTONDOWN: { @@ -1878,7 +1881,7 @@ void LLWindowSDL::gatherInput() } break; } - + mCallbacks->handleResize(this, width, height); break; } @@ -1932,6 +1935,8 @@ void LLWindowSDL::gatherInput() break; } } + + updateCursor(); #if LL_X11 // This is a good time to stop flashing the icon if our mFlashTimer has @@ -2018,7 +2023,7 @@ static SDL_Cursor *makeSDLCursorFromBMP(const char *filename, int hotx, int hoty return sdlcursor; } -void LLWindowSDL::setCursor(ECursorType cursor) +void LLWindowSDL::updateCursor() { if (ATIbug) { // cursor-updating is very flaky when this bug is @@ -2026,11 +2031,11 @@ void LLWindowSDL::setCursor(ECursorType cursor) return; } - if (mCurrentCursor != cursor) + if (mCurrentCursor != mNextCursor) { - if (cursor < UI_CURSOR_COUNT) + if (mNextCursor < UI_CURSOR_COUNT) { - SDL_Cursor *sdlcursor = mSDLCursors[cursor]; + SDL_Cursor *sdlcursor = mSDLCursors[mNextCursor]; // Try to default to the arrow for any cursors that // did not load correctly. if (!sdlcursor && mSDLCursors[UI_CURSOR_ARROW]) @@ -2038,9 +2043,9 @@ void LLWindowSDL::setCursor(ECursorType cursor) if (sdlcursor) SDL_SetCursor(sdlcursor); } else { - llwarns << "Tried to set invalid cursor number " << cursor << llendl; + llwarns << "Tried to set invalid cursor number " << mNextCursor << llendl; } - mCurrentCursor = cursor; + mCurrentCursor = mNextCursor; } } diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 4fbe89b5e..f9dba726d 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -78,7 +78,7 @@ public: /*virtual*/ void showCursorFromMouseMove(); /*virtual*/ void hideCursorUntilMouseMove(); /*virtual*/ BOOL isCursorHidden(); - /*virtual*/ void setCursor(ECursorType cursor); + /*virtual*/ void updateCursor(); /*virtual*/ void captureMouse(); /*virtual*/ void releaseMouse(); /*virtual*/ void setMouseClipping( BOOL b ); @@ -102,7 +102,7 @@ public: /*virtual*/ void gatherInput(); /*virtual*/ void swapBuffers(); - /*virtual*/ void delayInputProcessing() { }; + /*virtual*/ void delayInputProcessing() { }; // handy coordinate space conversion routines /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 9b4c297ce..cfd3d76ea 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -677,6 +677,7 @@ void LLWindowWin32::hide() ShowWindow(mWindowHandle, SW_HIDE); } +//virtual void LLWindowWin32::minimize() { setMouseClipping(FALSE); @@ -684,7 +685,7 @@ void LLWindowWin32::minimize() ShowWindow(mWindowHandle, SW_MINIMIZE); } - +//virtual void LLWindowWin32::restore() { ShowWindow(mWindowHandle, SW_RESTORE); @@ -1019,6 +1020,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO dw_style = WS_OVERLAPPEDWINDOW; } + // don't post quit messages when destroying old windows mPostQuit = FALSE; @@ -1070,6 +1072,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO return FALSE; } + LL_INFOS("Window") << "Device context retrieved." << llendl ; + if (!(pixel_format = ChoosePixelFormat(mhDC, &pfd))) { close(); @@ -1078,6 +1082,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO return FALSE; } + LL_INFOS("Window") << "Pixel format chosen." << llendl ; + // Verify what pixel format we actually received. if (!DescribePixelFormat(mhDC, pixel_format, sizeof(PIXELFORMATDESCRIPTOR), &pfd)) @@ -1653,13 +1659,13 @@ void LLWindowWin32::initCursors() mCursor[ UI_CURSOR_PIPETTE ] = LoadCursor(module, TEXT("TOOLPIPETTE")); // Color cursors - mCursor[UI_CURSOR_TOOLSIT] = loadColorCursor(TEXT("TOOLSIT")); - mCursor[UI_CURSOR_TOOLBUY] = loadColorCursor(TEXT("TOOLBUY")); - mCursor[UI_CURSOR_TOOLPAY] = loadColorCursor(TEXT("TOOLPAY")); - mCursor[UI_CURSOR_TOOLOPEN] = loadColorCursor(TEXT("TOOLOPEN")); - mCursor[UI_CURSOR_TOOLPLAY] = loadColorCursor(TEXT("TOOLPLAY")); - mCursor[UI_CURSOR_TOOLPAUSE] = loadColorCursor(TEXT("TOOLPAUSE")); - mCursor[UI_CURSOR_TOOLMEDIAOPEN] = loadColorCursor(TEXT("TOOLMEDIAOPEN")); + mCursor[ UI_CURSOR_TOOLSIT ] = loadColorCursor(TEXT("TOOLSIT")); + mCursor[ UI_CURSOR_TOOLBUY ] = loadColorCursor(TEXT("TOOLBUY")); + mCursor[ UI_CURSOR_TOOLPAY ] = loadColorCursor(TEXT("TOOLPAY")); + mCursor[ UI_CURSOR_TOOLOPEN ] = loadColorCursor(TEXT("TOOLOPEN")); + mCursor[ UI_CURSOR_TOOLPLAY ] = loadColorCursor(TEXT("TOOLPLAY")); + mCursor[ UI_CURSOR_TOOLPAUSE ] = loadColorCursor(TEXT("TOOLPAUSE")); + mCursor[ UI_CURSOR_TOOLMEDIAOPEN ] = loadColorCursor(TEXT("TOOLMEDIAOPEN")); // Note: custom cursors that are not found make LoadCursor() return NULL. for( S32 i = 0; i < UI_CURSOR_COUNT; i++ ) @@ -1673,18 +1679,18 @@ void LLWindowWin32::initCursors() -void LLWindowWin32::setCursor(ECursorType cursor) +void LLWindowWin32::updateCursor() { - if (cursor == UI_CURSOR_ARROW + if (mNextCursor == UI_CURSOR_ARROW && mBusyCount > 0) { - cursor = UI_CURSOR_WORKING; + mNextCursor = UI_CURSOR_WORKING; } - if( mCurrentCursor != cursor ) + if( mCurrentCursor != mNextCursor ) { - mCurrentCursor = cursor; - SetCursor( mCursor[cursor] ); + mCurrentCursor = mNextCursor; + SetCursor( mCursor[mNextCursor] ); } } @@ -1764,6 +1770,8 @@ void LLWindowWin32::gatherInput() mInputProcessingPaused = FALSE; + updateCursor(); + // clear this once we've processed all mouse messages that might have occurred after // we slammed the mouse position mMousePositionModified = FALSE; diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index fefe5d308..63912592f 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -72,7 +72,7 @@ public: /*virtual*/ void showCursorFromMouseMove(); /*virtual*/ void hideCursorUntilMouseMove(); /*virtual*/ BOOL isCursorHidden(); - /*virtual*/ void setCursor(ECursorType cursor); + /*virtual*/ void updateCursor(); /*virtual*/ ECursorType getCursor() const; /*virtual*/ void captureMouse(); /*virtual*/ void releaseMouse(); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index bd27204b6..63b27b693 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1372,23 +1372,28 @@ if (FMOD OR FMODEX) endif (FMOD) if (DARWIN) - set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp) - add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) - if (FMODEX) - set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY} ${CARBON_LIBRARY}) - endif (FMODEX) - if (FMOD) - set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY}) - endif (FMOD) - set_target_properties( - fmodwrapper - PROPERTIES - BUILD_WITH_INSTALL_RPATH 1 - INSTALL_NAME_DIR "@executable_path/../Resources" - LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp" - ) - set(FMODWRAPPER_LIBRARY fmodwrapper) - target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES}) + if(FMOD) + set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp) + add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) + if (FMODEX) + set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY} ${CARBON_LIBRARY}) + endif (FMODEX) + if (FMOD) + set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY}) + endif (FMOD) + set_target_properties( + fmodwrapper + PROPERTIES + BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path/../Resources" + LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp" + ) + set(FMODWRAPPER_LIBRARY fmodwrapper) + target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES}) + endif(FMOD) + if(FMODEX) + set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY}) + endif(FMODEX) else (DARWIN) # fmodwrapper unnecessary on linux or windows, for fmod and fmodex if (FMODEX) @@ -1798,7 +1803,7 @@ endif (WINDOWS) if (DARWIN) # Don't do this here -- it's taken care of by viewer_manifest.py # add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD -# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ -# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib +# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ +# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib # ) endif (DARWIN) diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif index 39d89987aaa1677c04ae02ff908de03373fae363..f366026c33150b9ee191c02e133d804ef17ce1c2 100644 GIT binary patch literal 59044 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 AF8}}l literal 14776 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 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif index 864c8dee7aedbcfa459e49649c80eaabfe53294a..e9e6a20cd90f08ac85de08fba05677194f0f3b61 100644 GIT binary patch literal 58560 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 LgjNSb96tXCbG{aU literal 15144 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 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif index d6d835a90bc790a75fa65bcacb7679152b6a592f..bea3d9d4420de6a61a4f482239ca0f628337c26b 100644 GIT binary patch literal 58464 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

b#unucbfd1w(@j#i@$XfxW5cB2F63v?Wv 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 bb1`9ky9{H##SH4pEr1YbF|!uNgb4jV$mR~D literal 15176 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 DM3f_N diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur index c61cd76bef11e11ae0a31c61c35b64b104996bd6..65bbf01d45be371738df991d0861b45a2adb3b53 100644 GIT binary patch literal 4286 zcmb`KTTE0(7{|}Du8Sboa=*CCRS4lCx3ER-1w<_gp%IIe*2EOEu{8}zZ3#(9D2AlG zP|_DFPbDqk0n&%+gGsYd)Wjz0L+t|vVjJ5EmI|9tX@gAv|0%OME}j+8ll*qhnVB>H zZ@%xFnX{Var2TU(X+k~;KfVwT12mZkCMfCB$(x%Vt;QeFAjtQ5`%M0o==6gW`=-}L`?RL8{?Ee?;*TK^A^70Sp^ChSPDS$Z_i{$DZgX2X{p}Yw{G1Mtn(_@@%#w=zXx@| z2Eu*m+wJzfzyaO@=Rgm!*=$`22?-sMk&#V)ett6MdY^mgdhGa7i1psy-bLtM1oT1V zv-F{{8@!g1lG2@n(b1Ef=k)Y6h7q39NS`($ zKb}DMS5OKPz4bA67_^+w?T?R-|28xpPrunZ((7fC@Lxv1qB5jsLN-rHD1hlj3r|( zD}4NH=+g&W2R3w-`q17Dy)&_~u@`awm$#-~pZB!kz<~qO2D~Q{6BFI6<3&GXy?fRn z@9CezhY!mV{nnwK2|`gV^%3jJn3$OFP_7gg7klRFt*d{g9-$q1d3m1sD=qq7-K+S} z2Iz9_@hmV?AM@Q46&3Y0=e<>Jy&crg$;o+2A7jgB`i7btx)G>X=a1*?fvzJsIQaha ze6H72_ubvyB0D?#nflOr6TA-c0rxwe6CPdV`|$Aa3$SyQxyEsi962I}hK9u8;NT|e z>guGwj~_oS`^?VHih+RvarW%lP4kBq*H|v#xySQnlQwM#3k&;6&4=ZwQ>Vnr%E~io zZEY1(Q&X~SY-~)-%*=@4;bAd1Hz$3}+*7fJULxRmYp9L3H01p6dfzMk+qZ9vwzf8L z^5jVm2M-<;EiElF?-}=N*RBcdPol4{Pt4EHt2hhnj}J{I)2kTY=NXIknxv$pCFOhl z{I6WOBFEPI#`~W7H8nNj&Ye4Qy&XMzRIUZCBj~@OVr*1GzlE{akE`bIOTVI`LiG3d z%Q-VvjKk^Erv>&+nL`;F8Ny<*IE{2wJ@ijxWo4~791c-ZQX=W-=#cTfdiAQzZB?(z z&dyG;u&^Mt>GP(hCb>tdc9vWdyLRn*Pw5zy&~Lz=yUe)K2Euu8PSoeRR`sg9apQ(y z-t+nT_3NAZl$MqX%xRUrHPTh}=#zx=}LtgPhzv>F%~*sIs@ zbq_z8vH#C(Z%F1>G-=%M`pWMfoR$rRlZOBz8a_wP5LxZ$|@z@U3rr&TLF2bLk z-s5lOIVdQo7x8oRtYQo~=2l=|+Kn9fJ0v9J^Q~wZ^`Q;ei~r<4R$E&u?O;reU?28H zo-E=F9WWYqJN1kOzHw)ekE@N1jq*HXZZJOyHF-v|4SVlDIKO}K_xInC&yDOt{#XJ6 z0zQHrcM;QhNS5%I MYfXa`zdCXK2cgutGynhq literal 2238 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 N@|P>-fYPl<`WK^8r~Uu{ literal 2238 zcmbW1ziT5$6vv-e1{+~;EQ2eDa>k912)}%0R)w^5lui_i`%wx0l~e|B=(d zK)(C=7YZ4MWjKbfwg%0h88j0#tz0a+MYre{-J*vuhwjiF8;9=DS;V7zbdT;4Ji4-1 z_UdD0!)&N;NMr~yq7ut985j%<1_lE|M1sM|JEF2aN3x|ax zwh9glgN4Du5L##9urOE{JhhZLwvam2hka~s=nhoWc6h~BQ`^DhDC#KSU~<%U7#&F* zwH>wNam3o_)OXZ()DK7GsPE{FgTcYz=tDR*x)Prrg_SuRBR%lc^RRh1JoVzy1`c}Q z;qZZj2aCr|kcY*?;(_oKjIRJJoJ7g+pWR;A7=W z`B8Rvccs_s$-%*a93CFZ$;pWv9UaNp*_oW5pUcI?gd~7b4CzR$V=6Zd?p=@N8b2<@o?@%_m4<6Z+ zyCrb(LTt#+%^?e(&hY*S_qqb!O%N!p!G_b^L~i3}mUo`rsvS*z6z@ma5X zhY-z`y-wkfHsfu{!o!BhPwWNHF-nN7GNZ-75MP#I7Y~q^m5V<-I*ruCB6ZC#_B^X(to*v61yzk+izKZYxQX zyZ8xny)2S;@37NtrFlH;3jW>$dljGOqxgGUxZ@2TUzL5l`+qCtUo*D!-R-^(hTrP- zhgJP>{i_ZK*LwT)Ky~q*>Ks0`Exp~?*WvShy%}!ZcI44;Ll%c?GI#Th)Sfq`wlR2R lz8JhTGrzxFmYG*I*^rvNU}(QK!>BRl7>oM)`cW*Z`X3<>YVrU8 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 8e037e4e5..05a9885ea 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -464,12 +464,8 @@ class DarwinManifest(ViewerManifest): self.path(self.info_plist_name(), dst="Info.plist") # copy additional libs in /Contents/MacOS/ - self.path("../../libraries/universal-darwin/lib_release/libhunspell-1.2.dylib", dst="MacOS/libhunspell-1.2.dylib") - self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib") - #self.path("../../libraries/universal-darwin/lib_release/libvorbisenc.2.dylib", dst="MacOS/libvorbisenc.2.dylib") - #self.path("../../libraries/universal-darwin/lib_release/libvorbisfile.3.dylib", dst="MacOS/libvorbisfile.3.dylib") - #self.path("../../libraries/universal-darwin/lib_release/libvorbis.0.dylib", dst="MacOS/libvorbis.0.dylib") - #self.path("../../libraries/universal-darwin/lib_release/libogg.0.dylib", dst="MacOS/libogg.0.dylib") + self.path("../../libraries/universal-darwin/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib") + self.path("../../libraries/universal-darwin/lib/release/libhunspell-1.3.0.dylib", dst="Resources/libhunspell-1.3.0.dylib") # most everything goes in the Resources directory if self.prefix(src="", dst="Resources"): @@ -514,11 +510,11 @@ class DarwinManifest(ViewerManifest): self.path("../llcommon/" + self.args['configuration'] + "/libllcommon.dylib", "libllcommon.dylib") libfile = "lib%s.dylib" - libdir = "../../libraries/universal-darwin/lib_release" + libdir = "../../libraries/universal-darwin/lib/release" for libfile in ("libapr-1.0.dylib", "libaprutil-1.0.dylib", - "libexpat.0.5.0.dylib"): + "libexpat.1.5.2.dylib"): self.path(os.path.join(libdir, libfile), libfile) # For using FMOD for sound...but, fmod is proprietary so some might not use it... @@ -545,7 +541,7 @@ class DarwinManifest(ViewerManifest): for libfile in ("libllcommon.dylib", "libapr-1.0.dylib", "libaprutil-1.0.dylib", - "libexpat.0.5.0.dylib"): + "libexpat.1.5.2.dylib"): target_lib = os.path.join('../../..', libfile) self.run_command("ln -sf %(target)r %(link)r" % {'target': target_lib, @@ -561,7 +557,7 @@ class DarwinManifest(ViewerManifest): self.path("../plugins/filepicker/" + self.args['configuration'] + "/basic_plugin_filepicker.dylib", "basic_plugin_filepicker.dylib") self.path("../plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib") self.path("../plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib") - self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib") + self.path("../../libraries/universal-darwin/lib/release/libllqtwebkit.dylib", "libllqtwebkit.dylib") self.end_prefix("llplugin") diff --git a/indra/plugins/webkit/CMakeLists.txt b/indra/plugins/webkit/CMakeLists.txt index de027561e..dcd14e695 100644 --- a/indra/plugins/webkit/CMakeLists.txt +++ b/indra/plugins/webkit/CMakeLists.txt @@ -115,8 +115,8 @@ if (DARWIN) add_custom_command( TARGET media_plugin_webkit POST_BUILD # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ - DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ + DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib ) endif (DARWIN) diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index a6cb74007..f226c139e 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -370,8 +370,8 @@ endif (DARWIN OR WINDOWS) if (DARWIN) add_custom_command(TARGET llmediaplugintest POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib/release/libllqtwebkit.dylib ) endif (DARWIN) diff --git a/install.xml b/install.xml index 285544e0f..91f6251b3 100644 --- a/install.xml +++ b/install.xml @@ -87,9 +87,9 @@ darwin md5sum - a2794fbeeb03f530a6b7a0879c544f32 + 3cae5f0fd8f3dd80a59b450562f781bc url - https://github.com/downloads/LightDrake/Public-Libraries/apr_suite-1.4.5-darwin-20120618.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/apr_suite-1.4.5-darwin-20120715.tar.bz2 linux @@ -127,9 +127,9 @@ darwin md5sum - e4c0aa075086ec2f6b62c9498b381d63 + 90b8ec87cab3debaf8da5436dc8f3819 url - https://github.com/downloads/LightDrake/Public-Libraries/ares-1.7.1-darwin-20110217.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/ares-1.7.1-darwin-20120712.tar.bz2 linux @@ -652,9 +652,9 @@ darwin md5sum - ebad9348d0cbf1d768de727c1d6e1822 + 6505f9e93ac0f7595df8dd566f49c298 url - https://github.com/downloads/LightDrake/Public-Libraries/jpeglib-8c-darwin-20110228.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/jpeglib-8c-darwin-20120712.tar.bz2 linux @@ -944,9 +944,9 @@ darwin md5sum - 095e8a20cd0c74e2121ca81fdf389d25 + 1acdf58efa7a728fd390a710c659ec65 url - https://github.com/downloads/LightDrake/Public-Libraries/openssl-1.0.0g-darwin-20120207.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/openssl-1.0.0g-darwin-20120712.tar.bz2 linux From 2bb58bac2ea96162e36a9a75b5848bbd74a8cb15 Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Sun, 15 Jul 2012 23:32:12 -0400 Subject: [PATCH 2/4] Corrected annoyance and inconsistencies for OSX --- indra/newview/English.lproj/InfoPlist.strings | 4 ++-- indra/newview/Info-Singularity.plist | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index ef558b071..ca5535951 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -2,6 +2,6 @@ CFBundleName = "Singularity"; -CFBundleShortVersionString = "Singularity Viewer 1.5.0.0"; -CFBundleGetInfoString = "Singularity Viewer 1.5.0.0, Copyright 2010 Siana Gearz"; +CFBundleShortVersionString = "Singularity Viewer 1.7.0.0"; +CFBundleGetInfoString = "Singularity Viewer 1.7.0.0, Copyright 2012 Siana Gearz"; diff --git a/indra/newview/Info-Singularity.plist b/indra/newview/Info-Singularity.plist index e8deb4e00..06a83b2fb 100644 --- a/indra/newview/Info-Singularity.plist +++ b/indra/newview/Info-Singularity.plist @@ -9,7 +9,7 @@ CFBundleIconFile singularity.icns CFBundleIdentifier - com.secondlife.indra.viewer + org.singularityviewer.singularity CFBundleInfoDictionaryVersion 6.0 CFBundleName From 92a5b143473b6c30611ca02d4f8a27cff14bfaf5 Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Mon, 16 Jul 2012 16:10:15 -0400 Subject: [PATCH 3/4] Linux64 libs and fixes --- indra/cmake/CURL.cmake | 3 + indra/cmake/FMODEX.cmake | 2 +- indra/cmake/GooglePerfTools.cmake | 8 +- indra/cmake/LLWindow.cmake | 6 +- indra/newview/CMakeLists.txt | 4 - indra/newview/viewer_manifest.py | 34 ++++---- install.xml | 139 ++++++++++++++++++++++-------- 7 files changed, 132 insertions(+), 64 deletions(-) diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake index 3b35f0bae..aa6ff57f9 100644 --- a/indra/cmake/CURL.cmake +++ b/indra/cmake/CURL.cmake @@ -14,6 +14,9 @@ else (STANDALONE) optimized libcurl) else (WINDOWS) set(CURL_LIBRARIES curl) + if(LINUX AND WORD_SIZE EQUAL 64) + list(APPEND CURL_LIBRARIES idn) + endif(LINUX AND WORD_SIZE EQUAL 64) endif (WINDOWS) set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) endif (STANDALONE) diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake index bf74341fe..283260d80 100644 --- a/indra/cmake/FMODEX.cmake +++ b/indra/cmake/FMODEX.cmake @@ -18,7 +18,7 @@ if (NOT FMODEX_LIBRARY) set(FMODEX_SDK_DIR CACHE PATH "Path to the FMOD Ex SDK.") if (FMODEX_SDK_DIR) find_library(FMODEX_LIBRARY - fmodex fmodex_vc fmodexL_vc + fmodex_vc fmodexL_vc fmodex fmodexL fmodex64 fmodexL64 PATHS ${FMODEX_SDK_DIR}/api/lib ${FMODEX_SDK_DIR}/api diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 8fbe08dc2..c102542e0 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -1,12 +1,16 @@ # -*- cmake -*- include(Prebuilt) +if(WORD_SIZE EQUAL 64) + set(DISABLE_TCMALLOC TRUE) +endif(WORD_SIZE EQUAL 64) + if (STANDALONE) include(FindGooglePerfTools) else (STANDALONE) - if (LINUX OR WINDOWS) + if (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64) use_prebuilt_binary(gperftools) - endif (LINUX OR WINDOWS) + endif (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64) if (WINDOWS) set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib) set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"") diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index f8d2a2902..d75068402 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -18,7 +18,11 @@ else (STANDALONE) use_prebuilt_binary(SDL) set (SDL_FOUND TRUE) set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}) - set (SDL_LIBRARY SDL directfb fusion direct) + if(WORD_SIZE EQUAL 64) + set (SDL_LIBRARY SDL) + else(WORD_SIZE EQUAL 64) + set (SDL_LIBRARY SDL directfb fusion direct) + endif(WORD_SIZE EQUAL 64) endif (LINUX) endif (STANDALONE) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 63b27b693..c41698c34 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -474,8 +474,6 @@ set(viewer_SOURCE_FILES llviewerfoldertype.cpp llviewergenericmessage.cpp llviewergesture.cpp - #llviewerimage.cpp - #llviewerimagelist.cpp llviewerinventory.cpp llviewerjoint.cpp llviewerjointattachment.cpp @@ -976,8 +974,6 @@ set(viewer_HEADER_FILES llviewerfoldertype.h llviewergenericmessage.h llviewergesture.h - #llviewerimage.h - #llviewerimagelist.h llviewerinventory.h llviewerjoint.h llviewerjointattachment.h diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 05a9885ea..0c06505e4 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -825,26 +825,24 @@ class Linux_x86_64Manifest(LinuxManifest): self.path("../llcommon/libllcommon.so", "lib64/libllcommon.so") - if (not self.standalone()) and self.prefix("../../libraries/x86_64-linux/lib_release_client", dst="lib64"): - self.path("libapr-1.so.0") - self.path("libaprutil-1.so.0") - self.path("libdb-4.2.so") - self.path("libcrypto.so.0.9.8") - self.path("libexpat.so.1") - self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0") - self.path("libssl.so.0.9.8") - self.path("libuuid.so", "libuuid.so.1") - self.path("libSDL-1.2.so.0") + if (not self.standalone()) and self.prefix("../../libraries/x86_64-linux/lib/release", dst="lib64"): + self.path("libapr-1.so*") + self.path("libaprutil-1.so*") + self.path("libdb-*.so*") + self.path("libcrypto.so.*") + self.path("libexpat.so*") + self.path("libhunspell-1.3.so*") + self.path("libssl.so*") + self.path("libuuid.so*") + self.path("libSDL-1.2.so*") self.path("libELFIO.so") - self.path("libjpeg.so.7") - self.path("libpng12.so.0") - self.path("libopenjpeg.so.2") - self.path("libxml2.so.2") - #self.path("libz.so.1") #not needed + self.path("libjpeg.so*") + self.path("libpng.so*") + self.path("libz.so*") # OpenAL - self.path("libopenal.so.1") - self.path("libalut.so.0") + self.path("libopenal.so*") + self.path("libalut.so*") self.end_prefix("lib64") @@ -860,7 +858,7 @@ class Linux_x86_64Manifest(LinuxManifest): self.end_prefix("lib32") # 32bit libs needed for voice - if self.prefix("../../libraries/x86_64-linux/lib_release_client/32bit-compat", dst="lib32"): + if self.prefix("../../libraries/x86_64-linux/lib/release/32bit-compat", dst="lib32"): self.path("libalut.so") self.path("libidn.so.11") self.path("libopenal.so.1") diff --git a/install.xml b/install.xml index 91f6251b3..405dd7233 100644 --- a/install.xml +++ b/install.xml @@ -76,6 +76,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/SDL-1.2.14-linux-20110309.tar.bz2 + linux64 + + md5sum + 2d40e76689d6e8c034490c1cbe9a4961 + url + https://github.com/downloads/LightDrake/Public-Libraries/SDL-1.2.14-linux-x86_64-20120604.tar.bz2 + apr_suite @@ -101,9 +108,9 @@ linux64 md5sum - 1a7e1186855d48d8316ce86803095f70 + 66326975f779213886dbaaf021fa3412 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux64-20080909a.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/apr_suite-1.4.5-linux-x86_64-20120604.tar.bz2 windows @@ -141,9 +148,9 @@ linux64 md5sum - f7cbf2b6e74de4556148663b93ead4d3 + e2bf7c556ce3525cb6ad20f2d4d80cf4 url - https://github.com/downloads/Shyotl/SingularityViewer/ares-1.3.0-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/ares-1.7.5-linux-x86_64-20120605.tar.bz2 windows @@ -178,6 +185,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/boost-1.45.0-linux-20110604.tar.bz2 + linux64 + + md5sum + a7c23f5395f79033dbb09b201f16a4ce + url + https://github.com/downloads/LightDrake/Public-Libraries/boost-1.48.0-linux-x86_64-20120514.tar.bz2 + windows md5sum @@ -247,9 +261,9 @@ linux64 md5sum - 8a28849f4b9d99601dbc8db9d6a2f9ba + f6d0f7a6151c1b5a2633679126fbefb0 url - https://github.com/downloads/Shyotl/SingularityViewer/curl-7.16.4a-linux64-20090303.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/curl-7.24.0-linux-x86_64-20120605.tar.bz2 windows @@ -277,6 +291,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/db-5.1.25-linux-20110309.tar.bz2 + linux64 + + md5sum + 894f6a09e581bcf4a2c36f8f66379704 + url + https://github.com/downloads/LightDrake/Public-Libraries/db-5.1.25-Linux-x86_64-20110807.tar.bz2 + dbghelp @@ -318,9 +339,9 @@ linux64 md5sum - 09be41e3145e1a960e50f2f9ce0a5e7d + 3751294773dff647b3493764dc6539dc url - http://imprudenceviewer.org/download/libs/dbusglib-linux64-20101007.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/dbus_glib-0.76-linux64-20110310.tar.bz2 @@ -340,9 +361,9 @@ linux64 md5sum - e829a52ba67e02b011cf2e372914d32f + d826535e096d707ef1a2783ce66ad2f9 url - http://imprudenceviewer.org/download/libs/elfio-1.0.3-linux64-20091129.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/elfio-1.0.3-linux64-20091129.tar.bz2 @@ -373,9 +394,9 @@ linux64 md5sum - 278c61871419b9a4d50a4f88b7922403 + 58d7d0a12984cd57822c709d51ee18f7 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/expat-2.0.1-linux-x86_64-20120530.tar.bz2 windows @@ -399,6 +420,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/fontconfig-2.8.0-linux-20110311.tar.bz2 + linux64 + + md5sum + 1736c637f7ae184fa94b3eb2c0e5f5da + url + https://github.com/downloads/LightDrake/Public-Libraries/fontconfig-2.8.0-linux-x86_64-20120531.tar.bz2 + freeglut @@ -447,9 +475,9 @@ linux64 md5sum - 1b4624ab06a7ba30e29d1994424db41e + 9513c22a343369043536514bc87e5801 url - http://imprudenceviewer.org/download/libs/freetype-2.3.11-linux64-20091230.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/freetype-2.3.11-linux-x86_64-20120616.tar.bz2 windows @@ -477,6 +505,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/glext-82-win32-linux.tar.bz2 + linux64 + + md5sum + b94a97e60b37afee73f5525cd07ba959 + url + https://github.com/downloads/LightDrake/Public-Libraries/glext-82-win32-linux.tar.bz2 + windows md5sum @@ -504,9 +539,9 @@ linux64 md5sum - 58c11add6b275c163950364df5b2964a + 36575a2975f9ef70281a3062867bd2f8 url - http://imprudenceviewer.org/download/libs/glib-2.20.5-linux64-20100515.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/glib-2.25.17-linux-x86_64-20120422.tar.bz2 @@ -574,9 +609,9 @@ linux64 md5sum - 7e6fc4e185e8444a07b58ba7c0df255a + 37541c812162f009f50e3749220fb782 url - http://imprudenceviewer.org/download/libs/gstreamer-0.10.24-linux64-20091230.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/gstreamer-0.10.28-linux-x86_64-20120608.tar.bz2 @@ -597,6 +632,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/gtk-etc-linux-20101106.tar.bz2 + linux64 + + md5sum + 1b69a92d684a1b8208aa1d227d8d1bdf + url + https://github.com/downloads/LightDrake/Public-Libraries/gtk_etc-0.0.1-linux-x86_64-20120609.tar.bz2 + hunspell @@ -626,9 +668,9 @@ linux64 md5sum - 5388725d012c3bfabcc420be53442018 + 889d6abceda50f12d0f22c1310844c4b url - http://imprudenceviewer.org/download/libs/hunspell-1.2-linux64-20100902.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/libhunspell-1.3.2-linux-x86_64-20120708.tar.bz2 windows @@ -666,9 +708,9 @@ linux64 md5sum - 0e7facf7d48531d20c0cd6a3c3f04021 + 7f2e1c0ea2f589c4888ec7f5a214af88 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/jpeglib-7-linux-x86_64-20120531b.tar.bz2 windows @@ -746,9 +788,9 @@ linux64 md5sum - 5ee1e62bde38520c7f134c4afb9ac9b1 + ec833cfbfce8a818158e289a6c21ad72 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-linux64-20090304.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/libpng-1.5.10-linux-x86_64-20120420.tar.bz2 windows @@ -776,6 +818,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/libuuid-1.6.2-linux-20110315.tar.bz2 + linux64 + + md5sum + dc25f523bd0505bbd03fb2b277299b13 + url + https://github.com/downloads/LightDrake/Public-Libraries/uuid-1.6.2-linux-x86_64-20120601.tar.bz2 + libxml @@ -794,9 +843,9 @@ linux64 md5sum - 921d7f980519101afb74623e29e9d175 + 9bf2223e26eb4d659fe8e9283bfe73a2 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/libxml2-2.7.8-linux-x86_64-20120420.tar.bz2 @@ -820,6 +869,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/llqtwebkit-4.7.1-linux-20120228.tar.bz2 + linux64 + + md5sum + c6f662eaa9aeaf03f73779393640f386 + url + https://github.com/downloads/LightDrake/Public-Libraries/llqtwebkit-linux-x86_64-20120716.tar.bz2 + windows md5sum @@ -882,9 +938,9 @@ linux64 md5sum - d1986d287655f159be50d661c125ba19 + d2a9640c34a9a2848ba9fc63146bdce4 url - http://imprudenceviewer.org/download/libs/ndofdev-linux64-0.3.1-20100817.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/libndofdev-0.3.1-linux-x86_64-20120604.tar.bz2 windows @@ -922,9 +978,9 @@ linux64 md5sum - 83c72b57a95e8c42560fb67955169f19 + 50d232fcf120f85bf259d1b93aa767a7 url - http://imprudenceviewer.org/download/libs/ogg-vorbis-linux64-20091202.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/ogg_vorbis-1.2.2-1.3.2-linux-x86_64-20120604.tar.bz2 windows @@ -958,9 +1014,9 @@ linux64 md5sum - 00b23f28a2457d9dabbaff0b29ee7323 + e4d434731ad8280e85f5177da8d8ed3a url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/openssl-1.0.0g-linux-x86_64-20120605.tar.bz2 windows @@ -991,9 +1047,9 @@ linux64 md5sum - 5ad0a3ab623356c1ad61394ba238f99f + 843758dffdb98db9523a65fab6e136e3 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-soft-1.6.372-linux64-20081219.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/openal-1.14-1.1.0-linux-x86_64-20120605.tar.bz2 windows @@ -1047,6 +1103,13 @@ url https://github.com/downloads/LightDrake/Public-Libraries/linux-pulse-headers-0.9.14_1.tar.bz2 + linux64 + + md5sum + 736693c3f82458baee10e3eb37bc87df + url + https://github.com/downloads/LightDrake/Public-Libraries/linux64-pulse-headers-0.9.14.tar.bz2 + tut @@ -1133,9 +1196,9 @@ linux64 md5sum - dc67b896c56116df8e18f2d1bbd07031 + 1caff2e120fac6e73cc0c60d6635d527 url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/xmlrpc_epi-0.54.1-linux-x86_64-20120531.tar.bz2 windows @@ -1173,9 +1236,9 @@ linux64 md5sum - 4bddfb2c6dd7b1470a3ed675ac14bd9a + 367cb642f1471f85f1094827ac960dbe url - http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-linux64-20080909.tar.bz2 + https://github.com/downloads/LightDrake/Public-Libraries/zlib-1.2.6-linux-x86_64-20120419.tar.bz2 windows From 7721c6e3da1090615f6aa6231e950753fb4d717e Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Tue, 17 Jul 2012 16:06:31 -0400 Subject: [PATCH 4/4] Resolved issue with glibc 2.16 Resolved issues introduced by changes made in glibc 2.16 removing the undocumented definition of struct siginfo from bits/siginfo.h --- indra/llcommon/llapp.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index 6ad34c8fa..32f1e84c3 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -43,10 +43,14 @@ template class LLAtomic32; typedef LLAtomic32 LLAtomicU32; class LLErrorThread; class LLLiveFile; + + #if LL_LINUX -typedef struct siginfo siginfo_t; + #include + //typedef struct siginfo siginfo_t; //Removed as per changes in glibc 2.16 - Drake Arconis #endif + typedef void (*LLAppErrorHandler)(); typedef void (*LLAppChildCallback)(int pid, bool exited, int status);