WKView.mm revision 2fc2651226baac27029e38c9d6ef883fa32084db
165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKView.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "ChunkedUpdateDrawingAreaProxy.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "DataReference.h" 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "DrawingAreaProxyImpl.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "FindIndicator.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "FindIndicatorWindow.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "LayerBackedDrawingAreaProxy.h" 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "LayerTreeContext.h" 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "Logging.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "NativeWebKeyboardEvent.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "PDFViewController.h" 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "PageClientImpl.h" 40ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#import "PasteboardTypes.h" 41ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#import "Region.h" 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "RunLoop.h" 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "TextChecker.h" 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "TextCheckerState.h" 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKAPICast.h" 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "WKPrintingView.h" 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKStringCF.h" 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKTextInputWindowController.h" 492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "WKViewInternal.h" 502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "WKViewPrivate.h" 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebContext.h" 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebEventFactory.h" 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebPage.h" 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebPageProxy.h" 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebProcessManager.h" 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebProcessProxy.h" 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebSystemInterface.h" 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <QuartzCore/QuartzCore.h> 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/ColorMac.h> 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/DragController.h> 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/DragData.h> 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/FloatRect.h> 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/IntRect.h> 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/KeyboardEvent.h> 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/PlatformMouseEvent.h> 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/PlatformScreen.h> 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebKitSystemInterface.h> 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <wtf/RefPtr.h> 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <wtf/RetainPtr.h> 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// FIXME (WebKit2) <rdar://problem/8728860> WebKit2 needs to be localized 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define UI_STRING(__str, __desc) [NSString stringWithUTF8String:__str] 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@interface NSApplication (Details) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)speakString:(NSString *)string; 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@interface NSWindow (Details) 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRect)_growBoxRect; 802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_setShowOpaqueGrowBoxForOwner:(id)owner; 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_updateGrowBoxForWindowFrameChange; 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochextern "C" { 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Need to declare this attribute name because AppKit exports it but does not make it available in API or SPI headers. 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // <rdar://problem/8631468> tracks the request to make it available. This code should be removed when the bug is closed. 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch extern NSString *NSTextInputReplacementRangeAttributeName; 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebKit; 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef id <NSValidatedUserInterfaceItem> ValidationItem; 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef Vector<RetainPtr<ValidationItem> > ValidationVector; 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef HashMap<String, ValidationVector> ValidationMap; 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@interface WKViewData : NSObject { 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@public 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<PageClientImpl> _pageClient; 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<WebPageProxy> _page; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // For ToolTips. 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSToolTipTag _lastToolTipTag; 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch id _trackingRectOwner; 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void* _trackingRectUserData; 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RetainPtr<NSView> _layerHostingView; 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // FIXME: Remove _oldLayerHostingView. 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block NSView *_oldLayerHostingView; 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<id> _remoteAccessibilityChild; 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // For asynchronous validation. 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ValidationMap _validationMap; 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<PDFViewController> _pdfViewController; 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<FindIndicatorWindow> _findIndicatorWindow; 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We keep here the event when resending it to 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // the application to distinguish the case of a new event from one 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // that has been already sent to WebCore. 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSEvent *_keyDownEventBeingResent; 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<KeypressCommand> _commandsList; 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block NSSize _resizeScrollOffset; 1332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The identifier of the plug-in we want to send complex text input to, or 0 if there is none. 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t _pluginComplexTextInputIdentifier; 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<CompositionUnderline> _underlines; 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned _selectionStart; 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned _selectionEnd; 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool _inBecomeFirstResponder; 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool _inResignFirstResponder; 143ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSEvent *_mouseDownEvent; 144ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch BOOL _ignoringMouseDraggedEvents; 145ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch BOOL _dragHasStarted; 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 1482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block id _endGestureMonitor; 1492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block@implementation WKViewData 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@interface NSObject (NSTextInputContextDetails) 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)wantsToHandleMouseEvents; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)handleMouseEvent:(NSEvent *)event; 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@implementation WKView 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// FIXME: Remove this once we no longer want to be able to go back to the old drawing area. 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic bool useNewDrawingArea() 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return true; 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)initWithFrame:(NSRect)frame 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [self initWithFrame:frame contextRef:toAPI(WebContext::sharedProcessContext())]; 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)initWithFrame:(NSRect)frame contextRef:(WKContextRef)contextRef 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [self initWithFrame:frame contextRef:contextRef pageGroupRef:nil]; 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_registerDraggedTypes 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 181ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSMutableSet *types = [[NSMutableSet alloc] initWithArray:PasteboardTypes::forEditing()]; 182ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [types addObjectsFromArray:PasteboardTypes::forURL()]; 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self registerForDraggedTypes:[types allObjects]]; 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [types release]; 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_updateRemoteAccessibilityRegistration:(BOOL)registerProcess 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if !defined(BUILDING_ON_SNOW_LEOPARD) 1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // When the tree is connected/disconnected, the remote accessibility registration 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // needs to be updated with the pid of the remote process. If the process is going 1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // away, that information is not present in WebProcess 1932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block pid_t pid = 0; 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (registerProcess && _data->_page->process()) 1952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block pid = _data->_page->process()->processIdentifier(); 1962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else if (!registerProcess) { 1972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block pid = WKAXRemoteProcessIdentifier(_data->_remoteAccessibilityChild.get()); 1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_remoteAccessibilityChild = nil; 1992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (pid) 2012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WKAXRegisterRemoteProcess(registerProcess, pid); 2022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)initWithFrame:(NSRect)frame contextRef:(WKContextRef)contextRef pageGroupRef:(WKPageGroupRef)pageGroupRef 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch self = [super initWithFrame:frame]; 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!self) 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InitWebCoreSystemInterface(); 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RunLoop::initializeMainRunLoop(); 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:frame 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch options:(NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect) 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch owner:self 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch userInfo:nil]; 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self addTrackingArea:trackingArea]; 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [trackingArea release]; 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data = [[WKViewData alloc] init]; 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pageClient = PageClientImpl::create(self); 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page = toImpl(contextRef)->createWebPage(_data->_pageClient.get(), toImpl(pageGroupRef)); 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->initializeWebPage(); 226ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_mouseDownEvent = nil; 227ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_ignoringMouseDraggedEvents = NO; 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _registerDraggedTypes]; 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebContext::statistics().wkViewCount++; 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return self; 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)dealloc 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->close(); 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data release]; 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebContext::statistics().wkViewCount--; 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [super dealloc]; 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (WKPageRef)pageRef 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toAPI(_data->_page.get()); 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setDrawsBackground:(BOOL)drawsBackground 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setDrawsBackground(drawsBackground); 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)drawsBackground 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->drawsBackground(); 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setDrawsTransparentBackground:(BOOL)drawsTransparentBackground 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setDrawsTransparentBackground(drawsTransparentBackground); 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)drawsTransparentBackground 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->drawsTransparentBackground(); 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)acceptsFirstResponder 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)becomeFirstResponder 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSSelectionDirection direction = [[self window] keyViewSelectionDirection]; 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_inBecomeFirstResponder = true; 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsFocused); 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_inBecomeFirstResponder = false; 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (direction != NSDirectSelection) 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setInitialFocus(direction == NSSelectingNext); 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)resignFirstResponder 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_inResignFirstResponder = true; 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsFocused); 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_inResignFirstResponder = false; 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)viewWillStartLiveResize 3012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->viewWillStartLiveResize(); 3032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)viewDidEndLiveResize 3062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->viewWillEndLiveResize(); 3082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isFlipped 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)setFrame:(NSRect)rect andScrollBy:(NSSize)offset 3162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(NSEqualSizes(_data->_resizeScrollOffset, NSZeroSize)); 3182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_resizeScrollOffset = offset; 3202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self setFrame:rect]; 3212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setFrameSize:(NSSize)size 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [super setFrameSize:size]; 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (![self frameSizeUpdatesDisabled]) 3282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _setDrawingAreaSize:size]; 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_updateWindowAndViewFrames 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *window = [self window]; 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(window); 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect windowFrameInScreenCoordinates = [window frame]; 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect viewFrameInWindowCoordinates = [self convertRect:[self frame] toView:nil]; 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSPoint accessibilityPosition = [[self accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue]; 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates), IntPoint(accessibilityPosition)); 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)renewGState 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Hide the find indicator. 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_findIndicatorWindow = nullptr; 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Update the view frame. 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([self window]) 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowAndViewFrames]; 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [super renewGState]; 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef HashMap<SEL, String> SelectorNameMap; 35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Map selectors into Editor command names. 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// This is not needed for any selectors that have the same name as the Editor command. 35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const SelectorNameMap* createSelectorExceptionMap() 36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SelectorNameMap* map = new HashMap<SEL, String>; 36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(insertNewlineIgnoringFieldEditor:), "InsertNewline"); 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(insertParagraphSeparator:), "InsertNewline"); 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(insertTabIgnoringFieldEditor:), "InsertTab"); 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(pageDown:), "MovePageDown"); 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(pageDownAndModifySelection:), "MovePageDownAndModifySelection"); 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(pageUp:), "MovePageUp"); 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch map->add(@selector(pageUpAndModifySelection:), "MovePageUpAndModifySelection"); 3702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block map->add(@selector(scrollPageDown:), "ScrollPageForward"); 3712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block map->add(@selector(scrollPageUp:), "ScrollPageBackward"); 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return map; 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic String commandNameForSelector(SEL selector) 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Check the exception map first. 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static const SelectorNameMap* exceptionMap = createSelectorExceptionMap(); 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SelectorNameMap::const_iterator it = exceptionMap->find(selector); 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it != exceptionMap->end()) 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return it->second; 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Remove the trailing colon. 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // No need to capitalize the command name since Editor command names are 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // not case sensitive. 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const char* selectorName = sel_getName(selector); 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch size_t selectorNameLength = strlen(selectorName); 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (selectorNameLength < 2 || selectorName[selectorNameLength - 1] != ':') 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return String(); 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return String(selectorName, selectorNameLength - 1); 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Editing commands 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define WEBCORE_COMMAND(command) - (void)command:(id)sender { _data->_page->executeEditCommand(commandNameForSelector(_cmd)); } 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3982fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(alignCenter) 3992fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(alignJustified) 4002fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(alignLeft) 4012fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(alignRight) 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(copy) 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(cut) 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(delete) 4052fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteBackward) 4062fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteBackwardByDecomposingPreviousCharacter) 4072fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteForward) 4082fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteToBeginningOfLine) 4092fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteToBeginningOfParagraph) 4102fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteToEndOfLine) 4112fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteToEndOfParagraph) 4122fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteToMark) 4132fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteWordBackward) 4142fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(deleteWordForward) 4152fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(ignoreSpelling) 4162fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(indent) 4172fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertBacktab) 4182fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertLineBreak) 4192fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertNewline) 4202fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertNewlineIgnoringFieldEditor) 4212fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertParagraphSeparator) 4222fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertTab) 4232fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(insertTabIgnoringFieldEditor) 4242fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(makeTextWritingDirectionLeftToRight) 4252fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(makeTextWritingDirectionNatural) 4262fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(makeTextWritingDirectionRightToLeft) 4272fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveBackward) 4282fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveBackwardAndModifySelection) 4292fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveDown) 4302fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveDownAndModifySelection) 4312fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveForward) 4322fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveForwardAndModifySelection) 4332fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveLeft) 4342fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveLeftAndModifySelection) 4352fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveParagraphBackwardAndModifySelection) 4362fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveParagraphForwardAndModifySelection) 4372fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveRight) 4382fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveRightAndModifySelection) 4392fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfDocument) 4402fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfDocumentAndModifySelection) 4412fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfLine) 4422fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfLineAndModifySelection) 4432fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfParagraph) 4442fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfParagraphAndModifySelection) 4452fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfSentence) 4462fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToBeginningOfSentenceAndModifySelection) 4472fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfDocument) 4482fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfDocumentAndModifySelection) 4492fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfLine) 4502fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfLineAndModifySelection) 4512fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfParagraph) 4522fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfParagraphAndModifySelection) 4532fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfSentence) 4542fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToEndOfSentenceAndModifySelection) 4552fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToLeftEndOfLine) 4562fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToLeftEndOfLineAndModifySelection) 4572fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToRightEndOfLine) 4582fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveToRightEndOfLineAndModifySelection) 4592fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveUp) 4602fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveUpAndModifySelection) 4612fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordBackward) 4622fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordBackwardAndModifySelection) 4632fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordForward) 4642fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordForwardAndModifySelection) 4652fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordLeft) 4662fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordLeftAndModifySelection) 4672fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordRight) 4682fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(moveWordRightAndModifySelection) 4692fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(outdent) 4702fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(pageDown) 4712fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(pageDownAndModifySelection) 4722fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(pageUp) 4732fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(pageUpAndModifySelection) 4742fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(paste) 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(pasteAsPlainText) 4762fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(scrollPageDown) 4772fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(scrollPageUp) 4782fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(scrollToBeginningOfDocument) 4792fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(scrollToEndOfDocument) 48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(selectAll) 4812fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(selectLine) 4822fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(selectParagraph) 4832fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(selectSentence) 4842fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(selectToMark) 4852fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(selectWord) 4862fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(setMark) 4872fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(subscript) 4882fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(superscript) 4892fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(swapWithMark) 49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWEBCORE_COMMAND(takeFindStringFromSelection) 4912fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(transpose) 4922fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(underline) 4932fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(unscript) 4942fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(yank) 4952fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWEBCORE_COMMAND(yankAndSelect) 49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#undef WEBCORE_COMMAND 49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block/* 5002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5012fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWhen possible, editing-related methods should be implemented in WebCore with the 5022fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockEditorCommand mechanism and invoked via WEBCORE_COMMAND, rather than implementing 5032fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockindividual methods here with Mac-specific code. 5042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5052fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockEditing-related methods still unimplemented that are implemented in WebKit1: 5062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)capitalizeWord:(id)sender; 5082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)centerSelectionInVisibleArea:(id)sender; 5092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)changeFont:(id)sender; 5102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)complete:(id)sender; 5112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)copyFont:(id)sender; 5122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)lowercaseWord:(id)sender; 5132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)makeBaseWritingDirectionLeftToRight:(id)sender; 5142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)makeBaseWritingDirectionNatural:(id)sender; 5152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)makeBaseWritingDirectionRightToLeft:(id)sender; 5162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)pasteFont:(id)sender; 5172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)scrollLineDown:(id)sender; 5182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)scrollLineUp:(id)sender; 5192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)showGuessPanel:(id)sender; 5202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)uppercaseWord:(id)sender; 5212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5222fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockSome other editing-related methods still unimplemented: 5232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)changeCaseOfLetter:(id)sender; 5252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)copyRuler:(id)sender; 5262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)insertContainerBreak:(id)sender; 5272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)insertDoubleQuoteIgnoringSubstitution:(id)sender; 5282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)insertSingleQuoteIgnoringSubstitution:(id)sender; 5292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)pasteRuler:(id)sender; 5302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)toggleRuler:(id)sender; 5312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)transposeWords:(id)sender; 5322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block*/ 5342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 53565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Menu items validation 53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic NSMenuItem *menuItem(id <NSValidatedUserInterfaceItem> item) 53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (![(NSObject *)item isKindOfClass:[NSMenuItem class]]) 54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return (NSMenuItem *)item; 54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic NSToolbarItem *toolbarItem(id <NSValidatedUserInterfaceItem> item) 54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (![(NSObject *)item isKindOfClass:[NSToolbarItem class]]) 54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return (NSToolbarItem *)item; 54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item 55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SEL action = [item action]; 55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(showGuessPanel:)) { 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSMenuItem *menuItem = ::menuItem(item)) { 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL panelShowing = [[[NSSpellChecker sharedSpellChecker] spellingPanel] isVisible]; 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem setTitle:panelShowing 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ? UI_STRING("Hide Spelling and Grammar", "menu item title") 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : UI_STRING("Show Spelling and Grammar", "menu item title")]; 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(checkSpelling:) || action == @selector(changeSpelling:)) 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleContinuousSpellChecking:)) { 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool enabled = TextChecker::isContinuousSpellCheckingAllowed(); 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = enabled && TextChecker::state().isContinuousSpellCheckingEnabled; 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return enabled; 57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleGrammarChecking:)) { 57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isGrammarCheckingEnabled; 57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleAutomaticSpellingCorrection:)) { 58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isAutomaticSpellingCorrectionEnabled; 58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 58465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 58565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 58665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(orderFrontSubstitutionsPanel:)) { 58865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSMenuItem *menuItem = ::menuItem(item)) { 58965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL panelShowing = [[[NSSpellChecker sharedSpellChecker] substitutionsPanel] isVisible]; 59065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem setTitle:panelShowing 59165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ? UI_STRING("Hide Substitutions", "menu item title") 59265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : UI_STRING("Show Substitutions", "menu item title")]; 59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleSmartInsertDelete:)) { 59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = _data->_page->isSmartInsertDeleteEnabled(); 59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 60265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleAutomaticQuoteSubstitution:)) { 60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isAutomaticQuoteSubstitutionEnabled; 60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 60865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleAutomaticDashSubstitution:)) { 61065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isAutomaticDashSubstitutionEnabled; 61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleAutomaticLinkDetection:)) { 61665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isAutomaticLinkDetectionEnabled; 61765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 61865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 61965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 62065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(toggleAutomaticTextReplacement:)) { 62265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool checked = TextChecker::state().isAutomaticTextReplacementEnabled; 62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:checked ? NSOnState : NSOffState]; 62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().isContentEditable; 62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(uppercaseWord:) || action == @selector(lowercaseWord:) || action == @selector(capitalizeWord:)) 62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().selectedRangeLength && _data->_page->selectionState().isContentEditable; 62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (action == @selector(stopSpeaking:)) 63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [NSApp isSpeaking]; 63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Next, handle editor commands. Start by returning YES for anything that is not an editor command. 63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Returning YES is the default thing to do in an AppKit validate method for any selector that is not recognized. 63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String commandName = commandNameForSelector([item action]); 63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!Editor::commandIsSupportedFromMenuOrKeyBinding(commandName)) 63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Add this item to the vector of items for a given command that are awaiting validation. 64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pair<ValidationMap::iterator, bool> addResult = _data->_validationMap.add(commandName, ValidationVector()); 64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch addResult.first->second.append(item); 64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (addResult.second) { 64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If we are not already awaiting validation for this command, start the asynchronous validation process. 64465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Theoretically, there is a race here; when we get the answer it might be old, from a previous time 64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // we asked for the same command; there is no guarantee the answer is still valid. 64665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: The function called here should be renamed validateCommand because it is not specific to menu items. 64765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->validateMenuItem(commandName); 64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 64965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Treat as enabled until we get the result back from the web process and _setUserInterfaceItemState is called. 65165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME <rdar://problem/8803459>: This means disabled items will flash enabled at first for a moment. 65265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // But returning NO here would be worse; that would make keyboard commands such as command-C fail. 65365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void speakString(WKStringRef string, WKErrorRef error, void*) 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (error) 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 66065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!string) 66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 66265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *convertedString = toImpl(string)->string(); 66465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [NSApp speakString:convertedString]; 66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)startSpeaking:(id)sender 66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->getSelectionOrContentsAsString(StringCallback::create(0, speakString)); 67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)stopSpeaking:(id)sender 67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [NSApp stopSpeaking:sender]; 67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)showGuessPanel:(id)sender 67865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 68065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!checker) { 68165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG_ERROR("No NSSpellChecker"); 68265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 68365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 68465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSPanel *spellingPanel = [checker spellingPanel]; 68665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([spellingPanel isVisible]) { 68765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [spellingPanel orderOut:sender]; 68865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 68965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 69065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->advanceToNextMisspelling(true); 69265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [spellingPanel orderFront:sender]; 69365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 69465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)checkSpelling:(id)sender 69665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 69765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->advanceToNextMisspelling(false); 69865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 69965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)changeSpelling:(id)sender 70165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 70265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *word = [[sender selectedCell] stringValue]; 70365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->changeSpellingToWord(word); 70565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 70665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)toggleContinuousSpellChecking:(id)sender 70865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 70965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool spellCheckingEnabled = !TextChecker::state().isContinuousSpellCheckingEnabled; 71065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setContinuousSpellCheckingEnabled(spellCheckingEnabled); 71165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 71365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!spellCheckingEnabled) 71565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->unmarkAllMisspellings(); 71665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 71765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)toggleGrammarChecking:(id)sender 71965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 72065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool grammarCheckingEnabled = !TextChecker::state().isGrammarCheckingEnabled; 72165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setGrammarCheckingEnabled(grammarCheckingEnabled); 72265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 72465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!grammarCheckingEnabled) 72665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->unmarkAllBadGrammar(); 72765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 72865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)toggleAutomaticSpellingCorrection:(id)sender 73065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 73165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticSpellingCorrectionEnabled(!TextChecker::state().isAutomaticSpellingCorrectionEnabled); 73265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 73365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 73465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 73565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 73665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)orderFrontSubstitutionsPanel:(id)sender 73765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 73865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 73965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!checker) { 74065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG_ERROR("No NSSpellChecker"); 74165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 74265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 74365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 74465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSPanel *substitutionsPanel = [checker substitutionsPanel]; 74565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([substitutionsPanel isVisible]) { 74665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [substitutionsPanel orderOut:sender]; 74765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 74865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 74965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [substitutionsPanel orderFront:sender]; 75065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 75165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 75265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (IBAction)toggleSmartInsertDelete:(id)sender 75365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 75465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setSmartInsertDeleteEnabled(!_data->_page->isSmartInsertDeleteEnabled()); 75565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 75665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 75765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isAutomaticQuoteSubstitutionEnabled 75865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 75965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TextChecker::state().isAutomaticQuoteSubstitutionEnabled; 76065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 76165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 76265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setAutomaticQuoteSubstitutionEnabled:(BOOL)flag 76365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 76465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (static_cast<bool>(flag) == TextChecker::state().isAutomaticQuoteSubstitutionEnabled) 76565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 76665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 76765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticQuoteSubstitutionEnabled(flag); 76865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 76965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 77065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 77165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)toggleAutomaticQuoteSubstitution:(id)sender 77265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 77365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticQuoteSubstitutionEnabled(!TextChecker::state().isAutomaticQuoteSubstitutionEnabled); 77465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 77565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 77665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 77765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isAutomaticDashSubstitutionEnabled 77865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 77965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TextChecker::state().isAutomaticDashSubstitutionEnabled; 78065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 78165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 78265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setAutomaticDashSubstitutionEnabled:(BOOL)flag 78365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 78465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (static_cast<bool>(flag) == TextChecker::state().isAutomaticDashSubstitutionEnabled) 78565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 78665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 78765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticDashSubstitutionEnabled(flag); 78865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 78965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 79065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 79165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)toggleAutomaticDashSubstitution:(id)sender 79265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 79365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticDashSubstitutionEnabled(!TextChecker::state().isAutomaticDashSubstitutionEnabled); 79465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 79565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 79665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 79765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isAutomaticLinkDetectionEnabled 79865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 79965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TextChecker::state().isAutomaticLinkDetectionEnabled; 80065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 80165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 80265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setAutomaticLinkDetectionEnabled:(BOOL)flag 80365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 80465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (static_cast<bool>(flag) == TextChecker::state().isAutomaticLinkDetectionEnabled) 80565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 80665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 80765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticLinkDetectionEnabled(flag); 80865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 80965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 81065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 81165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)toggleAutomaticLinkDetection:(id)sender 81265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 81365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticLinkDetectionEnabled(!TextChecker::state().isAutomaticLinkDetectionEnabled); 81465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 81565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 81665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 81765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isAutomaticTextReplacementEnabled 81865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 81965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TextChecker::state().isAutomaticTextReplacementEnabled; 82065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 82165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 82265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setAutomaticTextReplacementEnabled:(BOOL)flag 82365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 82465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (static_cast<bool>(flag) == TextChecker::state().isAutomaticTextReplacementEnabled) 82565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 82665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 82765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticTextReplacementEnabled(flag); 82865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 82965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 83065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 83165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)toggleAutomaticTextReplacement:(id)sender 83265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 83365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextChecker::setAutomaticTextReplacementEnabled(!TextChecker::state().isAutomaticTextReplacementEnabled); 83465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->process()->updateTextCheckerState(); 83565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 83665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 83765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)uppercaseWord:(id)sender 83865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 83965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->uppercaseWord(); 84065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 84165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 84265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)lowercaseWord:(id)sender 84365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 84465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->lowercaseWord(); 84565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 84665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 84765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)capitalizeWord:(id)sender 84865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 84965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->capitalizeWord(); 85065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 85165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 85265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Events 85365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 85465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Override this so that AppKit will send us arrow keys as key down events so we can 85565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// support them via the key bindings mechanism. 85665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_wantsKeyDownForEvent:(NSEvent *)event 85765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 85865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 85965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 86065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 861ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)_setMouseDownEvent:(NSEvent *)event 862ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 863ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ASSERT(!event || [event type] == NSLeftMouseDown || [event type] == NSRightMouseDown || [event type] == NSOtherMouseDown); 864ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 865ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (event == _data->_mouseDownEvent) 866ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 867ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 868ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [_data->_mouseDownEvent release]; 869ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_mouseDownEvent = [event retain]; 870ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 871ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 87265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define EVENT_HANDLER(Selector, Type) \ 87365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch - (void)Selector:(NSEvent *)theEvent \ 87465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { \ 87565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Web##Type##Event webEvent = WebEventFactory::createWeb##Type##Event(theEvent, self); \ 87665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->handle##Type##Event(webEvent); \ 87765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 87865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 87965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(mouseEntered, Mouse) 88065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(mouseExited, Mouse) 88165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(mouseMoved, Mouse) 88265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(otherMouseDown, Mouse) 88365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(otherMouseDragged, Mouse) 88465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(otherMouseMoved, Mouse) 88565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(otherMouseUp, Mouse) 88665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(rightMouseDown, Mouse) 88765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(rightMouseDragged, Mouse) 88865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(rightMouseMoved, Mouse) 88965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(rightMouseUp, Mouse) 89065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochEVENT_HANDLER(scrollWheel, Wheel) 89165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 89265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#undef EVENT_HANDLER 89365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 894ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)_mouseHandler:(NSEvent *)event 895ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 896ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSInputManager *currentInputManager = [NSInputManager currentInputManager]; 897ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if ([currentInputManager wantsToHandleMouseEvents] && [currentInputManager handleMouseEvent:event]) 898ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 899ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebMouseEvent webEvent = WebEventFactory::createWebMouseEvent(event, self); 900ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_page->handleMouseEvent(webEvent); 901ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 90265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 903ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)mouseDown:(NSEvent *)event 904ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 905ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self _setMouseDownEvent:event]; 906ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_ignoringMouseDraggedEvents = NO; 907ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_dragHasStarted = NO; 908ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self _mouseHandler:event]; 909ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 91065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 911ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)mouseUp:(NSEvent *)event 912ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 913ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self _setMouseDownEvent:nil]; 914ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self _mouseHandler:event]; 915ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 916ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 917ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)mouseDragged:(NSEvent *)event 918ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 919ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (_data->_ignoringMouseDraggedEvents) 920ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 921ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self _mouseHandler:event]; 922ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 92365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 9252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9262fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic const short kIOHIDEventTypeScroll = 6; 9272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)shortCircuitedEndGestureWithEvent:(NSEvent *)event 9292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if ([event subtype] != kIOHIDEventTypeScroll) 9312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 9322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebGestureEvent webEvent = WebEventFactory::createWebGestureEvent(event, self); 9342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->handleGestureEvent(webEvent); 9352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (_data->_endGestureMonitor) { 9372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [NSEvent removeMonitor:_data->_endGestureMonitor]; 9382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_endGestureMonitor = nil; 9392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 9402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)beginGestureWithEvent:(NSEvent *)event 9432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if ([event subtype] != kIOHIDEventTypeScroll) 9452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 9462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebGestureEvent webEvent = WebEventFactory::createWebGestureEvent(event, self); 9482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->handleGestureEvent(webEvent); 9492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!_data->_endGestureMonitor) { 9512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_endGestureMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskEndGesture handler:^(NSEvent *blockEvent) { 9522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self shortCircuitedEndGestureWithEvent:blockEvent]; 9532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return blockEvent; 9542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }]; 9552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 9562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 9582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 95965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)doCommandBySelector:(SEL)selector 96065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 96165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (selector != @selector(noop:)) 96265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_commandsList.append(KeypressCommand(commandNameForSelector(selector))); 96365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 96465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 96565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)insertText:(id)string 96665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 96765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL isAttributedString = [string isKindOfClass:[NSAttributedString class]]; // Otherwise, NSString 96865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 96965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "insertText:\"%@\"", isAttributedString ? [string string] : string); 97065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *text; 97165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool isFromInputMethod = _data->_page->selectionState().hasComposition; 97265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 97365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (isAttributedString) { 97465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch text = [string string]; 97565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We deal with the NSTextInputReplacementRangeAttributeName attribute from NSAttributedString here 97665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // simply because it is used by at least one Input Method -- it corresonds to the kEventParamTextInputSendReplaceRange 97765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // event in TSM. This behaviour matches that of -[WebHTMLView setMarkedText:selectedRange:] when it receives an 97865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // NSAttributedString 97965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *rangeString = [string attribute:NSTextInputReplacementRangeAttributeName atIndex:0 longestEffectiveRange:NULL inRange:NSMakeRange(0, [text length])]; 98065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "ReplacementRange: %@", rangeString); 98165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (rangeString) 98265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch isFromInputMethod = YES; 98365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else 98465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch text = string; 98565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 98665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String eventText = text; 98765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 98865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!isFromInputMethod) 98965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_commandsList.append(KeypressCommand("insertText", text)); 99065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else { 99165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch eventText.replace(NSBackTabCharacter, NSTabCharacter); // same thing is done in KeyEventMac.mm in WebCore 99265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_commandsList.append(KeypressCommand("insertText", eventText)); 99365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 99465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 99565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 99665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_handleStyleKeyEquivalent:(NSEvent *)event 99765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!_data->_page->selectionState().isContentEditable) 9992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return NO; 10002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 100165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) != NSCommandKeyMask) 100265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 100365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 100465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Here we special case cmd+b and cmd+i but not cmd+u, for historic reason. 100565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This should not be changed, since it could break some Mac applications that 100665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // rely on this inherent behavior. 100765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // See https://bugs.webkit.org/show_bug.cgi?id=24943 100865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 100965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *string = [event characters]; 101065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([string caseInsensitiveCompare:@"b"] == NSOrderedSame) { 101165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->executeEditCommand("ToggleBold"); 101265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 101365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 101465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([string caseInsensitiveCompare:@"i"] == NSOrderedSame) { 101565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->executeEditCommand("ToggleItalic"); 101665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 101765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 101865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 101965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 102065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 102165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 102265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)performKeyEquivalent:(NSEvent *)event 102365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 102465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // There's a chance that responding to this event will run a nested event loop, and 102565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // fetching a new event might release the old one. Retaining and then autoreleasing 102665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // the current event prevents that from causing a problem inside WebKit or AppKit code. 102765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[event retain] autorelease]; 102865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 102965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL eventWasSentToWebCore = (_data->_keyDownEventBeingResent == event); 103065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 103165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Pass key combos through WebCore if there is a key binding available for 103265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // this event. This lets web pages have a crack at intercepting key-modified keypresses. 103365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // But don't do it if we have already handled the event. 103465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Pressing Esc results in a fake event being sent - don't pass it to WebCore. 103565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!eventWasSentToWebCore && event == [NSApp currentEvent] && self == [[self window] firstResponder]) { 103665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data->_keyDownEventBeingResent release]; 103765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_keyDownEventBeingResent = nil; 103865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 103965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->handleKeyboardEvent(NativeWebKeyboardEvent(event, self)); 104065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 104165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 104265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 104365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [self _handleStyleKeyEquivalent:event] || [super performKeyEquivalent:event]; 104465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 104565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 104665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)keyUp:(NSEvent *)theEvent 104765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 104865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->handleKeyboardEvent(NativeWebKeyboardEvent(theEvent, self)); 104965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 105065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 105165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)keyDown:(NSEvent *)theEvent 105265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 105365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_pluginComplexTextInputIdentifier) { 105465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Try feeding the keyboard event directly to the plug-in. 105565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *string = nil; 105665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[WKTextInputWindowController sharedTextInputWindowController] interpretKeyEvent:theEvent string:&string]) { 105765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (string) 105865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->sendComplexTextInputToPlugin(_data->_pluginComplexTextInputIdentifier, string); 105965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 106065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 106165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 106265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 106365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_underlines.clear(); 106465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_selectionStart = 0; 106565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_selectionEnd = 0; 106665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We could be receiving a key down from AppKit if we have re-sent an event 106765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // that maps to an action that is currently unavailable (for example a copy when 106865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // there is no range selection). 106965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If this is the case we should ignore the key down. 107065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_keyDownEventBeingResent == theEvent) { 107165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data->_keyDownEventBeingResent release]; 107265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_keyDownEventBeingResent = nil; 107365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [super keyDown:theEvent]; 107465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 107565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 107665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->handleKeyboardEvent(NativeWebKeyboardEvent(theEvent, self)); 107765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 107865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 107965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSTextInputContext *)inputContext { 108065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_pluginComplexTextInputIdentifier) 108165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [[WKTextInputWindowController sharedTextInputWindowController] inputContext]; 108265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 108365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [super inputContext]; 108465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 108565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 108665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRange)selectedRange 108765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 108865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_page->selectionState().isNone || !_data->_page->selectionState().isContentEditable) 108965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSMakeRange(NSNotFound, 0); 109065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 109165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "selectedRange -> (%u, %u)", _data->_page->selectionState().selectedRangeStart, _data->_page->selectionState().selectedRangeLength); 109265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSMakeRange(_data->_page->selectionState().selectedRangeStart, _data->_page->selectionState().selectedRangeLength); 109365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 109465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 109565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)hasMarkedText 109665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 109765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "hasMarkedText -> %u", _data->_page->selectionState().hasComposition); 109865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->selectionState().hasComposition; 109965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 110065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 110165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)unmarkText 110265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 110365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "unmarkText"); 110465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 110565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_commandsList.append(KeypressCommand("unmarkText")); 110665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 110765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 110865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSArray *)validAttributesForMarkedText 110965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 111065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static NSArray *validAttributes; 111165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!validAttributes) { 111265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch validAttributes = [[NSArray alloc] initWithObjects: 111365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSUnderlineStyleAttributeName, NSUnderlineColorAttributeName, 111465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSMarkedClauseSegmentAttributeName, NSTextInputReplacementRangeAttributeName, nil]; 111565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // NSText also supports the following attributes, but it's 111665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // hard to tell which are really required for text input to 111765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // work well; I have not seen any input method make use of them yet. 111865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // NSFontAttributeName, NSForegroundColorAttributeName, 111965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // NSBackgroundColorAttributeName, NSLanguageAttributeName. 112065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CFRetain(validAttributes); 112165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 112265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "validAttributesForMarkedText -> (...)"); 112365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return validAttributes; 112465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 112565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 112665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void extractUnderlines(NSAttributedString *string, Vector<CompositionUnderline>& result) 112765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 112865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int length = [[string string] length]; 112965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 113065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int i = 0; 113165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch while (i < length) { 113265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRange range; 113365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSDictionary *attrs = [string attributesAtIndex:i longestEffectiveRange:&range inRange:NSMakeRange(i, length - i)]; 113465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 113565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSNumber *style = [attrs objectForKey:NSUnderlineStyleAttributeName]) { 113665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Color color = Color::black; 113765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSColor *colorAttr = [attrs objectForKey:NSUnderlineColorAttributeName]) 113865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch color = colorFromNSColor([colorAttr colorUsingColorSpaceName:NSDeviceRGBColorSpace]); 113965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.append(CompositionUnderline(range.location, NSMaxRange(range), color, [style intValue] > 1)); 114065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 114165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 114265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch i = range.location + range.length; 114365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 114465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 114565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 114665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)setMarkedText:(id)string selectedRange:(NSRange)newSelRange 114765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 114865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL isAttributedString = [string isKindOfClass:[NSAttributedString class]]; // Otherwise, NSString 114965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 115065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "setMarkedText:\"%@\" selectedRange:(%u, %u)", isAttributedString ? [string string] : string, newSelRange.location, newSelRange.length); 115165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 115265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *text = string; 115365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 115465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (isAttributedString) { 115565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch text = [string string]; 115665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch extractUnderlines(string, _data->_underlines); 115765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 115865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 115965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_commandsList.append(KeypressCommand("setMarkedText", text)); 116065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_selectionStart = newSelRange.location; 116165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_selectionEnd = NSMaxRange(newSelRange); 116265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 116365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 116465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRange)markedRange 116565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 116665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t location; 116765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t length; 116865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 116965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->getMarkedRange(location, length); 117065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "markedRange -> (%u, %u)", location, length); 117165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSMakeRange(location, length); 117265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 117365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 117465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSAttributedString *)attributedSubstringFromRange:(NSRange)nsRange 117565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 117665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This is not implemented for now. Need to figure out how to serialize the attributed string across processes. 117765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "attributedSubstringFromRange"); 117865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 117965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 118065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 118165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint 118265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 118365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *window = [self window]; 118465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 118565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (window) 118665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch thePoint = [window convertScreenToBase:thePoint]; 118765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch thePoint = [self convertPoint:thePoint fromView:nil]; // the point is relative to the main frame 118865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 118965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t result = _data->_page->characterIndexForPoint(IntPoint(thePoint)); 119065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "characterIndexForPoint:(%f, %f) -> %u", thePoint.x, thePoint.y, result); 119165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return result; 119265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 119365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 119465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRect)firstRectForCharacterRange:(NSRange)theRange 119565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 119665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Just to match NSTextView's behavior. Regression tests cannot detect this; 119765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // to reproduce, use a test application from http://bugs.webkit.org/show_bug.cgi?id=4682 119865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (type something; try ranges (1, -1) and (2, -1). 119965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ((theRange.location + theRange.length < theRange.location) && (theRange.location + theRange.length != 0)) 120065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch theRange.length = 0; 120165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 120265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect resultRect = _data->_page->firstRectForCharacterRange(theRange.location, theRange.length); 120365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch resultRect = [self convertRect:resultRect toView:nil]; 120465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 120565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *window = [self window]; 120665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (window) 120765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch resultRect.origin = [window convertBaseToScreen:resultRect.origin]; 120865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 120965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(TextInput, "firstRectForCharacterRange:(%u, %u) -> (%f, %f, %f, %f)", theRange.location, theRange.length, resultRect.origin.x, resultRect.origin.y, resultRect.size.width, resultRect.size.height); 121065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return resultRect; 121165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 121265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1213ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation 1214ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 1215ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSPoint windowImageLoc = [[self window] convertScreenToBase:aPoint]; 1216ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSPoint windowMouseLoc = windowImageLoc; 1217ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1218ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Prevent queued mouseDragged events from coming after the drag and fake mouseUp event. 1219ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_ignoringMouseDraggedEvents = YES; 1220ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1221ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_page->dragEnded(IntPoint(windowMouseLoc), globalPoint(windowMouseLoc, [self window]), operation); 1222ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 1223ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 122465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (DragApplicationFlags)applicationFlags:(id <NSDraggingInfo>)draggingInfo 122565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 122665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t flags = 0; 122765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([NSApp modalWindow]) 122865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags = DragApplicationIsModal; 122965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[self window] attachedSheet]) 123065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationHasAttachedSheet; 123165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([draggingInfo draggingSource] == self) 123265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationIsSource; 123365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask) 123465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationIsCopyKeyDown; 123565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<DragApplicationFlags>(flags); 123665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 123765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 123865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)draggingInfo 123965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 124065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint client([self convertPoint:[draggingInfo draggingLocation] fromView:nil]); 124165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 124265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 1243ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1244ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_page->resetDragOperation(); 124565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->performDragControllerAction(DragControllerActionEntered, &dragData, [[draggingInfo draggingPasteboard] name]); 124665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSDragOperationCopy; 124765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 124865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 124965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)draggingInfo 125065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 125165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint client([self convertPoint:[draggingInfo draggingLocation] fromView:nil]); 125265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 125365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 125465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->performDragControllerAction(DragControllerActionUpdated, &dragData, [[draggingInfo draggingPasteboard] name]); 125565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->dragOperation(); 125665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 125765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 125865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)draggingExited:(id <NSDraggingInfo>)draggingInfo 125965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 126065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint client([self convertPoint:[draggingInfo draggingLocation] fromView:nil]); 126165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 126265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 126365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->performDragControllerAction(DragControllerActionExited, &dragData, [[draggingInfo draggingPasteboard] name]); 126465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->resetDragOperation(); 126565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 126665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 126765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)draggingInfo 126865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 126965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 127065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 127165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 127265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)performDragOperation:(id <NSDraggingInfo>)draggingInfo 127365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 127465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint client([self convertPoint:[draggingInfo draggingLocation] fromView:nil]); 127565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 127665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 127765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->performDragControllerAction(DragControllerActionPerformDrag, &dragData, [[draggingInfo draggingPasteboard] name]); 127865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 127965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 128065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 128165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_updateWindowVisibility 128265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 128365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->updateWindowIsVisible(![[self window] isMiniaturized]); 128465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 128565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 128665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_ownsWindowGrowBox 128765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 128865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow* window = [self window]; 128965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!window) 129065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 129165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 129265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSView *superview = [self superview]; 129365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!superview) 129465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 129565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 129665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect growBoxRect = [window _growBoxRect]; 129765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSIsEmptyRect(growBoxRect)) 129865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 129965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 130065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect visibleRect = [self visibleRect]; 130165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NSIsEmptyRect(visibleRect)) 130265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 130365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 130465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect visibleRectInWindowCoords = [self convertRect:visibleRect toView:nil]; 130565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!NSIntersectsRect(growBoxRect, visibleRectInWindowCoords)) 130665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 130765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 130865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 130965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 131065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 131165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_updateGrowBoxForWindowFrameChange 131265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 131365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Temporarily enable the resize indicator to make a the _ownsWindowGrowBox calculation work. 131465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL wasShowingIndicator = [[self window] showsResizeIndicator]; 13152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!wasShowingIndicator) 13162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [[self window] setShowsResizeIndicator:YES]; 131765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 131865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL ownsGrowBox = [self _ownsWindowGrowBox]; 131965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setWindowResizerSize(ownsGrowBox ? enclosingIntRect([[self window] _growBoxRect]).size() : IntSize()); 13202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (ownsGrowBox) 13222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [[self window] _setShowOpaqueGrowBoxForOwner:(_data->_page->hasHorizontalScrollbar() || _data->_page->hasVerticalScrollbar() ? self : nil)]; 13232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 13242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [[self window] _setShowOpaqueGrowBoxForOwner:nil]; 13252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 132665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Once WebCore can draw the window resizer, this should read: 132765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // if (wasShowingIndicator) 132865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // [[self window] setShowsResizeIndicator:!ownsGrowBox]; 13292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!wasShowingIndicator) 13302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [[self window] setShowsResizeIndicator:NO]; 133165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 133265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ownsGrowBox; 133365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 133465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 133565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)addWindowObserversForWindow:(NSWindow *)window 133665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 133765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (window) { 133865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidBecomeKey:) 133965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidBecomeKeyNotification object:nil]; 134065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidResignKey:) 134165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidResignKeyNotification object:nil]; 134265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidMiniaturize:) 134365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidMiniaturizeNotification object:window]; 134465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidDeminiaturize:) 134565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidDeminiaturizeNotification object:window]; 134665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowFrameDidChange:) 134765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidMoveNotification object:window]; 134865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowFrameDidChange:) 134965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch name:NSWindowDidResizeNotification object:window]; 135065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 135165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 135265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 135365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)removeWindowObservers 135465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 135565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *window = [self window]; 135665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!window) 135765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 135865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 135965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidBecomeKeyNotification object:nil]; 136065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidResignKeyNotification object:nil]; 136165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidMiniaturizeNotification object:window]; 136265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window]; 136365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidMoveNotification object:window]; 136465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidResizeNotification object:window]; 136565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 136665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 136765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)viewWillMoveToWindow:(NSWindow *)window 136865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 136965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (window != [self window]) { 137065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self removeWindowObservers]; 137165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self addWindowObserversForWindow:window]; 137265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 137365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 137465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 137565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)viewDidMoveToWindow 137665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 137765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We want to make sure to update the active state while hidden, so if the view is about to become visible, we 137865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // update the active state first and then make it visible. If the view is about to be hidden, we hide it first and then 137965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // update the active state. 138065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([self window]) { 138165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive); 138265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible | WebPageProxy::ViewIsInWindow); 138365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowVisibility]; 138465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowAndViewFrames]; 13852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Initialize remote accessibility when the window connection has been established. 13872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if !defined(BUILDING_ON_SNOW_LEOPARD) 13882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block NSData *remoteElementToken = WKAXRemoteTokenForElement(self); 13892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block NSData *remoteWindowToken = WKAXRemoteTokenForElement([self window]); 13902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CoreIPC::DataReference elementToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteElementToken bytes]), [remoteElementToken length]); 13912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CoreIPC::DataReference windowToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteWindowToken bytes]), [remoteWindowToken length]); 13922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->registerUIProcessAccessibilityTokens(elementToken, windowToken); 13932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 13942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 139565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else { 139665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible); 139765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow); 139865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 14002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (_data->_endGestureMonitor) { 14012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [NSEvent removeMonitor:_data->_endGestureMonitor]; 14022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_endGestureMonitor = nil; 14032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 14042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 14052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 140665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 140765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 140865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_windowDidBecomeKey:(NSNotification *)notification 140965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 141065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *keyWindow = [notification object]; 141165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (keyWindow == [self window] || keyWindow == [[self window] attachedSheet]) 141265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive); 141365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 141465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 141565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_windowDidResignKey:(NSNotification *)notification 141665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 141765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSWindow *formerKeyWindow = [notification object]; 141865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (formerKeyWindow == [self window] || formerKeyWindow == [[self window] attachedSheet]) 141965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive); 142065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 142165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 142265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_windowDidMiniaturize:(NSNotification *)notification 142365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 142465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowVisibility]; 142565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 142665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 142765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_windowDidDeminiaturize:(NSNotification *)notification 142865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 142965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowVisibility]; 143065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 143165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 143265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_windowFrameDidChange:(NSNotification *)notification 143365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 143465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _updateWindowAndViewFrames]; 143565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 143665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14372fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic void drawPageBackground(CGContextRef context, WebPageProxy* page, const IntRect& rect) 14382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 14392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!page->drawsBackground()) 14402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 14412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 14422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextSaveGState(context); 14432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextSetBlendMode(context, kCGBlendModeCopy); 14442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 14452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGColorRef backgroundColor; 14462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (page->drawsTransparentBackground()) 14472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block backgroundColor = CGColorGetConstantColor(kCGColorClear); 14482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 14492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block backgroundColor = CGColorGetConstantColor(kCGColorWhite); 14502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 14512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextSetFillColorWithColor(context, backgroundColor); 14522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextFillRect(context, rect); 14532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 14542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextRestoreGState(context); 14552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 14562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 145765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)drawRect:(NSRect)rect 145865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 145965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(View, "drawRect: x:%g, y:%g, width:%g, height:%g", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 14602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->endPrinting(); 146165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (useNewDrawingArea()) { 14622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]); 1463ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 14642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(_data->_page->drawingArea())) { 1465ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch const NSRect *rectsBeingDrawn; 1466ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NSInteger numRectsBeingDrawn; 1467ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [self getRectsBeingDrawn:&rectsBeingDrawn count:&numRectsBeingDrawn]; 1468ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch for (NSInteger i = 0; i < numRectsBeingDrawn; ++i) { 1469ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Region unpaintedRegion; 1470ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntRect rect = enclosingIntRect(rectsBeingDrawn[i]); 1471ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch drawingArea->paint(context, rect, unpaintedRegion); 14722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 14732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block Vector<IntRect> unpaintedRects = unpaintedRegion.rects(); 14742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block for (size_t i = 0; i < unpaintedRects.size(); ++i) 14752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drawPageBackground(context, _data->_page.get(), unpaintedRects[i]); 1476ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 14772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } else 14782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block drawPageBackground(context, _data->_page.get(), enclosingIntRect(rect)); 147965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 148065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->didDraw(); 148165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 148265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 148365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 148465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_page->isValid() && _data->_page->drawingArea()) { 148565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]); 148665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->drawingArea()->paint(IntRect(rect), context); 148765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->didDraw(); 148865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (_data->_page->drawsBackground()) { 148965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data->_page->drawsTransparentBackground() ? [NSColor clearColor] : [NSColor whiteColor] set]; 149065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRectFill(rect); 149165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 149265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 149365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 149465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)isOpaque 149565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 149665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_page->drawsBackground(); 149765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 149865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 149965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)viewDidHide 150065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 150165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible); 150265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 150365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 150465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)viewDidUnhide 150565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 150665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible); 150765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 150865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 150965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)accessibilityIsIgnored 151065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 151165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 151265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 151365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 151465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)accessibilityHitTest:(NSPoint)point 151565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 151665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_remoteAccessibilityChild.get(); 151765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 151865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 151965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)accessibilityAttributeValue:(NSString*)attribute 152065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 152165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) { 152265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!_data->_remoteAccessibilityChild) 152365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 152465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [NSArray arrayWithObject:_data->_remoteAccessibilityChild.get()]; 152565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 152665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) 152765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSAccessibilityGroupRole; 152865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) 152965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSAccessibilityRoleDescription(NSAccessibilityGroupRole, nil); 153065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([attribute isEqualToString:NSAccessibilityParentAttribute]) 153165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NSAccessibilityUnignoredAncestor([self superview]); 153265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([attribute isEqualToString:NSAccessibilityEnabledAttribute]) 153365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [NSNumber numberWithBool:YES]; 153465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 153565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [super accessibilityAttributeValue:attribute]; 153665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 153765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 153865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSView *)hitTest:(NSPoint)point 153965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 154065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSView *hitView = [super hitTest:point]; 154165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (hitView && _data && hitView == _data->_layerHostingView) 154265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch hitView = self; 15432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 15442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if USE(ACCELERATED_COMPOSITING) 15452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (hitView && _data && hitView == _data->_oldLayerHostingView) 15462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block hitView = self; 154765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 154865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return hitView; 154965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 155065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 155165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSInteger)conversationIdentifier 155265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 155365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return (NSInteger)self; 155465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 155565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 155665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (BOOL)canChangeFrameLayout:(WKFrameRef)frameRef 1558ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 15592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // PDF documents are already paginated, so we can't change them to add headers and footers. 15602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return !toImpl(frameRef)->isMainFrame() || !_data->_pdfViewController; 1561ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 1562ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 156365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo forFrame:(WKFrameRef)frameRef 156465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 156565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LOG(View, "Creating an NSPrintOperation for frame '%s'", toImpl(frameRef)->url().utf8().data()); 156665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 156765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Only the top frame can currently contain a PDF view. 156865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_pdfViewController) { 15692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!toImpl(frameRef)->isMainFrame()) 15702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0; 15712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return _data->_pdfViewController->makePrintOperation(printInfo); 15722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } else { 15732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RetainPtr<WKPrintingView> printingView(AdoptNS, [[WKPrintingView alloc] initWithFrameProxy:toImpl(frameRef)]); 15742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // NSPrintOperation takes ownership of the view. 15752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block NSPrintOperation *printOperation = [NSPrintOperation printOperationWithView:printingView.get()]; 15762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [printOperation setCanSpawnSeparateThread:YES]; 15772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block printingView->_printOperation = printOperation; 15782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return printOperation; 157965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 158065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 158165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 158265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 158365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 158465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@implementation WKView (Internal) 158565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 158665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (PassOwnPtr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy 158765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 158865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (useNewDrawingArea()) 158965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return DrawingAreaProxyImpl::create(_data->_page.get()); 159065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 159165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ChunkedUpdateDrawingAreaProxy::create(self, _data->_page.get()); 159265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 159365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 159465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_isFocused 159565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 159665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_inBecomeFirstResponder) 159765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 159865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data->_inResignFirstResponder) 159965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 160065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [[self window] firstResponder] == self; 160165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 160265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 160365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_processDidCrash 160465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 160565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self setNeedsDisplay:YES]; 16062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _updateRemoteAccessibilityRegistration:NO]; 16072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 16082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 16092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_pageClosed 16102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 16112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _updateRemoteAccessibilityRegistration:NO]; 161265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 161365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 161465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_didRelaunchProcess 161565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 161665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self setNeedsDisplay:YES]; 161765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 161865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 161965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_takeFocus:(BOOL)forward 162065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 162165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (forward) 162265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[self window] selectKeyViewFollowingView:self]; 162365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 162465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[self window] selectKeyViewPrecedingView:self]; 162565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 162665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 162765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setCursor:(NSCursor *)cursor 162865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 162965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([NSCursor currentCursor] == cursor) 163065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 163165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [cursor set]; 163265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 163365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 163465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setUserInterfaceItemState:(NSString *)commandName enabled:(BOOL)isEnabled state:(int)newState 163565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 163665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ValidationVector items = _data->_validationMap.take(commandName); 163765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch size_t size = items.size(); 163865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < size; ++i) { 163965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ValidationItem item = items[i].get(); 164065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setState:newState]; 164165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [menuItem(item) setEnabled:isEnabled]; 164265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [toolbarItem(item) setEnabled:isEnabled]; 164365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME <rdar://problem/8803392>: If the item is neither a menu nor toolbar item, it will be left enabled. 164465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 164565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 164665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_setEventBeingResent:(NSEvent *)event 16482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 16492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_keyDownEventBeingResent = [event retain]; 16502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 16512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 16522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (Vector<KeypressCommand>&)_interceptKeyEvent:(NSEvent *)theEvent 16532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 16542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_commandsList.clear(); 16552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // interpretKeyEvents will trigger one or more calls to doCommandBySelector or setText 16562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // that will populate the commandsList vector. 16572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; 16582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return _data->_commandsList; 16592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 16602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 16612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_getTextInputState:(unsigned)start selectionEnd:(unsigned)end underlines:(Vector<WebCore::CompositionUnderline>&)lines 16622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 16632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block start = _data->_selectionStart; 16642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block end = _data->_selectionEnd; 16652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block lines = _data->_underlines; 16662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 16672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 166865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRect)_convertToDeviceSpace:(NSRect)rect 166965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 167065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toDeviceSpace(rect, [self window]); 167165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 167265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 167365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSRect)_convertToUserSpace:(NSRect)rect 167465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 167565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toUserSpace(rect, [self window]); 167665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 167765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 167865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Any non-zero value will do, but using something recognizable might help us debug some day. 167965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define TRACKING_RECT_TAG 0xBADFACE 168065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 168165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSTrackingRectTag)addTrackingRect:(NSRect)rect owner:(id)owner userData:(void *)data assumeInside:(BOOL)assumeInside 168265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 168365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(_data->_trackingRectOwner == nil); 168465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectOwner = owner; 168565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectUserData = data; 168665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TRACKING_RECT_TAG; 168765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 168865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 168965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSTrackingRectTag)_addTrackingRect:(NSRect)rect owner:(id)owner userData:(void *)data assumeInside:(BOOL)assumeInside useTrackingNum:(int)tag 169065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 169165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(tag == 0 || tag == TRACKING_RECT_TAG); 169265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(_data->_trackingRectOwner == nil); 169365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectOwner = owner; 169465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectUserData = data; 169565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return TRACKING_RECT_TAG; 169665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 169765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 169865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_addTrackingRects:(NSRect *)rects owner:(id)owner userDataList:(void **)userDataList assumeInsideList:(BOOL *)assumeInsideList trackingNums:(NSTrackingRectTag *)trackingNums count:(int)count 169965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 170065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(count == 1); 170165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(trackingNums[0] == 0 || trackingNums[0] == TRACKING_RECT_TAG); 170265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(_data->_trackingRectOwner == nil); 170365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectOwner = owner; 170465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectUserData = userDataList[0]; 170565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch trackingNums[0] = TRACKING_RECT_TAG; 170665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 170765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 170865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)removeTrackingRect:(NSTrackingRectTag)tag 170965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 171065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (tag == 0) 171165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 171265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 171365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data && (tag == TRACKING_RECT_TAG)) { 171465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectOwner = nil; 171565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 171665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 171765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 171865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data && (tag == _data->_lastToolTipTag)) { 171965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [super removeTrackingRect:tag]; 172065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_lastToolTipTag = 0; 172165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 172265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 172365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 172465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If any other tracking rect is being removed, we don't know how it was created 172565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // and it's possible there's a leak involved (see 3500217) 172665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_NOT_REACHED(); 172765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 172865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 172965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_removeTrackingRects:(NSTrackingRectTag *)tags count:(int)count 173065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 173165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int i; 173265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (i = 0; i < count; ++i) { 173365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int tag = tags[i]; 173465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (tag == 0) 173565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch continue; 173665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(tag == TRACKING_RECT_TAG); 173765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_data != nil) { 173865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_trackingRectOwner = nil; 173965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 174065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 174165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 174265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 174365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_sendToolTipMouseExited 174465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 174565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Nothing matters except window, trackingNumber, and userData. 174665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseExited 174765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch location:NSMakePoint(0, 0) 174865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch modifierFlags:0 174965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch timestamp:0 175065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch windowNumber:[[self window] windowNumber] 175165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch context:NULL 175265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch eventNumber:0 175365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch trackingNumber:TRACKING_RECT_TAG 175465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch userData:_data->_trackingRectUserData]; 175565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data->_trackingRectOwner mouseExited:fakeEvent]; 175665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 175765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 175865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_sendToolTipMouseEntered 175965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 176065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Nothing matters except window, trackingNumber, and userData. 176165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseEntered 176265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch location:NSMakePoint(0, 0) 176365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch modifierFlags:0 176465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch timestamp:0 176565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch windowNumber:[[self window] windowNumber] 176665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch context:NULL 176765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch eventNumber:0 176865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch trackingNumber:TRACKING_RECT_TAG 176965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch userData:_data->_trackingRectUserData]; 177065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [_data->_trackingRectOwner mouseEntered:fakeEvent]; 177165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 177265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 177365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data 177465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 177565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nsStringFromWebCoreString(_data->_page->toolTip()); 177665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 177765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 177865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_toolTipChangedFrom:(NSString *)oldToolTip to:(NSString *)newToolTip 177965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 178065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (oldToolTip) 178165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _sendToolTipMouseExited]; 178265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 178365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (newToolTip && [newToolTip length] > 0) { 178465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // See radar 3500217 for why we remove all tooltips rather than just the single one we created. 178565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self removeAllToolTips]; 178665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRect wideOpenRect = NSMakeRect(-100000, -100000, 200000, 200000); 178765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_lastToolTipTag = [self addToolTipRect:wideOpenRect owner:self userData:NULL]; 178865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _sendToolTipMouseEntered]; 178965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 179065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 179165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 179265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setFindIndicator:(PassRefPtr<FindIndicator>)findIndicator fadeOut:(BOOL)fadeOut 179365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 179465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!findIndicator) { 179565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_findIndicatorWindow = 0; 179665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 179765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 179865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 179965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!_data->_findIndicatorWindow) 180065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_findIndicatorWindow = FindIndicatorWindow::create(self); 180165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 180265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_findIndicatorWindow->setFindIndicator(findIndicator, fadeOut); 180365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 180465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 180565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 180665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_startAcceleratedCompositing:(CALayer *)rootLayer 180765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!_data->_oldLayerHostingView) { 180965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSView *hostingView = [[NSView alloc] initWithFrame:[self bounds]]; 181065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(BUILDING_ON_LEOPARD) 181165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [hostingView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; 181265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 181365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 181465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self addSubview:hostingView]; 181565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [hostingView release]; 18162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_oldLayerHostingView = hostingView; 181765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 181865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 181965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Make a container layer, which will get sized/positioned by AppKit and CA. 182065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CALayer *viewLayer = [CALayer layer]; 182165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 182265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 182365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [viewLayer setName:@"hosting layer"]; 182465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 182565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 182665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if defined(BUILDING_ON_LEOPARD) 182765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Turn off default animations. 182865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSNull *nullValue = [NSNull null]; 182965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSDictionary *actions = [NSDictionary dictionaryWithObjectsAndKeys: 183065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"anchorPoint", 183165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"bounds", 183265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"contents", 183365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"contentsRect", 183465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"opacity", 183565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"position", 183665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"sublayerTransform", 183765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"sublayers", 183865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nullValue, @"transform", 183965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nil]; 184065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [viewLayer setStyle:[NSDictionary dictionaryWithObject:actions forKey:@"actions"]]; 184165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 184265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 184365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(BUILDING_ON_LEOPARD) 184465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If we aren't in the window yet, we'll use the screen's scale factor now, and reset the scale 184565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // via -viewDidMoveToWindow. 184665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CGFloat scaleFactor = [self window] ? [[self window] userSpaceScaleFactor] : [[NSScreen mainScreen] userSpaceScaleFactor]; 184765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [viewLayer setTransform:CATransform3DMakeScale(scaleFactor, scaleFactor, 1)]; 184865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 184965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_oldLayerHostingView setLayer:viewLayer]; 18512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_oldLayerHostingView setWantsLayer:YES]; 185265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 185365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Parent our root layer in the container layer 185465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [viewLayer addSublayer:rootLayer]; 185565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 185665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 185765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_stopAcceleratedCompositing 185865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (_data->_oldLayerHostingView) { 18602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_oldLayerHostingView setLayer:nil]; 18612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_oldLayerHostingView setWantsLayer:NO]; 18622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_oldLayerHostingView removeFromSuperview]; 18632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_oldLayerHostingView = nil; 186465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 186565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 186665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 186765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_switchToDrawingAreaTypeIfNecessary:(DrawingAreaInfo::Type)type 186865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 186965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DrawingAreaInfo::Type existingDrawingAreaType = _data->_page->drawingArea() ? _data->_page->drawingArea()->info().type : DrawingAreaInfo::None; 187065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (existingDrawingAreaType == type) 187165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 187265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 187365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<DrawingAreaProxy> newDrawingArea; 187465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch switch (type) { 187565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case DrawingAreaInfo::Impl: 187665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case DrawingAreaInfo::None: 187765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 187865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case DrawingAreaInfo::ChunkedUpdate: { 187965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch newDrawingArea = ChunkedUpdateDrawingAreaProxy::create(self, _data->_page.get()); 188065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 188165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 188265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case DrawingAreaInfo::LayerBacked: { 188365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch newDrawingArea = LayerBackedDrawingAreaProxy::create(self, _data->_page.get()); 188465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 188565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 188665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 188765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block newDrawingArea->setSize(IntSize([self frame].size), IntSize()); 188965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 189065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->drawingArea()->detachCompositingContext(); 189165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_page->setDrawingArea(newDrawingArea.release()); 189265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 189365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_enterAcceleratedCompositingMode:(const LayerTreeContext&)layerTreeContext 18952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 18962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(!_data->_layerHostingView); 18972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(!layerTreeContext.isEmpty()); 18982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 18992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Create an NSView that will host our layer tree. 19002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_layerHostingView.adoptNS([[NSView alloc] initWithFrame:[self bounds]]); 19012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 19022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self addSubview:_data->_layerHostingView.get()]; 19032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Create a root layer that will back the NSView. 19052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RetainPtr<CALayer> rootLayer(AdoptNS, [[CALayer alloc] init]); 19062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#ifndef NDEBUG 19072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [rootLayer.get() setName:@"Hosting root layer"]; 19082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 19092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CALayer *renderLayer = WKMakeRenderLayer(layerTreeContext.contextID); 19112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [rootLayer.get() addSublayer:renderLayer]; 19122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() setLayer:rootLayer.get()]; 19142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() setWantsLayer:YES]; 19152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 19162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_exitAcceleratedCompositingMode 19182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 19192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(_data->_layerHostingView); 19202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() setLayer:nil]; 19222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() setWantsLayer:NO]; 19232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [_data->_layerHostingView.get() removeFromSuperview]; 19242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 19252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_layerHostingView = nullptr; 19262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 19272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 192865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_pageDidEnterAcceleratedCompositing 192965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 193065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::LayerBacked]; 193165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 193265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 193365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_pageDidLeaveAcceleratedCompositing 193465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 193565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: we may want to avoid flipping back to the non-layer-backed drawing area until the next page load, to avoid thrashing. 193665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [self _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::ChunkedUpdate]; 193765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 193865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // USE(ACCELERATED_COMPOSITING) 193965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_setAccessibilityWebProcessToken:(NSData *)data 19412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 19422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if !defined(BUILDING_ON_SNOW_LEOPARD) 19432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_remoteAccessibilityChild = WKAXRemoteElementForToken(data); 19442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _updateRemoteAccessibilityRegistration:YES]; 19452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 19462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 19472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 194865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setComplexTextInputEnabled:(BOOL)complexTextInputEnabled pluginComplexTextInputIdentifier:(uint64_t)pluginComplexTextInputIdentifier 194965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 195065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BOOL inputSourceChanged = _data->_pluginComplexTextInputIdentifier; 195165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 195265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (complexTextInputEnabled) { 195365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Check if we're already allowing text input for this plug-in. 195465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginComplexTextInputIdentifier == _data->_pluginComplexTextInputIdentifier) 195565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 195665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 195765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pluginComplexTextInputIdentifier = pluginComplexTextInputIdentifier; 195865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 195965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else { 196065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Check if we got a request to disable complex text input for a plug-in that is not the current plug-in. 196165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginComplexTextInputIdentifier != _data->_pluginComplexTextInputIdentifier) 196265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 196365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 196465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pluginComplexTextInputIdentifier = 0; 196565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 196665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 196765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (inputSourceChanged) { 196865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Inform the out of line window that the input source changed. 196965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[WKTextInputWindowController sharedTextInputWindowController] keyboardInputSourceChanged]; 197065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 197165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 197265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 197365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setPageHasCustomRepresentation:(BOOL)pageHasCustomRepresentation 197465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 197565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pdfViewController = nullptr; 197665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 197765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pageHasCustomRepresentation) 197865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pdfViewController = PDFViewController::create(self); 197965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 198065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 198165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_didFinishLoadingDataForCustomRepresentation:(const CoreIPC::DataReference&)dataReference 198265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 198365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(_data->_pdfViewController); 198465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 198565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pdfViewController->setPDFDocumentData(_data->_page->mainFrame()->mimeType(), dataReference); 198665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 198765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 198865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (double)_customRepresentationZoomFactor 198965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 199065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!_data->_pdfViewController) 199165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 1; 199265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 199365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _data->_pdfViewController->zoomFactor(); 199465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 199565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 199665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setCustomRepresentationZoomFactor:(double)zoomFactor 199765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 199865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!_data->_pdfViewController) 199965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 200065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 200165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _data->_pdfViewController->setZoomFactor(zoomFactor); 200265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 200365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2004ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch- (void)_setDragImage:(NSImage *)image at:(NSPoint)clientPoint linkDrag:(BOOL)linkDrag 2005ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 2006ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // We need to prevent re-entering this call to avoid crashing in AppKit. 2007ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Given the asynchronous nature of WebKit2 this can now happen. 2008ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (_data->_dragHasStarted) 2009ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 2010ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2011ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_dragHasStarted = YES; 2012ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch [super dragImage:image 2013ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch at:clientPoint 2014ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch offset:NSZeroSize 2015ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch event:(linkDrag) ? [NSApp currentEvent] :_data->_mouseDownEvent 2016ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] 2017ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch source:self 2018ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch slideBack:YES]; 2019ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _data->_dragHasStarted = NO; 2020ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 2021ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 20222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_setDrawingAreaSize:(NSSize)size 20232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 20242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!_data->_page->drawingArea()) 20252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 20262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_page->drawingArea()->setSize(IntSize(size), IntSize(_data->_resizeScrollOffset)); 20282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _data->_resizeScrollOffset = NSZeroSize; 20292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 20302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)_didChangeScrollbarsForMainFrame 20322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 20332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _updateGrowBoxForWindowFrameChange]; 20342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 20352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block@end 20372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block@implementation WKView (Private) 20392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)disableFrameSizeUpdates 20412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 20422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _frameSizeUpdatesDisabledCount++; 20432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 20442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (void)enableFrameSizeUpdates 20462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 20472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!_frameSizeUpdatesDisabledCount) 20482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 20492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!(--_frameSizeUpdatesDisabledCount)) 20512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [self _setDrawingAreaSize:[self frame].size]; 20522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 20532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 20542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (BOOL)frameSizeUpdatesDisabled 20552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 20562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return _frameSizeUpdatesDisabledCount > 0; 20572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 20582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 205965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 20602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2061