diff --git a/app/util/Notifier.js b/app/util/Notifier.js index 5d0da406..c0475779 100644 --- a/app/util/Notifier.js +++ b/app/util/Notifier.js @@ -49,7 +49,7 @@ Ext.define('Rambox.util.Notifier', { }); notification.onclick = function() { - require('electron').remote.getCurrentWindow().show(); + ipc.send('toggleWin', true); Ext.cq1('app-main').setActiveTab(view); }; } diff --git a/electron/main.js b/electron/main.js index 8d9cd71e..1e66fd28 100644 --- a/electron/main.js +++ b/electron/main.js @@ -363,6 +363,26 @@ ipcMain.on('image:popup', function(event, url, partition) { tmpWindow.loadURL(url); }); +ipcMain.on('toggleWin', function(event, allwaysShow) { + if ( !mainWindow.isMinimized() && mainWindow.isMaximized() && mainWindow.isVisible() ) { // Maximized + !allwaysShow ? mainWindow.close() : mainWindow.show(); + } else if ( mainWindow.isMinimized() && !mainWindow.isMaximized() && !mainWindow.isVisible() ) { // Minimized + mainWindow.restore(); + } else if ( !mainWindow.isMinimized() && !mainWindow.isMaximized() && mainWindow.isVisible() ) { // Windowed mode + !allwaysShow ? mainWindow.close() : mainWindow.show(); + } else if ( mainWindow.isMinimized() && !mainWindow.isMaximized() && mainWindow.isVisible() ) { // Closed to taskbar + mainWindow.restore(); + } else if ( !mainWindow.isMinimized() && mainWindow.isMaximized() && !mainWindow.isVisible() ) { // Closed maximized to tray + mainWindow.show(); + } else if ( !mainWindow.isMinimized() && !mainWindow.isMaximized() && !mainWindow.isVisible() ) { // Closed windowed to tray + mainWindow.show(); + } else if ( mainWindow.isMinimized() && !mainWindow.isMaximized() && !mainWindow.isVisible() ) { // Closed minimized to tray + mainWindow.restore(); + } else { + mainWindow.show(); + } +}); + // Proxy if ( config.get('proxy') ) app.commandLine.appendSwitch('proxy-server', config.get('proxyHost')+':'+config.get('proxyPort')); diff --git a/electron/tray.js b/electron/tray.js index 17c86f3a..4b02838c 100644 --- a/electron/tray.js +++ b/electron/tray.js @@ -15,38 +15,12 @@ exports.create = function(win, config) { const icon = process.platform === 'linux' || process.platform === 'darwin' ? 'IconTray.png' : 'Icon.ico'; const iconPath = path.join(__dirname, `../resources/${icon}`); - const toggleWin = () => { - switch ( config.get('window_close_behavior') ) { - case 'keep_in_tray': - case 'quit': - if ( win.isVisible() ) { - win.hide(); - } else if ( config.get('maximized') ) { - win.maximize(); - win.focus(); - } else { - win.show(); - } - break; - case 'keep_in_tray_and_taskbar': - if ( win.isVisible() && !win.isMinimized() ) { - win.minimize(); - } else if ( config.get('maximized') ) { - win.maximize(); - win.focus(); - } else { - win.show(); - } - break; - default: - break; - } - }; - const contextMenu = electron.Menu.buildFromTemplate([ { label: 'Show/Hide Window' - ,click: toggleWin + ,click() { + win.webContents.executeJavaScript('ipc.send("toggleWin", false);'); + } }, { type: 'separator' @@ -62,12 +36,8 @@ exports.create = function(win, config) { appIcon = new Tray(iconPath); appIcon.setToolTip('Rambox'); appIcon.setContextMenu(contextMenu); - appIcon.on('double-click', () => { - if ( !win.isVisible() ) { - win.show(); - } else { - win.focus(); - } + appIcon.on('double-click', function() { + win.webContents.executeJavaScript('ipc.send("toggleWin", true);'); }); };