summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuka Dornhecker <luka.dornhecker@gmail.com>2018-12-18 14:17:43 +0100
committerRémi Verschelde <rverschelde@gmail.com>2019-06-20 16:55:52 +0200
commitad504b926f9a0cfabde78254f6a4b40901cb8592 (patch)
treed1b76baffd09ff75cd4edf75457de8bb1e5f8df0
parentd6f8a43b600cc5236c5860c8f266b6f8afc9c23c (diff)
Add option to toggle console window on Windows
This is an editor setting and its value can also be toggled using an entry in the Editor toolbar. The console will still appear briefly when starting the project manager or editor, as it's still compiled as console application. Does not impact exported games, which will still run without console in release and with console in debug mode. A project setting or export option could be added to disable it in debug mode if there's demand for it, but that would greatly reduce the usefulness of debug builds if Windows users can no longer report error and crash messages. Fixes #17889. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
-rw-r--r--core/os/os.h2
-rw-r--r--editor/editor_node.cpp10
-rw-r--r--editor/editor_node.h1
-rw-r--r--editor/editor_settings.cpp1
-rw-r--r--main/main.cpp5
-rw-r--r--platform/windows/os_windows.cpp12
-rw-r--r--platform/windows/os_windows.h3
7 files changed, 34 insertions, 0 deletions
diff --git a/core/os/os.h b/core/os/os.h
index 514e1e2ad3..1b19ddff26 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -222,6 +222,8 @@ public:
virtual bool is_window_maximized() const { return true; }
virtual void set_window_always_on_top(bool p_enabled) {}
virtual bool is_window_always_on_top() const { return false; }
+ virtual void set_console_visible(bool p_enabled) {}
+ virtual bool is_console_visible() const { return false; }
virtual void request_attention() {}
virtual void center_window();
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 2d2f67314d..21ed478159 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -2475,6 +2475,13 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
OS::get_singleton()->set_window_fullscreen(!OS::get_singleton()->is_window_fullscreen());
} break;
+ case SETTINGS_TOGGLE_CONSOLE: {
+
+ bool was_visible = OS::get_singleton()->is_console_visible();
+ OS::get_singleton()->set_console_visible(!was_visible);
+ EditorSettings::get_singleton()->set_setting("interface/editor/hide_console_window", !was_visible);
+
+ } break;
case SETTINGS_PICK_MAIN_SCENE: {
file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
@@ -5874,6 +5881,9 @@ EditorNode::EditorNode() {
#else
p->add_shortcut(ED_SHORTCUT("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREEN);
#endif
+#ifdef WINDOWS_ENABLED
+ p->add_item(TTR("Toggle System Console"), SETTINGS_TOGGLE_CONSOLE);
+#endif
p->add_separator();
if (OS::get_singleton()->get_data_path() == OS::get_singleton()->get_config_path()) {
diff --git a/editor/editor_node.h b/editor/editor_node.h
index f3bc95c409..366d9c2770 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -193,6 +193,7 @@ private:
SETTINGS_MANAGE_EXPORT_TEMPLATES,
SETTINGS_MANAGE_FEATURE_PROFILES,
SETTINGS_PICK_MAIN_SCENE,
+ SETTINGS_TOGGLE_CONSOLE,
SETTINGS_TOGGLE_FULLSCREEN,
SETTINGS_HELP,
SCENE_TAB_CLOSE,
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 58e3cc6fc1..5e04bf4953 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -345,6 +345,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("interface/editor/unfocused_low_processor_mode_sleep_usec", 50000); // 20 FPS
hints["interface/editor/unfocused_low_processor_mode_sleep_usec"] = PropertyInfo(Variant::REAL, "interface/editor/unfocused_low_processor_mode_sleep_usec", PROPERTY_HINT_RANGE, "1,100000,1", PROPERTY_USAGE_DEFAULT);
_initial_set("interface/editor/separate_distraction_mode", false);
+ _initial_set("interface/editor/hide_console_window", false);
_initial_set("interface/editor/save_each_scene_on_quit", true); // Regression
_initial_set("interface/editor/quit_confirmation", true);
diff --git a/main/main.cpp b/main/main.cpp
index c51ffd9124..c765ff9700 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -1797,6 +1797,7 @@ bool Main::start() {
pmanager->add_child(progress_dialog);
sml->get_root()->add_child(pmanager);
OS::get_singleton()->set_context(OS::CONTEXT_PROJECTMAN);
+ project_manager = true;
}
if (project_manager || editor) {
@@ -1806,6 +1807,10 @@ bool Main::start() {
StreamPeerSSL::load_certs_from_file(certs);
else
StreamPeerSSL::load_certs_from_memory(StreamPeerSSL::get_project_cert_array());
+
+ // Hide console window if requested (Windows-only)
+ bool hide_console = EditorSettings::get_singleton()->get_setting("interface/editor/hide_console_window");
+ OS::get_singleton()->set_console_visible(!hide_console);
}
#endif
}
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 6e6df08f02..5876a385c6 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -1979,6 +1979,17 @@ bool OS_Windows::is_window_always_on_top() const {
return video_mode.always_on_top;
}
+void OS_Windows::set_console_visible(bool p_enabled) {
+ if (console_visible == p_enabled)
+ return;
+ ShowWindow(GetConsoleWindow(), p_enabled ? SW_SHOW : SW_HIDE);
+ console_visible = p_enabled;
+}
+
+bool OS_Windows::is_console_visible() const {
+ return console_visible;
+}
+
bool OS_Windows::get_window_per_pixel_transparency_enabled() const {
if (!is_layered_allowed()) return false;
@@ -3231,6 +3242,7 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) {
control_mem = false;
meta_mem = false;
minimized = false;
+ console_visible = IsWindowVisible(GetConsoleWindow());
hInstance = _hInstance;
pressrc = 0;
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 4660c16b97..fc8ad1b188 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -210,6 +210,7 @@ protected:
bool maximized;
bool minimized;
bool borderless;
+ bool console_visible;
public:
LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
@@ -256,6 +257,8 @@ public:
virtual bool is_window_maximized() const;
virtual void set_window_always_on_top(bool p_enabled);
virtual bool is_window_always_on_top() const;
+ virtual void set_console_visible(bool p_enabled);
+ virtual bool is_console_visible() const;
virtual void request_attention();
virtual void set_borderless_window(bool p_borderless);