Commit Graph

36 Commits (bd008a170898e69beeb8bc0481b4bfd94de86c55)

Author SHA1 Message Date
Mnikolenko ProductEngine b813814202 SL-11432 FIXED [OSX] Avatar is spinning when pressing Alt+D+Command and then releasing D key 2019-06-20 15:41:27 +03:00
Nat Goodspeed 9cdcef4d50 DRTVWR-447: Use new attachmentsForBugsplatStartupManager SDK method
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-10-16 16:53:06 -04:00
Nat Goodspeed e674f11757 DRTVWR-447: Add (some) metadata to Mac crash reports.
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-23 12:31:54 -04:00
Nat Goodspeed 787053ffeb DRTVWR-447: Add logging to BugsplatMac override methods. 2018-08-22 13:26:19 -04:00
Nat Goodspeed 7dc014474d DRTVWR-447: Attempt to post BugSplat metadata with Mac crash reports.
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-08-22 10:48:29 -04:00
Nat Goodspeed cd52724ef8 DRTVWR-447: Suppress BugSplat UI; auto-fill certain BugSplat data.
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-28 21:49:07 -04:00
Nat Goodspeed d26c931ae2 SL-821: Send the SecondLife.log from the previous (crashed) run.
Also clean up log messages.
2018-06-19 15:08:56 -04:00
Nat Goodspeed 3376b2acfb SL-821: Another Objective-C++ magic incantation from BugSplat support. 2018-06-19 13:34:08 -04:00
Nat Goodspeed c9898f1b69 SL-821: Try again to override BugSplat Obj-C methods. 2018-06-19 09:37:28 -04:00
Nat Goodspeed 6e790fc27d SL-821: Add logging in the macOS BugSplat attachment override. 2018-06-18 16:38:49 -04:00
Nat Goodspeed b889c15cdd SL-821: Fix BugSplat attachment method override per BugSplat support.
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-18 12:57:12 -04:00
Nat Goodspeed 1d7687efb2 SL-821: Fix up Objective-C++ syntax errors. 2018-06-15 17:58:00 -04:00
Nat Goodspeed 448e82f39c SL-821: Try to add SecondLife.log file to Mac BugSplat crash report.
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-06-15 16:48:20 -04:00
Nat Goodspeed 63fe7d802a SL-821, SL-826: Use BUGSPLAT_DB from environment on Windows and Mac.
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-25 12:09:50 -04:00
Nat Goodspeed 3a885e9cb7 SL-821: Use @import, not #import. 2018-05-21 13:29:16 -04:00
Nat Goodspeed 881bdec4b3 SL-821: Introduce macOS BugSplat initialization. 2018-05-21 13:07:44 -04:00
Nat Goodspeed ae0b3149ba DRTVWR-418: Fix a round of compile errors surfaced by -std=c++11.
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.
2017-02-23 16:49:49 -05:00
Mnikolenko Productengine aaf935267d MAINT-6600 FIXED Mac Viewer Does Not Handle Bad Arguments Gracefully 2016-10-11 13:16:03 +03:00
Nat Goodspeed 464a0df4c1 DRTVWR-418: Unify control flow through LLAppViewer across platforms.
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."
2016-06-30 16:51:50 -04:00
Oz Linden c8726aba30 remove execute permission from many files that should not have it 2015-11-10 09:48:56 -05:00
Brad Payne (Vir Linden) fe5ff3e74a merge 2014-12-01 16:21:52 -05:00
Mnikolenko ProductEngine c62ac0cae7 MAINT-3569 FIXED Handle window hide/unhide and minimize/unminimize events on mac. 2014-09-11 11:59:19 +03:00
Cinder Biscuits 1855649133 STORM-2053 - applicationShouldTerminate returns an NSApplicationTeminateReply, not NSApplicationDelegateReply 2014-08-06 00:59:24 +00:00
Graham Madarasz (Graham Linden) 19b2655a48 MAINT-3155 redux moved reg for URL event handling to WillFinishLaunching instead of DidFinishLaunching while laughing at Apple 2013-11-08 10:11:22 -08:00
Graham Madarasz (Graham Linden) 4bc9393240 MAINT-3155 add cocoa equiv for former AppleEventManager shenanigans for SLURL handling 2013-09-26 18:53:12 -07:00
Geenz 623077e6a4 Added license headers. 2013-06-27 15:06:03 -04:00
Geenz 84f287b34e Moved detecting if we're using a roman-script language to it's own function in the application delegate. Also consider the delete and backspace characters to be special cases. 2013-06-17 12:31:25 -04:00
Geenz 2253d22eb8 Have showInputWindow hand off input events to the bottom line input window. 2013-06-17 10:28:32 -04:00
Geenz 440a1ee3ba Move logic involving the input window to keyDown. Pass input events to the input window from there. 2013-06-17 09:26:11 -04:00
Geenz 93531f3ba8 Insert text into the input window when we attempt to insert text without a pre-editor. Also handle backspace as a special case when determining if the input window needs to be displayed. 2013-06-17 08:59:01 -04:00
Geenz b27899ee0e Added IME input window white list. 2013-05-13 19:39:45 -04:00
Geenz 2656b1f405 First pass at adding a viable replacement for TSM's old UseInputWindow method (which is now deprecated with seemingly no Cocoa replacement). 2013-04-01 08:15:12 -04:00
Geenz 80a79e5d7b IME support is pretty much finished at this point. 2013-03-27 08:49:45 -04:00
Geenz ab4af5d564 Readd event handling for application focus. 2013-01-23 11:01:47 -05:00
Geenz c52e6f9c59 Refactor the key input handling to make it easier to filter out keys we don't need unicode characters for (such as the arrow keys). 2013-01-23 09:29:32 -05:00
Geenz 09b07e3619 Big change set:
- 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.
2013-01-08 16:22:54 -05:00