@@ -193,9 +193,48 @@ HRESULT STDMETHODCALLTYPE Volume_Update(_In_ CSysTray * pSysTray)
193193
194194 if (mmres)
195195 {
196- ERR (" Volume_Update failed at MMixer : %d\n " , mmres);
196+ ERR (" Volume_Update failed at updating mute state : %d\n " , mmres);
197197 return E_FAIL;
198198 }
199+
200+ // Update volume depending on pressed button.
201+ if (pSysTray->lpVolCmd != APPCOMMAND_VOLUME_MUTE)
202+ {
203+ MIXERLINECONTROLSW mxlc;
204+ MIXERCONTROLW mxctrl;
205+
206+ mxlc.cbStruct = sizeof (mxlc);
207+ mxlc.dwLineID = g_mixerLineID;
208+ mxlc.cControls = 1 ;
209+ mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
210+ mxlc.pamxctrl = &mxctrl;
211+ mxlc.cbmxctrl = sizeof (mxctrl);
212+
213+ mmres = mixerGetLineControlsW ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
214+
215+ if (mmres)
216+ {
217+ ERR (" Volume_Update failed retrieving line control: %d\n " , mmres);
218+ return E_FAIL;
219+ }
220+
221+ MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
222+
223+ mxcd.dwControlID = mxctrl.dwControlID ;
224+ mxcd.paDetails = &mxcdVolume;
225+ mxcd.cbDetails = sizeof (mxcdVolume);
226+
227+ mmres = mixerGetControlDetailsW ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
228+
229+ if (mmres)
230+ {
231+ ERR (" Volume_Update failed reading current volume: %d\n " , mmres);
232+ return E_FAIL;
233+ }
234+
235+ pSysTray->lpVolCmd = 0 ;
236+ DPRINTF (" Volume_Update: Current volume is %d\n " , mxcdVolume.dwValue );
237+ }
199238 }
200239
201240 if (pSysTray->lpVolCmd == APPCOMMAND_VOLUME_MUTE || PrevState != g_IsMute)
0 commit comments