29 @global _CPPlatformWindowWillCloseNotification
31 @
typedef _CPWindowFullPlatformWindowSession
37 - (BOOL)windowShouldClose:(
CPWindow)aWindow;
38 - (CGSize)windowWillResize:(
CPWindow)sender toSize:(CGSize)aSize;
51 - (void)windowWillClose:(
CPWindow)aWindow;
73 CPLeftArrowFunctionKey,
74 CPRightArrowFunctionKey,
76 CPDownArrowFunctionKey,
78 CPPageDownFunctionKey,
148 BOOL _hasBeenOrderedIn;
149 BOOL _isMiniaturized;
152 BOOL _isMovableByWindowBackground;
154 BOOL _constrainsToUsableScreen;
155 unsigned _shadowStyle;
156 BOOL _showsResizeIndicator;
158 int _positioningMask;
159 CGRect _positioningScreenRect;
161 BOOL _isDocumentEdited;
162 BOOL _isDocumentSaving;
170 BOOL _handlingTrackingAreaEvent;
171 BOOL _restartHandlingTrackingAreaEvent;
172 CPArray _previousMouseEnteredStack;
173 CPArray _previousCursorUpdateStack;
174 CPArray _mouseEnteredStack;
175 CPArray _cursorUpdateStack;
176 CPArray _queuedEvents;
177 CPArray _trackingAreaViews;
178 id _activeCursorTrackingArea;
179 CPArray _queuedTrackingEvents;
180 CPView _leftMouseDownView;
181 CPView _rightMouseDownView;
186 BOOL _hasBecomeKeyWindow;
187 id <CPWindowDelegate> _delegate;
188 unsigned _implementedDelegateMethods;
192 BOOL _acceptsMouseMovedEvents;
193 BOOL _ignoresMouseEvents;
201 CPURL _representedURL;
203 CPSet _registeredDraggedTypes;
204 CPArray _registeredDraggedTypesArray;
208 BOOL _defaultButtonEnabled;
210 BOOL _autorecalculatesKeyViewLoop;
211 BOOL _keyViewLoopIsDirty;
213 BOOL _sharesChromeWithPlatformWindow;
217 DOMElement _DOMElement;
220 unsigned _autoresizingMask;
222 BOOL _isFullPlatformWindow;
223 _CPWindowFullPlatformWindowSession _fullPlatformWindowSession;
226 CPArray _childWindows;
227 CPWindowOrderingMode _childOrdering;
232 _CPWindowFrameAnimation _frameAnimation;
235 + (Class)_binderClassForBinding:(
CPString)aBinding
240 return [
super _binderClassForBinding:aBinding];
263 - (id)initWithContentRect:(CGRect)aContentRect styleMask:(
unsigned)aStyleMask
269 var windowViewClass = [[
self class] _windowViewClassForStyleMask:aStyleMask];
271 _frame = [windowViewClass frameRectForContentRect:aContentRect];
272 _constrainsToUsableScreen = YES;
284 _frame.size.height = MIN(768.0, visibleFrame.size.height);
285 _frame.size.width = MIN(1024.0, visibleFrame.size.width);
286 _frame.origin.x = (visibleFrame.size.width - _frame.size.width) / 2;
287 _frame.origin.y = (visibleFrame.size.height - _frame.size.height) / 2;
294 _isFullPlatformWindow = NO;
295 _registeredDraggedTypes = [CPSet set];
296 _registeredDraggedTypesArray = [];
297 _acceptsMouseMovedEvents = YES;
299 _hasBeenOrderedIn = NO;
310 _windowNumber = [CPApp._windows count];
311 CPApp._windows[_windowNumber] =
self;
313 _styleMask = aStyleMask;
315 [
self setLevel:CPNormalWindowLevel];
317 _handlingTrackingAreaEvent = NO;
318 _restartHandlingTrackingAreaEvent = NO;
319 _trackingAreaViews = [];
320 _previousMouseEnteredStack = [];
321 _previousCursorUpdateStack = [];
322 _mouseEnteredStack = [];
323 _cursorUpdateStack = [];
325 _queuedTrackingEvents = [];
326 _activeCursorTrackingArea = nil;
329 _windowView = [[windowViewClass alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame)) styleMask:aStyleMask];
331 [_windowView _setWindow:self];
332 [_windowView setNextResponder:self];
335 _minSize = [
self _calculateMinSizeForProposedSize:CGSizeMake(0.0, 0.0)];
336 _maxSize = CGSizeMake(1000000.0, 1000000.0);
343 _firstResponder =
self;
346 _DOMElement = document.createElement(
"div");
348 _DOMElement.style.position =
"absolute";
349 _DOMElement.style.visibility =
"visible";
350 _DOMElement.style.zIndex = 0;
352 if (![
self _sharesChromeWithPlatformWindow])
354 CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, CGRectGetMinX(_frame), CGRectGetMinY(_frame));
357 CPDOMDisplayServerSetStyleSize(_DOMElement, 1, 1);
358 CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement);
363 [
self setHasShadow:aStyleMask !== CPBorderlessWindowMask];
368 _autorecalculatesKeyViewLoop = NO;
369 _defaultButtonEnabled = YES;
370 _keyViewLoopIsDirty = NO;
371 _hasBecomeKeyWindow = NO;
377 name:CPWindowResizeStyleGlobalChangeNotification
386 return _platformWindow;
402 _platformWindow = aPlatformWindow;
403 [_platformWindow _setTitle:_title window:self];
413 + (Class)_windowViewClassForStyleMask:(
unsigned)aStyleMask
416 return _CPHUDWindowView;
419 return _CPBorderlessWindowView;
422 return _CPDocModalWindowView;
424 else if (aStyleMask & _CPModalWindowMask)
425 return _CPModalWindowView;
427 return _CPStandardWindowView;
430 + (Class)_windowViewClassForFullPlatformWindowStyleMask:(
unsigned)aStyleMask
432 return _CPBorderlessBridgeWindowView;
439 if (_positioningScreenRect)
443 origin =
frame.origin;
445 if (actualScreenRect)
450 origin.x *= (actualScreenRect.size.width / _positioningScreenRect.size.width);
452 else if (_positioningMask & CPWindowPositionFlexibleLeft)
455 origin.x += actualScreenRect.size.width - _positioningScreenRect.size.width;
465 origin.y *= (actualScreenRect.size.height / _positioningScreenRect.size.height);
467 else if (_positioningMask & CPWindowPositionFlexibleTop)
470 origin.y += actualScreenRect.size.height - _positioningScreenRect.size.height;
484 if ([
self _hasKeyViewLoop:[_contentView subviews]])
486 var views = [
self _viewsSortedByPosition],
487 count = [views count];
491 for (var i = 1; i < count; ++i)
495 if ([view nextKeyView])
497 [_contentView setNextKeyView:view];
506 [
self _doRecalculateKeyViewLoop];
510 - (void)_setWindowView:(
CPView)aWindowView
512 if (_windowView === aWindowView)
515 var oldWindowView = _windowView;
517 _windowView = aWindowView;
521 [oldWindowView _setWindow:nil];
522 [oldWindowView noteToolbarChanged];
525 CPDOMDisplayServerRemoveChild(_DOMElement, oldWindowView._DOMElement);
532 CPDOMDisplayServerAppendChild(_DOMElement, _windowView._DOMElement);
535 var contentRect = [_contentView convertRect:[_contentView bounds] toView:nil];
539 [_windowView _setWindow:self];
540 [_windowView setNextResponder:self];
541 [_windowView addSubview:_contentView];
542 [_windowView setTitle:_title];
543 [_windowView noteToolbarChanged];
561 - (void)setFullPlatformWindow:(BOOL)shouldBeFullPlatformWindow
563 if (![_platformWindow supportsFullPlatformWindows])
566 shouldBeFullPlatformWindow = !!shouldBeFullPlatformWindow;
568 if (_isFullPlatformWindow === shouldBeFullPlatformWindow)
571 _isFullPlatformWindow = shouldBeFullPlatformWindow;
573 if (_isFullPlatformWindow)
575 _fullPlatformWindowSession = _CPWindowFullPlatformWindowSessionMake(_windowView, [
self contentRectForFrameRect:[
self frame]], [
self hasShadow], [
self level]);
577 var fullPlatformWindowViewClass = [[
self class] _windowViewClassForFullPlatformWindowStyleMask:_styleMask],
578 windowView = [[fullPlatformWindowViewClass alloc] initWithFrame:CGRectMakeZero() styleMask:_styleMask];
580 if (_platformWindow != [
CPPlatformWindow primaryPlatformWindow] && [_platformWindow _hasInitializeInstanceWithWindow])
581 [_platformWindow setContentRect:[
self frame]];
583 [
self _setWindowView:windowView];
585 [
self setLevel:CPBackgroundWindowLevel];
588 [
self setFrame:[_platformWindow visibleFrame]];
592 var windowView = _fullPlatformWindowSession.windowView;
594 [
self _setWindowView:windowView];
596 [
self setLevel:_fullPlatformWindowSession.level];
597 [
self setHasShadow:_fullPlatformWindowSession.hasShadow];
600 [
self setFrame:[windowView frameRectForContentRect:_fullPlatformWindowSession.contentRect]];
609 return _isFullPlatformWindow;
637 + (CGRect)frameRectForContentRect:(CGRect)aContentRect styleMask:(
unsigned)aStyleMask
639 return [[[
self class] _windowViewClassForStyleMask:aStyleMask] frameRectForContentRect:aContentRect];
646 - (CGRect)contentRectForFrameRect:(CGRect)aFrame
648 return [_windowView contentRectForFrameRect:aFrame];
656 - (CGRect)frameRectForContentRect:(CGRect)aContentRect
658 return [_windowView frameRectForContentRect:aContentRect];
666 return CGRectMakeCopy(_frame);
676 - (void)setFrame:(CGRect)aFrame display:(BOOL)shouldDisplay animate:(BOOL)shouldAnimate
678 [
self _setFrame:aFrame display:shouldDisplay animate:shouldAnimate constrainWidth:NO constrainHeight:YES];
681 - (void)_setFrame:(CGRect)aFrame
display:(BOOL)shouldDisplay animate:(BOOL)shouldAnimate constrainWidth:(BOOL)shouldConstrainWidth constrainHeight:(BOOL)shouldConstrainHeight
683 var
frame = CGRectMakeCopy(aFrame),
684 value = frame.origin.x,
685 delta = value - FLOOR(value);
688 frame.origin.x = value > 0.879 ? CEIL(value) : FLOOR(value);
690 value = frame.origin.y;
691 delta = value - FLOOR(value);
694 frame.origin.y = value > 0.879 ? CEIL(value) : FLOOR(value);
696 value = frame.size.width;
697 delta = value - FLOOR(value);
700 frame.size.width = value > 0.15 ? CEIL(value) : FLOOR(value);
702 value = frame.size.height;
703 delta = value - FLOOR(value);
706 frame.size.height = value > 0.15 ? CEIL(value) : FLOOR(value);
708 frame = [
self _constrainFrame:frame toUsableScreenWidth:shouldConstrainWidth andHeight:shouldConstrainHeight];
712 [_frameAnimation stopAnimation];
713 _frameAnimation = [[_CPWindowFrameAnimation alloc] initWithWindow:self targetFrame:frame];
715 [_frameAnimation startAnimation];
719 var origin = _frame.origin,
720 newOrigin = frame.origin,
721 originMoved = !CGPointEqualToPoint(origin, newOrigin);
725 delta = CGPointMake(newOrigin.x - origin.x, newOrigin.y - origin.y);
726 origin.x = newOrigin.x;
727 origin.y = newOrigin.y;
730 if (![
self _sharesChromeWithPlatformWindow])
732 CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, origin.x, origin.y);
738 [
self _setAttachedSheetFrameOrigin];
743 var size = _frame.size,
744 newSize = frame.size;
746 if (!CGSizeEqualToSize(size, newSize))
748 size.width = newSize.width;
749 size.height = newSize.height;
752 size = [
self _sendDelegateWindowWillResizeToSize:size];
754 [_windowView setFrameSize:size];
757 [_shadowView setNeedsLayout];
763 if ([
self _sharesChromeWithPlatformWindow])
764 [_platformWindow setContentRect:_frame];
767 [
self _moveChildWindows:delta];
770 if ([_platformWindow _canUpdateContentRect] && _isFullPlatformWindow && _platformWindow != [
CPPlatformWindow primaryPlatformWindow])
771 [_platformWindow setContentRect:aFrame];
778 - (CGRect)_constrainFrame:(CGRect)aFrame toUsableScreenWidth:(BOOL)constrainWidth andHeight:(BOOL)constrainHeight
780 var
frame = CGRectMakeCopy(aFrame);
782 if (!_constrainsToUsableScreen || !_isVisible)
785 var usableRect = [_platformWindow usableContentFrame];
790 frame.origin.x = MAX(frame.origin.x, usableRect.origin.x);
793 var maxX = MIN(CGRectGetMaxX(frame), CGRectGetMaxX(usableRect));
794 frame.origin.x = maxX - frame.size.width;
797 var usableWidth = CGRectGetWidth(usableRect);
799 if (CGRectGetWidth(frame) > usableWidth)
801 frame.origin.x = CGRectGetMinX(usableRect);
802 frame.size.width = MAX(usableWidth, _minSize.width);
809 frame.origin.y = MAX(frame.origin.y, usableRect.origin.y);
812 var maxY = MIN(CGRectGetMaxY(frame), CGRectGetMaxY(usableRect));
813 frame.origin.y = maxY - frame.size.height;
816 var usableHeight = CGRectGetHeight(usableRect);
818 if (CGRectGetHeight(frame) > usableHeight)
820 frame.origin.y = CGRectGetMinY(usableRect);
821 frame.size.height = MAX(usableHeight, _minSize.height);
835 - (CGRect)_constrainOriginOfFrame:(CGRect)aFrame
837 var
frame = CGRectMakeCopy(aFrame);
839 if (!_constrainsToUsableScreen || !_isVisible)
842 var usableRect = [_platformWindow usableContentFrame],
843 minimumSize = [_windowView _minimumResizeSize];
846 frame.origin.x = MAX(frame.origin.x, CGRectGetMinX(usableRect) + minimumSize.width - CGRectGetWidth(frame));
849 frame.origin.x = MIN(frame.origin.x, CGRectGetMaxX(usableRect) - minimumSize.width);
852 frame.origin.y = MAX(frame.origin.y, CGRectGetMinY(usableRect));
860 - (void)_moveChildWindows:(CGPoint)delta
862 [_childWindows enumerateObjectsUsingBlock:function(childWindow)
864 var origin = [childWindow frame].origin;
866 [childWindow setFrameOrigin:CGPointMake(origin.x + delta.x, origin.y + delta.y)];
876 - (void)setFrame:(CGRect)aFrame display:(BOOL)shouldDisplay
885 - (void)setFrame:(CGRect)aFrame
894 - (void)setFrameOrigin:(CGPoint)anOrigin
896 var
frame = [
self _constrainOriginOfFrame:CGRectMake(anOrigin.x, anOrigin.y, _frame.size.width, _frame.size.height)];
897 [
self _setFrame:frame display:YES animate:NO constrainWidth:NO constrainHeight:NO];
904 - (void)setFrameSize:(CGSize)aSize
906 [
self setFrame:CGRectMake(CGRectGetMinX(_frame), CGRectGetMinY(_frame), aSize.width, aSize.height)
display:YES
animate:NO];
913 - (void)orderFront:(
id)aSender
924 [_platformWindow _setShouldUpdateContentRect:NO];
928 [_parentView orderFront:self];
931 var wasVisible = _isVisible;
933 [_platformWindow orderFront:self];
934 [_platformWindow order:CPWindowAbove window:self relativeTo:nil];
938 [
self _setFrame:_frame display:YES animate:NO constrainWidth:YES constrainHeight:YES];
941 if (!
CPApp._keyWindow)
944 if ([
self isKeyWindow] && (_firstResponder ===
self || !_firstResponder))
945 [
self makeFirstResponder:_initialFirstResponder];
947 if (!
CPApp._mainWindow)
950 [_platformWindow _setShouldUpdateContentRect:YES];
957 - (void)_parentDidOrderInChild
964 - (void)_windowWillBeAddedToTheDOM
968 name:_CPPlatformWindowWillCloseNotification
977 - (void)_windowWillBeRemovedFromTheDOM
982 _hasBecomeKeyWindow = NO;
991 - (void)orderBack:(
id)aSender
1005 - (void)orderOut:(
id)aSender
1010 - (void)_orderOutRecursively:(BOOL)recursive
1018 [
self._parentView _detachSheetWindow];
1023 [_childWindows makeObjectsPerformSelector:@selector(_orderOutRecursively:) withObject:recursive];
1026 if ([
self _sharesChromeWithPlatformWindow])
1027 [_platformWindow orderOut:self];
1029 if (_isFullPlatformWindow && _platformWindow != [
CPPlatformWindow primaryPlatformWindow])
1030 [_platformWindow orderOut:self];
1032 [_platformWindow order:CPWindowOut window:self relativeTo:nil];
1036 [
self _updateMainAndKeyWindows];
1044 - (void)orderWindow:(CPWindowOrderingMode)orderingMode relativeTo:(
int)otherWindowNumber
1049 [_parentWindow removeChildWindow:self];
1052 [
self _orderOutRecursively:!_parentWindow];
1054 else if (orderingMode ===
CPWindowAbove && otherWindowNumber === 0)
1056 else if (orderingMode ===
CPWindowBelow && otherWindowNumber === 0)
1060 [_platformWindow order:orderingMode window:self relativeTo:CPApp._windows[otherWindowNumber]];
1068 - (void)setLevel:(
int)aLevel
1070 if (aLevel === _level)
1073 [_platformWindow moveWindow:self fromLevel:_level toLevel:aLevel];
1076 [_childWindows makeObjectsPerformSelector:@selector(setLevel:) withObject:_level];
1078 if ([
self _sharesChromeWithPlatformWindow])
1079 [_platformWindow setLevel:aLevel];
1103 + (void)setGlobalResizeStyle:(
int)aStyle
1116 + (void)setConstrainWindowsToUsableScreen:(BOOL)shouldConstrain
1129 - (void)_didReceiveResizeStyleChange:(
CPNotification)aNotification
1131 [_windowView setShowsResizeIndicator:_styleMask & CPResizableWindowMask];
1147 return _showsResizeIndicator;
1154 - (void)setShowsResizeIndicator:(BOOL)shouldShowResizeIndicator
1156 shouldShowResizeIndicator = !!shouldShowResizeIndicator;
1158 if (_showsResizeIndicator === shouldShowResizeIndicator)
1161 _showsResizeIndicator = shouldShowResizeIndicator;
1170 return [_windowView resizeIndicatorOffset];
1177 - (void)setResizeIndicatorOffset:(CGSize)anOffset
1179 [_windowView setResizeIndicatorOffset:anOffset];
1189 if (_contentView && _contentView !== aView)
1190 [_contentView removeFromSuperview];
1192 var
bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame));
1194 _contentView = aView;
1197 [_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
1198 [_windowView addSubview:_contentView];
1204 if (_initialFirstResponder && _initialFirstResponder !==
self)
1205 _initialFirstResponder =
self;
1213 return _contentView;
1220 - (void)setAlphaValue:(
float)aValue
1222 [_windowView setAlphaValue:aValue];
1230 return [_windowView alphaValue];
1239 [_windowView setBackgroundColor:aColor];
1247 return [_windowView backgroundColor];
1257 - (void)setMinSize:(CGSize)aSize
1259 if (CGSizeEqualToSize(_minSize, aSize))
1262 _minSize = [
self _calculateMinSizeForProposedSize:aSize];
1264 var size = CGSizeMakeCopy([
self frame].size),
1265 needsFrameChange = NO;
1267 if (size.width < _minSize.width)
1269 size.width = _minSize.width;
1270 needsFrameChange = YES;
1273 if (size.height < _minSize.height)
1275 size.height = _minSize.height;
1276 needsFrameChange = YES;
1279 if (needsFrameChange)
1292 - (CGSize)_calculateMinSizeForProposedSize:(CGSize)proposedSize
1295 minHeight = CGRectGetHeight(_frame) - CGRectGetHeight(contentFrame);
1297 return CGSizeMake(MAX(proposedSize.width, 0), MAX(proposedSize.height, minHeight));
1306 - (void)setMaxSize:(CGSize)aSize
1308 if (CGSizeEqualToSize(_maxSize, aSize))
1311 _maxSize = CGSizeMakeCopy(aSize);
1313 var size = CGSizeMakeCopy([
self frame].size),
1314 needsFrameChange = NO;
1316 if (size.width > _maxSize.width)
1318 size.width = _maxSize.width;
1319 needsFrameChange = YES;
1322 if (size.height > _maxSize.height)
1324 size.height = _maxSize.height;
1325 needsFrameChange = YES;
1328 if (needsFrameChange)
1348 - (void)_updateShadow
1350 if ([
self _sharesChromeWithPlatformWindow])
1355 CPDOMDisplayServerRemoveChild(_DOMElement, _shadowView._DOMElement);
1360 [_platformWindow setHasShadow:_hasShadow];
1365 if (_hasShadow && !_shadowView)
1367 _shadowView = [[_CPShadowWindowView alloc] initWithFrame:CGRectMakeZero()];
1369 [_shadowView setWindowView:_windowView];
1370 [_shadowView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
1371 [_shadowView setNeedsLayout];
1374 CPDOMDisplayServerInsertBefore(_DOMElement, _shadowView._DOMElement, _windowView._DOMElement);
1377 else if (!_hasShadow && _shadowView)
1380 CPDOMDisplayServerRemoveChild(_DOMElement, _shadowView._DOMElement);
1390 - (void)setHasShadow:(BOOL)shouldHaveShadow
1392 if (_hasShadow === shouldHaveShadow)
1395 _hasShadow = shouldHaveShadow;
1397 [
self _updateShadow];
1411 - (void)setShadowStyle:(
unsigned)aStyle
1413 _shadowStyle = aStyle;
1422 - (void)setDelegate:(
id <CPWindowDelegate>)aDelegate
1424 if (_delegate === aDelegate)
1429 [defaultCenter removeObserver:_delegate name:CPWindowDidResignKeyNotification object:self];
1430 [defaultCenter removeObserver:_delegate name:CPWindowDidBecomeKeyNotification object:self];
1431 [defaultCenter removeObserver:_delegate name:CPWindowDidBecomeMainNotification object:self];
1432 [defaultCenter removeObserver:_delegate name:CPWindowDidResignMainNotification object:self];
1433 [defaultCenter removeObserver:_delegate name:CPWindowDidMoveNotification object:self];
1434 [defaultCenter removeObserver:_delegate name:CPWindowDidResizeNotification object:self];
1435 [defaultCenter removeObserver:_delegate name:CPWindowWillBeginSheetNotification object:self];
1436 [defaultCenter removeObserver:_delegate name:CPWindowDidEndSheetNotification object:self];
1437 [defaultCenter removeObserver:_delegate name:CPWindowDidMiniaturizeNotification object:self];
1438 [defaultCenter removeObserver:_delegate name:CPWindowDidDeminiaturizeNotification object:self];
1439 [defaultCenter removeObserver:_delegate name:CPWindowWillMiniaturizeNotification object:self];
1441 _delegate = aDelegate;
1442 _implementedDelegateMethods = 0;
1444 if ([_delegate respondsToSelector:
@selector(windowShouldClose:)])
1447 if ([_delegate respondsToSelector:
@selector(windowWillReturnUndoManager:)])
1450 if ([_delegate respondsToSelector:
@selector(windowWillClose:)])
1453 if ([_delegate respondsToSelector:
@selector(windowWillResize:toSize:)])
1456 if ([_delegate respondsToSelector:
@selector(windowDidResignKey:)])
1458 addObserver:_delegate
1459 selector:@selector(windowDidResignKey:)
1460 name:CPWindowDidResignKeyNotification
1463 if ([_delegate respondsToSelector:
@selector(windowDidBecomeKey:)])
1465 addObserver:_delegate
1466 selector:@selector(windowDidBecomeKey:)
1467 name:CPWindowDidBecomeKeyNotification
1470 if ([_delegate respondsToSelector:
@selector(windowDidBecomeMain:)])
1472 addObserver:_delegate
1473 selector:@selector(windowDidBecomeMain:)
1474 name:CPWindowDidBecomeMainNotification
1477 if ([_delegate respondsToSelector:
@selector(windowDidResignMain:)])
1479 addObserver:_delegate
1480 selector:@selector(windowDidResignMain:)
1481 name:CPWindowDidResignMainNotification
1484 if ([_delegate respondsToSelector:
@selector(windowDidMove:)])
1486 addObserver:_delegate
1487 selector:@selector(windowDidMove:)
1488 name:CPWindowDidMoveNotification
1491 if ([_delegate respondsToSelector:
@selector(windowDidResize:)])
1493 addObserver:_delegate
1494 selector:@selector(windowDidResize:)
1495 name:CPWindowDidResizeNotification
1498 if ([_delegate respondsToSelector:
@selector(windowWillBeginSheet:)])
1500 addObserver:_delegate
1501 selector:@selector(windowWillBeginSheet:)
1502 name:CPWindowWillBeginSheetNotification
1505 if ([_delegate respondsToSelector:
@selector(windowDidEndSheet:)])
1507 addObserver:_delegate
1508 selector:@selector(windowDidEndSheet:)
1509 name:CPWindowDidEndSheetNotification
1512 if ([_delegate respondsToSelector:
@selector(windowDidMiniaturize:)])
1514 addObserver:_delegate
1515 selector:@selector(windowDidMiniaturize:)
1516 name:CPWindowDidMiniaturizeNotification
1519 if ([_delegate respondsToSelector:
@selector(windowWillMiniaturize:)])
1521 addObserver:_delegate
1522 selector:@selector(windowWillMiniaturize:)
1523 name:CPWindowWillMiniaturizeNotification
1526 if ([_delegate respondsToSelector:
@selector(windowDidDeminiaturize:)])
1528 addObserver:_delegate
1529 selector:@selector(windowDidDeminiaturize:)
1530 name:CPWindowDidDeminiaturizeNotification
1548 _windowController = aWindowController;
1556 return _windowController;
1559 - (void)doCommandBySelector:(
SEL)aSelector
1561 if ([_delegate respondsToSelector:aSelector])
1562 [_delegate performSelector:aSelector];
1574 return _initialFirstResponder;
1577 - (void)setInitialFirstResponder:(
CPView)aView
1579 _initialFirstResponder = aView;
1582 - (void)_setupFirstResponder
1587 if (!_hasBecomeKeyWindow)
1589 if (_firstResponder ===
self)
1591 if (_initialFirstResponder)
1596 var view = [_contentView nextValidKeyView];
1606 if (_firstResponder)
1619 if (_firstResponder === aResponder)
1627 _firstResponder =
self;
1632 _firstResponder = aResponder;
1644 return _firstResponder;
1649 return _acceptsMouseMovedEvents;
1652 - (void)setAcceptsMouseMovedEvents:(BOOL)shouldAcceptMouseMovedEvents
1654 _acceptsMouseMovedEvents = shouldAcceptMouseMovedEvents;
1659 return _ignoresMouseEvents;
1662 - (void)setIgnoresMouseEvents:(BOOL)shouldIgnoreMouseEvents
1664 _ignoresMouseEvents = shouldIgnoreMouseEvents;
1667 - (void)_mouseExitedResizeRect
1689 [_windowView setTitle:aTitle];
1690 [_platformWindow _setTitle:_title window:self];
1696 - (void)setTitleWithRepresentedFilename:(
CPString)aFilePath
1716 return [_representedURL absoluteString];
1724 _representedURL = aURL;
1732 return _representedURL;
1746 - (void)setMovableByWindowBackground:(BOOL)shouldBeMovableByWindowBackground
1748 _isMovableByWindowBackground = shouldBeMovableByWindowBackground;
1756 return _isMovableByWindowBackground;
1763 - (void)setMovable:(BOOL)shouldBeMovable
1765 _isMovable = shouldBeMovable;
1781 if (_isFullPlatformWindow)
1784 var size = [
self frame].size,
1787 var origin = CGPointMake((containerSize.width - size.width) / 2.0, (containerSize.height - size.height) / 2.0);
1804 var type = [anEvent
type],
1822 [_windowView mouseDown:anEvent];
1826 [sheet makeKeyAndOrderFront:self];
1845 return [CPApp activateIgnoringOtherApps:YES];
1884 else if ([anEvent charactersIgnoringModifiers] ==
CPEscapeFunctionKey && [
self _processKeyboardUIKey:anEvent])
1896 keyEquivalent = [defaultButton keyEquivalent],
1897 modifierMask = [defaultButton keyEquivalentModifierMask];
1899 if ([anEvent _triggersKeyEquivalent:keyEquivalent withModifierMask:modifierMask])
1906 return [[_windowView hitTest:point] scrollWheel:anEvent];
1910 var hitTestedView = _leftMouseDownView,
1911 selector = type ==
CPRightMouseUp ?
@selector(rightMouseUp:) :
@selector(mouseUp:);
1914 hitTestedView = [_windowView hitTest:point];
1916 [hitTestedView performSelector:selector withObject:anEvent];
1918 _leftMouseDownView = nil;
1921 [
self _flushTrackingEventQueueForMouseAt:point];
1928 _leftMouseDownView = [_windowView hitTest:point];
1933 var keyWindow = [CPApp keyWindow];
1939 [CPApp activateIgnoringOtherApps:YES];
1941 var theWindow = [anEvent window],
1942 selector = type ==
CPRightMouseDown ?
@selector(rightMouseDown:) :
@selector(mouseDown:);
1945 return [_leftMouseDownView performSelector:selector withObject:anEvent];
1951 if ([_leftMouseDownView acceptsFirstMouse:anEvent])
1952 return [_leftMouseDownView performSelector:selector withObject:anEvent];
1960 [
self _handleTrackingAreaEvent:anEvent];
1963 if (!_leftMouseDownView)
1964 return [[_windowView hitTest:point] mouseDragged:anEvent];
1970 selector =
@selector(rightMouseDragged:)
1971 if (![_leftMouseDownView respondsToSelector:selector])
1976 selector =
@selector(mouseDragged:)
1978 return [_leftMouseDownView performSelector:selector withObject:anEvent];
1983 if (!_acceptsMouseMovedEvents || sheet)
1986 [
self _handleTrackingAreaEvent:anEvent];
1995 return _windowNumber;
2005 CPApp._keyWindow =
self;
2007 if (_firstResponder !==
self && [_firstResponder respondsToSelector:
@selector(
becomeKeyWindow)])
2010 if (!_hasBecomeKeyWindow)
2014 if (![
self _hasKeyViewLoop:[_contentView subviews]])
2018 [
self _setupFirstResponder];
2019 _hasBecomeKeyWindow = YES;
2020 _platformWindow._currentKeyWindow =
self;
2022 [_windowView noteKeyWindowStateChanged];
2023 [_contentView _notifyWindowDidBecomeKey];
2053 return [CPApp keyWindow] ==
self;
2060 - (void)makeKeyAndOrderFront:(
id)aSender
2076 [[CPApp keyWindow] resignKeyWindow];
2085 if (_firstResponder !==
self && [_firstResponder respondsToSelector:
@selector(
resignKeyWindow)])
2088 if (
CPApp._keyWindow ===
self)
2089 CPApp._keyWindow = nil;
2091 _platformWindow._currentKeyWindow = nil;
2092 [_windowView noteKeyWindowStateChanged];
2093 [_contentView _notifyWindowDidResignKey];
2110 - (void)dragImage:(
CPImage)anImage at:(CGPoint)imageLocation offset:(CGSize)mouseOffset event:(
CPEvent)anEvent pasteboard:(
CPPasteboard)aPasteboard source:(
id)aSourceObject slideBack:(BOOL)slideBack
2115 - (void)_noteRegisteredDraggedTypes:(CPSet)pasteboardTypes
2117 if (!pasteboardTypes)
2120 if (!_inclusiveRegisteredDraggedTypes)
2123 [_inclusiveRegisteredDraggedTypes unionSet:pasteboardTypes];
2126 - (void)_noteUnregisteredDraggedTypes:(CPSet)pasteboardTypes
2128 if (!pasteboardTypes)
2131 [_inclusiveRegisteredDraggedTypes minusSet:pasteboardTypes];
2133 if ([_inclusiveRegisteredDraggedTypes count] === 0)
2134 _inclusiveRegisteredDraggedTypes = nil;
2147 - (void)dragView:(
CPView)aView at:(CGPoint)viewLocation offset:(CGSize)mouseOffset event:(
CPEvent)anEvent pasteboard:(
CPPasteboard)aPasteboard source:(
id)aSourceObject slideBack:(BOOL)slideBack
2156 - (void)registerForDraggedTypes:(CPArray)pasteboardTypes
2158 if (!pasteboardTypes)
2161 [
self _noteUnregisteredDraggedTypes:_registeredDraggedTypes];
2162 [_registeredDraggedTypes addObjectsFromArray:pasteboardTypes];
2163 [
self _noteRegisteredDraggedTypes:_registeredDraggedTypes];
2165 _registeredDraggedTypesArray = nil;
2174 if (!_registeredDraggedTypesArray)
2175 _registeredDraggedTypesArray = [_registeredDraggedTypes allObjects];
2177 return _registeredDraggedTypesArray;
2185 [
self _noteUnregisteredDraggedTypes:_registeredDraggedTypes];
2187 _registeredDraggedTypes = [CPSet set];
2188 _registeredDraggedTypesArray = [];
2197 - (void)setDocumentEdited:(BOOL)isDocumentEdited
2204 [
CPMenu _setMenuBarIconImageAlphaValue:_isDocumentEdited ? 0.5 : 1.0];
2206 [_windowView setDocumentEdited:isDocumentEdited];
2214 return _isDocumentEdited;
2217 - (void)setDocumentSaving:(BOOL)isDocumentSaving
2224 [
self _synchronizeSaveMenuWithDocumentSaving];
2226 [_windowView windowDidChangeDocumentSaving];
2231 return _isDocumentSaving;
2235 - (void)_synchronizeSaveMenuWithDocumentSaving
2240 var mainMenu = [CPApp mainMenu],
2241 index = [mainMenu indexOfItemWithTitle:_isDocumentSaving ? @"Save" : @"Saving..."];
2246 var item = [mainMenu itemAtIndex:index];
2248 if (_isDocumentSaving)
2252 [item setTitle:@"Saving..."];
2254 [item setEnabled:NO];
2258 [item setTitle:@"Save"];
2259 [item setImage:CPWindowSaveImage];
2260 [item setEnabled:YES];
2270 - (void)performMiniaturize:(
id)aSender
2280 - (void)miniaturize:(
id)sender
2286 [
self _updateMainAndKeyWindows];
2290 _isMiniaturized = YES;
2296 - (void)deminiaturize:(
id)sender
2302 _isMiniaturized = NO;
2310 return _isMiniaturized;
2319 - (void)performClose:(
id)aSender
2326 var
event = [CPApp currentEvent];
2337 if ([
self _delegateRespondsToWindowShouldClose])
2339 if (![
self _sendDelegateWindowShouldClose])
2342 else if ([
self respondsToSelector:
@selector(windowShouldClose:)])
2344 if (![
self windowShouldClose:
self])
2348 var documents = [_windowController documents];
2350 if ([documents count])
2352 var index = [documents indexOfObject:[_windowController document]];
2354 [documents[index] shouldCloseWindowController:_windowController
2356 shouldCloseSelector:@selector(_windowControllerContainingDocument:shouldClose:contextInfo:)
2357 contextInfo:{documents:[documents copy], visited:0, index:index}];
2363 - (void)_windowControllerContainingDocument:(
CPDocument)document shouldClose:(BOOL)shouldClose contextInfo:(Object)context
2369 count = [documents count],
2370 visited = ++context.visited,
2371 index = ++context.index % count;
2373 [document removeWindowController:windowController];
2375 if (visited < count)
2377 [windowController setDocument:documents[index]];
2379 [documents[index] shouldCloseWindowController:_windowController
2381 shouldCloseSelector:@selector(_windowControllerContainingDocument:shouldClose:contextInfo:)
2382 contextInfo:context];
2395 [
self _sendDelegateWindowWillClose];
2399 [_parentWindow removeChildWindow:self];
2400 [
self _orderOutRecursively:NO];
2401 [
self _detachFromChildrenClosing:!_parentWindow];
2404 - (void)_detachFromChildrenClosing:(BOOL)shouldCloseChildren
2407 [_childWindows enumerateObjectsUsingBlock:function(child)
2409 [child setParentWindow:nil];
2413 if (shouldCloseChildren)
2415 [_childWindows enumerateObjectsUsingBlock:function(child)
2419 [child _orderOutRecursively:NO];
2420 [child _detachFromChildrenClosing:![child parentWindow]];
2434 return [CPApp mainWindow] ===
self;
2458 [_parentView makeMainWindow];
2465 [[CPApp mainWindow] resignMainWindow];
2474 CPApp._mainWindow =
self;
2475 _platformWindow._currentMainWindow =
self;
2477 [
self _synchronizeSaveMenuWithDocumentSaving];
2479 [_windowView noteMainWindowStateChanged];
2495 if (
CPApp._mainWindow ===
self)
2496 CPApp._mainWindow = nil;
2498 _platformWindow._currentMainWindow = nil;
2499 [_windowView noteMainWindowStateChanged];
2502 - (void)_updateMainAndKeyWindows
2504 var allWindows = [CPApp orderedWindows],
2505 windowCount = [allWindows count];
2509 var keyWindow = [CPApp keyWindow];
2513 [keyWindow makeKeyWindow];
2516 var mainMenu = [CPApp mainMenu],
2517 menuBarClass = objj_getClass(
"_CPMenuBarWindow"),
2520 for (var i = 0; i < windowCount; i++)
2522 var currentWindow = allWindows[i];
2524 if ([currentWindow isKindOfClass:menuBarClass])
2525 menuWindow = currentWindow;
2527 if (currentWindow ===
self || currentWindow === menuWindow)
2532 [currentWindow makeKeyWindow];
2537 if (![
CPApp keyWindow])
2538 [menuWindow makeKeyWindow];
2544 var mainWindow = [CPApp mainWindow];
2548 [mainWindow makeMainWindow];
2551 var mainMenu = [CPApp mainMenu],
2552 menuBarClass = objj_getClass(
"_CPMenuBarWindow"),
2555 for (var i = 0; i < windowCount; i++)
2557 var currentWindow = allWindows[i];
2559 if ([currentWindow isKindOfClass:menuBarClass])
2560 menuWindow = currentWindow;
2562 if (currentWindow ===
self || currentWindow === menuWindow)
2565 if ([currentWindow
isVisible] && [currentWindow canBecomeMainWindow])
2567 [currentWindow makeMainWindow];
2590 if (_toolbar === aToolbar)
2594 [[aToolbar _window] setToolbar:nil];
2597 [_toolbar _setWindow:nil];
2599 _toolbar = aToolbar;
2602 [_toolbar _setWindow:self];
2604 [
self _noteToolbarChanged];
2607 - (void)toggleToolbarShown:(
id)aSender
2614 - (void)_noteToolbarChanged
2616 var
frame = CGRectMakeCopy([
self frame]),
2619 [_windowView noteToolbarChanged];
2621 if (_isFullPlatformWindow)
2622 newFrame = [_platformWindow visibleFrame];
2625 newFrame = CGRectMakeCopy([
self frame]);
2627 newFrame.origin = frame.origin;
2644 return _childWindows;
2647 - (void)addChildWindow:(
CPWindow)childWindow ordered:(CPWindowOrderingMode)orderingMode
2650 if ([_childWindows indexOfObject:childWindow] >= 0)
2654 [_childWindows addObject:childWindow];
2657 reason:_cmd + @" unrecognized ordering mode " + orderingMode];
2660 [childWindow _setChildOrdering:orderingMode];
2669 var index = [_childWindows indexOfObject:childWindow];
2674 [_childWindows removeObjectAtIndex:index];
2680 return _parentWindow;
2688 - (BOOL)_hasAncestorWindow:(
CPWindow)anAncestor
2690 if (!_parentWindow || !anAncestor)
2693 if (anAncestor === _parentWindow)
2696 return [_parentWindow _hasAncestorWindow:anAncestor];
2704 - (void)_setFrame:(CGRect)aFrame
delegate:(id)
delegate duration:(
int)duration curve:(CPAnimationCurve)curve
2706 [_frameAnimation stopAnimation];
2707 _frameAnimation = [[_CPWindowFrameAnimation alloc] initWithWindow:self targetFrame:aFrame];
2708 [_frameAnimation setDelegate:delegate];
2709 [_frameAnimation setAnimationCurve:curve];
2710 [_frameAnimation setDuration:duration];
2711 [_frameAnimation startAnimation];
2714 - (CPTimeInterval)animationResizeTime:(CGRect)newWindowFrame
2719 - (void)_setAttachedSheetFrameOrigin
2723 contentRect = [_contentView frame],
2724 sheetFrame = CGRectMakeCopy([attachedSheet
frame]);
2726 sheetFrame.origin.y = CGRectGetMinY(_frame) + CGRectGetMinY(contentRect);
2727 sheetFrame.origin.x = CGRectGetMinX(_frame) + FLOOR((CGRectGetWidth(_frame) - CGRectGetWidth(sheetFrame)) / 2.0);
2729 [attachedSheet setFrame:sheetFrame display:YES animate:NO];
2732 - (void)_previousSheetIsClosedNotification:(
CPNotification)aNotification
2736 var sheet = _sheetContext[@"nextSheet"],
2737 modalDelegate = _sheetContext[@"nextModalDelegate"],
2738 endSelector = _sheetContext[@"nextEndSelector"],
2739 contextInfo = _sheetContext[@"nextContextInfo"];
2742 setTimeout(
function()
2744 [sheet._windowView _enableSheet:YES inWindow:self];
2745 [
self _attachSheet:sheet modalDelegate:modalDelegate didEndSelector:endSelector contextInfo:contextInfo];
2752 - (
void)_attachSheet:(
CPWindow)aSheet modalDelegate:(
id)aModalDelegate
2753 didEndSelector:(SEL)didEndSelector contextInfo:(
id)contextInfo
2758 if (_sheetContext[
@"isClosing"])
2761 _sheetContext[@"nextSheet"] = aSheet;
2762 _sheetContext[@"nextModalDelegate"] = aModalDelegate;
2763 _sheetContext[@"nextEndSelector"] = didEndSelector;
2764 _sheetContext[@"nextContextInfo"] = contextInfo;
2772 reason:@"The target window of beginSheet: already has a sheet, did you forget orderOut: ?"];
2779 "modalDelegate": aModalDelegate,
2780 "endSelector": didEndSelector,
2781 "contextInfo": contextInfo,
2785 "savedConstrains": aSheet._constrainsToUsableScreen
2789 aSheet._constrainsToUsableScreen = NO;
2805 var
delegate = _sheetContext["modalDelegate"],
2806 endSelector = _sheetContext["endSelector"];
2810 if (delegate && endSelector)
2812 if (_sheetContext[
"isAttached"])
2813 delegate.isa.objj_msgSend3(delegate, endSelector, _sheetContext[
"sheet"], _sheetContext[
"returnCode"],
2814 _sheetContext[
"contextInfo"]);
2816 _sheetContext["deferDidEndSelector"] = YES;
2824 - (void)_detachSheetWindow
2826 if (_sheetContext[
"isClosing"])
2829 _sheetContext["isAttached"] = NO;
2830 _sheetContext["isClosing"] = YES;
2831 _sheetContext["opened"] = NO;
2845 - (void)_cleanupSheetWindow
2847 var sheet = _sheetContext["sheet"],
2848 deferDidEnd = _sheetContext["deferDidEndSelector"];
2854 [
self _removeClipForSheet:sheet];
2857 sheet._isSheet = NO;
2858 [sheet._windowView _enableSheet:NO inWindow:self];
2859 sheet._constrainsToUsableScreen = _sheetContext["savedConstrains"];
2862 [sheet orderOut:self];
2868 var
delegate = _sheetContext["modalDelegate"],
2869 selector = _sheetContext["endSelector"],
2870 returnCode = _sheetContext["returnCode"],
2871 contextInfo = _sheetContext["contextInfo"];
2874 _sheetContext = nil;
2875 sheet._parentView = nil;
2877 if (delegate != null)
2878 delegate.isa.objj_msgSend3(delegate, selector, sheet, returnCode, contextInfo);
2882 _sheetContext = nil;
2883 sheet._parentView = nil;
2888 - (void)animationDidEnd:(
id)anim
2890 var sheet = _sheetContext["sheet"];
2892 if (anim._window != sheet)
2902 - (void)_sheetShouldAnimateIn:(
CPTimer)timer
2905 if (_sheetContext[
"isOpening"] || _sheetContext[
"isClosing"])
2908 var sheet = _sheetContext["sheet"];
2909 sheet._isSheet = YES;
2910 sheet._parentView =
self;
2916 sheet._isModal = NO;
2918 if ([
CPApp modalWindow] ===
self)
2920 [CPApp runModalForWindow:sheet];
2921 sheet._isModal = YES;
2926 var sheetFrame = [sheet frame],
2927 sheetShadowFrame = sheet._hasShadow ? [sheet._shadowView frame] : sheetFrame,
2929 originX = frame.origin.x + FLOOR((frame.size.width - sheetFrame.size.width) / 2),
2930 startFrame = CGRectMake(originX, -sheetShadowFrame.size.height, sheetFrame.size.width, sheetFrame.size.height),
2931 endY = -1 + [_windowView bodyOffset] - [[
self contentView]
frame].origin.y,
2932 endFrame = CGRectMake(originX, endY, sheetFrame.size.width, sheetFrame.size.height);
2936 endY += [[_toolbar _toolbarView] frameSize].height;
2937 endFrame = CGRectMake(originX, endY, sheetFrame.size.width, sheetFrame.size.height);
2941 [sheet setFrameOrigin:CGPointMake(0, -13000)];
2944 [sheet orderFront:self];
2945 [
self _clipSheet:sheet];
2947 [sheet setFrame:startFrame display:YES animate:NO];
2949 _sheetContext["opened"] = YES;
2950 _sheetContext["shouldClose"] = NO;
2951 _sheetContext["isOpening"] = YES;
2953 [sheet _setFrame:endFrame delegate:self duration:[
self animationResizeTime:endFrame] curve:CPAnimationEaseOut];
2956 - (void)_sheetShouldAnimateOut:(
CPTimer)timer
2958 if (_sheetContext[
"isOpening"])
2961 _sheetContext["shouldClose"] = YES;
2968 var sheet = _sheetContext["sheet"],
2969 sheetFrame = [sheet frame],
2970 fullHeight = sheet._hasShadow ? [sheet._shadowView frame].size.height : sheetFrame.size.height,
2971 endFrame = CGRectMakeCopy(sheetFrame),
2975 sheet._constrainsToUsableScreen = NO;
2977 [sheet setFrameOrigin:CGPointMake(sheetFrame.origin.x, sheetFrame.origin.y - contentOrigin.y)];
2978 [
self _clipSheet:sheet];
2980 endFrame.origin.y = -fullHeight;
2981 [sheet _setFrame:endFrame delegate:self duration:[
self animationResizeTime:endFrame] curve:CPAnimationEaseIn];
2985 [
self _sheetAnimationDidEnd:nil];
2989 - (void)_sheetAnimationDidEnd:(
CPTimer)timer
2991 var sheet = _sheetContext["sheet"];
2993 _sheetContext["isOpening"] = NO;
2994 _sheetContext["isClosing"] = NO;
2996 if (_sheetContext[
"opened"] === YES)
2998 var sheetFrame = [sheet frame],
2999 sheetOrigin = CGPointMakeCopy(sheetFrame.origin);
3001 [
self _removeClipForSheet:sheet];
3002 [sheet setFrameOrigin:CGPointMake(sheetOrigin.x, [sheet frame].origin.y + sheetOrigin.y)];
3005 if (_sheetContext[
"shouldClose"] === YES)
3006 [
self _detachSheetWindow];
3008 [sheet makeKeyWindow];
3013 [
self _cleanupSheetWindow];
3017 - (void)_clipSheet:(
CPWindow)aSheet
3019 var clipRect = [_platformWindow contentBounds];
3022 [[_platformWindow layerAtLevel:_level create:NO] clipWindow:aSheet toRect:clipRect];
3025 - (void)_removeClipForSheet:(
CPWindow)aSheet
3027 [[_platformWindow layerAtLevel:_level create:NO] removeClipForWindow:aSheet];
3035 if (_sheetContext === nil)
3038 return _sheetContext["sheet"];
3072 return [_contentView performKeyEquivalent:anEvent];
3079 if ([anEvent _couldBeKeyEquivalent] && [
self performKeyEquivalent:anEvent])
3087 if (![
self _processKeyboardUIKey:anEvent])
3099 - (BOOL)_processKeyboardUIKey:(
CPEvent)anEvent
3108 if ([selectors count] <= 0)
3111 var selector = [selectors objectAtIndex:0];
3116 - (void)_dirtyKeyViewLoop
3118 if (_autorecalculatesKeyViewLoop)
3119 _keyViewLoopIsDirty = YES;
3127 - (BOOL)_hasKeyViewLoop:(CPArray)theViews
3130 count = [theViews count];
3132 for (i = 0; i < count; ++i)
3134 var view = theViews[i];
3136 if ([view nextKeyView] || [view previousKeyView])
3140 for (i = 0; i < count; ++i)
3142 var subviews = [theViews[i] subviews];
3144 if ([subviews count] && [
self _hasKeyViewLoop:subviews])
3160 [
self _doRecalculateKeyViewLoop];
3163 - (CPArray)_viewsSortedByPosition
3165 var views = [CPArray arrayWithObject:_contentView];
3167 views = views.concat([
self _subviewsSortedByPosition:[_contentView subviews]]);
3172 - (CPArray)_subviewsSortedByPosition:(CPArray)theSubviews
3180 theSubviews = [theSubviews copy];
3181 [theSubviews sortUsingFunction:keyViewComparator context:nil];
3183 var sortedViews = [];
3185 for (var i = 0, count = [theSubviews count]; i < count; ++i)
3187 var view = theSubviews[i],
3188 subviews = [view subviews];
3190 sortedViews.push(view);
3192 if ([subviews count])
3193 sortedViews = sortedViews.concat([
self _subviewsSortedByPosition:subviews]);
3199 - (void)_doRecalculateKeyViewLoop
3201 var views = [
self _viewsSortedByPosition];
3203 for (var index = 0, count = [views count]; index < count; ++index)
3204 [views[index] setNextKeyView:views[(index + 1) % count]];
3206 _keyViewLoopIsDirty = NO;
3209 - (void)setAutorecalculatesKeyViewLoop:(BOOL)shouldRecalculate
3211 if (_autorecalculatesKeyViewLoop === shouldRecalculate)
3214 _autorecalculatesKeyViewLoop = shouldRecalculate;
3219 return _autorecalculatesKeyViewLoop;
3222 - (void)selectNextKeyView:(
id)sender
3224 if (_keyViewLoopIsDirty)
3225 [
self _doRecalculateKeyViewLoop];
3227 var nextValidKeyView = nil;
3229 if ([_firstResponder isKindOfClass:[
CPView class]])
3230 nextValidKeyView = [_firstResponder nextValidKeyView];
3232 if (!nextValidKeyView)
3235 nextValidKeyView = _initialFirstResponder;
3237 nextValidKeyView = [_initialFirstResponder nextValidKeyView];
3240 if (nextValidKeyView)
3244 - (void)selectPreviousKeyView:(
id)sender
3246 if (_keyViewLoopIsDirty)
3247 [
self _doRecalculateKeyViewLoop];
3249 var previousValidKeyView = nil;
3251 if ([_firstResponder isKindOfClass:[
CPView class]])
3252 previousValidKeyView = [_firstResponder previousValidKeyView];
3254 if (!previousValidKeyView)
3257 previousValidKeyView = _initialFirstResponder;
3259 previousValidKeyView = [_initialFirstResponder previousValidKeyView];
3262 if (previousValidKeyView)
3266 - (void)selectKeyViewFollowingView:(
CPView)aView
3268 if (_keyViewLoopIsDirty)
3269 [
self _doRecalculateKeyViewLoop];
3273 if ([nextValidKeyView isKindOfClass:[
CPView class]])
3277 - (void)selectKeyViewPrecedingView:(
CPView)aView
3279 if (_keyViewLoopIsDirty)
3280 [
self _doRecalculateKeyViewLoop];
3284 if ([previousValidKeyView isKindOfClass:[
CPView class]])
3315 if (_defaultButton === aButton)
3319 [_defaultButton setKeyEquivalent:nil];
3321 _defaultButton = aButton;
3324 [_defaultButton setKeyEquivalent:CPCarriageReturnCharacter];
3332 return _defaultButton;
3340 _defaultButtonEnabled = YES;
3357 _defaultButtonEnabled = NO;
3377 - (void)_didReceivePlatformWindowWillCloseNotification:(
CPNotification)aNotification
3379 if ([aNotification
object] != _platformWindow)
3389 var lhsBounds = [lhs convertRect:[lhs bounds] toView:nil],
3390 rhsBounds = [rhs convertRect:[rhs bounds] toView:nil],
3391 lhsY = CGRectGetMinY(lhsBounds),
3392 rhsY = CGRectGetMinY(rhsBounds),
3393 lhsX = CGRectGetMinX(lhsBounds),
3394 rhsX = CGRectGetMinX(rhsBounds),
3395 intersectsVertically = MIN(CGRectGetMaxY(lhsBounds), CGRectGetMaxY(rhsBounds)) - MAX(lhsY, rhsY);
3398 if (intersectsVertically > 0)
3425 - (BOOL)_delegateRespondsToWindowWillUndoManager
3434 - (BOOL)_delegateRespondsToWindowShouldClose
3443 - (BOOL)_sendDelegateWindowShouldClose
3448 return [_delegate windowShouldClose:self];
3455 - (BOOL)_sendDelegateWindowWillReturnUndoManager
3460 return [_delegate windowWillReturnUndoManager:self];
3467 - (void)_sendDelegateWindowWillClose
3472 [_delegate windowWillClose:self];
3479 - (CGSize)_sendDelegateWindowWillResizeToSize:(CGSize)aSize
3484 return [_delegate windowWillResize:self toSize:aSize];
3495 - (void)resizeWithOldPlatformWindowSize:(CGSize)aSize
3498 return [
self setFrame:[_platformWindow visibleFrame]];
3504 var
frame = [_platformWindow contentBounds],
3505 newFrame = CGRectMakeCopy(_frame),
3506 dX = (CGRectGetWidth(
frame) - aSize.width) /
3508 dY = (CGRectGetHeight(
frame) - aSize.height) /
3512 newFrame.origin.x += dX;
3515 newFrame.size.width += dX;
3518 newFrame.origin.y += dY;
3521 newFrame.size.height += dY;
3523 [
self _setFrame:newFrame display:YES animate:NO constrainWidth:YES constrainHeight:YES];
3529 - (void)setAutoresizingMask:(
unsigned)anAutoresizingMask
3531 _autoresizingMask = anAutoresizingMask;
3539 return _autoresizingMask;
3545 - (CGPoint)convertBaseToGlobal:(CGPoint)aPoint
3553 - (CGPoint)convertGlobalToBase:(CGPoint)aPoint
3561 - (CGPoint)convertBaseToPlatformWindow:(CGPoint)aPoint
3563 if ([
self _sharesChromeWithPlatformWindow])
3564 return CGPointMakeCopy(aPoint);
3566 var origin = [
self frame].origin;
3568 return CGPointMake(aPoint.x + origin.x, aPoint.y + origin.y);
3574 - (CGPoint)convertPlatformWindowToBase:(CGPoint)aPoint
3576 if ([
self _sharesChromeWithPlatformWindow])
3577 return CGPointMakeCopy(aPoint);
3579 var origin = [
self frame].origin;
3581 return CGPointMake(aPoint.x - origin.x, aPoint.y - origin.y);
3584 - (CGPoint)convertScreenToBase:(CGPoint)aPoint
3589 - (CGPoint)convertBaseToScreen:(CGPoint)aPoint
3594 - (void)_setSharesChromeWithPlatformWindow:(BOOL)shouldShareFrameWithPlatformWindow
3597 if (shouldShareFrameWithPlatformWindow && [
CPPlatform isBrowser])
3600 _sharesChromeWithPlatformWindow = shouldShareFrameWithPlatformWindow;
3602 [
self _updateShadow];
3605 - (BOOL)_sharesChromeWithPlatformWindow
3607 return _sharesChromeWithPlatformWindow;
3618 return _undoManager;
3621 var documentUndoManager = [[_windowController document] undoManager];
3623 if (documentUndoManager)
3624 return documentUndoManager;
3627 if ([
self _delegateRespondsToWindowWillUndoManager])
3628 return [
self _sendDelegateWindowWillReturnUndoManager];
3634 return _undoManager;
3641 - (void)undo:(
id)aSender
3650 - (void)redo:(
id)aSender
3655 - (BOOL)containsPoint:(CGPoint)aPoint
3657 return CGRectContainsPoint(_frame, aPoint);
3661 - (BOOL)_isValidMousePoint:(CGPoint)aPoint
3667 return CGRectContainsPoint(mouseFrame, aPoint);
3677 - (void)setFullBridge:(BOOL)shouldBeFullBridge
3679 _CPReportLenientDeprecation([
self class], _cmd,
@selector(setFullPlatformWindow:));
3696 - (CGPoint)convertBaseToBridge:(CGPoint)aPoint
3704 - (CGPoint)convertBridgeToBase:(CGPoint)aPoint
3713 return fromValue + (toValue - fromValue) * progress;
3717 @implementation _CPWindowFrameAnimation :
CPAnimation 3722 CGRect _targetFrame;
3725 - (id)initWithWindow:(
CPWindow)aWindow targetFrame:(CGRect)aTargetFrame
3727 self = [
super initWithDuration:[aWindow
animationResizeTime:aTargetFrame] animationCurve:CPAnimationLinear];
3733 _targetFrame = CGRectMakeCopy(aTargetFrame);
3734 _startFrame = CGRectMakeCopy([_window
frame]);
3740 - (void)startAnimation
3742 [
super startAnimation];
3744 _window._isAnimating = YES;
3747 - (void)setCurrentProgress:(
float)aProgress
3749 [
super setCurrentProgress:aProgress];
3751 var value = [
self currentValue];
3754 _window._isAnimating = NO;
3756 var newFrame = CGRectMake(
3757 interpolate(CGRectGetMinX(_startFrame), CGRectGetMinX(_targetFrame), value),
3758 interpolate(CGRectGetMinY(_startFrame), CGRectGetMinY(_targetFrame), value),
3759 interpolate(CGRectGetWidth(_startFrame), CGRectGetWidth(_targetFrame), value),
3760 interpolate(CGRectGetHeight(_startFrame), CGRectGetHeight(_targetFrame), value));
3762 [_window setFrame:newFrame display:YES animate:NO];
3771 - (id)_dragHitTest:(CGPoint)aPoint pasteboard:(
CPPasteboard)aPasteboard
3774 if (!_inclusiveRegisteredDraggedTypes)
3784 hitView = [_windowView hitTest:adjustedPoint];
3787 hitView = [hitView superview];
3802 - (void)_addTrackingAreaView:(
CPView)aView
3804 var trackingAreas = [aView trackingAreas];
3806 for (var i = 0; i < trackingAreas.length; i++)
3807 [
self _addTrackingArea:trackingAreas[i]];
3810 - (void)_removeTrackingAreaView:(
CPView)aView
3812 var trackingAreas = [aView trackingAreas];
3814 for (var i = 0; i < trackingAreas.length; i++)
3815 [
self _removeTrackingArea:trackingAreas[i]];
3820 var trackingAreaView = [trackingArea view];
3822 if (![_trackingAreaViews containsObjectIdenticalTo:trackingAreaView])
3823 [_trackingAreaViews addObject:trackingAreaView];
3828 [
self _insertTrackingArea:trackingArea assumeInside:([trackingArea options] & CPTrackingAssumeInside)];
3835 [
self _purgeTrackingArea:trackingArea];
3837 var trackingAreaView = [trackingArea view];
3839 [_trackingAreaViews removeObjectIdenticalTo:trackingAreaView];
3842 - (void)_insertTrackingArea:(
CPTrackingArea)trackingArea assumeInside:(BOOL)assumeInside
3844 if (_handlingTrackingAreaEvent)
3845 _restartHandlingTrackingAreaEvent = YES;
3849 if (_handlingTrackingAreaEvent)
3850 [_mouseEnteredStack addObject:trackingArea];
3852 [_previousMouseEnteredStack addObject:trackingArea];
3858 if (_handlingTrackingAreaEvent)
3860 [_mouseEnteredStack removeObjectIdenticalTo:trackingArea];
3862 var i = _queuedEvents.length;
3865 if ([_queuedEvents[i] trackingArea] === trackingArea)
3866 [_queuedEvents removeObjectAtIndex:i];
3868 _cursorUpdateStack = [];
3869 _activeCursorTrackingArea = nil;
3873 [_previousMouseEnteredStack removeObjectIdenticalTo:trackingArea];
3874 [_previousCursorUpdateStack removeObjectIdenticalTo:trackingArea];
3878 - (void)_handleTrackingAreaEvent:(
CPEvent)anEvent
3880 _handlingTrackingAreaEvent = YES;
3888 _restartHandlingTrackingAreaEvent = NO;
3890 _mouseEnteredStack = [];
3891 _cursorUpdateStack = [];
3899 [
self _handleMouseMovedAndEnteredEventsForEvent:anEvent atPoint:point dragging:dragging];
3903 [
self _handleMouseExitedEventsForEvent:anEvent atPoint:point dragging:dragging];
3907 if (_cursorUpdateStack.length > 0)
3909 [
self _handleCursorUpdateEventsForEvent:anEvent atPoint:point dragging:dragging];
3915 [_windowView setCursorForLocation:point resizing:NO];
3916 _activeCursorTrackingArea = nil;
3922 while (_queuedEvents.length > 0)
3924 var queuedEvent = _queuedEvents[0],
3925 trackingArea = [queuedEvent trackingArea],
3926 trackingOwner = [trackingArea owner];
3928 switch ([queuedEvent type])
3931 [trackingOwner mouseEntered:queuedEvent];
3935 [trackingOwner mouseExited:queuedEvent];
3939 [trackingOwner cursorUpdate:queuedEvent];
3943 if (queuedEvent === _queuedEvents[0])
3944 [_queuedEvents removeObjectAtIndex:0];
3949 _previousMouseEnteredStack = _mouseEnteredStack;
3950 _previousCursorUpdateStack = _cursorUpdateStack;
3952 while (_restartHandlingTrackingAreaEvent)
3954 _handlingTrackingAreaEvent = NO;
3957 - (void)_handleMouseMovedAndEnteredEventsForEvent:(
CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
3961 for (var i = 0; i < _trackingAreaViews.length; i++)
3963 var aView = _trackingAreaViews[i],
3964 trackingAreas = [aView trackingAreas];
3969 for (var j = 0; j < trackingAreas.length; j++)
3971 var aTrackingArea = trackingAreas[j],
3972 trackingOptions = [aTrackingArea options],
3973 trackingImplementedMethods = [aTrackingArea implementedOwnerMethods];
3979 (CGRectContainsPoint([aTrackingArea windowRect], point))))
3984 [_mouseEnteredStack addObject:aTrackingArea];
3986 if ([_previousMouseEnteredStack containsObjectIdenticalTo:aTrackingArea])
3991 [[aTrackingArea owner] mouseMoved:anEvent];
4005 [
self _queueTrackingEvent:mouseEnteredEvent];
4007 [_queuedEvents addObject:mouseEnteredEvent];
4011 [_cursorUpdateStack addObject:aTrackingArea];
4016 - (void)_handleMouseExitedEventsForEvent:(
CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
4020 for (var i = 0; i < _previousMouseEnteredStack.length; i++)
4022 var aTrackingArea = _previousMouseEnteredStack[i],
4023 trackingOptions = [aTrackingArea options];
4025 if ([_mouseEnteredStack containsObjectIdenticalTo:aTrackingArea])
4032 var theView = [aTrackingArea owner],
4043 [
self _queueTrackingEvent:mouseExitedEvent];
4045 [_queuedEvents addObject:mouseExitedEvent];
4050 if (aTrackingArea === _activeCursorTrackingArea)
4052 _previousCursorUpdateStack = [];
4053 _activeCursorTrackingArea = nil;
4058 - (void)_handleCursorUpdateEventsForEvent:(
CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
4060 var overlappingTrackingAreas = [];
4062 for (var i = 0; i < _cursorUpdateStack.length; i++)
4064 var aTrackingArea = _cursorUpdateStack[i];
4066 if ((![_previousCursorUpdateStack containsObjectIdenticalTo:aTrackingArea]) || (aTrackingArea === _activeCursorTrackingArea))
4067 [overlappingTrackingAreas addObject:aTrackingArea];
4070 if (overlappingTrackingAreas.length === 0)
4073 var frontmostTrackingArea = overlappingTrackingAreas[0],
4074 frontmostView = [frontmostTrackingArea view];
4076 for (var i = 1; i < overlappingTrackingAreas.length; i++)
4078 var aTrackingArea = overlappingTrackingAreas[i],
4079 aView = [aTrackingArea view];
4084 if (aView === _windowView)
4089 if (frontmostView === _windowView)
4091 frontmostTrackingArea = aTrackingArea;
4092 frontmostView = aView;
4100 var searchingView = aView;
4102 while ((searchingView !== _contentView) && ([searchingView superview] !== frontmostView))
4103 searchingView = [searchingView superview];
4105 if (searchingView !== _contentView)
4107 frontmostTrackingArea = aTrackingArea;
4108 frontmostView = aView;
4117 var firstView = frontmostView,
4118 firstSuperview = [firstView superview];
4120 while (firstView !== _contentView)
4122 var secondView = aView,
4123 secondSuperview = [secondView superview];
4125 while ((secondSuperview !== _contentView) && (firstSuperview !== secondSuperview))
4127 secondView = secondSuperview;
4128 secondSuperview = [secondView superview];
4131 if (firstSuperview === secondSuperview)
4134 firstView = firstSuperview;
4135 firstSuperview = [firstView superview];
4138 if (firstSuperview !== secondSuperview)
4141 var firstSuperviewSubviews = [firstSuperview subviews],
4142 firstViewIndex = [firstSuperviewSubviews indexOfObject:firstView],
4143 secondViewIndex = [firstSuperviewSubviews indexOfObject:secondView];
4145 if (secondViewIndex > firstViewIndex)
4147 frontmostTrackingArea = aTrackingArea;
4148 frontmostView = aView;
4152 if (frontmostTrackingArea !== _activeCursorTrackingArea)
4164 [
self _queueTrackingEvent:cursorUpdateEvent];
4166 [_queuedEvents addObject:cursorUpdateEvent];
4168 _activeCursorTrackingArea = frontmostTrackingArea;
4172 - (void)_queueTrackingEvent:(
CPEvent)anEvent
4182 var eventType = [anEvent
type],
4185 switch ([anEvent type])
4188 for (var i = 0; i < _queuedTrackingEvents.length; i++)
4190 var queuedEvent = _queuedTrackingEvents[i];
4192 if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] ===
CPMouseExited))
4194 [_queuedTrackingEvents removeObjectAtIndex:i];
4199 [_queuedTrackingEvents addObject:anEvent];
4203 for (var i = 0; i < _queuedTrackingEvents.length; i++)
4205 var queuedEvent = _queuedTrackingEvents[i];
4207 if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] ===
CPMouseEntered))
4209 [_queuedTrackingEvents removeObjectAtIndex:i];
4214 [_queuedTrackingEvents addObject:anEvent];
4218 [_queuedTrackingEvents addObject:anEvent];
4223 - (void)_flushTrackingEventQueueForMouseAt:(CGPoint)point
4225 for (var i = 0; i < _queuedTrackingEvents.length; i++)
4227 var queuedEvent = _queuedTrackingEvents[i],
4228 trackingArea = [queuedEvent trackingArea],
4229 trackingOwner = [trackingArea owner];
4231 switch ([queuedEvent type])
4234 [trackingOwner mouseEntered:queuedEvent];
4238 [trackingOwner mouseExited:queuedEvent];
4242 [trackingOwner updateTrackingAreas];
4244 if (CGRectContainsPoint([trackingArea windowRect], point))
4245 [trackingOwner cursorUpdate:queuedEvent];
4251 _queuedTrackingEvents = [];
4256 function _CPWindowFullPlatformWindowSessionMake(aWindowView, aContentRect,
hasShadow, aLevel)
4266 - (void)_setChildOrdering:(CPWindowOrderingMode)aValue
4268 _childOrdering = aValue;
void setHasShadow:(BOOL shouldHaveShadow)
Used to implement exception handling (creating & raising).
BOOL makeFirstResponder:(CPResponder aResponder)
void setFrame:(CGRect aFrame)
BOOL isMovableByWindowBackground()
CPWindow setParentWindow:(CPWindow parentWindow)
CPView previousValidKeyView()
A CALayer is similar to a CPView
CPDisplayPatternTitleBinding
CGPoint convertBaseToPlatformWindow:(CGPoint aPoint)
BOOL tryToPerform:with:(SEL aSelector, [with] id anObject)
var CPWindowDelegate_windowShouldClose_
CPWindowPositionFlexibleTop
CPWindowController windowController()
CPTrackingOwnerImplementsCursorUpdate
CPWindowResizeStyleModern
CPWindowPositionFlexibleRight
void enableKeyEquivalentForDefaultButtonCell()
void setRepresentedFilename:(CPString aFilePath)
void setShowsResizeIndicator:(BOOL shouldShowResizeIndicator)
CPColor backgroundColor()
CGPoint convertBaseToScreen:(CGPoint aPoint)
void addObserver:selector:name:object:(id anObserver, [selector] SEL aSelector, [name] CPString aNotificationName, [object] id anObject)
CPView initialFirstResponder()
void setTitle:(CPString aTitle)
CPResponder firstResponder()
CGPoint locationInWindow()
var CPWindowActionMessageKeys
void setPlatformWindow:(CPPlatformWindow aPlatformWindow)
var CPWindowResizeStyleGlobalChangeNotification
void postNotificationName:object:(CPString aNotificationName, [object] id anObject)
void raise:reason:(CPString aName, [reason] CPString aReason)
CPBorderlessBridgeWindowMask
CPString charactersIgnoringModifiers()
var CPWindowMinVisibleHorizontalMargin
CPArray selectorsForKey:modifierFlags:(CPString aKey, [modifierFlags] unsigned aFlag)
CPTrackingActiveInKeyWindow
BOOL canBecomeMainWindow()
void keyDown:(CPEvent anEvent)
BOOL isFullPlatformWindow()
CPTrackingActiveInActiveApp
CPNotificationCenter defaultCenter()
A mutable key-value pair collection.
void dragImage:fromWindow:at:offset:event:pasteboard:source:slideBack:(CPImage anImage, [fromWindow] CPWindow aWindow, [at] CGPoint imageLocation, [offset] CGSize mouseOffset, [event] CPEvent anEvent, [pasteboard] CPPasteboard aPasteboard, [source] id aSourceObject, [slideBack] BOOL slideBack)
CPTrackingActiveWhenFirstResponder
void setFrameSize:(CGSize aSize)
BOOL autorecalculatesKeyViewLoop()
void setFrame:display:animate:(CGRect aFrame, [display] BOOL shouldDisplay, [animate] BOOL shouldAnimate)
CPButton defaultButtonCell()
id initWithContentRect:styleMask:(CGRect aContentRect, [styleMask] unsigned aStyleMask)
void orderFront:(id aSender)
CPWindowPositionFlexibleLeft
BOOL ignoresMouseEvents()
void flagsChanged:(CPEvent anEvent)
An immutable string (collection of characters).
CPUndoManager undoManager()
unsigned autoresizingMask()
void unregisterDraggedTypes()
CGPoint convertBaseToGlobal:(CGPoint aPoint)
CPView nextValidKeyView()
void selectNextKeyView:(id sender)
CPWindowConstrainToScreen
CPTrackingOwnerImplementsMouseMoved
void miniaturize:(id sender)
CGPoint convertPlatformWindowToBase:(CGPoint aPoint)
CPDragServer sharedDragServer()
void doCommandBySelector:(SEL aSelector)
void makeKeyAndOrderFront:(id aSender)
void disableKeyEquivalentForDefaultButton()
CPString representedFilename()
CGRect frameRectForContentRect:(CGRect aContentRect)
CPTrackingOwnerImplementsMouseExited
void dragView:fromWindow:at:offset:event:pasteboard:source:slideBack:(CPView aView, [fromWindow] CPWindow aWindow, [at] CGPoint viewLocation, [offset] CGSize mouseOffset, [event] CPEvent mouseDownEvent, [pasteboard] CPPasteboard aPasteboard, [source] id aSourceObject, [slideBack] BOOL slideBack)
A notification that can be posted to a CPNotificationCenter.
CPTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:(CPTimeInterval seconds, [target] id aTarget, [selector] SEL aSelector, [userInfo] id userInfo, [repeats] BOOL shouldRepeat)
void disableKeyEquivalentForDefaultButtonCell()
void setDefaultButton:(CPButton aButton)
void recalculateKeyViewLoop()
void setAutoresizingMask:(unsigned anAutoresizingMask)
BOOL acceptsFirstResponder()
CPTimeInterval timestamp()
An mutable collection which may contain a specific object numerous times.
id enterExitEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:trackingArea:(CPEventType anEventType, [location] CGPoint aPoint, [modifierFlags] unsigned modifierFlags, [timestamp] CPTimeInterval aTimestamp, [windowNumber] int aWindowNumber, [context] CPGraphicsContext aGraphicsContext, [eventNumber] int anEventNumber, [trackingArea] CPTrackingArea aTrackingArea)
void setFrameOrigin:(CGPoint anOrigin)
BOOL becomesKeyOnlyIfNeeded()
BOOL canBecomeKeyWindow()
A general mechanism for user action "undo".
CPString lastPathComponent()
A timer object that can send a message after the given time interval.
void enableKeyEquivalentForDefaultButton()
void setLevel:(int aLevel)
void keyUp:(CPEvent anEvent)
BOOL resignFirstResponder()
void setMovableByWindowBackground:(BOOL shouldBeMovableByWindowBackground)
CPUndoManager undoManager()
BOOL constrainWindowsToUsableScreen()
void setValue:forKey:(id aValue, [forKey] CPString aKey)
CPTrackingAreaOptions CPTrackingMouseEnteredAndExited
Sends messages (CPNotification) between objects.
void selectPreviousKeyView:(id sender)
var CPWindowMinVisibleVerticalMargin
void setFullPlatformWindow:(BOOL shouldBeFullPlatformWindow)
var CPWindowDelegate_windowWillClose_
void setNextResponder:(CPResponder aResponder)
BOOL acceptsMouseMovedEvents()
CPCarriageReturnCharacter
void removeObserver:name:object:(id anObserver, [name] CPString aNotificationName, [object] id anObject)
CPTrackingEnabledDuringMouseDrag
void orderWindow:relativeTo:(CPWindowOrderingMode orderingMode, [relativeTo] int otherWindowNumber)
CGRect contentRectForFrameRect:(CGRect aFrame)
CPPlatformWindow platformWindow()
id URLWithString:(CPString URLString)
CPArray registeredDraggedTypes()
id valueForAttributeWithName:forClass:(CPString aName, [forClass] id aClass)
void setRepresentedURL:(CPURL aURL)
CGPoint convertScreenToBase:(CGPoint aPoint)
CPTrackingOwnerImplementsMouseEntered
CPWindowOrderingMode CPWindowAbove
BOOL becomeFirstResponder()
CPTrackingArea trackingArea()
BOOL showsResizeIndicator()
var CPWindowDelegate_windowWillResize_toSize_
CPWindowPositionFlexibleBottom
void setContentView:(CPView aView)
CPTimeInterval animationResizeTime:(CGRect newWindowFrame)
CGSize resizeIndicatorOffset()
var CPWindowDelegate_windowWillReturnUndoManager_
CPHUDBackgroundWindowMask