Improve debug focus behavior

Fix focusing debugged game on Windows
Add re-focusing editor on continue
This commit is contained in:
Pedro J. Estébanez 2016-09-14 04:02:18 +02:00
parent 6f7b2d277f
commit 66dac878ac
9 changed files with 30 additions and 1 deletions

View file

@ -372,6 +372,7 @@ public:
virtual void set_screen_orientation(ScreenOrientation p_orientation);
ScreenOrientation get_screen_orientation() const;
virtual void enable_for_stealing_focus(ProcessID pid) {}
virtual void move_window_to_foreground() {}
virtual void debug_break();

View file

@ -134,6 +134,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
ERR_FAIL();
}
OS::get_singleton()->enable_for_stealing_focus(Globals::get_singleton()->get("editor_pid"));
packet_peer_stream->put_var("debug_enter");
packet_peer_stream->put_var(2);
packet_peer_stream->put_var(p_can_continue);
@ -271,6 +273,7 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
set_depth(-1);
set_lines_left(-1);
OS::get_singleton()->move_window_to_foreground();
break;
} else if (command=="break") {
ERR_PRINT("Got break when already broke!");

View file

@ -559,6 +559,16 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
} else {
goto error;
}
} else if (I->get()=="-epid") {
if (I->next()) {
int editor_pid=I->next()->get().to_int();
Globals::get_singleton()->set("editor_pid",editor_pid);
N=I->next()->next();
} else {
goto error;
}
} else {

View file

@ -2154,10 +2154,15 @@ String OS_Windows::get_stdin_string(bool p_block) {
}
void OS_Windows::enable_for_stealing_focus(ProcessID pid) {
AllowSetForegroundWindow(pid);
}
void OS_Windows::move_window_to_foreground() {
SetForegroundWindow(hWnd);
BringWindowToTop(hWnd);
}

View file

@ -269,6 +269,7 @@ public:
virtual String get_locale() const;
virtual LatinKeyboardVariant get_latin_keyboard_variant() const;
virtual void enable_for_stealing_focus(ProcessID pid);
virtual void move_window_to_foreground();
virtual String get_data_dir() const;
virtual String get_system_dir(SystemDir p_dir) const;

View file

@ -690,6 +690,7 @@ public:
void notify_child_process_exited();
OS::ProcessID get_child_process_id() const { return editor_run.get_pid(); }
void stop_child_process();
Ref<Theme> get_editor_theme() const { return theme; }

View file

@ -52,6 +52,9 @@ Error EditorRun::run(const String& p_scene,const String p_custom_args,const List
args.push_back("localhost:"+String::num(GLOBAL_DEF("debug/debug_port", 6007)));
}
args.push_back("-epid");
args.push_back(String::num(OS::get_singleton()->get_process_ID()));
if (p_custom_args!="") {
Vector<String> cargs=p_custom_args.split(" ",false);
@ -132,6 +135,7 @@ Error EditorRun::run(const String& p_scene,const String p_custom_args,const List
}
if (p_breakpoints.size()) {
args.push_back("-bp");

View file

@ -53,6 +53,8 @@ public:
void run_native_notify() { status=STATUS_PLAY; }
void stop();
OS::ProcessID get_pid() const { return pid; }
void set_debug_collisions(bool p_debug);
bool get_debug_collisions() const;

View file

@ -216,6 +216,8 @@ void ScriptEditorDebugger::debug_continue() {
ERR_FAIL_COND(connection.is_null());
ERR_FAIL_COND(!connection->is_connected());
OS::get_singleton()->enable_for_stealing_focus(EditorNode::get_singleton()->get_child_process_id());
Array msg;
msg.push_back("continue");
ppeer->put_var(msg);