OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 /** | |
6 * @fileoverview | |
7 * Class to update the application's context menu to include host-side windows | |
8 * and to notify the host when one of these menu items is selected. | |
9 */ | |
10 | |
11 'use strict'; | |
12 | |
13 /** @suppress {duplicate} */ | |
14 var remoting = remoting || {}; | |
15 | |
16 /** | |
17 * @param {remoting.ContextMenuAdapter} adapter | |
18 * @constructor | |
19 */ | |
20 remoting.WindowActivationMenu = function(adapter) { | |
21 /** @private {remoting.SubmenuManager} */ | |
22 this.submenuManager_ = new remoting.SubmenuManager( | |
23 adapter, | |
24 chrome.i18n.getMessage(/*i18n-content*/'WINDOWS_SUBMENU_TITLE'), | |
25 false); | |
26 /** @private {function(string, string)} */ | |
27 this.sendExtensionMessage_ = base.doNothing; | |
28 | |
29 adapter.addListener(this.onContextMenu_.bind(this)); | |
30 }; | |
31 | |
32 /** | |
33 * Add a window to the application's context menu, or update the title of an | |
34 * existing window. | |
35 * | |
36 * @param {number} id The window id. | |
37 * @param {string} title The window title. | |
38 */ | |
39 remoting.WindowActivationMenu.prototype.add = function(id, title) { | |
40 this.submenuManager_.add(this.makeMenuId_(id), title); | |
41 // TODO(jamiewalch): Once crbug.com/426283 is fixed, call drawAttention() | |
42 // here if the window does not have focus. | |
43 }; | |
44 | |
45 /** | |
46 * Remove a window from the application's context menu. | |
47 * | |
48 * @param {number} id The window id. | |
49 */ | |
50 remoting.WindowActivationMenu.prototype.remove = function(id) { | |
51 this.submenuManager_.remove(this.makeMenuId_(id)); | |
52 }; | |
53 | |
54 /** | |
55 * Create a menu id from the given window id. | |
56 * | |
57 * @param {number} windowId | |
58 * @return {string} | |
59 * @private | |
60 */ | |
61 remoting.WindowActivationMenu.prototype.makeMenuId_ = function(windowId) { | |
62 return 'window-' + windowId; | |
63 }; | |
64 | |
65 /** @param {function(string, string)} callback */ | |
66 remoting.WindowActivationMenu.prototype.setExtensionMessageSender = | |
67 function(callback) { | |
68 this.sendExtensionMessage_ = callback; | |
69 }; | |
70 | |
71 /** | |
72 * Handle a click on the application's context menu. | |
73 * | |
74 * @param {OnClickData=} info | |
75 * @private | |
76 */ | |
77 remoting.WindowActivationMenu.prototype.onContextMenu_ = function(info) { | |
78 var menuId = info.menuItemId.toString(); | |
79 var components = menuId.split('-'); | |
80 if (components.length == 2 && | |
81 this.makeMenuId_(parseInt(components[1], 10)) == menuId) { | |
82 this.sendExtensionMessage_( | |
83 'activateWindow', | |
84 JSON.stringify({ id: parseInt(components[1], 0) })); | |
85 if (chrome.app.window.current().isMinimized()) { | |
86 chrome.app.window.current().restore(); | |
87 } | |
88 } | |
89 }; | |
OLD | NEW |