diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 6865d5fcc..6e2862905 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -49,19 +49,25 @@ local tabs = { -------------------------------------------------------------------------------- local function main_event_handler(tabview, event) if event == "MenuQuit" then - if not ui.childlist["mainmenu_quit_confirm"] then + local show_dialog = core.settings:get_bool("enable_esc_dialog") + if not ui.childlist["mainmenu_quit_confirm"] and show_dialog then tabview:hide() local dlg = dialog_create( "mainmenu_quit_confirm", function() - return confirmation_formspec( - fgettext("Are you sure you want to quit?"), - "btn_quit_confirm_yes", fgettext("Quit"), - "btn_quit_confirm_cancel", fgettext("Cancel") - ) + return "size[10,3,true]" .. + "label[0.5,0.5;" .. fgettext("Are you sure you want to quit?") .. "]" .. + "checkbox[0.5,1;cb_show_dialog;" .. fgettext("Always show this dialog.") .. ";" .. tostring(show_dialog) .. "]" .. + "style[btn_quit_confirm_yes;bgcolor=red]" .. + "button[0.5,2.0;2.5,0.5;btn_quit_confirm_yes;" .. fgettext("Quit") .. "]" .. + "button[7.0,2.0;2.5,0.5;btn_quit_confirm_cancel;" .. fgettext("Cancel") .. "]" end, function(this, fields) - if fields.btn_quit_confirm_yes then + if fields.cb_show_dialog ~= nil then + local value = (fields.cb_show_dialog == "true") and "true" or "false" + core.settings:set("enable_esc_dialog", value) + return false + elseif fields.btn_quit_confirm_yes then this:delete() core.close() return true @@ -77,6 +83,8 @@ local function main_event_handler(tabview, event) ) dlg:set_parent(tabview) dlg:show() + else + core.close() end return true end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 17ecf5b34..bde9e15e9 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -158,6 +158,9 @@ autojump (Automatic jumping) bool false # On touchscreens, this only affects digging. safe_dig_and_place (Safe digging and placing) bool false +# Enable a confirmation dialog before closing. +enable_esc_dialog (Confirmation dialog before closing) bool true + [*Keyboard and Mouse] # Invert vertical mouse movement. diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 916ce9e51..9f05d48a8 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -369,6 +369,7 @@ void set_default_settings() settings->setDefault("toggle_sneak_key", "false"); settings->setDefault("toggle_aux1_key", "false"); settings->setDefault("autojump", bool_to_cstr(has_touch)); + settings->setDefault("enable_esc_dialog", "true"); settings->setDefault("continuous_forward", "false"); settings->setDefault("enable_joysticks", "false"); settings->setDefault("joystick_id", "0");