mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-16 21:58:39 -09:00
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:
parent
d6009888a3
commit
64e87d0d27
5 changed files with 95 additions and 1 deletions
39
app/index.js
39
app/index.js
|
|
@ -3,6 +3,7 @@ const {resolve} = require('path');
|
||||||
|
|
||||||
// Packages
|
// Packages
|
||||||
const {parse: parseUrl} = require('url');
|
const {parse: parseUrl} = require('url');
|
||||||
|
const electron = require('electron');
|
||||||
const {app, BrowserWindow, shell, Menu} = require('electron');
|
const {app, BrowserWindow, shell, Menu} = require('electron');
|
||||||
const {gitDescribe} = require('git-describe');
|
const {gitDescribe} = require('git-describe');
|
||||||
const uuid = require('uuid');
|
const uuid = require('uuid');
|
||||||
|
|
@ -247,6 +248,40 @@ app.on('ready', () => installDevExtensions(isDev).then(() => {
|
||||||
win.maximize();
|
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}) => {
|
rpc.on('resize', ({uid, cols, rows}) => {
|
||||||
const session = sessions.get(uid);
|
const session = sessions.get(uid);
|
||||||
session.resize({cols, rows});
|
session.resize({cols, rows});
|
||||||
|
|
@ -325,7 +360,9 @@ app.on('ready', () => installDevExtensions(isDev).then(() => {
|
||||||
|
|
||||||
// the window can be closed by the browser process itself
|
// the window can be closed by the browser process itself
|
||||||
win.on('close', () => {
|
win.on('close', () => {
|
||||||
app.config.window.recordState(win);
|
if (!isQuickFullScreenEnabled) {
|
||||||
|
app.config.window.recordState(win);
|
||||||
|
}
|
||||||
windowSet.delete(win);
|
windowSet.delete(win);
|
||||||
rpc.destroy();
|
rpc.destroy();
|
||||||
deleteSessions();
|
deleteSessions();
|
||||||
|
|
|
||||||
23
app/menu.js
23
app/menu.js
|
|
@ -254,6 +254,7 @@ module.exports = ({createWindow, updatePlugins}) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const windowMenu = {
|
const windowMenu = {
|
||||||
|
id: 'WINDOW',
|
||||||
role: 'window',
|
role: 'window',
|
||||||
submenu: [
|
submenu: [
|
||||||
{
|
{
|
||||||
|
|
@ -312,6 +313,28 @@ module.exports = ({createWindow, updatePlugins}) => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
role: 'togglefullscreen'
|
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');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ import {
|
||||||
UI_MOVE_PREV_PANE,
|
UI_MOVE_PREV_PANE,
|
||||||
UI_SHOW_PREFERENCES,
|
UI_SHOW_PREFERENCES,
|
||||||
UI_WINDOW_MOVE,
|
UI_WINDOW_MOVE,
|
||||||
|
UI_ENTER_QUICK_FULL_SCREEN,
|
||||||
|
UI_LEAVE_QUICK_FULL_SCREEN,
|
||||||
UI_OPEN_FILE
|
UI_OPEN_FILE
|
||||||
} from '../constants/ui';
|
} from '../constants/ui';
|
||||||
|
|
||||||
|
|
@ -30,6 +32,28 @@ import {setActiveGroup} from './term-groups';
|
||||||
|
|
||||||
const {stat} = window.require('fs');
|
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() {
|
export function increaseFontSize() {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,6 @@ export const UI_SHOW_PREFERENCES = 'UI_SHOW_PREFERENCES';
|
||||||
export const UI_WINDOW_MOVE = 'UI_WINDOW_MOVE';
|
export const UI_WINDOW_MOVE = 'UI_WINDOW_MOVE';
|
||||||
export const UI_WINDOW_MAXIMIZE = 'UI_WINDOW_MAXIMIZE';
|
export const UI_WINDOW_MAXIMIZE = 'UI_WINDOW_MAXIMIZE';
|
||||||
export const UI_WINDOW_UNMAXIMIZE = 'UI_WINDOW_UNMAXIMIZE';
|
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';
|
export const UI_OPEN_FILE = 'UI_OPEN_FILE';
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,14 @@ rpc.on('split request vertical', () => {
|
||||||
store_.dispatch(termGroupActions.requestVerticalSplit());
|
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', () => {
|
rpc.on('reset fontSize req', () => {
|
||||||
store_.dispatch(uiActions.resetFontSize());
|
store_.dispatch(uiActions.resetFontSize());
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue