public

  • Download Gist
Cappuccino 0.9.5 Changelog.markdown
Markdown

What's New in Cappuccino 0.9.5 (RC4)

Release date: 2011-11-16

AppKit

  • Fixed with CPTokenField: quickly entered tokens would be ignored.
  • Fixed with CPTokenField: crash if added to a window in a unit test.
  • Fixed #1398: in a CPTokenField, deleting tokens in front of selected tokens would shift the selection to the right.
  • Fixed #1397: make sure CPTokenField selection is initialised when loading from cib.

What's New in Cappuccino 0.9.5 (RC3)

Release date: 2011-11-11

Foundation and Core

  • Local param shadowing now emits a warning instead of an error. This is temporary awaiting a proper fix of param shadowing in the preprocessor.
  • CPScanner fixes.
  • Don't log backtraces repeatedly when using objj_backtrace_decorator.
  • CPString -substringWithRange: and -rangeOfString:options:range now throws CPRangeException for out of bounds ranges.
  • Add -forwardingTargetForSelector: support.
  • Crude but functional infinite recursion checker, optional at compile time.
  • New: CPNumberFormatter with CPNumberFormatterDecimalStyle support.
  • New: support null values in CPDictionary's +dictionaryWithJSObject:recursively: (issue #1299).
  • New: objjc --help.
  • New: objjc option to compile to stdout, with or without @STATIC tags, suitable for JavaScript linters.

Bug Fixes:

  • Fixed: CPURL -isEqual: for URLs with redundant slashes.
  • Fixed: CPDate timezone calculation in initWithString:.
  • Fixed #1065: CPString -rangeOfString: backwards search did not work.
  • Fixed: CPString -rangeOfString: anchored backwards search did not work.
  • Fixed: searching a string for @"" with CPString -rangeOfString: returned results other than CPNotFound.
  • Fixed: CPString -rangeOfString:options:range returned locations relative to the passed-in range instead of the full string.
  • Fixed: CPMutableSet -addObject: should raise with nil or undefined.
  • Fixed: very large numbers written to 280north1 plist files would be read back as very small numbers. This would among other things break nib2cib where certain controls would take on infinitesimal sizes.
  • Fixed #1289: infinite recursion when coercing an object without a -description method into a string.
  • Fixed #469: infinite recursion when an unimplemented message was sent to an object with no superclass.
  • Fixed with CPDecimal: decimal numbers below 1.0 would compare incorrectly with 0.0.
  • Fixed #1380, #1383: avoid "popen error (pipe): Too many open files" error when building Cappuccino.
  • Fixed #1384: avoid user defaults QUOTA_EXCEEDED_ERR crash.

