Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_operators.c')
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c62
1 files changed, 61 insertions, 1 deletions
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index de08c209d06..ccdb19adfce 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -31,7 +31,10 @@
#include <ctype.h>
#include <stdio.h>
#include <stddef.h>
-
+#ifdef WIN32
+#include <windows.h>
+#include <io.h>
+#endif
#include "DNA_ID.h"
#include "DNA_object_types.h"
@@ -2007,6 +2010,60 @@ static void WM_OT_quit_blender(wmOperatorType *ot)
ot->poll= WM_operator_winactive;
}
+/* *********************** */
+#ifdef WIN32
+static int console= 1;
+void WM_toggle_console(bContext *C, short show)
+{
+ if(show) {
+ FILE *fp;
+ char fn[FILE_MAX];
+ char tmp[FILE_MAXDIR];
+ BLI_where_is_temp(tmp, 1);
+ BLI_make_file_string("/", fn, tmp, "blenderlog.txt");
+ /* open the console */
+ AllocConsole();
+
+ /* redirect stdin */
+ fp= freopen(fn, "r", stdin);
+ SetStdHandle(STD_INPUT_HANDLE, (HANDLE)_get_osfhandle(_fileno(stdin)));
+ /* redirect stdout */
+ fp= freopen(fn, "w", stdout);
+ SetStdHandle(STD_OUTPUT_HANDLE, (HANDLE)_get_osfhandle(_fileno(stdout)));
+ /* redirect stderr */
+ fp= freopen(fn, "w", stderr);
+ SetStdHandle(STD_ERROR_HANDLE, (HANDLE)_get_osfhandle(_fileno(stderr)));
+
+ console= 1;
+ }
+ else {
+ FreeConsole();
+ console= 0;
+ }
+}
+
+static int wm_toggle_console_op(bContext *C, wmOperator *op)
+{
+ if(console) {
+ WM_toggle_console(C, 0);
+ }
+ else {
+ WM_toggle_console(C, 1);
+ }
+ return OPERATOR_FINISHED;
+}
+
+static void WM_OT_toggle_console(wmOperatorType *ot)
+{
+ ot->name= "Toggle System Console";
+ ot->idname= "WM_OT_toggle_console";
+ ot->description= "Toggle System Console";
+
+ ot->exec= wm_toggle_console_op;
+ ot->poll= WM_operator_winactive;
+}
+#endif
+
/* ************ default paint cursors, draw always around cursor *********** */
/*
- returns handler to free
@@ -3079,6 +3136,9 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_splash);
WM_operatortype_append(WM_OT_search_menu);
WM_operatortype_append(WM_OT_call_menu);
+#ifdef WIN32
+ WM_operatortype_append(WM_OT_toggle_console);
+#endif
#ifdef WITH_COLLADA
/* XXX: move these */