@@ -5,19 +5,58 @@ import isDev from 'electron-is-dev';
5
5
6
6
const isMacOS = process . platform === 'darwin' ;
7
7
8
- const developmentToolsOptions = { } ;
8
+ // A Map allows each window to have its own options
9
+ const developmentToolsOptions = new Map ( ) ;
9
10
10
11
function toggleDevelopmentTools ( win = BrowserWindow . getFocusedWindow ( ) ) {
11
12
if ( win ) {
12
13
const { webContents} = win ;
13
14
if ( webContents . isDevToolsOpened ( ) ) {
14
15
webContents . closeDevTools ( ) ;
15
16
} else {
16
- webContents . openDevTools ( developmentToolsOptions ) ;
17
+ webContents . openDevTools ( developmentToolsOptions . get ( win ) ) ;
17
18
}
18
19
}
19
20
}
20
21
22
+ function shouldRun ( options ) {
23
+ return options && ( options . isEnabled === true || ( options . isEnabled === null && isDev ) ) ;
24
+ }
25
+
26
+ function getOptionsForWindow ( win , options ) {
27
+ if ( ! options . windowSelector ) {
28
+ return options ;
29
+ }
30
+
31
+ const newOptions = options . windowSelector ( win ) ;
32
+
33
+ return newOptions === true
34
+ ? options
35
+ : ( newOptions === false
36
+ ? { isEnabled : false }
37
+ : { ...options , ...newOptions } ) ;
38
+ }
39
+
40
+ function registerAccelerators ( win = BrowserWindow . getFocusedWindow ( ) ) {
41
+ ( async ( ) => {
42
+ await app . whenReady ( ) ;
43
+
44
+ if ( win ) {
45
+ localShortcut . register ( win , 'CommandOrControl+Shift+C' , inspectElements ) ;
46
+ localShortcut . register ( win , isMacOS ? 'Command+Alt+I' : 'Control+Shift+I' , devTools ) ;
47
+ localShortcut . register ( win , 'F12' , devTools ) ;
48
+ localShortcut . register ( win , 'CommandOrControl+R' , refresh ) ;
49
+ localShortcut . register ( win , 'F5' , refresh ) ;
50
+ } else {
51
+ localShortcut . register ( 'CommandOrControl+Shift+C' , inspectElements ) ;
52
+ localShortcut . register ( isMacOS ? 'Command+Alt+I' : 'Control+Shift+I' , devTools ) ;
53
+ localShortcut . register ( 'F12' , devTools ) ;
54
+ localShortcut . register ( 'CommandOrControl+R' , refresh ) ;
55
+ localShortcut . register ( 'F5' , refresh ) ;
56
+ }
57
+ } ) ( ) ;
58
+ }
59
+
21
60
// eslint-disable-next-line unicorn/prevent-abbreviations
22
61
export function devTools ( win = BrowserWindow . getFocusedWindow ( ) ) {
23
62
if ( win ) {
@@ -28,7 +67,7 @@ export function devTools(win = BrowserWindow.getFocusedWindow()) {
28
67
// eslint-disable-next-line unicorn/prevent-abbreviations
29
68
export function openDevTools ( win = BrowserWindow . getFocusedWindow ( ) ) {
30
69
if ( win ) {
31
- win . webContents . openDevTools ( developmentToolsOptions ) ;
70
+ win . webContents . openDevTools ( developmentToolsOptions . get ( win ) ) ;
32
71
}
33
72
}
34
73
@@ -62,30 +101,39 @@ export default function debug(options) {
62
101
...options ,
63
102
} ;
64
103
65
- if ( options . isEnabled === false || ( options . isEnabled === null && ! isDev ) ) {
66
- return ;
67
- }
104
+ if ( ! options . windowSelector ) {
105
+ if ( ! shouldRun ( options ) ) {
106
+ return ;
107
+ }
68
108
69
- if ( options . devToolsMode !== 'previous' ) {
70
- developmentToolsOptions . mode = options . devToolsMode ;
109
+ // When there's no filter, accelerators are defined globally
110
+ registerAccelerators ( ) ;
71
111
}
72
112
73
113
app . on ( 'browser-window-created' , ( event , win ) => {
74
- if ( options . showDevTools ) {
75
- /// Workaround for https://github.com/electron/electron/issues/12438
76
- win . webContents . once ( 'dom-ready' , ( ) => {
77
- openDevTools ( win , options . showDevTools , false ) ;
78
- } ) ;
79
- }
80
- } ) ;
114
+ /// Workaround for https://github.com/electron/electron/issues/12438
115
+ win . webContents . once ( 'dom-ready' , ( ) => {
116
+ const winOptions = getOptionsForWindow ( win , options ) ;
81
117
82
- ( async ( ) => {
83
- await app . whenReady ( ) ;
118
+ if ( winOptions . devToolsMode !== 'previous' ) {
119
+ developmentToolsOptions . set ( win , {
120
+ ...developmentToolsOptions . get ( win ) ,
121
+ mode : winOptions . devToolsMode ,
122
+ } ) ;
123
+ }
84
124
85
- localShortcut . register ( 'CommandOrControl+Shift+C' , inspectElements ) ;
86
- localShortcut . register ( isMacOS ? 'Command+Alt+I' : 'Control+Shift+I' , devTools ) ;
87
- localShortcut . register ( 'F12' , devTools ) ;
88
- localShortcut . register ( 'CommandOrControl+R' , refresh ) ;
89
- localShortcut . register ( 'F5' , refresh ) ;
90
- } ) ( ) ;
125
+ if ( ! shouldRun ( winOptions ) ) {
126
+ return ;
127
+ }
128
+
129
+ if ( winOptions . windowSelector ) {
130
+ // With filters, accelerators are defined for each window depending on their provided options
131
+ registerAccelerators ( win ) ;
132
+ }
133
+
134
+ if ( winOptions . showDevTools ) {
135
+ openDevTools ( win ) ;
136
+ }
137
+ } ) ;
138
+ } ) ;
91
139
}
0 commit comments