Willerie
Willerie

Reputation: 79

Unable to focus electron app (on Windows)

Hopefully a simple question: I'm making a timer-style application, and I'd like the application to regain focus when the timer ends. The application successfully pops back up when the timer ends, and I can even see a blinking cursor in the first text box, but when I type something it still goes to the app behind it. I've tried every method I could find in the electron documentation (listed below), and none of them work. Is there another avenue I'm missing, or is this just not possible?

Object.values(windows).forEach((window) => { // windows here stores all the application's BrowserWindows
  window.focus();
  window.focusOnWebView();
  window.webContents.focus();
});
app.focus({ steal: true });

Thanks!

Upvotes: 4

Views: 1609

Answers (1)

yuvin
yuvin

Reputation: 383

I tried all the documented methods as well and nothing really works (at least in Windows 10).

To bring the app on top I have to toggle AlwaysOnTop like this (renderer process):

let currentWindow = window.require("electron").remote.getCurrentWindow();
currentWindow.setAlwaysOnTop(true);
currentWindow.setAlwaysOnTop(false);

but unfortunately it doesn't help with the app focus.

People say that BrowserWindow::restore() function correctly sets focus back to the app. So you might do something like this (although it looks terrible):

currentWindow.minimize();
currentWindow.restore();

It is interesting that I have a similar problem in my other C++ project, so probably it is something OS-related. To solve the problem in the C++ project I had to call SetForegroundWindow function after activating the window. Since ElectronJS BrowserWindow has a getNativeWindowHandle function that returns Windows HWND handle, maybe you could utilize this if nothing else works.

Good luck!

Upvotes: 5

Related Questions