Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4224)

Unified Diff: chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm

Issue 11498008: RenderWidget popup should be a NSWindow so it can go outside the main window. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
diff --git a/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm b/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
index ca859f8c4349b83b6d11a7ee8a2b69d0702474d6..796ba31721a5e532f1d4eaf0ac21b40073e4db3b 100644
--- a/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
+++ b/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
@@ -10,6 +10,77 @@
#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
+#import "chrome/browser/chrome_browser_application_mac.h"
+#include "content/public/browser/render_widget_host.h"
+
+@interface RenderWidgetPopupWindow : NSWindow<CrApplicationEventHookProtocol>
+@end
+
+@implementation RenderWidgetPopupWindow
+
+- (id)initWithContentRect:(NSRect)contentRect
+ styleMask:(NSUInteger)windowStyle
+ backing:(NSBackingStoreType)bufferingType
+ defer:(BOOL)deferCreation {
+ if (self = [super initWithContentRect:contentRect
+ styleMask:windowStyle
+ backing:bufferingType
+ defer:deferCreation]) {
+ [self setOpaque:NO];
+ [self setBackgroundColor:[NSColor clearColor]];
+ [self startObservingClick];
+ }
+ return self;
+}
+
+- (void)close {
+ [self stopObservingClick];
+ [super close];
+}
+
+// Gets called for all events in application. Watching for a click outside the
+// window so we can close.
+- (void)hookForEvent:(NSEvent*)theEvent {
+ if ([theEvent window] == self)
+ return;
+ NSEventType eventType = [theEvent type];
+ if (eventType == NSLeftMouseDown || eventType == NSRightMouseDown) {
+ [self close];
+ }
+}
+
+// Gets called when the menubar is clicked.
+// Needed because the hookForEvent method doesn't see the click on the menubar.
+- (void)begunTracking:(NSNotification *)notification {
+ [self close];
+}
+
+// Install the callback.
+- (void)startObservingClick {
Avi (use Gerrit) 2012/12/10 20:52:06 This is a change in behavior; how did we used to c
keishi 2012/12/11 01:53:54 Right now we close the popup when the web view blu
+ BrowserCrApplication* app = static_cast<BrowserCrApplication*>(
+ [BrowserCrApplication sharedApplication]);
+ [app addEventHook:self];
+
+ NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
+ [nc addObserver:self
+ selector:@selector(begunTracking:)
+ name:NSMenuDidBeginTrackingNotification
+ object:[NSApp mainMenu]];
+}
+
+// Remove the callback.
+- (void)stopObservingClick {
+ BrowserCrApplication* app = static_cast<BrowserCrApplication*>(
+ [BrowserCrApplication sharedApplication]);
+ [app removeEventHook:self];
+
+ NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
+ [nc removeObserver:self
+ name:NSMenuDidBeginTrackingNotification
+ object:[NSApp mainMenu]];
+}
+
+@end
ChromeWebContentsViewDelegateMac::ChromeWebContentsViewDelegateMac(
content::WebContents* web_contents)
@@ -27,6 +98,14 @@ ChromeWebContentsViewDelegateMac::CreateRenderWidgetHostViewDelegate(
initWithRenderWidgetHost:render_widget_host];
}
+NSWindow* ChromeWebContentsViewDelegateMac::CreatePopupWindow() {
+ return [[RenderWidgetPopupWindow alloc]
+ initWithContentRect:NSZeroRect
+ styleMask:NSBorderlessWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO];
Avi (use Gerrit) 2012/12/10 20:52:06 Is there any possible way to move this into conten
keishi 2012/12/11 01:53:54 This was the difficult part. RenderWidgetPopupWind
+}
+
content::WebDragDestDelegate*
ChromeWebContentsViewDelegateMac::GetDragDestDelegate() {
return bookmark_handler_.get();

Powered by Google App Engine
This is Rietveld 408576698