Merge pull request #40030 from reduz/timeout-for-focusout-x11

Add a focus out timeout for X11 so less events of this type are received
This commit is contained in:
Rémi Verschelde 2020-07-02 07:22:05 +02:00 committed by GitHub
commit 2da65347a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View file

@ -2349,11 +2349,17 @@ void DisplayServerX11::process_events() {
}
if (!focus_found) {
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_OUT);
}
uint64_t delta = OS::get_singleton()->get_ticks_msec() - time_since_no_focus;
app_focused = false;
if (delta > 250) {
//X11 can go between windows and have no focus for a while, when creating them or something else. Use this as safety to avoid unnecesary focus in/outs.
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_OUT);
}
app_focused = false;
}
} else {
time_since_no_focus = OS::get_singleton()->get_ticks_msec();
}
}

View file

@ -167,6 +167,7 @@ class DisplayServerX11 : public DisplayServer {
int last_click_button_index;
uint32_t last_button_state;
bool app_focused = false;
uint64_t time_since_no_focus = 0;
struct {
int opcode;