AppKit

  • New: CPButton continuous mode.
  • Improved: CPSound error handling and better Cocoa compliance.
  • Improved: table view keyboard row selection.
  • New: CPProgressIndicator is now coding compliant.
  • Improved performance of [CPString copy].
  • New: keyboard navigation in menus.
  • New: mouse wheel support in menus.
  • New: automatic or explicit scroll mode selection for web views.
  • New: support for pattern fills in CGContext (CGContextSetFillColor with a pattern color).
  • Clean up JavaScript (missing semicolons, don't use commas as statement separators.)
  • CPWebView -isLoading method.
  • Support for web views with transparent or coloured backgrounds.
  • CPObjectController automaticallyPreparesContent support.
  • Added support for the CPNullPlaceholderBindingOption for bound text fields.
  • New: text field support for CPContinuouslyUpdatesValueBindingOption.
  • New: bindings support for inline table view cell editing.
  • Support for CPOutlineView outlineViewDeleteKeyPressed: delegate method.
  • CPEvents sent during mouseDragged: now have deltaX and deltaY appropriately set (issues #1210, #1211).
  • New: coding support for CPIndexPath.
  • CPMenu item validation.
  • New: collectionView:menuForItemAtIndex: delegate method support.
  • New: CPDictionary -keysSortedByValueUsingSelector: which, just as it sounds, returns the keys of the dictionary sorted using a given selector.
  • Key equivalent display in menus for special characters such as escape, tab, arrow keys and many others.
  • New: tooltip support for any view with the standard yellow box look (issue #1264).
  • Remove table view corner view if there is no header view.
  • Added CPMenu -removeAll method (issue #1260).
  • New: CPPredicateEditor allows a search or filter predicate to be constructed visually by the user.
  • Optimise array controller addObject: by eliminating entirely pointless rearrange when added objects did not pass the filter. Also avoid double rearrange if clearsFilterPredicateOnInsertion.
  • Draw table view gridlines precisely inside the right side of cells so that grid line positioning and spacing matches Cocoa.
  • New: CPUserDefaultsController which can be used to easily bind controls to user default keys, in Interface Builder or elsewhere.
  • Optimise CPArrayController insertObject:atArrangedObjectIndex:.
  • Minor array controller optimisation: don't send a filterPredicate change notification if clearsFilterPredicateOnInsertion is YES but filterPredicate is already nil when insertObject:atArrangedObjectIndex: is called.
  • CPArrayController handlesContentAsCompoundValue support for contentArray binding.
  • Left and right arrow keys can now be used to expand and collapse items in CPOutlineView.
  • New: CPLevelIndicator shows a meter with discrete levels from empty to full.
  • CPFormatter support for CPControl.
  • New scroll view scrollViewWillScroll: and scrollViewDidScroll: delegate methods, inspired by UIScrollViewDelegate (issue #1177).
  • Multiple improvements to CPMenu opening, closing and handling of submenus.
  • Coding support for CPCharacterSet when the set is of the characterSetWithCharactersInString kind.
  • CPCharacterSet -isEqual: support when the set is of the characterSetWithCharactersInString kind.
  • Inverted CPCharacterSet +characterSetWithCharactersInString now archive properly.
  • New: coding support for CPTokenField.
  • CPArray range checking (issue #1334).
  • CPBoxes created with +boxEnclosingView: now take on the autoresizing mask of the passed view (issue #1335).
  • Improved table view redrawing performance when usesAlternatingBackgroundColors is YES (issue #1341).
  • Allow CPAlert subclasses to use +alertWithMessageText:... et al (issue #1333).
  • Improved performance of valueForKeyPath: (issue #1344).
  • [CPSound play] now plays the sound once it has been loaded if it hasn't yet (issue #1345).
  • Raise CPRangeException if CPString substringToIndex: is out of bounds.
  • New: support nested willChange<Key> and didChange<Key> calls. When multiple calls are nested, only the first willChange... and the last didChange... will notify observers, avoiding duplicate notifications for the same change. This can massively improve performance since observations sometimes lead to cascading updates (issue #1343).
  • Send didChange in reverse order of willChange in CPObjectController setContent:.
  • Implemented support for the CPTokenField tokenField:shouldAddObjects:atIndex: delegate method (issue #1360).
  • CPStepper button sizes can now be themed.
  • New: CPColorWithImages() convenience function to quickly create a CPColor from single, 3-part or 9-part images (issue #1274).
  • Enhanced -description method of CPImage and CPColor to show the exact content, especially for pattern colors (issue #1274).
  • New: allow binding a table column value to an array controller reached through a key path.
  • Improved split view performance: eliminate excessive splitViewDidResizeSubviews: messages.
  • New: support for collapsing views towards the right in split views.
  • New: split view auto save support.
  • New: 'overlay' style scrollbars which fade out when not in use. Old style scrollbars are also supported and automatically enabled if the browser does not use overlay style scrollbars (e.g. OS X Lion with a touch enabled input device uses overlay style scrollbars, but a Windows XP machine with a mousewheel would not.)
  • New: CPWindow setMovable: support which specifies whether a window can be dragged (issue #1358).
  • New: CPPopover control to create small "pop up" widgets attached to other controls, similar to the Downloads pop-over in Safari 5 (issue #1316).
  • Allow almost anything as a key equivalent unless a text field is the first responder. E.g. pressing "a" with no modifiers can now trigger a button.

Bug Fixes:

  • Fixed with CPViewAnimation: all animation curves behaved like a linear curve (issue #1313).
  • Fixed: issue with CPSound in Firefox.
  • Fixed #1033: CPFlashView setParameters: bugs.
  • Fixed: uniform table view column resizing.
  • Fixed: CPSearchField layout glitch.
  • Fixed #1122: CPSplitView setIsPaneSplitter: had the opposite effect of what it should have been.
  • Fixed with CPTextField: cut and paste using the mouse did not set stringValue properly.
  • Fixed with CPTextField: CPControlTextDidBeginEditingNotification and CPControlTextDidChangeNotification were not sent after cut and paste.
  • Fixed: bugs with CPTableView column resizing.
  • Fixed: CPOutLineView outlineView:sortDescriptorsDidChange: delegate message was not sent.
  • Fixed with KVO: method replacement happened for every call to addObserver: when one replacement would do.
  • Fixed: spacing in CPBrowser.
  • Fixed: color panel layout issues.
  • Fixed: scroll view corner and headerview decoding.
  • Fixed: unarchiving table views with no header view.
  • Fixed #1136: for the most part, web views' setScrollMode: message did nothing.
  • Fixed: web view AppKit scrollbars often did not reflect the true content size of the view.
  • Fixed: several Internet Explorer compatibility bugs.
  • Fixed: [CPArrayController arrangedObjects] could be nil.
  • Fixed #1160: CPSearchField delegate method controlTextDidChange: didn't always get fired.
  • Fixed: memory leak in CPSearchField.
  • Fixed: scroller error when horizontal scroller was too small.
  • Fixed: split view did not reposition subviews or remove divider when a subview was removed.
  • Fixed: root layer transform inadvertantly changed when redisplayed.
  • Fixed: if unarchiver:didDecodeObject: returned nil, the original object was still replaced (with nil) instead of being kept.
  • Fixed #864: corner view did not always draw the line above the left edge of the scroll view.
  • Fixed: loading an empty string into a web view would make it entirely white regardless of the background colour specified.
  • Fixed: in Firefox, certain web views would not send the first webView:didFinishLoadForFrame: delegate message.
  • Fixed: CPSlider isContinuous disagreed with setContinuous:.
  • Fixed: CPSliders always became continuous when archived/unarchived.
  • Fixed: more graceful handling when nextKeyView is self.
  • Fixed: when a column was selected the column selection colour would not cover the whole column.
  • Fixed: table views' rectOfColumn: method returned a rect reduced by the intercell spacing. It should return the rect of the entire column.
  • Fixed: when table view grid lines were active they did not draw on top of selection highlights like in Cocoa.
  • Fixed: an array controller with a bound contentArray would sometimes fail when add:, remove: and similar methods were called.
  • Fixed #687: CPColor colorWithCSSString: did not properly handle the alpha component of the CSS rbga() syntax.
  • Fixed: CPInvalidArgumentException: Unsupported method on CPArray when attempting to bind to a CPArrayController's arrangedObjects before calling setContent:.
  • Fixed #1174: CPArrayController _arrangedObjects initialisation error.
  • Fixed: CPOutlineView provided dragged items in reverse order.
  • Fixed: once a table view drag and drop was retargeted, the new target would 'stick' as the drag continued.
  • Fixed: the content view of a decoded CPBox would have the wrong autoresizing mask.
  • Fixed: unhandled keyboard events of a window did not travel past the window.
  • Fixed: JS objects 'randomly' failed to unarchive due to a caching problem. One visible symptom was that CPTextField's custom inset would decode fine, but a subclass of a CPTextField would fail to decode the inset.
  • Fixed: table headers didn't scroll with the rest of the table during drag and drop.
  • Fixed: CGGradientCreateWithColorComponents assumed there'd only be two colors in each gradient.
  • Fixed #1242: color space was missing for colors created by CGColorCreateGenericGray, CGColorCreateGenericRGB and CGColorCreateGenericCMYK.
  • Fixed #1242: CGColorCreateCopyWithAlpha could create colors with an alpha value incorrectly linked to other cached colors.
  • Fixed: crash when the same observer was removed twice. Warn instead.
  • Fixed: out of bounds error in CPPopUpButton itemWithTitle:.
  • Fixed: setting a new platform window on a visisble window caused a DOM exception.
  • Fixed: [CPIndexSet indexPathByRemovingLastIndex] didn't remove the last index.
  • Fixed: [CPIndexSet indexes] did not return a copy of the indexes.
  • Fixed #1249: multiple _CPImageAndTextViews sharing the same CPImage failed to properly observe its loading.
  • Fixed #684: sizing problem when revealing hidden CPWebView.
  • Fixed #664: web view sizing bug when loading contents prior to adding the view to the display tree.
  • Fixed #682: CPColor isEqual: sometimes failed to recognise equal instances specified with colorWithCSSString:.
  • Fixed: CPColor isEqual: for pattern images.
  • Fixed: on WebKit for the Mac, the right command key was not recognised as a modifier.
  • Fixed: duplicate observer notification for array controller addObject: (on arrangedObjects).
  • Fixed: CPTableColumn width, minWidth and maxWidth encoding.
  • Fixed: don't return nil from CPController initWithCoder:.
  • Fixed: during CPUserDefault change notifications, objectForKey: could return the value from prior to the change.
  • Fixed: array controller remove: would not only remove selected rows, but also any other rows isEqual: to the selected rows.
  • Fixed with table view: don't start dragging if there are no rows.
  • Fixed: under some circumstances a CPMenu could return a separator as the highligted item.
  • Fixed: pressing the up arrow key in a table view would cause a crash if the previous selection was non continuous.
  • Fixed #1320: if a CPTextField's target action changed the first responder then the target action was called twice if the textfield edit was completed by hitting the enter/return key.
  • Fixed #1285: CPPredicate would crash if a beginsWith or endsWith comparison was made where the right hand string was longer than the left hand string.
  • Fixed #1305: max toolbar item width was constrained to the width of the label.
  • Fixed with menus: don't disallow setEnabled: for auto enabled items.
  • Fixed with token fields: tokenField:tokenField completionsForSubstring:indexOfToken:indexOfSelectedItem: ignored its indexOfToken: parameter.
  • Fixed: in recent versions of WebKit window.open("") does not work, which broke new platform windows (issue #1352).
  • Fixed: CPArrayController setSelectionIndexes: sometimes modified its input.
  • Fixed: several CPArrayController methods returned undefined instead of booleans.
  • Fixed: CPWindow did not return NO to acceptsFirstResponder messages.
  • Fixed: multiple errors with key view loops (window's content view not included at the start of the loop, selectNextKeyView:, selectPreviousKeyView:, selectKeyViewFollowingView: and selectKeyViewPrecedingView: not acting like in Cocoa).
  • Fixed: mutableArrayValueForKey: KVO proxy objects did not use plural selectors (e.g. remove<Key>AtIndexes:, replace<Key>AtIndexes:) when implemented by the proxied object.
  • Fixed: platform window titles could not be changed once the window had been opened.
  • Fixed with CPStepper setFrame: method modified its input.
  • Fixed: CPRadio sent its action after a programmatic setState: change.
  • Fixed: disappearing or fuzzy table header dividing lines at certain table sizes.
  • Fixed #1376: zombie table group rows.
  • Fixed with CPTextField: if a field lost focus while a key was depressed the string value would not update with the last pressed key.
  • Fixed: CPMenu -removeAllItems was not KVO compliant.
  • Fixed #1319: CPPopupButton -selectedIndex could become wrong when menu items were removed.
  • Fixed #1019: in Internet Explorer, many key equivalents such as left arrow, page up and delete did not work.

Nib2Cib

  • New: CPProgressIndicator support.
  • New: Support for image views in table views.
  • New: Support 'enabled' state for controls.
  • Much improved font support (issue #1197 among others.)
  • Support for sendsActionOnEndEditing flag.
  • Improved support for radio buttons (issue #1197).
  • nib2cib support for bold and italic (issue #1266).
  • Much improved button positioning for various button styles (issue #1268).
  • nib2cib support for NSButtonCell (e.g. checkboxes) in table columns.
  • Partial button image support in nib2cib covering NSAddTemplate and NSRemoveTemplate (standard plus and minus buttons).
  • nib2cib support for formatters such as the new number formatter.
  • nib2cib support for token fields.
  • New: XcodeCapp, a graphical utility which automates the nib2cib process and makes it easy to use Xcode 4's Interface Builder to visually create and edit the user interface of a Cappuccino application. XcodeCapp replaces the older command line based xcodecapp utility.

Bug Fixes:

  • Fixed: sometimes nib2cibbed check boxes would appear out of place.
  • Fixed #1190: potential Result of expression '_subviews[index]' [null] is not an object error for nib2cibbed radio groups.
  • Fixed: could not load theme errors.
  • Fixed #1265: enabled state for NSColorWell was not read properly.

Misc

  • Fixed Objective-J Preprocessor tests: scoping bug that caused only the last file in FILENAMES to be tested.
  • Improved: Xcode 4.0 support for building NativeHost.
  • Documentation updates: new front page, tweaked design and many more documented classes and methods.
  • More complete capp --help.
  • man page for capp.
  • Fixed #1259: issues finding Mac OS X 10.5 SDK on certain machines when building NativeHost.
  • New: "framework" template for capp which generates a skeleton Cappuccino Framework (issue #1321).
  • Cappuccino moved to a new GitHub location: https://github.com/cappuccino/cappuccino.
  • Simplified bootstrap which better hides complexity.
  • When bootstrapping, don't suggest changing NARWHAL_ENGINE to jsc if it's already jsc.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.