1use crate::path::CTX_MENU_PATH;
2use std::io::{self, ErrorKind};
3use winreg::{RegKey, enums::HKEY_CURRENT_USER};
4
5const HKCU: RegKey = RegKey::predef(HKEY_CURRENT_USER);
6
7pub fn toggle_old_menu(enable: bool) -> io::Result<()> {
16 if enable {
17 let path = format!("{}\\InprocServer32\\", CTX_MENU_PATH);
18 let (key, _) = HKCU.create_subkey(path).unwrap();
19 key.set_value("", &"")
20 } else {
21 match HKCU.delete_subkey_all(CTX_MENU_PATH) {
22 Err(e) if e.kind() == ErrorKind::NotFound => Ok(()),
23 Err(e) => Err(e),
24 Ok(_) => Ok(()),
25 }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn enable_old_menu() {
35 toggle_old_menu(true).expect("Failed to enable old context menu");
36 toggle_old_menu(true).expect("Failed to enable old context menu");
38 HKCU.open_subkey(CTX_MENU_PATH)
39 .expect("Old context menu key should exist");
40 }
41
42 #[test]
43 fn disable_old_menu() {
44 toggle_old_menu(false).expect("Failed to disable old context menu");
45 toggle_old_menu(false).expect("Failed to disable old context menu");
47 HKCU.open_subkey(CTX_MENU_PATH)
48 .expect_err("Old context menu key should not exist");
49 }
50}