diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 0c34703d6..6d03a70e9 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1828,6 +1828,15 @@ void diablo_pause_game() bool GameWasAlreadyPaused = false; bool MinimizePaused = false; +bool diablo_is_focused() +{ +#ifndef USE_SDL1 + return SDL_GetKeyboardFocus() == ghMainWnd; +#else + return true; +#endif +} + void diablo_focus_pause() { if (!movie_playing && (gbIsMultiplayer || MinimizePaused)) { diff --git a/Source/diablo.h b/Source/diablo.h index 6a2b39904..a1e388631 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -87,6 +87,7 @@ bool StartGame(bool bNewGame, bool bSinglePlayer); int DiabloMain(int argc, char **argv); bool TryIconCurs(); void diablo_pause_game(); +bool diablo_is_focused(); void diablo_focus_pause(); void diablo_focus_unpause(); bool PressEscKey(); diff --git a/Source/sound.cpp b/Source/sound.cpp index 4f2248231..b8215a4ee 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -255,6 +255,8 @@ void music_start(uint8_t nTrack) } music->setVolume(VolumeLogToLinear(sgOptions.Audio.nMusicVolume, VOLUME_MIN, VOLUME_MAX)); + if (!diablo_is_focused()) + music_mute(); if (!music->play(/*iterations=*/0)) { LogError(LogCategory::Audio, "Aulib::Stream::play (from music_start): {}", SDL_GetError()); CleanupMusic(); diff --git a/Source/storm/storm_svid.cpp b/Source/storm/storm_svid.cpp index f6a442d21..ad66f9aa9 100644 --- a/Source/storm/storm_svid.cpp +++ b/Source/storm/storm_svid.cpp @@ -266,6 +266,8 @@ bool SVidPlayBegin(const char *filename, int flags) std::make_unique(*sgOptions.Audio.resamplingQuality), /*closeRw=*/false); const float volume = static_cast(sgOptions.Audio.nSoundVolume - VOLUME_MIN) / -VOLUME_MIN; SVidAudioStream->setVolume(volume); + if (!diablo_is_focused()) + SVidMute(); if (!SVidAudioStream->open()) { LogError(LogCategory::Audio, "Aulib::Stream::open (from SVidPlayBegin): {}", SDL_GetError()); SVidAudioStream = std::nullopt;