[NTDLL] Allow shimdata to override the process manifest.
[reactos.git] / dll / shellext / stobject / volume.cpp
index f82e6e0..931cd2e 100644 (file)
@@ -8,11 +8,8 @@
 
 #include "precomp.h"
 
-#include <mmsystem.h>
 #include <mmddk.h>
 
-WINE_DEFAULT_DEBUG_CHANNEL(stobject);
-
 HICON g_hIconVolume;
 HICON g_hIconMute;
 
@@ -113,7 +110,7 @@ static HRESULT __stdcall Volume_FindMixerControl(CSysTray * pSysTray)
     return S_OK;
 }
 
-HRESULT Volume_IsMute(VOID)
+HRESULT Volume_IsMute()
 {
 #if 0
     MIXERCONTROLDETAILS mixerControlDetails;
@@ -217,10 +214,9 @@ HRESULT Volume_OnDeviceChange(_In_ CSysTray * pSysTray, WPARAM wParam, LPARAM lP
     return Volume_FindMixerControl(pSysTray);
 }
 
-static void _RunVolume(BOOL bSmall)
+static void _RunVolume(BOOL bTray)
 {
-    // FIXME: ensure we are loading the right one
-    ShellExecuteW(NULL, NULL, L"sndvol32.exe", bSmall ? L"/t" : NULL, NULL, SW_SHOWNORMAL);
+    ShellExecuteW(NULL, NULL, bTray ? L"sndvol32.exe /t" : L"sndvol32.exe", NULL, NULL, SW_SHOWNORMAL);
 }
 
 static void _RunMMCpl()
@@ -238,14 +234,14 @@ static void _ShowContextMenu(CSysTray * pSysTray)
     HMENU hPopup = CreatePopupMenu();
     AppendMenuW(hPopup, MF_STRING, IDS_VOL_OPEN, strOpen);
     AppendMenuW(hPopup, MF_STRING, IDS_VOL_ADJUST, strAdjust);
-    SetMenuDefaultItem(hPopup, IDS_VOL_OPEN, FALSE);
 
     DWORD flags = TPM_RETURNCMD | TPM_NONOTIFY | TPM_RIGHTALIGN | TPM_BOTTOMALIGN;
-    DWORD msgPos = GetMessagePos();
-
+    POINT pt;
     SetForegroundWindow(pSysTray->GetHWnd());
+    GetCursorPos(&pt);
+
     DWORD id = TrackPopupMenuEx(hPopup, flags,
-        GET_X_LPARAM(msgPos), GET_Y_LPARAM(msgPos),
+        pt.x, pt.y,
         pSysTray->GetHWnd(), NULL);
 
     DestroyMenu(hPopup);
@@ -288,6 +284,14 @@ HRESULT STDMETHODCALLTYPE Volume_Message(_In_ CSysTray * pSysTray, UINT uMsg, WP
             }
             return S_FALSE;
 
+        case WM_TIMER:
+            if (wParam == VOLUME_TIMER_ID)
+            {
+                KillTimer(pSysTray->GetHWnd(), VOLUME_TIMER_ID);
+                _RunVolume(TRUE);
+            }
+            break;
+
         case ID_ICON_VOLUME:
             TRACE("Volume_Message uMsg=%d, w=%x, l=%x\n", uMsg, wParam, lParam);
 
@@ -296,7 +300,7 @@ HRESULT STDMETHODCALLTYPE Volume_Message(_In_ CSysTray * pSysTray, UINT uMsg, WP
             switch (lParam)
             {
                 case WM_LBUTTONDOWN:
-                    SetTimer(pSysTray->GetHWnd(), VOLUME_TIMER_ID, 500, NULL);
+                    SetTimer(pSysTray->GetHWnd(), VOLUME_TIMER_ID, GetDoubleClickTime(), NULL);
                     break;
 
                 case WM_LBUTTONUP:
@@ -329,11 +333,3 @@ HRESULT STDMETHODCALLTYPE Volume_Message(_In_ CSysTray * pSysTray, UINT uMsg, WP
 
     return S_FALSE;
 }
-
-VOID
-Volume_OnTimer(HWND hWnd)
-{
-    TRACE("Volume_OnTimer\n!");
-    KillTimer(hWnd, VOLUME_TIMER_ID);
-    _RunVolume(TRUE);
-}