mirror of
https://github.com/godotengine/godot.git
synced 2025-03-13 23:41:08 +08:00
Merge pull request #72826 from bruvzg/x11_popup_focus
[X11] Do not suppress structure/focus events on popup close to correctly return focus.
This commit is contained in:
commit
020ba92cfe
@ -3834,10 +3834,6 @@ void DisplayServerX11::process_events() {
|
|||||||
|
|
||||||
for (uint32_t event_index = 0; event_index < events.size(); ++event_index) {
|
for (uint32_t event_index = 0; event_index < events.size(); ++event_index) {
|
||||||
XEvent &event = events[event_index];
|
XEvent &event = events[event_index];
|
||||||
if (ignore_events) {
|
|
||||||
XFreeEventData(x11_display, &event.xcookie);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ime_window_event = false;
|
bool ime_window_event = false;
|
||||||
WindowID window_id = MAIN_WINDOW_ID;
|
WindowID window_id = MAIN_WINDOW_ID;
|
||||||
@ -3867,7 +3863,7 @@ void DisplayServerX11::process_events() {
|
|||||||
_refresh_device_info();
|
_refresh_device_info();
|
||||||
} break;
|
} break;
|
||||||
case XI_RawMotion: {
|
case XI_RawMotion: {
|
||||||
if (ime_window_event) {
|
if (ime_window_event || ignore_events) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
XIRawEvent *raw_event = (XIRawEvent *)event_data;
|
XIRawEvent *raw_event = (XIRawEvent *)event_data;
|
||||||
@ -3972,7 +3968,7 @@ void DisplayServerX11::process_events() {
|
|||||||
#ifdef TOUCH_ENABLED
|
#ifdef TOUCH_ENABLED
|
||||||
case XI_TouchBegin:
|
case XI_TouchBegin:
|
||||||
case XI_TouchEnd: {
|
case XI_TouchEnd: {
|
||||||
if (ime_window_event) {
|
if (ime_window_event || ignore_events) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bool is_begin = event_data->evtype == XI_TouchBegin;
|
bool is_begin = event_data->evtype == XI_TouchBegin;
|
||||||
@ -4005,7 +4001,7 @@ void DisplayServerX11::process_events() {
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case XI_TouchUpdate: {
|
case XI_TouchUpdate: {
|
||||||
if (ime_window_event) {
|
if (ime_window_event || ignore_events) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
HashMap<int, Vector2>::Iterator curr_pos_elem = xi.state.find(index);
|
HashMap<int, Vector2>::Iterator curr_pos_elem = xi.state.find(index);
|
||||||
@ -4227,7 +4223,7 @@ void DisplayServerX11::process_events() {
|
|||||||
|
|
||||||
case ButtonPress:
|
case ButtonPress:
|
||||||
case ButtonRelease: {
|
case ButtonRelease: {
|
||||||
if (ime_window_event) {
|
if (ime_window_event || ignore_events) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* exit in case of a mouse button press */
|
/* exit in case of a mouse button press */
|
||||||
@ -4328,7 +4324,7 @@ void DisplayServerX11::process_events() {
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
case MotionNotify: {
|
case MotionNotify: {
|
||||||
if (ime_window_event) {
|
if (ime_window_event || ignore_events) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// The X11 API requires filtering one-by-one through the motion
|
// The X11 API requires filtering one-by-one through the motion
|
||||||
@ -4476,6 +4472,9 @@ void DisplayServerX11::process_events() {
|
|||||||
} break;
|
} break;
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
case KeyRelease: {
|
case KeyRelease: {
|
||||||
|
if (ignore_events) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
#ifdef DISPLAY_SERVER_X11_DEBUG_LOGS_ENABLED
|
#ifdef DISPLAY_SERVER_X11_DEBUG_LOGS_ENABLED
|
||||||
if (event.type == KeyPress) {
|
if (event.type == KeyPress) {
|
||||||
DEBUG_LOG_X11("[%u] KeyPress window=%lu (%u), keycode=%u, time=%lu \n", frame, event.xkey.window, window_id, event.xkey.keycode, event.xkey.time);
|
DEBUG_LOG_X11("[%u] KeyPress window=%lu (%u), keycode=%u, time=%lu \n", frame, event.xkey.window, window_id, event.xkey.keycode, event.xkey.time);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user