diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 2b793e12b0c..fe9f716e6b4 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -938,22 +938,25 @@ BOOL CDECL X11DRV_ClipCursor( LPCRECT clip ) if (GetWindowThreadProcessId( GetDesktopWindow(), NULL ) == GetCurrentThreadId()) return TRUE; /* don't clip in the desktop process */ - TRACE( "clipping to %s\n", wine_dbgstr_rect(clip) ); - wine_tsx11_lock(); - XUnmapWindow( display, clip_window ); - XMoveResizeWindow( display, clip_window, - clip->left - virtual_screen_rect.left, clip->top - virtual_screen_rect.top, - clip->right - clip->left, clip->bottom - clip->top ); - XMapWindow( display, clip_window ); - if (!XGrabPointer( display, clip_window, False, - PointerMotionMask | ButtonPressMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, clip_window, None, CurrentTime )) + if (grab_pointer) { + TRACE( "clipping to %s\n", wine_dbgstr_rect(clip) ); + wine_tsx11_lock(); + XUnmapWindow( display, clip_window ); + XMoveResizeWindow( display, clip_window, + clip->left - virtual_screen_rect.left, clip->top - virtual_screen_rect.top, + clip->right - clip->left, clip->bottom - clip->top ); + XMapWindow( display, clip_window ); + if (!XGrabPointer( display, clip_window, False, + PointerMotionMask | ButtonPressMask | ButtonReleaseMask, + GrabModeAsync, GrabModeAsync, clip_window, None, CurrentTime )) + { + wine_tsx11_unlock(); + clip_rect = *clip; + return TRUE; + } wine_tsx11_unlock(); - clip_rect = *clip; - return TRUE; } - wine_tsx11_unlock(); } /* release the grab if any */ diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index a746d08d771..0a1e3d99c36 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -598,6 +598,7 @@ extern int use_take_focus; extern int use_primary_selection; extern int use_system_cursors; extern int show_systray; +extern int grab_pointer; extern int usexcomposite; extern int managed_mode; extern int decorated_mode; diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 606bc28e78a..cc38be2c841 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -84,6 +84,7 @@ int use_take_focus = 1; int use_primary_selection = 0; int use_system_cursors = 1; int show_systray = 1; +int grab_pointer = 1; int managed_mode = 1; int decorated_mode = 1; int private_color_map = 0; @@ -426,6 +427,9 @@ static void setup_options(void) if (!get_config_key( hkey, appkey, "ShowSystray", buffer, sizeof(buffer) )) show_systray = IS_OPTION_TRUE( buffer[0] ); + if (!get_config_key( hkey, appkey, "GrabPointer", buffer, sizeof(buffer) )) + grab_pointer = IS_OPTION_TRUE( buffer[0] ); + screen_depth = 0; if (!get_config_key( hkey, appkey, "ScreenDepth", buffer, sizeof(buffer) )) screen_depth = atoi(buffer);