diff options
Diffstat (limited to 'Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm')
-rw-r--r-- | Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm index 99b817b..6bf116b 100644 --- a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm +++ b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm @@ -51,14 +51,18 @@ #import <WebCore/BlockExceptions.h> #import <WebCore/Console.h> #import <WebCore/Cursor.h> +#import <WebCore/ContextMenu.h> +#import <WebCore/ContextMenuController.h> #import <WebCore/Element.h> #import <WebCore/FileChooser.h> #import <WebCore/FloatRect.h> #import <WebCore/Frame.h> #import <WebCore/FrameLoadRequest.h> +#import <WebCore/FrameView.h> #import <WebCore/HTMLNames.h> #import <WebCore/HitTestResult.h> #import <WebCore/Icon.h> +#import <WebCore/IntPoint.h> #import <WebCore/IntRect.h> #import <WebCore/NavigationAction.h> #import <WebCore/Page.h> @@ -174,9 +178,16 @@ FloatRect WebChromeClient::pageRect() float WebChromeClient::scaleFactor() { - if (NSWindow *window = [m_webView window]) - return [window userSpaceScaleFactor]; + NSWindow *window = [m_webView window]; +#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) + if (window) + return [window backingScaleFactor]; + return [[NSScreen mainScreen] backingScaleFactor]; +#else + if (window) + return [window userSpaceScaleFactor]; return [[NSScreen mainScreen] userSpaceScaleFactor]; +#endif } void WebChromeClient::focus() @@ -876,6 +887,35 @@ PassRefPtr<WebCore::SearchPopupMenu> WebChromeClient::createSearchPopupMenu(WebC return adoptRef(new SearchPopupMenuMac(client)); } +#if ENABLE(CONTEXT_MENUS) +void WebChromeClient::showContextMenu() +{ + Page* page = [m_webView page]; + if (!page) + return; + + ContextMenuController* controller = page->contextMenuController(); + Node* node = controller->hitTestResult().innerNonSharedNode(); + if (!node) + return; + Frame* frame = node->document()->frame(); + if (!frame) + return; + FrameView* frameView = frame->view(); + if (!frameView) + return; + NSView* view = frameView->documentView(); + + IntPoint point = frameView->contentsToWindow(controller->hitTestResult().point()); + NSPoint nsScreenPoint = [view convertPoint:point toView:nil]; + // Show the contextual menu for this event. + NSEvent* event = [NSEvent mouseEventWithType:NSRightMouseDown location:nsScreenPoint modifierFlags:0 timestamp:0 windowNumber:[[view window] windowNumber] context:0 eventNumber:0 clickCount:1 pressure:1]; + NSMenu* nsMenu = [view menuForEvent:event]; + if (nsMenu) + [NSMenu popUpContextMenu:nsMenu withEvent:event forView:view]; +} +#endif + #if USE(ACCELERATED_COMPOSITING) void WebChromeClient::attachRootGraphicsLayer(Frame* frame, GraphicsLayer* graphicsLayer) @@ -938,12 +978,12 @@ void WebChromeClient::exitFullscreenForNode(Node*) #if ENABLE(FULLSCREEN_API) -bool WebChromeClient::supportsFullScreenForElement(const Element* element) +bool WebChromeClient::supportsFullScreenForElement(const Element* element, bool withKeyboard) { - SEL selector = @selector(webView:supportsFullScreenForElement:); + SEL selector = @selector(webView:supportsFullScreenForElement:withKeyboard:); if ([[m_webView UIDelegate] respondsToSelector:selector]) - return CallUIDelegateReturningBoolean(false, m_webView, selector, kit(const_cast<WebCore::Element*>(element))); - return [m_webView _supportsFullScreenForElement:const_cast<WebCore::Element*>(element)]; + return CallUIDelegateReturningBoolean(false, m_webView, selector, kit(const_cast<WebCore::Element*>(element)), withKeyboard); + return [m_webView _supportsFullScreenForElement:const_cast<WebCore::Element*>(element) withKeyboard:withKeyboard]; } void WebChromeClient::enterFullScreenForElement(Element* element) |