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); virtual void set_screen_orientation(ScreenOrientation p_orientation);
ScreenOrientation get_screen_orientation() const; ScreenOrientation get_screen_orientation() const;
virtual void enable_for_stealing_focus(ProcessID pid) {}
virtual void move_window_to_foreground() {} virtual void move_window_to_foreground() {}
virtual void debug_break(); virtual void debug_break();

View file

@ -134,6 +134,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
ERR_FAIL(); 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("debug_enter");
packet_peer_stream->put_var(2); packet_peer_stream->put_var(2);
packet_peer_stream->put_var(p_can_continue); 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_depth(-1);
set_lines_left(-1); set_lines_left(-1);
OS::get_singleton()->move_window_to_foreground();
break; break;
} else if (command=="break") { } else if (command=="break") {
ERR_PRINT("Got break when already broke!"); 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 { } else {
goto error; 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 { } 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() { void OS_Windows::move_window_to_foreground() {
SetForegroundWindow(hWnd); SetForegroundWindow(hWnd);
BringWindowToTop(hWnd);
} }

View file

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

View file

@ -690,6 +690,7 @@ public:
void notify_child_process_exited(); void notify_child_process_exited();
OS::ProcessID get_child_process_id() const { return editor_run.get_pid(); }
void stop_child_process(); void stop_child_process();
Ref<Theme> get_editor_theme() const { return theme; } 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("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!="") { if (p_custom_args!="") {
Vector<String> cargs=p_custom_args.split(" ",false); 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()) { if (p_breakpoints.size()) {
args.push_back("-bp"); args.push_back("-bp");

View file

@ -53,6 +53,8 @@ public:
void run_native_notify() { status=STATUS_PLAY; } void run_native_notify() { status=STATUS_PLAY; }
void stop(); void stop();
OS::ProcessID get_pid() const { return pid; }
void set_debug_collisions(bool p_debug); void set_debug_collisions(bool p_debug);
bool get_debug_collisions() const; 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_null());
ERR_FAIL_COND(!connection->is_connected()); ERR_FAIL_COND(!connection->is_connected());
OS::get_singleton()->enable_for_stealing_focus(EditorNode::get_singleton()->get_child_process_id());
Array msg; Array msg;
msg.push_back("continue"); msg.push_back("continue");
ppeer->put_var(msg); ppeer->put_var(msg);