Browse Source

Merge pull request #8570 from electron/force-refresh-menu-role

Add forcereload menu item role
Kevin Sawicki 8 years ago
parent
commit
cf694ef32b
4 changed files with 22 additions and 2 deletions
  1. 3 0
      default_app/main.js
  2. 1 0
      docs/api/menu-item.md
  3. 3 0
      docs/api/menu.md
  4. 15 2
      lib/browser/api/menu-item-roles.js

+ 3 - 0
default_app/main.js

@@ -86,6 +86,9 @@ app.once('ready', () => {
         {
           role: 'reload'
         },
+        {
+          role: 'forcereload'
+        },
         {
           role: 'toggledevtools'
         },

+ 1 - 0
docs/api/menu-item.md

@@ -57,6 +57,7 @@ The `role` property can have following values:
 * `close` - Close current window
 * `quit`- Quit the application
 * `reload` - Reload the current window
+* `forcereload` - Reload the current window ignoring the cache.
 * `toggledevtools` - Toggle developer tools in the current window
 * `togglefullscreen`- Toggle full screen mode on the current window
 * `resetzoom` - Reset the focused page's zoom level to the original size

+ 3 - 0
docs/api/menu.md

@@ -139,6 +139,9 @@ const template = [
       {
         role: 'reload'
       },
+      {
+        role: 'forcereload'
+      },
       {
         role: 'toggledevtools'
       },

+ 15 - 2
lib/browser/api/menu-item-roles.js

@@ -25,6 +25,14 @@ const roles = {
     label: 'Delete',
     webContentsMethod: 'delete'
   },
+  forcereload: {
+    label: 'Force Reload',
+    accelerator: 'Shift+CmdOrCtrl+R',
+    nonNativeMacOSRole: true,
+    windowMethod: (window) => {
+      window.webContents.reloadIgnoringCache()
+    }
+  },
   front: {
     label: 'Bring All to Front'
   },
@@ -75,11 +83,13 @@ const roles = {
   reload: {
     label: 'Reload',
     accelerator: 'CmdOrCtrl+R',
+    nonNativeMacOSRole: true,
     windowMethod: 'reload'
   },
   resetzoom: {
     label: 'Actual Size',
     accelerator: 'CommandOrControl+0',
+    nonNativeMacOSRole: true,
     webContentsMethod: (webContents) => {
       webContents.setZoomLevel(0)
     }
@@ -101,6 +111,7 @@ const roles = {
   toggledevtools: {
     label: 'Toggle Developer Tools',
     accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',
+    nonNativeMacOSRole: true,
     windowMethod: 'toggleDevTools'
   },
   togglefullscreen: {
@@ -127,6 +138,7 @@ const roles = {
   zoomin: {
     label: 'Zoom In',
     accelerator: 'CommandOrControl+Plus',
+    nonNativeMacOSRole: true,
     webContentsMethod: (webContents) => {
       webContents.getZoomLevel((zoomLevel) => {
         webContents.setZoomLevel(zoomLevel + 0.5)
@@ -136,6 +148,7 @@ const roles = {
   zoomout: {
     label: 'Zoom Out',
     accelerator: 'CommandOrControl+-',
+    nonNativeMacOSRole: true,
     webContentsMethod: (webContents) => {
       webContents.getZoomLevel((zoomLevel) => {
         webContents.setZoomLevel(zoomLevel - 0.5)
@@ -147,8 +160,8 @@ const roles = {
 const canExecuteRole = (role) => {
   if (!roles.hasOwnProperty(role)) return false
   if (process.platform !== 'darwin') return true
-  // macOS handles all roles natively except the ones listed below
-  return ['reload', 'resetzoom', 'toggledevtools', 'zoomin', 'zoomout'].includes(role)
+  // macOS handles all roles natively except for a few
+  return roles[role].nonNativeMacOSRole
 }
 
 exports.getDefaultLabel = (role) => {