summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/settingtypes.txt3
-rw-r--r--minetest.conf.example4
-rw-r--r--src/defaultsettings.cpp1
-rw-r--r--src/game.cpp7
4 files changed, 15 insertions, 0 deletions
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 0d5978911..024018869 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -536,6 +536,9 @@ fps_max (Maximum FPS) int 60
# Maximum FPS when game is paused.
pause_fps_max (FPS in pause menu) int 20
+# Open the pause menu when the window's focus is lost. Does not pause if a formspec is open.
+pause_on_lost_focus (Pause on lost window focus) bool false
+
# View distance in nodes.
viewing_range (Viewing range) int 100 20 4000
diff --git a/minetest.conf.example b/minetest.conf.example
index a112ce0e6..46d9ffe65 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -994,6 +994,10 @@
# type: int
# max_out_chat_queue_size = 20
+# Open the pause menu when the window's focus is lost. Does not pause if a formspec is open.
+# type: bool
+# pause_on_lost_focus = false
+
## Advanced
# Timeout for client to remove unused map data from memory.
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 3bd4f4ac6..130bb4a19 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -58,6 +58,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_remote_media_server", "true");
settings->setDefault("enable_client_modding", "false");
settings->setDefault("max_out_chat_queue_size", "20");
+ settings->setDefault("pause_on_lost_focus", "false");
// Keymap
settings->setDefault("remote_port", "30000");
diff --git a/src/game.cpp b/src/game.cpp
index f7d4164ae..ac50e9aba 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -1487,6 +1487,8 @@ private:
bool m_first_loop_after_window_activation = false;
bool m_camera_offset_changed = false;
+ bool m_does_lost_focus_pause_game = false;
+
#ifdef __ANDROID__
bool m_cache_hold_aux1;
bool m_android_chat_open;
@@ -1741,6 +1743,10 @@ void Game::run()
// Update if minimap has been disabled by the server
flags.show_minimap &= client->shouldShowMinimap();
+
+ if (m_does_lost_focus_pause_game && !device->isWindowFocused() && !isMenuActive()) {
+ showPauseMenu();
+ }
}
}
@@ -4638,6 +4644,7 @@ void Game::readSettings()
m_cache_cam_smoothing = rangelim(m_cache_cam_smoothing, 0.01f, 1.0f);
m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0);
+ m_does_lost_focus_pause_game = g_settings->getBool("pause_on_lost_focus");
}
/****************************************************************************/