windows_webview/
settings.rs1use super::*;
2
3pub struct Settings(pub(crate) ICoreWebView2Settings);
10
11macro_rules! settings_bool {
12 ($(#[$meta:meta])* $get:ident / $set:ident => $com_get:ident / $com_set:ident) => {
13 $(#[$meta])*
14 pub fn $get(&self) -> bool {
15 unsafe { self.0.$com_get() }.is_ok_and(|value| value.as_bool())
16 }
17
18 $(#[$meta])*
19 pub fn $set(&self, value: bool) -> Result<()> {
20 unsafe { self.0.$com_set(value) }.ok()
21 }
22 };
23}
24
25macro_rules! settings_versioned_bool {
26 ($iface:ty, $(#[$meta:meta])* $get:ident / $set:ident => $com_get:ident / $com_set:ident) => {
27 $(#[$meta])*
28 pub fn $get(&self) -> Result<bool> {
29 let source: $iface = self.0.cast()?;
30 Ok(unsafe { source.$com_get()? }.as_bool())
31 }
32
33 $(#[$meta])*
34 pub fn $set(&self, value: bool) -> Result<()> {
35 let source: $iface = self.0.cast()?;
36 unsafe { source.$com_set(value) }.ok()
37 }
38 };
39}
40
41impl Settings {
42 settings_bool! {
43 is_script_enabled / set_script_enabled => IsScriptEnabled / SetIsScriptEnabled
45 }
46
47 settings_bool! {
48 is_web_message_enabled / set_web_message_enabled => IsWebMessageEnabled / SetIsWebMessageEnabled
50 }
51
52 settings_bool! {
53 are_default_script_dialogs_enabled / set_default_script_dialogs_enabled => AreDefaultScriptDialogsEnabled / SetAreDefaultScriptDialogsEnabled
56 }
57
58 settings_bool! {
59 is_status_bar_enabled / set_status_bar_enabled => IsStatusBarEnabled / SetIsStatusBarEnabled
61 }
62
63 settings_bool! {
64 are_dev_tools_enabled / set_dev_tools_enabled => AreDevToolsEnabled / SetAreDevToolsEnabled
66 }
67
68 settings_bool! {
69 are_default_context_menus_enabled / set_default_context_menus_enabled => AreDefaultContextMenusEnabled / SetAreDefaultContextMenusEnabled
71 }
72
73 settings_bool! {
74 are_host_objects_allowed / set_host_objects_allowed => AreHostObjectsAllowed / SetAreHostObjectsAllowed
77 }
78
79 settings_bool! {
80 is_zoom_control_enabled / set_zoom_control_enabled => IsZoomControlEnabled / SetIsZoomControlEnabled
82 }
83
84 settings_bool! {
85 is_built_in_error_page_enabled / set_built_in_error_page_enabled => IsBuiltInErrorPageEnabled / SetIsBuiltInErrorPageEnabled
88 }
89
90 pub fn user_agent(&self) -> Result<String> {
92 let source: ICoreWebView2Settings2 = self.0.cast()?;
93 let value = unsafe { source.UserAgent()? };
94 Ok(unsafe { string::take(value) })
95 }
96
97 pub fn set_user_agent(&self, user_agent: &str) -> Result<()> {
99 let source: ICoreWebView2Settings2 = self.0.cast()?;
100 let user_agent = HSTRING::from(user_agent);
101 unsafe { source.SetUserAgent(&user_agent) }.ok()
102 }
103
104 settings_versioned_bool! {
105 ICoreWebView2Settings3,
106 are_browser_accelerator_keys_enabled / set_browser_accelerator_keys_enabled => AreBrowserAcceleratorKeysEnabled / SetAreBrowserAcceleratorKeysEnabled
110 }
111
112 settings_versioned_bool! {
113 ICoreWebView2Settings4,
114 is_general_autofill_enabled / set_general_autofill_enabled => IsGeneralAutofillEnabled / SetIsGeneralAutofillEnabled
117 }
118
119 settings_versioned_bool! {
120 ICoreWebView2Settings4,
121 is_password_autosave_enabled / set_password_autosave_enabled => IsPasswordAutosaveEnabled / SetIsPasswordAutosaveEnabled
123 }
124
125 settings_versioned_bool! {
126 ICoreWebView2Settings5,
127 is_pinch_zoom_enabled / set_pinch_zoom_enabled => IsPinchZoomEnabled / SetIsPinchZoomEnabled
129 }
130
131 settings_versioned_bool! {
132 ICoreWebView2Settings6,
133 is_swipe_navigation_enabled / set_swipe_navigation_enabled => IsSwipeNavigationEnabled / SetIsSwipeNavigationEnabled
135 }
136
137 settings_versioned_bool! {
138 ICoreWebView2Settings9,
139 is_non_client_region_support_enabled / set_non_client_region_support_enabled => IsNonClientRegionSupportEnabled / SetIsNonClientRegionSupportEnabled
143 }
144}