winex11: Add an option to disable pointer grabs.

This commit is contained in:
Alexandre Julliard 2011-04-05 11:00:09 +02:00
parent ae2b356361
commit 4d358bfee3
3 changed files with 21 additions and 13 deletions

View file

@ -938,22 +938,25 @@ BOOL CDECL X11DRV_ClipCursor( LPCRECT clip )
if (GetWindowThreadProcessId( GetDesktopWindow(), NULL ) == GetCurrentThreadId()) if (GetWindowThreadProcessId( GetDesktopWindow(), NULL ) == GetCurrentThreadId())
return TRUE; /* don't clip in the desktop process */ return TRUE; /* don't clip in the desktop process */
TRACE( "clipping to %s\n", wine_dbgstr_rect(clip) ); if (grab_pointer)
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 ))
{ {
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(); wine_tsx11_unlock();
clip_rect = *clip;
return TRUE;
} }
wine_tsx11_unlock();
} }
/* release the grab if any */ /* release the grab if any */

View file

@ -598,6 +598,7 @@ extern int use_take_focus;
extern int use_primary_selection; extern int use_primary_selection;
extern int use_system_cursors; extern int use_system_cursors;
extern int show_systray; extern int show_systray;
extern int grab_pointer;
extern int usexcomposite; extern int usexcomposite;
extern int managed_mode; extern int managed_mode;
extern int decorated_mode; extern int decorated_mode;

View file

@ -84,6 +84,7 @@ int use_take_focus = 1;
int use_primary_selection = 0; int use_primary_selection = 0;
int use_system_cursors = 1; int use_system_cursors = 1;
int show_systray = 1; int show_systray = 1;
int grab_pointer = 1;
int managed_mode = 1; int managed_mode = 1;
int decorated_mode = 1; int decorated_mode = 1;
int private_color_map = 0; int private_color_map = 0;
@ -426,6 +427,9 @@ static void setup_options(void)
if (!get_config_key( hkey, appkey, "ShowSystray", buffer, sizeof(buffer) )) if (!get_config_key( hkey, appkey, "ShowSystray", buffer, sizeof(buffer) ))
show_systray = IS_OPTION_TRUE( buffer[0] ); 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; screen_depth = 0;
if (!get_config_key( hkey, appkey, "ScreenDepth", buffer, sizeof(buffer) )) if (!get_config_key( hkey, appkey, "ScreenDepth", buffer, sizeof(buffer) ))
screen_depth = atoi(buffer); screen_depth = atoi(buffer);