OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/message_center/cocoa/tray_controller.h" | 5 #include "ui/message_center/cocoa/tray_controller.h" |
6 | 6 |
7 #include "ui/base/cocoa/window_size_constants.h" | 7 #include "ui/base/cocoa/window_size_constants.h" |
8 #include "ui/base/resource/resource_bundle.h" | 8 #include "ui/base/resource/resource_bundle.h" |
9 #import "ui/message_center/cocoa/popup_collection.h" | 9 #import "ui/message_center/cocoa/popup_collection.h" |
10 #import "ui/message_center/cocoa/tray_view_controller.h" | 10 #import "ui/message_center/cocoa/tray_view_controller.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 [window setDelegate:self]; | 36 [window setDelegate:self]; |
37 [window setHasShadow:YES]; | 37 [window setHasShadow:YES]; |
38 [window setHidesOnDeactivate:NO]; | 38 [window setHidesOnDeactivate:NO]; |
39 [window setLevel:NSFloatingWindowLevel]; | 39 [window setLevel:NSFloatingWindowLevel]; |
40 | 40 |
41 viewController_.reset([[MCTrayViewController alloc] initWithMessageCenter: | 41 viewController_.reset([[MCTrayViewController alloc] initWithMessageCenter: |
42 tray_->message_center()]); | 42 tray_->message_center()]); |
43 NSView* contentView = [viewController_ view]; | 43 NSView* contentView = [viewController_ view]; |
44 [window setFrame:[contentView frame] display:NO]; | 44 [window setFrame:[contentView frame] display:NO]; |
45 [window setContentView:contentView]; | 45 [window setContentView:contentView]; |
| 46 |
| 47 // The global event monitor will close the tray in response to events |
| 48 // delivered to other applications, and -windowDidResignKey: will catch |
| 49 // events within the application. |
| 50 clickEventMonitor_ = |
| 51 [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask | |
| 52 NSRightMouseDownMask | |
| 53 NSOtherMouseDownMask |
| 54 handler:^(NSEvent* event) { |
| 55 tray_->HideMessageCenterBubble(); |
| 56 }]; |
46 } | 57 } |
47 return self; | 58 return self; |
48 } | 59 } |
49 | 60 |
| 61 - (void)dealloc { |
| 62 [NSEvent removeMonitor:clickEventMonitor_]; |
| 63 [super dealloc]; |
| 64 } |
| 65 |
50 - (void)showTrayAt:(NSPoint)point { | 66 - (void)showTrayAt:(NSPoint)point { |
51 NSRect frame = [[viewController_ view] frame]; | 67 NSRect frame = [[viewController_ view] frame]; |
52 frame.origin.x = point.x; | 68 frame.origin.x = point.x; |
53 frame.origin.y = point.y - NSHeight(frame); | 69 frame.origin.y = point.y - NSHeight(frame); |
54 [[self window] setFrame:frame display:YES]; | 70 [[self window] setFrame:frame display:YES]; |
55 [self showWindow:nil]; | 71 [self showWindow:nil]; |
56 } | 72 } |
57 | 73 |
58 - (void)onMessageCenterTrayChanged { | 74 - (void)onMessageCenterTrayChanged { |
59 CGFloat oldHeight = NSHeight([[viewController_ view] frame]); | 75 CGFloat oldHeight = NSHeight([[viewController_ view] frame]); |
60 [viewController_ onMessageCenterTrayChanged]; | 76 [viewController_ onMessageCenterTrayChanged]; |
61 CGFloat newHeight = NSHeight([[viewController_ view] frame]); | 77 CGFloat newHeight = NSHeight([[viewController_ view] frame]); |
62 | 78 |
63 NSRect windowFrame = [[self window] frame]; | 79 NSRect windowFrame = [[self window] frame]; |
64 CGFloat delta = newHeight - oldHeight; | 80 CGFloat delta = newHeight - oldHeight; |
65 windowFrame.origin.y -= delta; | 81 windowFrame.origin.y -= delta; |
66 windowFrame.size.height += delta; | 82 windowFrame.size.height += delta; |
67 [[self window] setFrame:windowFrame display:YES]; | 83 [[self window] setFrame:windowFrame display:YES]; |
68 } | 84 } |
69 | 85 |
70 - (void)windowDidResignKey:(NSNotification*)notification { | 86 - (void)windowDidResignKey:(NSNotification*)notification { |
71 tray_->HideMessageCenterBubble(); | 87 tray_->HideMessageCenterBubble(); |
72 } | 88 } |
73 | 89 |
74 @end | 90 @end |
OLD | NEW |