use super::*;
pub struct Settings(pub(crate) ICoreWebView2Settings);
macro_rules! settings_bool {
($(#[$meta:meta])* $get:ident / $set:ident => $com_get:ident / $com_set:ident) => {
$(#[$meta])*
pub fn $get(&self) -> bool {
unsafe { self.0.$com_get() }.is_ok_and(|value| value.as_bool())
}
$(#[$meta])*
pub fn $set(&self, value: bool) -> Result<()> {
unsafe { self.0.$com_set(value) }.ok()
}
};
}
macro_rules! settings_versioned_bool {
($iface:ty, $(#[$meta:meta])* $get:ident / $set:ident => $com_get:ident / $com_set:ident) => {
$(#[$meta])*
pub fn $get(&self) -> Result<bool> {
let source: $iface = self.0.cast()?;
Ok(unsafe { source.$com_get()? }.as_bool())
}
$(#[$meta])*
pub fn $set(&self, value: bool) -> Result<()> {
let source: $iface = self.0.cast()?;
unsafe { source.$com_set(value) }.ok()
}
};
}
impl Settings {
settings_bool! {
is_script_enabled / set_script_enabled => IsScriptEnabled / SetIsScriptEnabled
}
settings_bool! {
is_web_message_enabled / set_web_message_enabled => IsWebMessageEnabled / SetIsWebMessageEnabled
}
settings_bool! {
are_default_script_dialogs_enabled / set_default_script_dialogs_enabled => AreDefaultScriptDialogsEnabled / SetAreDefaultScriptDialogsEnabled
}
settings_bool! {
is_status_bar_enabled / set_status_bar_enabled => IsStatusBarEnabled / SetIsStatusBarEnabled
}
settings_bool! {
are_dev_tools_enabled / set_dev_tools_enabled => AreDevToolsEnabled / SetAreDevToolsEnabled
}
settings_bool! {
are_default_context_menus_enabled / set_default_context_menus_enabled => AreDefaultContextMenusEnabled / SetAreDefaultContextMenusEnabled
}
settings_bool! {
are_host_objects_allowed / set_host_objects_allowed => AreHostObjectsAllowed / SetAreHostObjectsAllowed
}
settings_bool! {
is_zoom_control_enabled / set_zoom_control_enabled => IsZoomControlEnabled / SetIsZoomControlEnabled
}
settings_bool! {
is_built_in_error_page_enabled / set_built_in_error_page_enabled => IsBuiltInErrorPageEnabled / SetIsBuiltInErrorPageEnabled
}
pub fn user_agent(&self) -> Result<String> {
let source: ICoreWebView2Settings2 = self.0.cast()?;
let value = unsafe { source.UserAgent()? };
Ok(unsafe { string::take(value) })
}
pub fn set_user_agent(&self, user_agent: &str) -> Result<()> {
let source: ICoreWebView2Settings2 = self.0.cast()?;
let user_agent = HSTRING::from(user_agent);
unsafe { source.SetUserAgent(&user_agent) }.ok()
}
settings_versioned_bool! {
ICoreWebView2Settings3,
are_browser_accelerator_keys_enabled / set_browser_accelerator_keys_enabled => AreBrowserAcceleratorKeysEnabled / SetAreBrowserAcceleratorKeysEnabled
}
settings_versioned_bool! {
ICoreWebView2Settings4,
is_general_autofill_enabled / set_general_autofill_enabled => IsGeneralAutofillEnabled / SetIsGeneralAutofillEnabled
}
settings_versioned_bool! {
ICoreWebView2Settings4,
is_password_autosave_enabled / set_password_autosave_enabled => IsPasswordAutosaveEnabled / SetIsPasswordAutosaveEnabled
}
settings_versioned_bool! {
ICoreWebView2Settings5,
is_pinch_zoom_enabled / set_pinch_zoom_enabled => IsPinchZoomEnabled / SetIsPinchZoomEnabled
}
settings_versioned_bool! {
ICoreWebView2Settings6,
is_swipe_navigation_enabled / set_swipe_navigation_enabled => IsSwipeNavigationEnabled / SetIsSwipeNavigationEnabled
}
settings_versioned_bool! {
ICoreWebView2Settings9,
is_non_client_region_support_enabled / set_non_client_region_support_enabled => IsNonClientRegionSupportEnabled / SetIsNonClientRegionSupportEnabled
}
}