diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index 2ba69a747..e5e30c41f 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -106,9 +106,12 @@ else if (USER_AGENT.indexOf("AppleWebKit/") != -1) var versionStart = USER_AGENT.indexOf("AppleWebKit/") + "AppleWebKit/".length, versionEnd = USER_AGENT.indexOf(" ", versionStart), - version = parseFloat(USER_AGENT.substring(versionStart, versionEnd), 10); + versionString = USER_AGENT.substring(versionStart, versionEnd), + versionDivision = versionString.indexOf('.'), + majorVersion = parseInt(versionString.substring(0, versionDivision)), + minorVersion = parseInt(versionString.substr(versionDivision + 1)); - if(USER_AGENT.indexOf("Plainview") == -1 && version >= 525.14 || USER_AGENT.indexOf("Chrome") != -1) + if((USER_AGENT.indexOf("Safari") !== CPNotFound && (majorVersion >= 525 && minorVersion > 14)) || USER_AGENT.indexOf("Chrome") !== CPNotFound) PLATFORM_FEATURES |= CPJavascriptRemedialKeySupport; } diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j index 5d07e987b..c55a2731c 100644 --- a/AppKit/CPResponder.j +++ b/AppKit/CPResponder.j @@ -96,36 +96,38 @@ CPDownArrowKeyCode = 40; */ - (void)interpretKeyEvents:(CPArray)events { - var event, - index = 0; - - while(event = events[index++]) + var index = 0, + count = [events count]; + + for (; index < count; ++index) { + var event = events[index]; + switch([event keyCode]) { - case CPLeftArrowKeyCode: [self moveBackward:self]; + case CPLeftArrowKeyCode: [self doCommandBySelector:@selector(moveLeft:)]; break; - case CPRightArrowKeyCode: [self moveForward:self]; + case CPRightArrowKeyCode: [self doCommandBySelector:@selector(moveRight:)]; break; - case CPUpArrowKeyCode: [self moveUp:self]; + case CPUpArrowKeyCode: [self doCommandBySelector:@selector(moveUp:)]; break; - case CPDownArrowKeyCode: [self moveDown:self]; + case CPDownArrowKeyCode: [self doCommandBySelector:@selector(moveDown:)]; break; - case CPDeleteKeyCode: [self deleteBackward:self]; + case CPDeleteKeyCode: [self doCommandBySelector:@selector(deleteBackward:)]; break; case CPReturnKeyCode: - case 3: [self insertLineBreak:self]; + case 3: [self doCommandBySelector:@selector(insertLineBreak:)]; break; - case CPEscapeKeyCode: [self cancel:self]; + case CPEscapeKeyCode: [self doCommandBySelector:@selector(cancel:)]; break; case CPTabKeyCode: var shift = [event modifierFlags] & CPShiftKeyMask; if (!shift) - [self insertTab:self]; + [self doCommandBySelector:@selector(insertTab:)]; else - [self insertBackTab:self]; + [self doCommandBySelector:@selector(insertBackTab:)]; break; @@ -224,14 +226,6 @@ CPDownArrowKeyCode = 40; } // Action Methods -/*! - Deletes one character backward, or the selection if anything is selected. - @param aSender the object requesting this -*/ -- (void)deleteBackward:(id)aSender -{ -} - /*! Insert a line break at the caret position or selection. @param aSender the object requesting this @@ -278,7 +272,7 @@ CPDownArrowKeyCode = 40; */ - (void)doCommandBySelector:(SEL)aSelector { - if([self respondsToSelector:aSelector]) + if ([self respondsToSelector:aSelector]) [self performSelector:aSelector]; else [_nextResponder doCommandBySelector:aSelector]; diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 103fc2890..4044620d8 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -253,7 +253,7 @@ var CPWindowSaveImage = nil, CPView _contentView; CPView _toolbarView; - CPView _mouseOverView; + CPArray _mouseEnteredStack; CPView _leftMouseDownView; CPView _rightMouseDownView; @@ -1212,23 +1212,56 @@ CPTexturedBackgroundWindowMask case CPMouseMoved: if (!_acceptsMouseMovedEvents) return; - + + if (!_mouseEnteredStack) + _mouseEnteredStack = []; + var hitTestView = [_windowView hitTest:point]; - - if (hitTestView != _mouseOverView) + + if ([_mouseEnteredStack count] && [_mouseEnteredStack lastObject] === hitTestView) + return [hitTestView mouseMoved:anEvent]; + + var view = hitTestView, + mouseEnteredStack = []; + + while (view) { - if (_mouseOverView) - [_mouseOverView mouseExited:[CPEvent mouseEventWithType:CPMouseExited location:point - modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]]; - - if (hitTestView) - [hitTestView mouseEntered:[CPEvent mouseEventWithType:CPMouseEntered location:point - modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]]; - - _mouseOverView = hitTestView; + mouseEnteredStack.unshift(view); + + view = [view superview]; } - - [_mouseOverView mouseMoved:anEvent]; + + var deviation = MIN(_mouseEnteredStack.length, mouseEnteredStack.length); + + while (deviation--) + if (_mouseEnteredStack[deviation] !== mouseEnteredStack[deviation]) + break; + + var index = deviation, + count = _mouseEnteredStack.length; + + if (index < count) + { + var event = [CPEvent mouseEventWithType:CPMouseExited location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; + + for (; index < count; ++index) + [_mouseEnteredStack[index] mouseExited:event]; + } + + index = deviation; + count = mouseEnteredStack.length; + + if (index < count) + { + var event = [CPEvent mouseEventWithType:CPMouseEntered location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0]; + + for (; index < count; ++index) + [mouseEnteredStack[index] mouseEntered:event]; + } + + _mouseEnteredStack = mouseEnteredStack; + + [hitTestView mouseMoved:anEvent]; } } diff --git a/AppKit/Rakefile b/AppKit/Rakefile index 90a77b47c..f4f3d30cc 100644 --- a/AppKit/Rakefile +++ b/AppKit/Rakefile @@ -17,7 +17,7 @@ AppKitFiles = FileList['**/*.j'].exclude('CoreGraphics/CGContextCanvas.j', 'Core ObjectiveJ::BundleTask.new(:AppKit) do |t| t.name = 'AppKit' t.identifier = 'com.280n.AppKit' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'AppKit classes for Cappuccino' diff --git a/AppKit/Themes/Aristo/Resources/CircularSliderBezel.png b/AppKit/Themes/Aristo/Resources/slider-circular-bezel.png similarity index 100% rename from AppKit/Themes/Aristo/Resources/CircularSliderBezel.png rename to AppKit/Themes/Aristo/Resources/slider-circular-bezel.png diff --git a/AppKit/Themes/Aristo/Resources/CircularSliderKnob.png b/AppKit/Themes/Aristo/Resources/slider-circular-knob.png similarity index 100% rename from AppKit/Themes/Aristo/Resources/CircularSliderKnob.png rename to AppKit/Themes/Aristo/Resources/slider-circular-knob.png diff --git a/AppKit/Themes/Aristo/Resources/spinner.gif b/AppKit/Themes/Aristo/Resources/spinner.gif new file mode 100644 index 000000000..06dbc2bc2 Binary files /dev/null and b/AppKit/Themes/Aristo/Resources/spinner.gif differ diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index f5ecf0d27..72efe57a9 100644 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -516,12 +516,12 @@ + (CPSlider)themedCircularSlider { var slider = [[CPSlider alloc] initWithFrame:CGRectMake(0.0, 0.0, 34.0, 34.0)], - trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"circularSliderBezel.png" size:CGSizeMake(34.0, 34.0)]); + trackColor = PatternColor([_CPCibCustomResource imageResourceWithName:"slider-circular-bezel.png" size:CGSizeMake(34.0, 34.0)]); [slider setSliderType:CPCircularSlider]; [slider setValue:trackColor forThemeAttribute:@"track-color" inState:CPThemeStateCircular]; - var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"circularSliderKnob.png" size:CGSizeMake(5.0, 5.0)]], + var knobColor = [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:"slider-circular-knob.png" size:CGSizeMake(5.0, 5.0)]], knobHighlightedColor = knobColor; [slider setValue:CGSizeMake(5.0, 5.0) forThemeAttribute:@"knob-size" inState:CPThemeStateCircular]; diff --git a/AppKit/Tools/BlendKit/Rakefile b/AppKit/Tools/BlendKit/Rakefile index 47edc0a5f..0de00f5c5 100644 --- a/AppKit/Tools/BlendKit/Rakefile +++ b/AppKit/Tools/BlendKit/Rakefile @@ -12,7 +12,7 @@ $BUILD_PATH = File.join($BUILD_DIR, $CONFIGURATION, 'BlendKit') ObjectiveJ::BundleTask.new(:BlendKit) do |t| t.name = 'BlendKit' t.identifier = 'com.280n.BlendKit' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'BlendKit classes for Cappuccino' diff --git a/AppKit/Tools/blend/Rakefile b/AppKit/Tools/blend/Rakefile index 010e38fe8..ab4ccf908 100644 --- a/AppKit/Tools/blend/Rakefile +++ b/AppKit/Tools/blend/Rakefile @@ -15,7 +15,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'blend') ObjectiveJ::BundleTask.new(:blend) do |t| t.name = 'blend' t.identifier = 'com.280n.blend' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'blend classes for Cappuccino' diff --git a/Foundation/Rakefile b/Foundation/Rakefile index 4a4b4d2ed..fe768cbc4 100644 --- a/Foundation/Rakefile +++ b/Foundation/Rakefile @@ -14,7 +14,7 @@ task :build => [:Foundation, $ENVIRONMENT_PRODUCT] ObjectiveJ::BundleTask.new(:Foundation) do |t| t.name = 'Foundation' t.identifier = 'com.280n.Foundation' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Foundation classes for Cappuccino' diff --git a/Objective-J/debug.js b/Objective-J/debug.js index 9702e00c8..cbc5fd447 100644 --- a/Objective-J/debug.js +++ b/Objective-J/debug.js @@ -119,7 +119,7 @@ function objj_backtrace_set_enabled(enabled) function objj_debug_print_backtrace() { - print(objj_debug_backtrace_string()); + alert(objj_debug_backtrace_string()); } function objj_debug_backtrace_string() diff --git a/Tools/Rake/Rakefile b/Tools/Rake/Rakefile index 4d1136c87..499992b66 100644 --- a/Tools/Rake/Rakefile +++ b/Tools/Rake/Rakefile @@ -17,7 +17,7 @@ spec = Gem::Specification.new do |s| s.homepage = 'http://cappuccino.org/' s.summary = "Objective-J extensions to Rake." s.name = 'objective-j' - s.version = "0.7.0" + s.version = "0.7.1" s.requirements << 'rake' s.require_path = 'lib' s.files = PKG_FILES @@ -34,7 +34,7 @@ Rake::GemPackageTask.new(spec) do |pkg| end #task :install do -# Gem::Installer.new(File.join($BUILD_DIR, $CONFIGURATION, 'rake', 'objective-j-0.7.0.gem')).install +# Gem::Installer.new(File.join($BUILD_DIR, $CONFIGURATION, 'rake', 'objective-j-0.7.1.gem')).install #end task :objj_gem => [:gem] do diff --git a/Tools/bake/Rakefile b/Tools/bake/Rakefile index 31227621b..e833736e0 100644 --- a/Tools/bake/Rakefile +++ b/Tools/bake/Rakefile @@ -15,7 +15,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'bake') ObjectiveJ::BundleTask.new(:bake) do |t| t.name = 'bake' t.identifier = 'com.280n.bake' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Deployment tool for Cappuccino applications' diff --git a/Tools/capp/Rakefile b/Tools/capp/Rakefile index 65dd06b42..c43dabd57 100644 --- a/Tools/capp/Rakefile +++ b/Tools/capp/Rakefile @@ -14,7 +14,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'capp') ObjectiveJ::BundleTask.new(:capp) do |t| t.name = 'capp' t.identifier = 'com.280n.capp' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Setup up Cappuccino projects' diff --git a/Tools/capp/main.j b/Tools/capp/main.j index 34d30702a..f48c67b4a 100644 --- a/Tools/capp/main.j +++ b/Tools/capp/main.j @@ -24,7 +24,7 @@ function main() switch (argument) { case "version": - case "--version": return print("capp version 0.7.0"); + case "--version": return print("capp version 0.7.1"); case "-h": case "--help": return printUsage(); diff --git a/Tools/nib2cib/Rakefile b/Tools/nib2cib/Rakefile index 06afd6890..e62d3de10 100644 --- a/Tools/nib2cib/Rakefile +++ b/Tools/nib2cib/Rakefile @@ -14,7 +14,7 @@ $ENVIRONMENT_LIB_PRODUCT = File.join($ENVIRONMENT_LIB_DIR, 'nib2cib') ObjectiveJ::BundleTask.new(:nib2cib) do |t| t.name = 'nib2cib' t.identifier = 'com.280n.nib2cib' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'nib2cib converts Cocoa nib and xibs to Cappuccino cibs' diff --git a/Tools/press/Rakefile b/Tools/press/Rakefile index 28eabe3d2..b483a0b05 100644 --- a/Tools/press/Rakefile +++ b/Tools/press/Rakefile @@ -16,7 +16,7 @@ $ENVIRONMENT_BRIDGE = File.join($ENVIRONMENT_LIB_DIR, 'press', 'bridge.js') ObjectiveJ::BundleTask.new(:press) do |t| t.name = 'press' t.identifier = 'com.280n.press' - t.version = '0.7.0' + t.version = '0.7.1' t.author = '280 North, Inc.' t.email = 'feedback @nospam@ 280north.com' t.summary = 'Deployment tool for Cappuccino applications'