| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ui/message_center/cocoa/tray_controller.h" | |
| 6 | |
| 7 #include "ui/base/cocoa/window_size_constants.h" | |
| 8 #include "ui/base/resource/resource_bundle.h" | |
| 9 #import "ui/message_center/cocoa/popup_collection.h" | |
| 10 #import "ui/message_center/cocoa/tray_view_controller.h" | |
| 11 #include "ui/message_center/message_center_tray.h" | |
| 12 #include "ui/message_center/message_center_tray_delegate.h" | |
| 13 | |
| 14 @interface MCTrayWindow : NSPanel | |
| 15 @end | |
| 16 | |
| 17 @implementation MCTrayWindow | |
| 18 | |
| 19 - (BOOL)canBecomeKeyWindow { | |
| 20 return YES; | |
| 21 } | |
| 22 | |
| 23 - (void)cancelOperation:(id)sender { | |
| 24 [self orderOut:self]; | |
| 25 } | |
| 26 | |
| 27 @end | |
| 28 | |
| 29 @implementation MCTrayController | |
| 30 | |
| 31 - (id)initWithMessageCenterTray:(message_center::MessageCenterTray*)tray { | |
| 32 base::scoped_nsobject<MCTrayWindow> window( | |
| 33 [[MCTrayWindow alloc] initWithContentRect:ui::kWindowSizeDeterminedLater | |
| 34 styleMask:NSBorderlessWindowMask | | |
| 35 NSNonactivatingPanelMask | |
| 36 backing:NSBackingStoreBuffered | |
| 37 defer:NO]); | |
| 38 if ((self = [super initWithWindow:window])) { | |
| 39 tray_ = tray; | |
| 40 | |
| 41 [window setDelegate:self]; | |
| 42 [window setHasShadow:YES]; | |
| 43 [window setHidesOnDeactivate:NO]; | |
| 44 [window setLevel:NSFloatingWindowLevel]; | |
| 45 | |
| 46 viewController_.reset([[MCTrayViewController alloc] initWithMessageCenter: | |
| 47 tray_->message_center()]); | |
| 48 NSView* contentView = [viewController_ view]; | |
| 49 [window setFrame:[contentView frame] display:NO]; | |
| 50 [window setContentView:contentView]; | |
| 51 | |
| 52 // The global event monitor will close the tray in response to events | |
| 53 // delivered to other applications, and -windowDidResignKey: will catch | |
| 54 // events within the application. | |
| 55 __block MCTrayController* weakSelf = self; | |
| 56 clickEventMonitor_ = | |
| 57 [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask | | |
| 58 NSRightMouseDownMask | | |
| 59 NSOtherMouseDownMask | |
| 60 handler:^(NSEvent* event) { | |
| 61 [weakSelf windowDidResignKey:nil]; | |
| 62 }]; | |
| 63 } | |
| 64 return self; | |
| 65 } | |
| 66 | |
| 67 - (void)dealloc { | |
| 68 [NSEvent removeMonitor:clickEventMonitor_]; | |
| 69 [super dealloc]; | |
| 70 } | |
| 71 | |
| 72 - (MCTrayViewController*)viewController { | |
| 73 return viewController_.get(); | |
| 74 } | |
| 75 | |
| 76 - (void)close { | |
| 77 [viewController_ onWindowClosing]; | |
| 78 [super close]; | |
| 79 } | |
| 80 | |
| 81 - (void)showTrayAtRightOf:(NSPoint)rightPoint atLeftOf:(NSPoint)leftPoint { | |
| 82 NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; | |
| 83 NSRect screenFrame = [screen visibleFrame]; | |
| 84 | |
| 85 NSRect frame = [[viewController_ view] frame]; | |
| 86 | |
| 87 if (rightPoint.x + NSWidth(frame) < NSMaxX(screenFrame)) { | |
| 88 frame.origin.x = rightPoint.x; | |
| 89 frame.origin.y = rightPoint.y - NSHeight(frame); | |
| 90 } else { | |
| 91 frame.origin.x = leftPoint.x - NSWidth(frame); | |
| 92 frame.origin.y = leftPoint.y - NSHeight(frame); | |
| 93 } | |
| 94 | |
| 95 [[self window] setFrame:frame display:YES]; | |
| 96 [viewController_ scrollToTop]; | |
| 97 [self showWindow:nil]; | |
| 98 } | |
| 99 | |
| 100 - (void)onMessageCenterTrayChanged { | |
| 101 [viewController_ onMessageCenterTrayChanged]; | |
| 102 } | |
| 103 | |
| 104 - (void)windowDidResignKey:(NSNotification*)notification { | |
| 105 // The settings bubble data structures assume that the settings dialog is | |
| 106 // visible only for short periods of time: There's a fixed list of permissions | |
| 107 // for example. | |
| 108 [viewController_ cleanupSettings]; | |
| 109 | |
| 110 tray_->HideMessageCenterBubble(); | |
| 111 } | |
| 112 | |
| 113 @end | |
| OLD | NEW |