diff --git a/DDrawCompat/Config/Settings/AltTabFix.h b/DDrawCompat/Config/Settings/AltTabFix.h index e42afed..62d6da9 100644 --- a/DDrawCompat/Config/Settings/AltTabFix.h +++ b/DDrawCompat/Config/Settings/AltTabFix.h @@ -9,16 +9,23 @@ namespace Config class AltTabFix : public EnumSetting { public: - enum Values { OFF, KEEPVIDMEM }; + enum Values { OFF, KEEPVIDMEM, NOACTIVATEAPP }; AltTabFix() - : EnumSetting("AltTabFix", "off", { "off", "keepvidmem" }) + : EnumSetting("AltTabFix", "off", { "off", "keepvidmem", "noactivateapp" }) { } virtual ParamInfo getParamInfo() const override { - return KEEPVIDMEM == m_value ? ParamInfo{ "KeepPrimary", 0, 1, 1 } : ParamInfo{}; + switch (m_value) + { + case KEEPVIDMEM: + return { "KeepPrimary", 0, 1, 1 }; + case NOACTIVATEAPP: + return { "PassToApp", 0, 1, 1 }; + } + return {}; } }; } diff --git a/DDrawCompat/DDraw/DirectDraw.cpp b/DDrawCompat/DDraw/DirectDraw.cpp index 696922b..394ffc3 100644 --- a/DDrawCompat/DDraw/DirectDraw.cpp +++ b/DDrawCompat/DDraw/DirectDraw.cpp @@ -183,12 +183,18 @@ namespace if (origWndProc) { auto tagSurface = DDraw::TagSurface::findFullscreenWindow(); - if (tagSurface && tagSurface->getExclusiveOwnerThreadId() != GetCurrentThreadId()) + if (tagSurface && tagSurface->getExclusiveOwnerThreadId() != GetCurrentThreadId() || + Config::Settings::AltTabFix::NOACTIVATEAPP == Config::altTabFix.get()) { if (!wParam) { ShowWindow(hwnd, SW_SHOWMINNOACTIVE); } + if (Config::Settings::AltTabFix::NOACTIVATEAPP == Config::altTabFix.get() && + 0 == Config::altTabFix.getParam()) + { + return LOG_RESULT(0); + } return LOG_RESULT(CallWindowProcA(origWndProc, hwnd, WM_ACTIVATEAPP, wParam, lParam)); } }