Quick full screen (#803)

* Add pseudo quick full screen

* Record window size before entering full screen

* Restore window size when leaving full screen

* Toggle menu items for quick full screen

* Remove redundant filters

* Add accelerators for Linux

* Only save window state when not full screen
This commit is contained in:
Marshall Bowers 2016-10-16 01:20:10 -04:00 committed by Guillermo Rauch
parent d6009888a3
commit 64e87d0d27
5 changed files with 95 additions and 1 deletions

View file

@ -3,6 +3,7 @@ const {resolve} = require('path');
// Packages
const {parse: parseUrl} = require('url');
const electron = require('electron');
const {app, BrowserWindow, shell, Menu} = require('electron');
const {gitDescribe} = require('git-describe');
const uuid = require('uuid');
@ -247,6 +248,40 @@ app.on('ready', () => installDevExtensions(isDev).then(() => {
win.maximize();
});
const findMenuItem = (items, id) => items.filter(item => item.id === id)[0];
const getMenuItem = id => findMenuItem(Menu.getApplicationMenu().items, id);
const getSubmenuItem = (menuItem, id) => findMenuItem(menuItem.submenu.items, id);
let isQuickFullScreenEnabled = false;
const toggleQuickFullScreenMenuItems = isQuickFullScreen => {
const windowMenu = getMenuItem('WINDOW');
const enterQuickFullScreenMenu = getSubmenuItem(windowMenu, 'ENTER_QUICK_FULL_SCREEN');
const leaveQuickFullScreenMenu = getSubmenuItem(windowMenu, 'LEAVE_QUICK_FULL_SCREEN');
enterQuickFullScreenMenu.visible = !isQuickFullScreen;
leaveQuickFullScreenMenu.visible = isQuickFullScreen;
isQuickFullScreenEnabled = isQuickFullScreen;
};
rpc.on('enter quick full screen', () => {
toggleQuickFullScreenMenuItems(true);
app.config.window.recordState(win);
const {width, height} = electron.screen.getPrimaryDisplay().workAreaSize;
win.setSize(width, height);
win.center();
});
rpc.on('leave quick full screen', () => {
toggleQuickFullScreenMenuItems(false);
const winSet = app.config.window.get();
const [width, height] = winSet.size;
win.setSize(width, height);
const [x, y] = winSet.position;
win.setPosition(x, y);
});
rpc.on('resize', ({uid, cols, rows}) => {
const session = sessions.get(uid);
session.resize({cols, rows});
@ -325,7 +360,9 @@ app.on('ready', () => installDevExtensions(isDev).then(() => {
// the window can be closed by the browser process itself
win.on('close', () => {
app.config.window.recordState(win);
if (!isQuickFullScreenEnabled) {
app.config.window.recordState(win);
}
windowSet.delete(win);
rpc.destroy();
deleteSessions();

View file

@ -254,6 +254,7 @@ module.exports = ({createWindow, updatePlugins}) => {
};
const windowMenu = {
id: 'WINDOW',
role: 'window',
submenu: [
{
@ -312,6 +313,28 @@ module.exports = ({createWindow, updatePlugins}) => {
},
{
role: 'togglefullscreen'
},
{
id: 'ENTER_QUICK_FULL_SCREEN',
label: 'Enter Quick Full Screen',
accelerator: isMac ? 'Cmd+Enter' : 'Ctrl+Shift+Enter',
visible: true,
click(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.rpc.emit('enter quick full screen req');
}
}
},
{
id: 'LEAVE_QUICK_FULL_SCREEN',
label: 'Leave Quick Full Screen',
accelerator: isMac ? 'Cmd+Enter' : 'Ctrl+Shift+Enter',
visible: false,
click(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.rpc.emit('leave quick full screen req');
}
}
}
]
};

View file

@ -23,6 +23,8 @@ import {
UI_MOVE_PREV_PANE,
UI_SHOW_PREFERENCES,
UI_WINDOW_MOVE,
UI_ENTER_QUICK_FULL_SCREEN,
UI_LEAVE_QUICK_FULL_SCREEN,
UI_OPEN_FILE
} from '../constants/ui';
@ -30,6 +32,28 @@ import {setActiveGroup} from './term-groups';
const {stat} = window.require('fs');
export function enterQuickFullScreen() {
return dispatch => {
dispatch({
type: UI_ENTER_QUICK_FULL_SCREEN,
effect() {
rpc.emit('enter quick full screen');
}
});
};
}
export function leaveQuickFullScreen() {
return dispatch => {
dispatch({
type: UI_LEAVE_QUICK_FULL_SCREEN,
effect() {
rpc.emit('leave quick full screen');
}
});
};
}
export function increaseFontSize() {
return (dispatch, getState) => {
dispatch({

View file

@ -12,4 +12,6 @@ export const UI_SHOW_PREFERENCES = 'UI_SHOW_PREFERENCES';
export const UI_WINDOW_MOVE = 'UI_WINDOW_MOVE';
export const UI_WINDOW_MAXIMIZE = 'UI_WINDOW_MAXIMIZE';
export const UI_WINDOW_UNMAXIMIZE = 'UI_WINDOW_UNMAXIMIZE';
export const UI_ENTER_QUICK_FULL_SCREEN = 'UI_ENTER_QUICK_FULL_SCREEN';
export const UI_LEAVE_QUICK_FULL_SCREEN = 'UI_LEAVE_QUICK_FULL_SCREEN';
export const UI_OPEN_FILE = 'UI_OPEN_FILE';

View file

@ -80,6 +80,14 @@ rpc.on('split request vertical', () => {
store_.dispatch(termGroupActions.requestVerticalSplit());
});
rpc.on('enter quick full screen req', () => {
store_.dispatch(uiActions.enterQuickFullScreen());
});
rpc.on('leave quick full screen req', () => {
store_.dispatch(uiActions.leaveQuickFullScreen());
});
rpc.on('reset fontSize req', () => {
store_.dispatch(uiActions.resetFontSize());
});