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

Side by Side Diff: chrome/browser/resources/shared/js/cr/ui/context_menu_handler.js

Issue 11013021: Basic keyboard access for recently_closed menu on NTP (re-work). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase to current version. Created 8 years, 1 month 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 (c) 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 cr.define('cr.ui', function() { 5 cr.define('cr.ui', function() {
6 6
7 /** @const */ var Menu = cr.ui.Menu; 7 /** @const */ var Menu = cr.ui.Menu;
8 8
9 /** 9 /**
10 * Handles context menus. 10 * Handles context menus.
(...skipping 21 matching lines...) Expand all
32 showMenu: function(e, menu) { 32 showMenu: function(e, menu) {
33 this.menu_ = menu; 33 this.menu_ = menu;
34 menu.updateCommands(e.currentTarget); 34 menu.updateCommands(e.currentTarget);
35 menu.hidden = false; 35 menu.hidden = false;
36 menu.contextElement = e.currentTarget; 36 menu.contextElement = e.currentTarget;
37 37
38 // when the menu is shown we steal all keyboard events. 38 // when the menu is shown we steal all keyboard events.
39 var doc = menu.ownerDocument; 39 var doc = menu.ownerDocument;
40 doc.addEventListener('keydown', this, true); 40 doc.addEventListener('keydown', this, true);
41 doc.addEventListener('mousedown', this, true); 41 doc.addEventListener('mousedown', this, true);
42 doc.addEventListener('blur', this, true); 42 doc.addEventListener('focus', this, true);
43 doc.defaultView.addEventListener('resize', this); 43 doc.defaultView.addEventListener('resize', this);
44 menu.addEventListener('contextmenu', this); 44 menu.addEventListener('contextmenu', this);
45 menu.addEventListener('activate', this); 45 menu.addEventListener('activate', this);
46 this.positionMenu_(e, menu); 46 this.positionMenu_(e, menu);
47 }, 47 },
48 48
49 /** 49 /**
50 * Hide the currently shown menu. 50 * Hide the currently shown menu.
51 */ 51 */
52 hideMenu: function() { 52 hideMenu: function() {
53 var menu = this.menu; 53 var menu = this.menu;
54 if (!menu) 54 if (!menu)
55 return; 55 return;
56 56
57 menu.hidden = true; 57 menu.hidden = true;
58 menu.contextElement = null; 58 menu.contextElement = null;
59 var doc = menu.ownerDocument; 59 var doc = menu.ownerDocument;
60 doc.removeEventListener('keydown', this, true); 60 doc.removeEventListener('keydown', this, true);
61 doc.removeEventListener('mousedown', this, true); 61 doc.removeEventListener('mousedown', this, true);
62 doc.removeEventListener('blur', this, true); 62 doc.removeEventListener('focus', this, true);
63 doc.defaultView.removeEventListener('resize', this); 63 doc.defaultView.removeEventListener('resize', this);
64 menu.removeEventListener('contextmenu', this); 64 menu.removeEventListener('contextmenu', this);
65 menu.removeEventListener('activate', this); 65 menu.removeEventListener('activate', this);
66 menu.selectedIndex = -1; 66 menu.selectedIndex = -1;
67 this.menu_ = null; 67 this.menu_ = null;
68 68
69 // On windows we might hide the menu in a right mouse button up and if 69 // On windows we might hide the menu in a right mouse button up and if
70 // that is the case we wait some short period before we allow the menu 70 // that is the case we wait some short period before we allow the menu
71 // to be shown again. 71 // to be shown again.
72 this.hideTimestamp_ = cr.isWindows ? Date.now() : 0; 72 this.hideTimestamp_ = cr.isWindows ? Date.now() : 0;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 e.preventDefault(); 139 e.preventDefault();
140 140
141 // If the menu is visible we let it handle all the keyboard events. 141 // If the menu is visible we let it handle all the keyboard events.
142 } else if (this.menu) { 142 } else if (this.menu) {
143 this.menu.handleKeyDown(e); 143 this.menu.handleKeyDown(e);
144 e.preventDefault(); 144 e.preventDefault();
145 e.stopPropagation(); 145 e.stopPropagation();
146 } 146 }
147 break; 147 break;
148 148
149 case 'focus':
150 if (!this.menu.contains(e.target))
151 this.hideMenu();
152 break;
153
149 case 'activate': 154 case 'activate':
150 case 'blur':
151 case 'resize': 155 case 'resize':
152 this.hideMenu(); 156 this.hideMenu();
153 break; 157 break;
154 158
155 case 'contextmenu': 159 case 'contextmenu':
156 if ((!this.menu || !this.menu.contains(e.target)) && 160 if ((!this.menu || !this.menu.contains(e.target)) &&
157 (!this.hideTimestamp_ || Date.now() - this.hideTimestamp_ > 50)) 161 (!this.hideTimestamp_ || Date.now() - this.hideTimestamp_ > 50))
158 this.showMenu(e, e.currentTarget.contextMenu); 162 this.showMenu(e, e.currentTarget.contextMenu);
159 e.preventDefault(); 163 e.preventDefault();
160 // Don't allow elements further up in the DOM to show their menus. 164 // Don't allow elements further up in the DOM to show their menus.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 * The singleton context menu handler. 237 * The singleton context menu handler.
234 * @type {!ContextMenuHandler} 238 * @type {!ContextMenuHandler}
235 */ 239 */
236 var contextMenuHandler = new ContextMenuHandler; 240 var contextMenuHandler = new ContextMenuHandler;
237 241
238 // Export 242 // Export
239 return { 243 return {
240 contextMenuHandler: contextMenuHandler 244 contextMenuHandler: contextMenuHandler
241 }; 245 };
242 }); 246 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698