diff --git a/macosx/English.lproj/MessageWindow.nib/classes.nib b/macosx/English.lproj/MessageWindow.nib/classes.nib index c4d4446d4..c0f540c7b 100644 --- a/macosx/English.lproj/MessageWindow.nib/classes.nib +++ b/macosx/English.lproj/MessageWindow.nib/classes.nib @@ -5,7 +5,11 @@ ACTIONS = {changeLevel = id; clearLog = id; }; CLASS = MessageWindowController; LANGUAGE = ObjC; - OUTLETS = {fLevelButton = NSPopUpButton; fTextView = NSTextView; }; + OUTLETS = { + fLevelButton = NSPopUpButton; + fScrollView = NSScrollView; + fTextView = NSTextView; + }; SUPERCLASS = NSWindowController; } ); diff --git a/macosx/English.lproj/MessageWindow.nib/keyedobjects.nib b/macosx/English.lproj/MessageWindow.nib/keyedobjects.nib index 4acad677b..9a17fb40b 100644 Binary files a/macosx/English.lproj/MessageWindow.nib/keyedobjects.nib and b/macosx/English.lproj/MessageWindow.nib/keyedobjects.nib differ diff --git a/macosx/MessageWindowController.h b/macosx/MessageWindowController.h index 264faffb8..8686c6e77 100644 --- a/macosx/MessageWindowController.h +++ b/macosx/MessageWindowController.h @@ -27,6 +27,8 @@ @interface MessageWindowController : NSWindowController { IBOutlet NSTextView * fTextView; + IBOutlet NSScrollView * fScrollView; + IBOutlet NSPopUpButton * fLevelButton; NSLock * fLock; diff --git a/macosx/MessageWindowController.m b/macosx/MessageWindowController.m index a6ac1386a..461f7db69 100644 --- a/macosx/MessageWindowController.m +++ b/macosx/MessageWindowController.m @@ -29,7 +29,7 @@ #define LEVEL_INFO 1 #define LEVEL_DEBUG 2 -#define UPDATE_SECONDS 0.5 +#define UPDATE_SECONDS 0.35 @interface MessageWindowController (Private) @@ -123,16 +123,24 @@ void addMessage(int level, const char * message) if ([fBufferArray count] == 0) return; + //keep scrolled to bottom if already at bottom or there is no scroll bar yet + BOOL shouldScroll = NO; + NSScroller * scroller = [fScrollView verticalScroller]; + if ([scroller floatValue] == 1.0 || [scroller isHidden] || [scroller knobProportion] == 1.0) + shouldScroll = YES; + [fLock lock]; NSEnumerator * enumerator = [fBufferArray objectEnumerator]; NSAttributedString * messageString; while ((messageString = [enumerator nextObject])) [[fTextView textStorage] appendAttributedString: messageString]; - [fBufferArray removeAllObjects]; [fLock unlock]; + + if (shouldScroll) + [fTextView scrollRangeToVisible: NSMakeRange([[fTextView string] length], 0)]; } - (void) changeLevel: (id) sender @@ -145,6 +153,8 @@ void addMessage(int level, const char * message) else level = TR_MSG_ERR; + [self updateLog: nil]; + tr_setMessageLevel(level); [[NSUserDefaults standardUserDefaults] setInteger: level forKey: @"MessageLevel"]; }