Skip to content

Commit cc70999

Browse files
committed
Changes to menu handling
Most importantly the Electron front-end doesn't need the 'remote' module (which is removed in Electron 14) any more
1 parent e9d49db commit cc70999

10 files changed

Lines changed: 222 additions & 194 deletions

File tree

electron/main.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ function eventToWindow(event) {
123123
}
124124

125125
ipcMain.on('window-ops', (event, command, arg) => {
126+
let win;
126127
switch (command) {
127128
case 'new-window':
128129
if (! arg.width || ! arg.height) {
@@ -143,25 +144,45 @@ ipcMain.on('window-ops', (event, command, arg) => {
143144
case 'toggle-devtools':
144145
eventToWindow(event).toggleDevTools();
145146
break;
147+
case 'fullscreen':
148+
win = eventToWindow(event);
149+
arg = arg === 'toggle' ? ! win.isFullScreen()
150+
: arg && arg !== 'false' && arg !== 'off' && arg !== 'no';
151+
win.setFullScreen(arg == 'toggle' ? ! win.isFullScreen() : arg);
152+
break;
146153
case 'set-menubar-visibility':
147154
eventToWindow(event).setMenuBarVisibility(arg);
148155
break;
149156
}
150157
});
151158

152-
ipcMain.on('show-context-menu', (event, items, options) => {
153-
items = items.map((item) => {
159+
function fixMenuItems(items, win = null) {
160+
return items.map((item) => {
154161
const clickClientAction = item.clickClientAction;
155162
if (clickClientAction) {
156-
item.click = function() {
157-
event.sender.send('do-named-command', clickClientAction);
163+
item.click = function(menuItem, browserWindow, event) {
164+
browserWindow.send('do-named-command', clickClientAction);
158165
};
159166
item.clickClientAction = undefined;
160167
}
168+
if (win && item.visible === false && item.label == "Exit full screen")
169+
item.visible = win.isFullScreen()
170+
if (item.accelerator && item.accelerator.indexOf(' ') >= 0)
171+
item.accelerator = undefined;
172+
if (item.submenu)
173+
item.submenu = fixMenuItems(item.submenu, win);
161174
return item;
162175
});
163-
const menu = Menu.buildFromTemplate(items);
164-
let oarg = {window: BrowserWindow.fromWebContents(event.sender)};
176+
}
177+
178+
ipcMain.on('set-application-menu', (event, template) => {
179+
Menu.setApplicationMenu(Menu.buildFromTemplate(fixMenuItems(template)));
180+
});
181+
182+
ipcMain.on('show-context-menu', (event, items, options) => {
183+
let win = BrowserWindow.fromWebContents(event.sender);
184+
const menu = Menu.buildFromTemplate(fixMenuItems(items, win));
185+
let oarg = {window: win };
165186
if (options.x !== undefined && options.y !== undefined) {
166187
oarg.x = Math.round(options.x);
167188
oarg.y = Math.round(options.y);

electron/preload.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22
const _electron = require('electron');
33
const _fs = require('fs');
44
const _require = require;
5-
const remote = _electron.remote;
65
const _electronAccess = {
76
clipboard: _electron.clipboard,
87
fs: _fs,
98
ipcRenderer: _electron.ipcRenderer,
10-
Menu: remote.Menu,
11-
MenuItem: remote.MenuItem,
129
require: _require
1310
}
1411
process.once('loaded', () => {

hlib/commands.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,20 @@ cmd('enter-mux-mode',
143143
dt.enterMuxMode();
144144
return true;
145145
});
146+
cmd('toggle-menubar',
147+
function(dt, key) {
148+
if (DomTerm.toggleMenubar)
149+
DomTerm.toggleMenubar();
150+
return true;
151+
});
146152
cmd('toggle-fullscreen',
147153
function(dt, key) {
148-
if (screenfull.isFullscreen)
149-
screenfull.exit();
150-
else
151-
screenfull.request();
154+
DomTerm.windowOp('fullscreen', 'toggle');
155+
return true;
156+
});
157+
cmd('exit-fullscreen',
158+
function(dt, key) {
159+
DomTerm.windowOp('fullscreen', 'off');
152160
return true;
153161
});
154162
cmd('toggle-fullscreen-current-window',

hlib/domterm-client.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ function loadHandler(event) {
319319
*/
320320
}
321321
if (! DomTerm.useIFrame || ! DomTerm.isInIFrame())
322-
if (DomTerm.setContextMenu && ! DomTerm.simpleLayout)
323-
DomTerm.setContextMenu();
322+
if (DomTerm.createMenus && ! DomTerm.simpleLayout)
323+
DomTerm.createMenus();
324324
m = location.hash.match(/open=([^&;]*)/);
325325
var open_encoded = m ? decodeURIComponent(m[1]) : null;
326326
if (open_encoded) {

0 commit comments

Comments
 (0)