@@ -176,6 +176,7 @@ HRESULT STDMETHODCALLTYPE Volume_Update(_In_ CSysTray * pSysTray)
176176 // Unmute if volume is increased or unmuted explicitly
177177 if (pSysTray->lpVolCmd )
178178 {
179+ MMRESULT mmres;
179180 g_IsMute = pSysTray->lpVolCmd == APPCOMMAND_VOLUME_UP ? FALSE : !g_IsMute;
180181
181182 MIXERCONTROLDETAILS_BOOLEAN mxcdMute = {0 };
@@ -189,13 +190,52 @@ HRESULT STDMETHODCALLTYPE Volume_Update(_In_ CSysTray * pSysTray)
189190 mxcd.paDetails = &mxcdMute;
190191 mxcd.cbDetails = sizeof (mxcdMute);
191192
192- MMRESULT mmres = mixerSetControlDetails ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
193+ mmres = mixerSetControlDetails ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
193194
194195 if (mmres)
195196 {
196- ERR (" Volume_Update failed at MMixer : %d\n " , mmres);
197+ ERR (" Volume_Update failed at updating mute state : %d\n " , mmres);
197198 return E_FAIL;
198199 }
200+
201+ // Update volume depending on pressed button.
202+ if (pSysTray->lpVolCmd != APPCOMMAND_VOLUME_MUTE)
203+ {
204+ MIXERLINECONTROLSW mxlc;
205+ MIXERCONTROLW mxctrl;
206+
207+ mxlc.cbStruct = sizeof (mxlc);
208+ mxlc.dwLineID = g_mixerLineID;
209+ mxlc.cControls = 1 ;
210+ mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
211+ mxlc.pamxctrl = &mxctrl;
212+ mxlc.cbmxctrl = sizeof (mxctrl);
213+
214+ mmres = mixerGetLineControlsW ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
215+
216+ if (mmres)
217+ {
218+ ERR (" Volume_Update failed retrieving line control: %d\n " , mmres);
219+ return E_FAIL;
220+ }
221+
222+ MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
223+
224+ mxcd.dwControlID = mxctrl.dwControlID ;
225+ mxcd.paDetails = &mxcdVolume;
226+ mxcd.cbDetails = sizeof (mxcdVolume);
227+
228+ mmres = mixerGetControlDetailsW ((HMIXEROBJ)UlongToHandle (g_mixerId), &mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
229+
230+ if (mmres)
231+ {
232+ ERR (" Volume_Update failed reading current volume: %d\n " , mmres);
233+ return E_FAIL;
234+ }
235+
236+ pSysTray->lpVolCmd = 0 ;
237+ DPRINTF (" Volume_Update: Current volume is %d\n " , mxcdVolume.dwValue );
238+ }
199239 }
200240
201241 if (pSysTray->lpVolCmd == APPCOMMAND_VOLUME_MUTE || PrevState != g_IsMute)
0 commit comments