x11display: Release M_relative mouse when window loses focus

Fixes #480
This commit is contained in:
Mitchell Stokes 2018-12-18 19:43:37 -08:00
parent 11526852ed
commit 8dcb735f2b

View File

@ -508,23 +508,33 @@ process_events() {
changed_properties = true; changed_properties = true;
} }
if (properties.has_foreground() && _properties.get_mouse_mode() == WindowProperties::M_confined) { if (properties.has_foreground() && (
_properties.get_mouse_mode() == WindowProperties::M_confined ||
_dga_mouse_enabled)) {
x11GraphicsPipe *x11_pipe;
DCAST_INTO_V(x11_pipe, _pipe);
// Focus has changed, let's let go of the pointer if we've grabbed or re-grab it if needed // Focus has changed, let's let go of the pointer if we've grabbed or re-grab it if needed
if (properties.get_foreground()) { if (properties.get_foreground()) {
// Window is going to the foreground, re-grab the pointer // Window is going to the foreground, re-grab the pointer
X11_Cursor cursor = None; X11_Cursor cursor = None;
if (_properties.get_cursor_hidden()) { if (_properties.get_cursor_hidden()) {
x11GraphicsPipe *x11_pipe;
DCAST_INTO_V(x11_pipe, _pipe);
cursor = x11_pipe->get_hidden_cursor(); cursor = x11_pipe->get_hidden_cursor();
} }
XGrabPointer(_display, _xwindow, True, 0, GrabModeAsync, GrabModeAsync, XGrabPointer(_display, _xwindow, True, 0, GrabModeAsync, GrabModeAsync,
_xwindow, cursor, CurrentTime); _xwindow, cursor, CurrentTime);
if (_dga_mouse_enabled) {
x11_pipe->enable_relative_mouse();
}
} }
else { else {
// window is leaving the foreground, ungrab the pointer // window is leaving the foreground, ungrab the pointer
XUngrabPointer(_display, CurrentTime); if (_dga_mouse_enabled) {
x11_pipe->disable_relative_mouse();
} else if (_properties.get_mouse_mode() == WindowProperties::M_confined) {
XUngrabPointer(_display, CurrentTime);
}
} }
} }