From d000a1e1c6506da7c67d16133867fd9b1825d85a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bi=C8=99oc=20George?= Date: Sun, 24 Feb 2019 16:40:02 +0100 Subject: [PATCH] [OSK] Implement "Use Click Sound" feature - Implement the save/load handler for this feature - Check the "Use Click Sound" item state accordingly depending if it's enabled or disabled - Use PlaySoundW() to play the wave sound file from resource - Add the WAV sound click file. The work is made thanks to Midori Mizuno --- base/applications/osk/CMakeLists.txt | 2 +- base/applications/osk/lang/ar-DZ.rc | 2 +- base/applications/osk/lang/cs-CZ.rc | 2 +- base/applications/osk/lang/de-DE.rc | 2 +- base/applications/osk/lang/en-GB.rc | 2 +- base/applications/osk/lang/en-US.rc | 2 +- base/applications/osk/lang/es-ES.rc | 2 +- base/applications/osk/lang/et-EE.rc | 2 +- base/applications/osk/lang/fr-CA.rc | 2 +- base/applications/osk/lang/fr-FR.rc | 2 +- base/applications/osk/lang/he-IL.rc | 2 +- base/applications/osk/lang/it-IT.rc | 2 +- base/applications/osk/lang/pl-PL.rc | 2 +- base/applications/osk/lang/ro-RO.rc | 2 +- base/applications/osk/lang/ru-RU.rc | 2 +- base/applications/osk/lang/tr-TR.rc | 2 +- base/applications/osk/lang/zh-CN.rc | 2 +- base/applications/osk/lang/zh-TW.rc | 2 +- base/applications/osk/main.c | 32 ++++++++++++++++++++ base/applications/osk/main.h | 1 + base/applications/osk/osk_res.h | 2 ++ base/applications/osk/res/click.wav | Bin 0 -> 20856 bytes base/applications/osk/rsrc.rc | 3 +- base/applications/osk/settings.c | 42 +++++++++++++++++++++++++-- 24 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 base/applications/osk/res/click.wav diff --git a/base/applications/osk/CMakeLists.txt b/base/applications/osk/CMakeLists.txt index 51ff4f3a423..5d5ddf76f9a 100644 --- a/base/applications/osk/CMakeLists.txt +++ b/base/applications/osk/CMakeLists.txt @@ -3,5 +3,5 @@ file(GLOB osk_rc_deps res/*.*) add_rc_deps(rsrc.rc ${osk_rc_deps}) add_executable(osk main.c settings.c rsrc.rc) set_module_type(osk win32gui UNICODE) -add_importlibs(osk comdlg32 shell32 user32 gdi32 advapi32 comctl32 msvcrt kernel32) +add_importlibs(osk comdlg32 shell32 user32 gdi32 advapi32 comctl32 msvcrt kernel32 winmm) add_cd_file(TARGET osk DESTINATION reactos/system32 FOR all) diff --git a/base/applications/osk/lang/ar-DZ.rc b/base/applications/osk/lang/ar-DZ.rc index 3bf1192f0a9..edd4536dd68 100644 --- a/base/applications/osk/lang/ar-DZ.rc +++ b/base/applications/osk/lang/ar-DZ.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/cs-CZ.rc b/base/applications/osk/lang/cs-CZ.rc index 3d35fa2b470..5360c7075d5 100644 --- a/base/applications/osk/lang/cs-CZ.rc +++ b/base/applications/osk/lang/cs-CZ.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/de-DE.rc b/base/applications/osk/lang/de-DE.rc index 67484446503..dba2dc1788f 100644 --- a/base/applications/osk/lang/de-DE.rc +++ b/base/applications/osk/lang/de-DE.rc @@ -271,7 +271,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/en-GB.rc b/base/applications/osk/lang/en-GB.rc index 11f91b9b2f4..ab04edc3a3f 100644 --- a/base/applications/osk/lang/en-GB.rc +++ b/base/applications/osk/lang/en-GB.rc @@ -271,7 +271,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/en-US.rc b/base/applications/osk/lang/en-US.rc index cabdadbc6a1..d955621f20b 100644 --- a/base/applications/osk/lang/en-US.rc +++ b/base/applications/osk/lang/en-US.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/es-ES.rc b/base/applications/osk/lang/es-ES.rc index 4fc2284830d..319fe387d00 100644 --- a/base/applications/osk/lang/es-ES.rc +++ b/base/applications/osk/lang/es-ES.rc @@ -272,7 +272,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/et-EE.rc b/base/applications/osk/lang/et-EE.rc index 4de3166e297..c527e7e4497 100644 --- a/base/applications/osk/lang/et-EE.rc +++ b/base/applications/osk/lang/et-EE.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/fr-CA.rc b/base/applications/osk/lang/fr-CA.rc index 27c2cc78fb7..18636d9614b 100644 --- a/base/applications/osk/lang/fr-CA.rc +++ b/base/applications/osk/lang/fr-CA.rc @@ -271,7 +271,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/fr-FR.rc b/base/applications/osk/lang/fr-FR.rc index eef680d01b8..ba05f9f1953 100644 --- a/base/applications/osk/lang/fr-FR.rc +++ b/base/applications/osk/lang/fr-FR.rc @@ -271,7 +271,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/he-IL.rc b/base/applications/osk/lang/he-IL.rc index 5f1fa891c3c..fb7977d8475 100644 --- a/base/applications/osk/lang/he-IL.rc +++ b/base/applications/osk/lang/he-IL.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/it-IT.rc b/base/applications/osk/lang/it-IT.rc index 965a73af5cb..b4ba448adfd 100644 --- a/base/applications/osk/lang/it-IT.rc +++ b/base/applications/osk/lang/it-IT.rc @@ -272,7 +272,7 @@ BEGIN BEGIN MENUITEM "Sempre in primo piano", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Usa suono al click", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Usa suono al click", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Modalità di scrittura...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/pl-PL.rc b/base/applications/osk/lang/pl-PL.rc index d5f7e2d30bf..7e845c8cf76 100644 --- a/base/applications/osk/lang/pl-PL.rc +++ b/base/applications/osk/lang/pl-PL.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/ro-RO.rc b/base/applications/osk/lang/ro-RO.rc index 405a163a28e..f47416acbfe 100644 --- a/base/applications/osk/lang/ro-RO.rc +++ b/base/applications/osk/lang/ro-RO.rc @@ -271,7 +271,7 @@ BEGIN BEGIN MENUITEM "Întotdeauna în sus", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Folosește sunetul de clic", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Folosește sunetul de clic", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Modalitatea de scriere...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/ru-RU.rc b/base/applications/osk/lang/ru-RU.rc index cbaafcf41b0..42f6b43e358 100644 --- a/base/applications/osk/lang/ru-RU.rc +++ b/base/applications/osk/lang/ru-RU.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/tr-TR.rc b/base/applications/osk/lang/tr-TR.rc index 3ccca25ba1d..fb40d8c76b9 100644 --- a/base/applications/osk/lang/tr-TR.rc +++ b/base/applications/osk/lang/tr-TR.rc @@ -270,7 +270,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/zh-CN.rc b/base/applications/osk/lang/zh-CN.rc index da381ed815d..5f8b49ec049 100644 --- a/base/applications/osk/lang/zh-CN.rc +++ b/base/applications/osk/lang/zh-CN.rc @@ -273,7 +273,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/lang/zh-TW.rc b/base/applications/osk/lang/zh-TW.rc index 3ea417a6316..fbb62ff79fe 100644 --- a/base/applications/osk/lang/zh-TW.rc +++ b/base/applications/osk/lang/zh-TW.rc @@ -272,7 +272,7 @@ BEGIN BEGIN MENUITEM "Always on Top", IDM_ON_TOP, CHECKED, GRAYED MENUITEM SEPARATOR - MENUITEM "&Use Click Sound", IDM_CLICK_SOUND, GRAYED + MENUITEM "&Use Click Sound", IDM_CLICK_SOUND MENUITEM SEPARATOR MENUITEM "&Typing Mode...", IDM_TYPE_MODE, GRAYED MENUITEM SEPARATOR diff --git a/base/applications/osk/main.c b/base/applications/osk/main.c index 72cee21f305..972f8c8e9b9 100644 --- a/base/applications/osk/main.c +++ b/base/applications/osk/main.c @@ -157,6 +157,12 @@ int OSK_DlgInitDialog(HWND hDlg) CheckMenuItem(GetMenu(hDlg), IDM_ENHANCED_KB, MF_BYCOMMAND | MF_UNCHECKED); } + /* Check if the "Click Sound" option was chosen before (and if so, then tick the menu item) */ + if (Globals.bSoundClick) + { + CheckMenuItem(GetMenu(hDlg), IDM_CLICK_SOUND, MF_BYCOMMAND | MF_CHECKED); + } + /* Set the application's icon */ hIcon = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_OSK), IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE); hIconSm = CopyImage(hIcon, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_COPYFROMRESOURCE); @@ -347,6 +353,12 @@ BOOL OSK_DlgCommand(WPARAM wCommand, HWND hWndControl) SendInput(1, &Input, sizeof(Input)); } + /* Play the sound during clicking event (only if "Use Click Sound" menu option is ticked) */ + if (Globals.bSoundClick) + { + PlaySoundW(MAKEINTRESOURCEW(IDI_SOUNDCLICK), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC); + } + return TRUE; } @@ -498,6 +510,26 @@ INT_PTR APIENTRY OSK_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) break; } + case IDM_CLICK_SOUND: + { + /* + This case is triggered when the user attempts to click on the menu item. Before doing anything, + we must check the condition state of such menu item so that we can tick/untick the menu item accordingly. + */ + if (!Globals.bSoundClick) + { + Globals.bSoundClick = TRUE; + CheckMenuItem(GetMenu(hDlg), IDM_CLICK_SOUND, MF_BYCOMMAND | MF_CHECKED); + } + else + { + Globals.bSoundClick = FALSE; + CheckMenuItem(GetMenu(hDlg), IDM_CLICK_SOUND, MF_BYCOMMAND | MF_UNCHECKED); + } + + break; + } + case IDM_ABOUT: { OSK_About(); diff --git a/base/applications/osk/main.h b/base/applications/osk/main.h index a399abadd29..137cf5b2ca7 100644 --- a/base/applications/osk/main.h +++ b/base/applications/osk/main.h @@ -25,6 +25,7 @@ typedef struct HWND hActiveWnd; BOOL bShowWarning; BOOL bIsEnhancedKeyboard; + BOOL bSoundClick; } OSK_GLOBALS; /* DEFINES ********************************************************************/ diff --git a/base/applications/osk/osk_res.h b/base/applications/osk/osk_res.h index 03fdffc9a7b..04dd6e2b887 100644 --- a/base/applications/osk/osk_res.h +++ b/base/applications/osk/osk_res.h @@ -9,6 +9,8 @@ #define MAIN_DIALOG_ENHANCED_KB 2000 #define MAIN_DIALOG_STANDARD_KB 2001 +#define IDI_SOUNDCLICK 50 + #define IDC_LED_NUM 100 #define IDC_LED_CAPS 101 #define IDC_LED_SCROLL 102 diff --git a/base/applications/osk/res/click.wav b/base/applications/osk/res/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..fd5402fe6b17b0869debd00c1bfa1f3659789503 GIT binary patch literal 20856 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 X*bJRj)}~8iC3ao9M`xMXdp-XTgPI&G literal 0 HcmV?d00001 diff --git a/base/applications/osk/rsrc.rc b/base/applications/osk/rsrc.rc index 44bcd0d34c9..51b4534c5a3 100644 --- a/base/applications/osk/rsrc.rc +++ b/base/applications/osk/rsrc.rc @@ -21,7 +21,8 @@ #include -IDI_OSK ICON "res/osk.ico" +IDI_OSK ICON "res/osk.ico" +IDI_SOUNDCLICK WAVE "res/click.wav" IDI_BACK ICON "res/back.ico" diff --git a/base/applications/osk/settings.c b/base/applications/osk/settings.c index fa21d67d3a5..03eb18f62e8 100644 --- a/base/applications/osk/settings.c +++ b/base/applications/osk/settings.c @@ -16,12 +16,13 @@ BOOL LoadDataFromRegistry() { HKEY hKey; LONG lResult; - DWORD dwShowWarningData, dwLayout; + DWORD dwShowWarningData, dwLayout, dwSoundOnClick; DWORD cbData = sizeof(DWORD); - /* Set the structure members to TRUE */ + /* Set the structure members to TRUE (and the bSoundClick member to FALSE) */ Globals.bShowWarning = TRUE; Globals.bIsEnhancedKeyboard = TRUE; + Globals.bSoundClick = FALSE; /* Open the key, so that we can query it */ lResult = RegOpenKeyExW(HKEY_CURRENT_USER, @@ -71,6 +72,24 @@ BOOL LoadDataFromRegistry() /* Load the dialog layout value */ Globals.bIsEnhancedKeyboard = (dwLayout != 0); + + /* Query the key */ + lResult = RegQueryValueExW(hKey, + L"OnSoundClick", + 0, + 0, + (BYTE *)&dwSoundOnClick, + &cbData); + + if (lResult != ERROR_SUCCESS) + { + /* Bail out and return FALSE if we fail */ + RegCloseKey(hKey); + return FALSE; + } + + /* Load the sound on click value event */ + Globals.bSoundClick = (dwSoundOnClick != 0); /* If we're here then we succeed, close the key and return TRUE */ RegCloseKey(hKey); @@ -81,7 +100,7 @@ BOOL SaveDataToRegistry() { HKEY hKey; LONG lResult; - DWORD dwShowWarningData, dwLayout; + DWORD dwShowWarningData, dwLayout, dwSoundOnClick; /* If no key has been made, create one */ lResult = RegCreateKeyExW(HKEY_CURRENT_USER, @@ -134,6 +153,23 @@ BOOL SaveDataToRegistry() return FALSE; } + /* The value will be appended to the sound on click event */ + dwSoundOnClick = Globals.bSoundClick; + + lResult = RegSetValueExW(hKey, + L"OnSoundClick", + 0, + REG_DWORD, + (BYTE *)&dwSoundOnClick, + sizeof(dwSoundOnClick)); + + if (lResult != ERROR_SUCCESS) + { + /* Bail out and return FALSE if we fail */ + RegCloseKey(hKey); + return FALSE; + } + /* If we're here then we succeed, close the key and return TRUE */ RegCloseKey(hKey); return TRUE; -- 2.17.1