cvar_t vid_vsync = {CF_CLIENT | CF_ARCHIVE, "vid_vsync", "0", "sync to vertical blank, prevents 'tearing' (seeing part of one frame and part of another on the screen at the same time) at the cost of latency, 1 always syncs and -1 is adaptive (stops syncing if the framerate drops, unsupported by some platforms), automatically disabled when doing timedemo benchmarks"};
cvar_t vid_mouse = {CF_CLIENT | CF_ARCHIVE, "vid_mouse", "1", "whether to use the mouse in windowed mode (fullscreen always does)"};
cvar_t vid_mouse_clickthrough = {CF_CLIENT | CF_ARCHIVE, "vid_mouse_clickthrough", "0", "mouse behavior in windowed mode: 0 = click to focus, 1 = allow interaction even if the window is not focused (click-through behaviour, can be useful when using third-party game overlays)"};
+cvar_t vid_minimize_on_focus_loss = {CF_CLIENT | CF_ARCHIVE, "vid_minimize_on_focus_loss", "0", "whether to minimize the fullscreen window if it loses focus (such as by alt+tab)"};
cvar_t vid_grabkeyboard = {CF_CLIENT | CF_ARCHIVE, "vid_grabkeyboard", "0", "whether to grab the keyboard when mouse is active (prevents use of volume control keys, music player keys, etc on some keyboards)"};
cvar_t vid_minwidth = {CF_CLIENT, "vid_minwidth", "0", "minimum vid_width that is acceptable (to be set in default.cfg in mods)"};
cvar_t vid_minheight = {CF_CLIENT, "vid_minheight", "0", "minimum vid_height that is acceptable (to be set in default.cfg in mods)"};
{
Con_DPrintf("GL context is missing required function \"%s\"!\n", func->name);
missingrequiredfuncs = true;
- strlcat(missingfuncs, " ", sizeof(missingfuncs));
- strlcat(missingfuncs, func->name, sizeof(missingfuncs));
+ dp_strlcat(missingfuncs, " ", sizeof(missingfuncs));
+ dp_strlcat(missingfuncs, func->name, sizeof(missingfuncs));
}
}
Cvar_RegisterVariable(&vid_vsync);
Cvar_RegisterVariable(&vid_mouse);
Cvar_RegisterVariable(&vid_mouse_clickthrough);
+ Cvar_RegisterVariable(&vid_minimize_on_focus_loss);
Cvar_RegisterVariable(&vid_grabkeyboard);
Cvar_RegisterVariable(&vid_touchscreen);
Cvar_RegisterVariable(&vid_touchscreen_showkeyboard);
return false;
}
-static void VID_OpenSystems(void)
-{
- Key_ReleaseAll();
- R_Modules_Start();
- S_Startup();
-}
-
-static void VID_CloseSystems(void)
-{
- S_Shutdown();
- R_Modules_Shutdown();
- Key_ReleaseAll();
-}
-
qbool vid_commandlinecheck = true;
extern qbool vid_opened;
Con_Printf("VID_Restart: changing from %s %dx%dx%dbpp%s, to %s %dx%dx%dbpp%s.\n",
vid.mode.fullscreen ? "fullscreen" : "window", vid.mode.width, vid.mode.height, vid.mode.bitsperpixel, vid.mode.fullscreen && vid.mode.userefreshrate ? va(vabuf, sizeof(vabuf), "x%.2fhz", vid.mode.refreshrate) : "",
vid_fullscreen.integer ? "fullscreen" : "window", vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_fullscreen.integer && vid_userefreshrate.integer ? va(vabuf, sizeof(vabuf), "x%.2fhz", vid_refreshrate.value) : "");
- VID_CloseSystems();
+ SCR_DeferLoadingPlaque(false);
+ R_Modules_Shutdown();
VID_Shutdown();
if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_refreshrate.value, vid_stereobuffer.integer))
{
if (!VID_Mode(vid.mode.fullscreen, vid.mode.width, vid.mode.height, vid.mode.bitsperpixel, vid.mode.refreshrate, vid.mode.stereobuffer))
Sys_Error("Unable to restore to last working video mode");
}
-
- SCR_DeferLoadingPlaque(false);
- VID_OpenSystems();
+ R_Modules_Start();
+ Key_ReleaseAll();
}
const char *vidfallbacks[][2] =
if (!success)
Sys_Error("Video modes failed");
}
- VID_OpenSystems();
-}
-void VID_Stop(void)
-{
- VID_CloseSystems();
- VID_Shutdown();
+ R_Modules_Start();
+ Key_ReleaseAll();
}
static int VID_SortModes_Compare(const void *a_, const void *b_)