9

I'm working on an app (with electron) and I would like users to be able to exit fullscreen mode when pressing "esc". I tried different methods, in vain. Here is the code who launch the app in a new browser window in fullscreen mode and display and HTML/CSS content :

    'use strict';

const electron = require('electron');
// Module to control application life.
const app = electron.app;
// Module to create native browser window.
const BrowserWindow = electron.BrowserWindow;

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow;

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({fullscreen:true});

  // and load the index.html of the app.
  mainWindow.loadURL('file://' + __dirname + '/index.html');

  // Emitted when the window is closed.
  mainWindow.on('closed', function() {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null;
  });
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
app.on('ready', createWindow);

// Quit when all windows are closed.
app.on('window-all-closed', function () {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

app.on('activate', function () {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow();
  }
});

And here is what I'm trying to add to this code to be able to exit full screen but it doesn't work :

app.on('keydown', function(e){
    if(e.keyCode === 27){
      app.exitFullscreen();
    }
});

I also tried with "cancelFullscreen". And "fullscreen:false". Not working.

Thanks a lot for your attention!

4 Answers 4

10

It's quite easy. Add a keyboard listener in render process, and then manipulate the window through the remote module.

    const remote = require("electron").remote;

    document.addEventListener("keydown", event => {

        switch (event.key) {
            case "Escape":
                if (remote.getCurrentWindow().isFullScreen()) {
                    remote.getCurrentWindow().setFullScreen(false);
                }
                break;
             }
    });
Sign up to request clarification or add additional context in comments.

6 Comments

Thanks for your reply Zen. I try to insert this code in my main.js but I've got an error message and the app turn to black screen till i quit.
@G.Delvigne you should insert it to the html file instead of main.js
Thank you again. Now I've put the code between "script" html tags in my index.html file and nothing happens. :/ No result when I press to espace after launching the app.
Does the console output any error? How do you make the window [email protected]
No error. To make the fullscreen, I changed the default settings in the main.js. Like so : function createWindow () { // Create the browser window. mainWindow = new BrowserWindow({fullscreen:true}); Default settings are : mainWindow = new BrowserWindow({width: 900, height: 600});
|
4

Here is the solution that worked for me:

function minimizeWindow () {
    mainWindow.setFullScreen(false);
    console.log(mainWindow);
}

app.on('ready', function() {

  const ret = electron.globalShortcut.register('Escape', function(){
    console.log('Escape is pressed');

        minimizeWindow();
  });

console.log(electron.globalShortcut.isRegistered('Escape'));
});

app.on('will-quit', function(){

  electron.globalShortcut.unregister('Escape');

  electron.globalShortcut.unregisterAll();
});

1 Comment

Global shortcuts will register globally, so regardless whether or not the application has focus or is maximized the shortcuthandler will fire. This also overrides registered shortcuts of other applications (Escape wont work anymore for them). To only react to the shortcuts when the application is focused one should look into localshortcuts
2

Global shortcuts catch all events, it's better to use hidden menu button. For example you can add a menu with this menu item:

{
    label: "Exit full screen",
    visible: false,
    accelerator: "Esc",
    click(item, focusedWindow) {
        if (focusedWindow.isFullScreen()) {
            focusedWindow.setFullScreen(false);
        }
    },
},

You can apply the new menu item with electron's setApplicationMenu command: https://www.electronjs.org/docs/api/menu#menusetapplicationmenumenu

Comments

1

Had some problems with this aswell, just create a listener for the escape key and place this inside, i recommend not putting it into the main or renderer files of electron.

 
const { remote } = require('electron');
const { BrowserWindow } = remote;

document.addEventListener("keydown", event => {

        switch (event.key) {
            case "Escape":
                var window = BrowserWindow.getFocusedWindow();
            if(window.isMaximized()){
             window.unmaximize();
           }else{
             window.maximize();
           };
                break;
             }
    });

2 Comments

Thanks! I created a script.js file within I put the snippet. Then I linked this file to my index.html. <script type="text/javascript" src="script/script.js"></script>. But it doesn't work.
How do I create a listener for the escape key ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.