summaryrefslogtreecommitdiff
path: root/indra/newview/llappdelegate-objc.mm
AgeCommit message (Collapse)Author
2018-10-16DRTVWR-447: Use new attachmentsForBugsplatStartupManager SDK methodNat Goodspeed
to attach user settings file and static debug info file to Mac crash reports, as well as SecondLife.log, just like Windows crash reports.
2018-08-23DRTVWR-447: Add (some) metadata to Mac crash reports.Nat Goodspeed
This required reordering certain operations during Mac viewer startup. Split llappviewermacosx.cpp's initViewer() function into constructViewer() (which instantiates LLAppViewerMacOSX) and initViewer() (which calls LLAppViewerMacOSX::init()). llappdelegate-objc.mm's applicationDidFinishLaunching override now calls [BugsplatStartupManager start] between constructViewer() and initViewer(): we want constructViewer() to have set up the logging subsystem so we can log the actions of BugsplatStartupManagerDelegate override methods, but otherwise we want BugsplatStartupManager in place as early as possible to catch any early crashes. Besides, initViewer() ends up overwriting the static_debug_info.log on which we depend for the *previous* run's crash metadata. Move the code that initializes the pathname of the static_debug_info.log file from LLAppViewerMacOSX::init() to the LLAppViewerMacOSX() constructor, since BugsplatStartupManagerDelegate override methods need to read (the previous run's) file. Add code to applicationLogForBugsplatStartupManager override to set new BugsplatMac 1.0.6 properties userName and userEmail. Don't log empty fields from static_debug_info.log if we couldn't read it.
2018-08-22DRTVWR-447: Add logging to BugsplatMac override methods.Nat Goodspeed
2018-08-22DRTVWR-447: Attempt to post BugSplat metadata with Mac crash reports.Nat Goodspeed
Introduce CrashMetadata, an LLSingleton in llappviewermacosx.cpp, declared in llappviewermacosx-for-objc.h and accessed by the various BugsplatStartupManagerDelegate override methods. CrashMetadata is populated by reading the previous (presumably crashed) run's static_debug_info.log file. This replaces the previous getOldLogFilePathname(), getFatalMessage() and getAgentFullname() functions. To extend that suite for additional metadata, not only would we have to keep adding new free functions, but we'd have to keep rereading the static_debug_info.log file. Override the new applicationKeyForBugsplatStartupManager, defaultUserNameForBugsplatStartupManager, defaultUserEmailForBugsplatStartupManager methods to extract relevant fields from CrashMetadata. Change applicationLogForBugsplatStartupManager and attachmentForBugsplatStartupManager to do the same. Enhance llviewerregion.cpp to update the static_debug_info.log file every time we enter a new region.
2018-06-28DRTVWR-447: Suppress BugSplat UI; auto-fill certain BugSplat data.Nat Goodspeed
Direct BugSplat to send crash reports without prompting, on both Windows and Mac. Add a mechanism by which code called after LL_ERRS() can retrieve the fatal log message string. (How did the crash logger extract that for Linden crash logging?) Add that fatal message to crash reports on Windows. But as BugsplatMac is engaged only on the run _after_ the crash, we no longer have that message in memory. Also add user name and region location to Windows crash reports. On Mac, (a) we don't have the information from the previous run and (b) BugsplatMac doesn't provide an API to attach that information to the crash report. Add Mac logging to indicate the success or failure of sending the crash report. Add Windows logging to indicate we're about to send.
2018-06-19SL-821: Send the SecondLife.log from the previous (crashed) run.Nat Goodspeed
Also clean up log messages.
2018-06-19SL-821: Another Objective-C++ magic incantation from BugSplat support.Nat Goodspeed
2018-06-19SL-821: Try again to override BugSplat Obj-C methods.Nat Goodspeed
2018-06-18SL-821: Add logging in the macOS BugSplat attachment override.Nat Goodspeed
2018-06-18SL-821: Fix BugSplat attachment method override per BugSplat support.Nat Goodspeed
The example code on the BugSplat documentation page https://www.bugsplat.com/docs/platforms/os-x#configuration omits certain essential Objective-C++ boilerplate incantations. Adding them at least compiles successfully.
2018-06-15SL-821: Fix up Objective-C++ syntax errors.Nat Goodspeed
2018-06-15SL-821: Try to add SecondLife.log file to Mac BugSplat crash report.Nat Goodspeed
Introduce new header file llappviewermacosx-for-objc.h to publish for llappdelegate-objc.mm and other Objective-C++ consumers the free functions in llappviewermacosx.cpp they consume. These were never before declared in any header file. Apparently, to date, we've been trusting to luck that Objective-C++ will infer the correct signature from calls -- and that the calls are correct with respect to the function definitions. :-P This gives us a place to introduce a new getLogFilePathname() function to query LLDir. (We don't simply #include "lldir.h" because of the pervasive use of BOOL in viewer headers; BOOL means something very different in Objective-C++.)
2018-05-25SL-821, SL-826: Use BUGSPLAT_DB from environment on Windows and Mac.Nat Goodspeed
On TeamCity, set BUGSPLAT_DB from build-secrets. Use the presence of $BUGSPLAT_DB, rather than a new CMake BUGSPLAT option, to control whether CMake searches for BugSplat -- and passes LL_BUGSPLAT into C++. When BUGSPLAT_DB is present, make viewer_manifest.py set "BugSplat DB" in build_data.json, and "BugsplatServerURL" in Mac Info.plist. Make llappviewerwin32.cpp read "BugSplat DB" from build_data.json. Add placeholders for Mac hooks to suppress BugSplat prompt and send SecondLife.log.
2018-05-21SL-821: Use @import, not #import.Nat Goodspeed
2018-05-21SL-821: Introduce macOS BugSplat initialization.Nat Goodspeed
2017-02-23DRTVWR-418: Fix a round of compile errors surfaced by -std=c++11.Nat Goodspeed
These are mostly things that were in fact erroneous, but accepted by older compilers. This changeset has not yet been built with Visual Studio 2013 or Linux gcc, even with -std=c++11. This changeset has not been built *without* -std=c++11. It should be used in conjunction with a corresponding change to LL_BUILD_DARWIN_BASE_SWITCHES in viewer-build-variables/variables. This is a work in progress. We do not assert that this changeset completes the work needed to turn on -std=c++11, even on the Mac.
2016-10-11MAINT-6600 FIXED Mac Viewer Does Not Handle Bad Arguments GracefullyMnikolenko Productengine
2016-06-30DRTVWR-418: Unify control flow through LLAppViewer across platforms.Nat Goodspeed
The LLApp API used to consist of init(), mainLoop(), cleanup() methods. This makes sense -- but on Mac that structure was being subverted. The method called mainLoop() was in fact being called once per frame. There was initialization code in the method, which (on Mac) needed to be skipped with an already-initialized bool. There was a 'while' loop which (on Mac) needed to be turned into an 'if' instead so the method would return after every frame. Rename LLApp::mainLoop() to frame(). Propagate through subclasses LLAppViewer and LLCrashLogger. Document the fact that frame() returns true to mean "done." (This was always the case, but had to be inferred from the code.) Rename the Mac Objective-C function mainLoop to oneFrame. Rename the C++ free function it calls from runMainLoop() to pumpMainLoop(). Add comments to llappdelegate-objc.mm explaining (inferred) control flow. Change the Linux viewer main() and the Windows viewer WINMAIN() from a single LLAppViewer::mainLoop() call to repeatedly call frame() until it returns true. Move initialization code from the top of LLAppViewer::frame() to the init() method, where it more properly belongs. Remove corresponding mMainLoopInitialized flag (and all references) from LLAppViewer. Remove 'while (! LLApp::isExiting())' (or on Mac, 'if (! LLApp::isExiting())') from LLAppViewer::frame() -- thus unindenting the whole body of the 'while' and causing many lines of apparent change. (Apologies to reviewers.) There are four LLApp states: APP_STATUS_RUNNING, APP_STATUS_QUITTING, APP_STATUS_STOPPED and APP_STATUS_ERROR. Change LLAppViewer::frame() return value from (isExiting()) (QUITTING or ERROR) to (! isRunning()). I do not know under what circumstances the state might transition to STOPPED during a frame() call, but I'm quite sure that if it does, we don't want to call frame() again. We only want a subsequent call if the state is RUNNING. Also rename mainLoop() method in LLCrashLogger subclasses LLCrashLoggerWindows, LLCrashLoggerMac, LLCrashLoggerLinux. Of course it's completely up to the frame() method whether to yield control; none of those in fact do. Honor protocol by returning true (frame() is done), even though each one's main() caller ignores the return value. In fact LLCrashLoggerWindows::mainLoop() wasn't using the return protocol correctly anyway, returning wParam or 0 or 1 -- possibly because the return protocol was never explicitly documented. It should always return true: "I'm done, don't call me again."
2015-11-10remove execute permission from many files that should not have itOz Linden
2014-12-01mergeBrad Payne (Vir Linden)
2014-09-11MAINT-3569 FIXED Handle window hide/unhide and minimize/unminimize events on ↵Mnikolenko ProductEngine
mac.
2014-08-06STORM-2053 - applicationShouldTerminate returns an ↵Cinder Biscuits
NSApplicationTeminateReply, not NSApplicationDelegateReply
2013-11-08MAINT-3155 redux moved reg for URL event handling to WillFinishLaunching ↵Graham Madarasz (Graham Linden)
instead of DidFinishLaunching while laughing at Apple
2013-09-26MAINT-3155 add cocoa equiv for former AppleEventManager shenanigans for ↵Graham Madarasz (Graham Linden)
SLURL handling
2013-06-27Added license headers.Geenz
2013-06-17Moved detecting if we're using a roman-script language to it's own function ↵Geenz
in the application delegate. Also consider the delete and backspace characters to be special cases.
2013-06-17Have showInputWindow hand off input events to the bottom line input window.Geenz
2013-06-17Move logic involving the input window to keyDown. Pass input events to the ↵Geenz
input window from there.
2013-06-17Insert text into the input window when we attempt to insert text without a ↵Geenz
pre-editor. Also handle backspace as a special case when determining if the input window needs to be displayed.
2013-05-13Added IME input window white list.Geenz
2013-04-01First pass at adding a viable replacement for TSM's old UseInputWindow ↵Geenz
method (which is now deprecated with seemingly no Cocoa replacement).
2013-03-27IME support is pretty much finished at this point.Geenz
2013-01-23Readd event handling for application focus.Geenz
2013-01-23Refactor the key input handling to make it easier to filter out keys we ↵Geenz
don't need unicode characters for (such as the arrow keys).
2013-01-08Big change set:Geenz
- LLAppDelegate header relocated to LLWindow. Definition is still present in secondlife-bin (for compatibility reasons when loading a nib). - Return key handling fixed. - Command key now acts the same as the control key by issuing control character codes when the command key is pressed. - We now retrieve the window pointer directly from the app delegate in LLWindow.