[OSK] Implement "Use Click Sound" feature
authorBișoc George <fraizeraust99@gmail.com>
Sun, 24 Feb 2019 15:40:02 +0000 (16:40 +0100)
committerHermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
Thu, 28 Feb 2019 23:13:47 +0000 (00:13 +0100)
- 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

24 files changed:
base/applications/osk/CMakeLists.txt
base/applications/osk/lang/ar-DZ.rc
base/applications/osk/lang/cs-CZ.rc
base/applications/osk/lang/de-DE.rc
base/applications/osk/lang/en-GB.rc
base/applications/osk/lang/en-US.rc
base/applications/osk/lang/es-ES.rc
base/applications/osk/lang/et-EE.rc
base/applications/osk/lang/fr-CA.rc
base/applications/osk/lang/fr-FR.rc
base/applications/osk/lang/he-IL.rc
base/applications/osk/lang/it-IT.rc
base/applications/osk/lang/pl-PL.rc
base/applications/osk/lang/ro-RO.rc
base/applications/osk/lang/ru-RU.rc
base/applications/osk/lang/tr-TR.rc
base/applications/osk/lang/zh-CN.rc
base/applications/osk/lang/zh-TW.rc
base/applications/osk/main.c
base/applications/osk/main.h
base/applications/osk/osk_res.h
base/applications/osk/res/click.wav [new file with mode: 0644]
base/applications/osk/rsrc.rc
base/applications/osk/settings.c

index 51ff4f3..5d5ddf7 100644 (file)
@@ -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)
index 3bf1192..edd4536 100644 (file)
@@ -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
index 3d35fa2..5360c70 100644 (file)
@@ -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
index 6748444..dba2dc1 100644 (file)
@@ -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
index 11f91b9..ab04edc 100644 (file)
@@ -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
index cabdadb..d955621 100644 (file)
@@ -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
index 4fc2284..319fe38 100644 (file)
@@ -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
index 4de3166..c527e7e 100644 (file)
@@ -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
index 27c2cc7..18636d9 100644 (file)
@@ -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
index eef680d..ba05f9f 100644 (file)
@@ -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
index 5f1fa89..fb7977d 100644 (file)
@@ -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
index 965a73a..b4ba448 100644 (file)
@@ -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
index d5f7e2d..7e845c8 100644 (file)
@@ -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
index 405a163..f47416a 100644 (file)
@@ -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
index cbaafcf..42f6b43 100644 (file)
@@ -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
index 3ccca25..fb40d8c 100644 (file)
@@ -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
index da381ed..5f8b49e 100644 (file)
@@ -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
index 3ea417a..fbb62ff 100644 (file)
@@ -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
index 72cee21..972f8c8 100644 (file)
@@ -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();
index a399aba..137cf5b 100644 (file)
@@ -25,6 +25,7 @@ typedef struct
     HWND       hActiveWnd;
     BOOL       bShowWarning;
     BOOL       bIsEnhancedKeyboard;
+    BOOL       bSoundClick;
 } OSK_GLOBALS;
 
 /* DEFINES ********************************************************************/
index 03fdffc..04dd6e2 100644 (file)
@@ -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 (file)
index 0000000..fd5402f
Binary files /dev/null and b/base/applications/osk/res/click.wav differ
index 44bcd0d..51b4534 100644 (file)
@@ -21,7 +21,8 @@
 
 #include <reactos/version.rc>
 
-IDI_OSK       ICON "res/osk.ico"
+IDI_OSK             ICON "res/osk.ico"
+IDI_SOUNDCLICK      WAVE "res/click.wav"
 
 
 IDI_BACK      ICON "res/back.ico"
index fa21d67..03eb18f 100644 (file)
@@ -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;