electron_sys/class/
browser_window.rs

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    /// Docs: http://electronjs.org/docs/api/browser-window
24    pub type BrowserWindow;
25
26    //****************//
27    // Static Methods //
28    //****************//
29
30    #[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    // FIXME: should return Option<BrowserWindow>?
40    #[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    //******************//
62    // Instance Methods //
63    //******************//
64
65    #[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    //*********************//
412    // Instance Properties //
413    //*********************//
414
415    #[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)] // readonly
446    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")] // readonly
473    pub fn web_contents(this: &BrowserWindow) -> WebContents;
474}