Skip to content

Commit cf70b4c

Browse files
committed
[STOBJECT] Thoughts on volume button detection
1 parent 701f03d commit cf70b4c

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

dll/shellext/stobject/volume.cpp

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)