1use crate::{
2 class::{BrowserView, Menu, NativeImage, TouchBar, WebContents},
3 interface::{
4 AppDetailsOptions,
5 BrowserWindowOptions,
6 IgnoreMouseEventsOptions,
7 LoadFileOptions,
8 LoadUrlOptions,
9 ProgressBarOptions,
10 Rectangle,
11 Size,
12 VisibleOnAllWorkspacesOptions,
13 },
14};
15use js_sys::{Function, JsString, Map};
16use node_sys::{events::EventEmitter, Buffer};
17use wasm_bindgen::prelude::*;
18
19#[wasm_bindgen(module = "electron")]
20extern {
21 #[wasm_bindgen(extends = EventEmitter)]
22 #[derive(Clone, Debug)]
23 pub type BrowserWindow;
25
26 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "addDevToolsExtension")]
31 pub fn add_dev_tools_extension(path: &str);
32
33 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "addExtension")]
34 pub fn add_extension(path: &str);
35
36 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "fromBrowserView")]
37 pub fn from_browser_view(browser_view: &BrowserView) -> Option<BrowserWindow>;
38
39 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "from_id")]
41 pub fn from_id(id: u32) -> BrowserWindow;
42
43 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "from_web_contents")]
44 pub fn from_web_contents(web_contents: &WebContents) -> Option<BrowserWindow>;
45
46 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "getAllWindows")]
47 pub fn get_all_windows() -> Box<[JsValue]>;
48
49 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "getDevToolsExtension")]
50 pub fn get_dev_tools_extension() -> Map;
51
52 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "getFocusedWindow")]
53 pub fn get_focused_window() -> Option<BrowserWindow>;
54
55 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "removeDevToolsExtension")]
56 pub fn remove_dev_tools_extension(name: &str);
57
58 #[wasm_bindgen(static_method_of = BrowserWindow, js_name = "removeExtension")]
59 pub fn remove_extension(name: &str);
60
61 #[wasm_bindgen(constructor)]
66 pub fn new(options: Option<BrowserWindowOptions>) -> BrowserWindow;
67
68 #[wasm_bindgen(method, js_name = "addBrowserView")]
69 pub fn add_browser_view(this: &BrowserWindow, browser_view: &BrowserView);
70
71 #[wasm_bindgen(method, js_name = "addTabbedWindow")]
72 pub fn add_tabbed_window(this: &BrowserWindow, browser_view: &BrowserWindow);
73
74 #[wasm_bindgen(method)]
75 pub fn blur(this: &BrowserWindow);
76
77 #[wasm_bindgen(method, js_name = "blurWebView")]
78 pub fn blur_web_view(this: &BrowserWindow);
79
80 #[wasm_bindgen(method, js_name = "capturePage")]
81 pub fn capture_page(this: &BrowserWindow, rectangle: Option<Rectangle>);
82
83 #[wasm_bindgen(method)]
84 pub fn center(this: &BrowserWindow);
85
86 #[wasm_bindgen(method)]
87 pub fn close(this: &BrowserWindow);
88
89 #[wasm_bindgen(method, js_name = "closeFilePreview")]
90 pub fn close_file_preview(this: &BrowserWindow);
91
92 #[wasm_bindgen(method)]
93 pub fn destroy(this: &BrowserWindow);
94
95 #[wasm_bindgen(method, js_name = "flashFrame")]
96 pub fn flash_frame(this: &BrowserWindow);
97
98 #[wasm_bindgen(method)]
99 pub fn focus(this: &BrowserWindow);
100
101 #[wasm_bindgen(method, js_name = "focusOnWebView")]
102 pub fn focus_on_web_view(this: &BrowserWindow);
103
104 #[wasm_bindgen(method, js_name = "getBounds")]
105 pub fn get_bounds(this: &BrowserWindow) -> Rectangle;
106
107 #[wasm_bindgen(method, js_name = "getBrowserView")]
108 pub fn get_browser_view(this: &BrowserWindow) -> Option<BrowserView>;
109
110 #[wasm_bindgen(method, js_name = "getBrowserViews")]
111 pub fn get_browser_views(this: &BrowserWindow) -> Box<[JsValue]>;
112
113 #[wasm_bindgen(method, js_name = "getChildWindows")]
114 pub fn get_child_windows(this: &BrowserWindow) -> Box<[JsValue]>;
115
116 #[wasm_bindgen(method, js_name = "getContentBounds")]
117 pub fn get_content_bounds(this: &BrowserWindow) -> Rectangle;
118
119 #[wasm_bindgen(method, js_name = "getContentSize")]
120 pub fn get_content_size(this: &BrowserWindow) -> Box<[u32]>;
121
122 #[wasm_bindgen(method, js_name = "getMaximumSize")]
123 pub fn get_maximum_size(this: &BrowserWindow) -> Box<[u32]>;
124
125 #[wasm_bindgen(method, js_name = "getMediaSourceId")]
126 pub fn get_media_source_id(this: &BrowserWindow) -> JsString;
127
128 #[wasm_bindgen(method, js_name = "getMinimumSize")]
129 pub fn get_minimum_size(this: &BrowserWindow) -> Box<[JsValue]>;
130
131 #[wasm_bindgen(method, js_name = "getNativeWindowHandle")]
132 pub fn get_native_window_handle(this: &BrowserWindow) -> Buffer;
133
134 #[wasm_bindgen(method, js_name = "getNormalBounds")]
135 pub fn get_normal_bounds(this: &BrowserWindow) -> Rectangle;
136
137 #[wasm_bindgen(method, js_name = "getOpacity")]
138 pub fn get_opacity(this: &BrowserWindow) -> f32;
139
140 #[wasm_bindgen(method, js_name = "getParentWindow")]
141 pub fn get_parent_window(this: &BrowserWindow) -> BrowserWindow;
142
143 #[wasm_bindgen(method, js_name = "getPosition")]
144 pub fn get_position(this: &BrowserWindow) -> Box<[JsValue]>;
145
146 #[wasm_bindgen(method, js_name = "getRepresentedFilename")]
147 pub fn get_represented_filename(this: &BrowserWindow) -> Box<[JsValue]>;
148
149 #[wasm_bindgen(method, js_name = "getSize")]
150 pub fn get_size(this: &BrowserWindow) -> Box<[JsValue]>;
151
152 #[wasm_bindgen(method, js_name = "getTitle")]
153 pub fn get_title(this: &BrowserWindow) -> JsString;
154
155 #[wasm_bindgen(method, js_name = "hasShadow")]
156 pub fn has_shadow(this: &BrowserWindow) -> bool;
157
158 #[wasm_bindgen(method)]
159 pub fn hide(this: &BrowserWindow);
160
161 #[wasm_bindgen(method, js_name = "hookWindowMessage")]
162 pub fn hook_window_message(this: &BrowserWindow, message: u32, callback: &Function);
163
164 #[wasm_bindgen(method, js_name = "isAlwaysOnTop")]
165 pub fn is_always_on_top(this: &BrowserWindow) -> bool;
166
167 #[wasm_bindgen(method, js_name = "isDestroyed")]
168 pub fn is_destroyed(this: &BrowserWindow) -> bool;
169
170 #[wasm_bindgen(method, js_name = "isDocumentEdited")]
171 pub fn is_document_edited(this: &BrowserWindow) -> bool;
172
173 #[wasm_bindgen(method, js_name = "isEnabled")]
174 pub fn is_enabled(this: &BrowserWindow) -> bool;
175
176 #[wasm_bindgen(method, js_name = "isFocued")]
177 pub fn is_focused(this: &BrowserWindow) -> bool;
178
179 #[wasm_bindgen(method, js_name = "isFullScreenable")]
180 pub fn is_full_screenable(this: &BrowserWindow) -> bool;
181
182 #[wasm_bindgen(method, js_name = "isKiosk")]
183 pub fn is_kiosk(this: &BrowserWindow) -> bool;
184
185 #[wasm_bindgen(method, js_name = "isMaximized")]
186 pub fn is_maximized(this: &BrowserWindow) -> bool;
187
188 #[wasm_bindgen(method, js_name = "isMenuBarVisible")]
189 pub fn is_menu_bar_visible(this: &BrowserWindow) -> bool;
190
191 #[wasm_bindgen(method, js_name = "isMinimized")]
192 pub fn is_minimized(this: &BrowserWindow) -> bool;
193
194 #[wasm_bindgen(method, js_name = "isModal")]
195 pub fn is_modal(this: &BrowserWindow) -> bool;
196
197 #[wasm_bindgen(method, js_name = "isNormal")]
198 pub fn is_normal(this: &BrowserWindow) -> bool;
199
200 #[wasm_bindgen(method, js_name = "isSimpleFullScreen")]
201 pub fn is_simple_full_screen(this: &BrowserWindow) -> bool;
202
203 #[wasm_bindgen(method, js_name = "isVisible")]
204 pub fn is_visible(this: &BrowserWindow) -> bool;
205
206 #[wasm_bindgen(method, js_name = "isVisibleOnAllWorkspaces")]
207 pub fn is_visible_on_all_workspaces(this: &BrowserWindow) -> bool;
208
209 #[wasm_bindgen(method, js_name = "isWindowMessageHooked")]
210 pub fn is_window_message_hooked(this: &BrowserWindow, message: u32) -> bool;
211
212 #[wasm_bindgen(method, js_name = "loadFile")]
213 pub fn load_file(this: &BrowserWindow, path: &str, options: Option<LoadFileOptions>);
214
215 #[wasm_bindgen(method, js_name = "loadURL")]
216 pub fn load_url(this: &BrowserWindow, url: &str, options: Option<LoadUrlOptions>);
217
218 #[wasm_bindgen(method)]
219 pub fn maximize(this: &BrowserWindow);
220
221 #[wasm_bindgen(method, js_name = "mergeAllWindows")]
222 pub fn merge_all_windows(this: &BrowserWindow);
223
224 #[wasm_bindgen(method)]
225 pub fn minimize(this: &BrowserWindow);
226
227 #[wasm_bindgen(method, js_name = "moveAbove")]
228 pub fn move_above(this: &BrowserWindow, media_source_id: &str);
229
230 #[wasm_bindgen(method, js_name = "moveTabToNewWindow")]
231 pub fn move_tab_to_new_window(this: &BrowserWindow);
232
233 #[wasm_bindgen(method, js_name = "moveTop")]
234 pub fn move_top(this: &BrowserWindow);
235
236 #[wasm_bindgen(method, js_name = "previewFile")]
237 pub fn preview_file(this: &BrowserWindow, path: &str, display_name: Option<&str>);
238
239 #[wasm_bindgen(method)]
240 pub fn reload(this: &BrowserWindow);
241
242 #[wasm_bindgen(method, js_name = "removeBrowserView")]
243 pub fn remove_browser_view(this: &BrowserWindow, browser_view: &BrowserView);
244
245 #[wasm_bindgen(method, js_name = "removeMenu")]
246 pub fn remove_menu(this: &BrowserWindow);
247
248 #[wasm_bindgen(method)]
249 pub fn restore(this: &BrowserWindow);
250
251 #[wasm_bindgen(method, js_name = "selectNextTab")]
252 pub fn select_next_tab(this: &BrowserWindow);
253
254 #[wasm_bindgen(method, js_name = "selectPreviousTab")]
255 pub fn select_previous_tab(this: &BrowserWindow);
256
257 #[wasm_bindgen(method, js_name = "setAlwaysOnTop")]
258 pub fn set_always_on_top(this: &BrowserWindow, flag: bool, level: Option<&str>, relative_level: Option<i32>);
259
260 #[wasm_bindgen(method, js_name = "setAppDetails")]
261 pub fn set_app_details(this: &BrowserWindow, options: AppDetailsOptions);
262
263 #[wasm_bindgen(method, js_name = "setAspectRatio")]
264 pub fn set_aspect_ratio(this: &BrowserWindow, aspect_ratio: f32, extra_size: Option<Size>);
265
266 #[wasm_bindgen(method, js_name = "setAutoHideCursor")]
267 pub fn set_auto_hide_cursor(this: &BrowserWindow, auto_hide: bool);
268
269 #[wasm_bindgen(method, js_name = "setBackgroundColor")]
270 pub fn set_background_color(this: &BrowserWindow, background_color: &str);
271
272 #[wasm_bindgen(method, js_name = "setBounds")]
273 pub fn set_bounds(this: &BrowserWindow, bounds: Rectangle, animate: Option<bool>);
274
275 #[wasm_bindgen(method, js_name = "setBrowserView")]
276 pub fn set_browser_view(this: &BrowserWindow, browser_view: &BrowserView);
277
278 #[wasm_bindgen(method, js_name = "setContentBounds")]
279 pub fn set_content_bounds(this: &BrowserWindow, bounds: Rectangle, animate: Option<bool>);
280
281 #[wasm_bindgen(method, js_name = "setContentProtection")]
282 pub fn set_content_protection(this: &BrowserWindow, enable: bool);
283
284 #[wasm_bindgen(method, js_name = "setContentSize")]
285 pub fn set_content_size(this: &BrowserWindow, width: u32, height: u32, animate: Option<bool>);
286
287 #[wasm_bindgen(method, js_name = "setDocumentEdited")]
288 pub fn set_document_edited(this: &BrowserWindow, edited: bool);
289
290 #[wasm_bindgen(method, js_name = "setEnabled")]
291 pub fn set_enabled(this: &BrowserWindow, edited: bool);
292
293 #[wasm_bindgen(method, js_name = "setFocusable")]
294 pub fn set_focusable(this: &BrowserWindow, focusable: bool);
295
296 #[wasm_bindgen(method, js_name = "setFullScreen")]
297 pub fn set_full_screen(this: &BrowserWindow, flag: bool);
298
299 #[wasm_bindgen(method, js_name = "setHasShadow")]
300 pub fn set_has_shadow(this: &BrowserWindow, has_shadow: bool);
301
302 #[wasm_bindgen(method, js_name = "setIcon")]
303 pub fn set_icon(this: &BrowserWindow, icon: &NativeImage);
304
305 #[wasm_bindgen(method, js_name = "setIgnoreMouseEvents")]
306 pub fn set_ignore_mouse_events(this: &BrowserWindow, ignore: bool, options: Option<IgnoreMouseEventsOptions>);
307
308 #[wasm_bindgen(method, js_name = "setKiosk")]
309 pub fn set_kiosk(this: &BrowserWindow, flag: bool);
310
311 #[wasm_bindgen(method, js_name = "setMaximizable")]
312 pub fn set_maximumizable(this: &BrowserWindow, maximizable: bool);
313
314 #[wasm_bindgen(method, js_name = "setMaximumSize")]
315 pub fn set_maximum_size(this: &BrowserWindow, width: u32, height: u32);
316
317 #[wasm_bindgen(method, js_name = "setMenu")]
318 pub fn set_menu(this: &BrowserWindow, menu: Option<Menu>);
319
320 #[wasm_bindgen(method, js_name = "setMenuBarVisibility")]
321 pub fn set_menu_bar_visibility(this: &BrowserWindow, visible: bool);
322
323 #[wasm_bindgen(method, js_name = "setMinimumSize")]
324 pub fn set_minimum_size(this: &BrowserWindow, width: u32, height: u32);
325
326 #[wasm_bindgen(method, js_name = "setOpacity")]
327 pub fn set_opacity(this: &BrowserWindow, opacity: f32);
328
329 #[wasm_bindgen(method, js_name = "setOverlayIcon")]
330 pub fn set_overlay_icon(this: &BrowserWindow, overlay: Option<&NativeImage>, description: &str);
331
332 #[wasm_bindgen(method, js_name = "setParentWindow")]
333 pub fn set_parent_window(this: &BrowserWindow, parent: Option<&BrowserWindow>);
334
335 #[wasm_bindgen(method, js_name = "setPosition")]
336 pub fn set_position(this: &BrowserWindow, x: u32, y: u32, animate: Option<bool>);
337
338 #[wasm_bindgen(method, js_name = "setProgressBar")]
339 pub fn set_progress_bar(this: &BrowserWindow, progress: u32, options: Option<ProgressBarOptions>);
340
341 #[wasm_bindgen(method, js_name = "setRepresentedFilename")]
342 pub fn set_represented_filename(this: &BrowserWindow, filename: &str);
343
344 #[wasm_bindgen(method, js_name = "setShape")]
345 pub fn set_shape(this: &BrowserWindow, rectangles: Box<[JsValue]>);
346
347 #[wasm_bindgen(method, js_name = "setSheetOffset")]
348 pub fn set_sheet_offset(this: &BrowserWindow, y: i32, x: Option<i32>);
349
350 #[wasm_bindgen(method, js_name = "setSimpleFullScreen")]
351 pub fn set_simple_full_screen(this: &BrowserWindow, flag: bool);
352
353 #[wasm_bindgen(method, js_name = "setSize")]
354 pub fn set_size(this: &BrowserWindow, width: u32, height: u32, animate: Option<bool>);
355
356 #[wasm_bindgen(method, js_name = "setSkipTaskbar")]
357 pub fn set_skip_taskbar(this: &BrowserWindow, skip: bool);
358
359 #[wasm_bindgen(method, js_name = "setThumbarButtons")]
360 pub fn set_thumbar_buttons(this: &BrowserWindow, buttons: Box<[JsValue]>) -> bool;
361
362 #[wasm_bindgen(method, js_name = "setThumbnailClip")]
363 pub fn set_thumbnail_clip(this: &BrowserWindow, region: Rectangle);
364
365 #[wasm_bindgen(method, js_name = "setThumbnailToolTip")]
366 pub fn set_thumbnail_tool_tip(this: &BrowserWindow, tool_tip: &str);
367
368 #[wasm_bindgen(method, js_name = "setTitle")]
369 pub fn set_title(this: &BrowserWindow, title: &str);
370
371 #[wasm_bindgen(method, js_name = "setTouchBar")]
372 pub fn set_touch_bar(this: &BrowserWindow, touch_bar: Option<&TouchBar>);
373
374 #[wasm_bindgen(method, js_name = "setVibrancy")]
375 pub fn set_vibrancy(this: &BrowserWindow, kind: Option<&str>);
376
377 #[wasm_bindgen(method, js_name = "setVisibleOnAllWorkspaces")]
378 pub fn set_visible_on_all_workspaces(
379 this: &BrowserWindow,
380 visible: bool,
381 options: Option<VisibleOnAllWorkspacesOptions>,
382 );
383
384 #[wasm_bindgen(method, js_name = "setWindowButtonVisibility")]
385 pub fn set_window_button_visibility(this: &BrowserWindow, visible: bool);
386
387 #[wasm_bindgen(method)]
388 pub fn show(this: &BrowserWindow);
389
390 #[wasm_bindgen(method, js_name = "showAppDetails")]
391 pub fn show_app_details(this: &BrowserWindow);
392
393 #[wasm_bindgen(method, js_name = "showAspectRatio")]
394 pub fn show_aspect_ratio(this: &BrowserWindow);
395
396 #[wasm_bindgen(method, js_name = "showDefinitionForSelection")]
397 pub fn show_definition_for_selection(this: &BrowserWindow);
398
399 #[wasm_bindgen(method, js_name = "showInactive")]
400 pub fn show_inactive(this: &BrowserWindow);
401
402 #[wasm_bindgen(method, js_name = "toggleTabBar")]
403 pub fn toggle_tab_bar(this: &BrowserWindow);
404
405 #[wasm_bindgen(method, js_name = "unhookAllWindowMessages")]
406 pub fn unhook_all_window_messages(this: &BrowserWindow);
407
408 #[wasm_bindgen(method, js_name = "unhookWindowMessage")]
409 pub fn unhook_window_messages(this: &BrowserWindow, message: u32);
410
411 #[wasm_bindgen(method, getter, js_name = "accessibleTitle")]
416 pub fn accessible_title(this: &BrowserWindow) -> JsString;
417
418 #[wasm_bindgen(method, setter, js_name = "accessibleTitle")]
419 pub fn set_accessible_title(this: &BrowserWindow, value: JsString);
420
421 #[wasm_bindgen(method, getter, js_name = "autoHideMenuBar")]
422 pub fn auto_hide_menu_bar(this: &BrowserWindow) -> bool;
423
424 #[wasm_bindgen(method, setter, js_name = "autoHideMenuBar")]
425 pub fn set_auto_hide_menu_bar(this: &BrowserWindow, value: bool);
426
427 #[wasm_bindgen(method, getter)]
428 pub fn closable(this: &BrowserWindow) -> bool;
429
430 #[wasm_bindgen(method, setter, js_name = "closable")]
431 pub fn set_closable(this: &BrowserWindow, value: bool);
432
433 #[wasm_bindgen(method, getter, js_name = "excludedFromShownWindowsMenu")]
434 pub fn excluded_from_shown_windows_menu(this: &BrowserWindow) -> bool;
435
436 #[wasm_bindgen(method, setter, js_name = "excludedFromShownWindowsMenu")]
437 pub fn set_excluded_from_shown_windows_menu(this: &BrowserWindow, value: bool);
438
439 #[wasm_bindgen(method, getter, js_name = "fullScreenable")]
440 pub fn full_screenable(this: &BrowserWindow) -> bool;
441
442 #[wasm_bindgen(method, setter, js_name = "fullScreenable")]
443 pub fn set_full_screenable(this: &BrowserWindow, value: bool);
444
445 #[wasm_bindgen(method, getter)] pub fn id(this: &BrowserWindow) -> u32;
447
448 #[wasm_bindgen(method, getter)]
449 pub fn maximizable(this: &BrowserWindow) -> bool;
450
451 #[wasm_bindgen(method, setter)]
452 pub fn set_maximizable(this: &BrowserWindow, value: bool);
453
454 #[wasm_bindgen(method, getter)]
455 pub fn minimizable(this: &BrowserWindow) -> bool;
456
457 #[wasm_bindgen(method, setter)]
458 pub fn set_minimizable(this: &BrowserWindow, value: bool);
459
460 #[wasm_bindgen(method, getter)]
461 pub fn movable(this: &BrowserWindow) -> bool;
462
463 #[wasm_bindgen(method, setter)]
464 pub fn set_movable(this: &BrowserWindow, value: bool);
465
466 #[wasm_bindgen(method, getter)]
467 pub fn resizable(this: &BrowserWindow) -> bool;
468
469 #[wasm_bindgen(method, setter)]
470 pub fn set_resizable(this: &BrowserWindow, value: bool);
471
472 #[wasm_bindgen(method, getter, js_name = "webContents")] pub fn web_contents(this: &BrowserWindow) -> WebContents;
474}