Alexandre Julliard : winex11: Add an option to disable pointer grabs.
Module: wine Branch: master Commit: 4d358bfee3ac087405a7609ecde0fd6e2d0c9353 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4d358bfee3ac087405a7609ecd... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Apr 5 11:00:09 2011 +0200 winex11: Add an option to disable pointer grabs. --- dlls/winex11.drv/mouse.c | 29 ++++++++++++++++------------- dlls/winex11.drv/x11drv.h | 1 + dlls/winex11.drv/x11drv_main.c | 4 ++++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 2b793e1..fe9f716 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 a746d08..0a1e3d9 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 606bc28..cc38be2 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);
participants (1)
-
Alexandre Julliard