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

Side by Side Diff: chrome/browser/ui/cocoa/download/download_item_button.mm

Issue 1125423002: Dismiss context menu when download bar is closed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Dismiss context menu using NSMenu API. Created 5 years, 7 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 #import "chrome/browser/ui/cocoa/download/download_item_button.h" 5 #import "chrome/browser/ui/cocoa/download/download_item_button.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/sys_string_conversions.h" 8 #include "base/strings/sys_string_conversions.h"
9 #import "chrome/browser/ui/cocoa/download/download_item_cell.h" 9 #import "chrome/browser/ui/cocoa/download/download_item_cell.h"
10 #import "chrome/browser/ui/cocoa/download/download_item_controller.h" 10 #import "chrome/browser/ui/cocoa/download/download_item_controller.h"
11 #import "chrome/browser/ui/cocoa/download/download_shelf_context_menu_controller .h" 11 #import "chrome/browser/ui/cocoa/download/download_shelf_context_menu_controller .h"
12 #import "chrome/browser/ui/cocoa/view_id_util.h" 12 #import "chrome/browser/ui/cocoa/view_id_util.h"
13 #import "ui/base/cocoa/nsview_additions.h" 13 #import "ui/base/cocoa/nsview_additions.h"
14 14
15 @implementation DownloadItemButton 15 @implementation DownloadItemButton
16 16
17 @synthesize download = downloadPath_; 17 @synthesize download = downloadPath_;
18 @synthesize controller = controller_; 18 @synthesize controller = controller_;
19 19
20 // Overridden from DraggableButton. 20 // Overridden from DraggableButton.
21 - (void)beginDrag:(NSEvent*)event { 21 - (void)beginDrag:(NSEvent*)event {
22 if (!downloadPath_.empty()) { 22 if (!downloadPath_.empty()) {
23 NSString* filename = base::SysUTF8ToNSString(downloadPath_.value()); 23 NSString* filename = base::SysUTF8ToNSString(downloadPath_.value());
24 [self dragFile:filename fromRect:[self bounds] slideBack:YES event:event]; 24 [self dragFile:filename fromRect:[self bounds] slideBack:YES event:event];
25 } 25 }
26 } 26 }
27 27
28 - (void)showContextMenu {
29 base::scoped_nsobject<DownloadShelfContextMenuController> menuController(
30 [[DownloadShelfContextMenuController alloc]
31 initWithItemController:controller_
32 withDelegate:self]);
33 contextMenu_.reset([[menuController menu] retain]);
34 [NSMenu popUpContextMenu:contextMenu_.get()
35 withEvent:[NSApp currentEvent]
36 forView:self];
37 contextMenu_.reset();
38 }
39
28 // Override to show a context menu on mouse down if clicked over the context 40 // Override to show a context menu on mouse down if clicked over the context
29 // menu area. 41 // menu area.
30 - (void)mouseDown:(NSEvent*)event { 42 - (void)mouseDown:(NSEvent*)event {
31 DCHECK(controller_); 43 DCHECK(controller_);
32 // Override so that we can pop up a context menu on mouse down. 44 // Override so that we can pop up a context menu on mouse down.
33 NSCell* cell = [self cell]; 45 NSCell* cell = [self cell];
34 DCHECK([cell respondsToSelector:@selector(isMouseOverButtonPart)]); 46 DCHECK([cell respondsToSelector:@selector(isMouseOverButtonPart)]);
35 if ([reinterpret_cast<DownloadItemCell*>(cell) isMouseOverButtonPart]) { 47 if ([reinterpret_cast<DownloadItemCell*>(cell) isMouseOverButtonPart]) {
36 [self.draggableButton mouseDownImpl:event]; 48 [self.draggableButton mouseDownImpl:event];
37 } else { 49 } else {
38 base::scoped_nsobject<DownloadShelfContextMenuController> menuController(
39 [[DownloadShelfContextMenuController alloc]
40 initWithItemController:controller_
41 withDelegate:self]);
42
43 [cell setHighlighted:YES]; 50 [cell setHighlighted:YES];
44 [NSMenu popUpContextMenu:[menuController menu] 51 [self showContextMenu];
45 withEvent:[NSApp currentEvent]
46 forView:self];
47 } 52 }
48 } 53 }
49 54
50 // Override to retain the controller, in case a closure is pumped that deletes 55 // Override to retain the controller, in case a closure is pumped that deletes
51 // the DownloadItemController while the menu is open <http://crbug.com/129826>. 56 // the DownloadItemController while the menu is open <http://crbug.com/129826>.
52 - (void)rightMouseDown:(NSEvent*)event { 57 - (void)rightMouseDown:(NSEvent*)event {
53 base::scoped_nsobject<DownloadItemController> ref([controller_ retain]); 58 base::scoped_nsobject<DownloadItemController> ref([controller_ retain]);
54 [super rightMouseDown:event]; 59 [super rightMouseDown:event];
55 } 60 }
56 61
(...skipping 20 matching lines...) Expand all
77 // ThemedWindowDrawing implementation. 82 // ThemedWindowDrawing implementation.
78 83
79 - (void)windowDidChangeTheme { 84 - (void)windowDidChangeTheme {
80 [self setNeedsDisplay:YES]; 85 [self setNeedsDisplay:YES];
81 } 86 }
82 87
83 - (void)windowDidChangeActive { 88 - (void)windowDidChangeActive {
84 [self setNeedsDisplay:YES]; 89 [self setNeedsDisplay:YES];
85 } 90 }
86 91
92 - (BOOL)showingContextMenu
93 {
94 return contextMenu_.get() != nil;
95 }
96
97 - (void)viewWillMoveToWindow:(NSWindow *)newWindow {
98 // If the DownloadItemButton's context menu is still visible, dismiss it.
99 if (!newWindow) {
100 [contextMenu_.get() cancelTrackingWithoutAnimation];
101 }
102 }
103
87 @end 104 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698