diff options
| -rw-r--r-- | typing-break/drw-break-window.c | 52 | ||||
| -rw-r--r-- | typing-break/drwright.c | 35 | 
2 files changed, 78 insertions, 9 deletions
diff --git a/typing-break/drw-break-window.c b/typing-break/drw-break-window.c index c4132db8..8c2a62fb 100644 --- a/typing-break/drw-break-window.c +++ b/typing-break/drw-break-window.c @@ -428,21 +428,57 @@ static gboolean  grab_on_window (GdkWindow *window,  		guint32    activate_time)  { -	if ((gdk_pointer_grab (window, TRUE, -			       GDK_BUTTON_PRESS_MASK | -			       GDK_BUTTON_RELEASE_MASK | -			       GDK_POINTER_MOTION_MASK, -			       NULL, NULL, activate_time) == 0)) { -		if (gdk_keyboard_grab (window, TRUE, -			       activate_time) == 0) +	GdkDisplay *display; +#if GTK_CHECK_VERSION (3, 20, 0) +	GdkSeat *seat; +#else +	GdkDeviceManager *device_manager; +	GdkDevice *pointer; +	GdkDevice *keyboard; +#endif + +	display = gdk_window_get_display (window); +#if GTK_CHECK_VERSION (3, 20, 0) +	seat = gdk_display_get_default_seat (display); + +	return (gdk_seat_grab (seat, +	                       window, +	                       GDK_SEAT_CAPABILITY_ALL, +	                       TRUE, +	                       NULL, +	                       NULL, +	                       NULL, +	                       NULL) == GDK_GRAB_SUCCESS); +#else +	device_manager = gdk_display_get_device_manager (display); +	pointer = gdk_device_manager_get_client_pointer (device_manager); +	keyboard = gdk_device_get_associated_device (pointer); + +	if ((gdk_device_grab (pointer, +	                      window, +	                      GDK_OWNERSHIP_NONE, +	                      TRUE, +	                      GDK_BUTTON_PRESS_MASK | +	                      GDK_BUTTON_RELEASE_MASK | +	                      GDK_POINTER_MOTION_MASK, +	                      NULL, +	                      activate_time) == 0)) { +		if (gdk_device_grab (keyboard, +		                     window, +		                     GDK_OWNERSHIP_NONE, +		                     TRUE, +		                     GDK_KEY_PRESS_MASK, +		                     NULL, +		                     activate_time) == 0)  			return TRUE;  		else { -			gdk_pointer_ungrab (activate_time); +			gdk_device_ungrab (pointer, activate_time);  			return FALSE;  		}  	}  	return FALSE; +#endif  }  static gboolean diff --git a/typing-break/drwright.c b/typing-break/drwright.c index 2a07f040..6cc6b248 100644 --- a/typing-break/drwright.c +++ b/typing-break/drwright.c @@ -322,9 +322,42 @@ static gboolean  grab_keyboard_on_window (GdkWindow *window,  			 guint32    activate_time)  { +	GdkDisplay *display; +#if GTK_CHECK_VERSION (3, 20, 0) +	GdkSeat *seat; +#else +	GdkDeviceManager *device_manager; +	GdkDevice *pointer; +	GdkDevice *keyboard; +#endif  	GdkGrabStatus status; -	status = gdk_keyboard_grab (window, TRUE, activate_time); +	display = gdk_window_get_display (window); +#if GTK_CHECK_VERSION (3, 20, 0) +	seat = gdk_display_get_default_seat (display); + +	status = gdk_seat_grab (seat, +	                        window, +	                        GDK_SEAT_CAPABILITY_KEYBOARD, +	                        TRUE, +	                        NULL, +	                        NULL, +	                        NULL, +	                        NULL); +#else +	device_manager = gdk_display_get_device_manager (display); +	pointer = gdk_device_manager_get_client_pointer (device_manager); +	keyboard = gdk_device_get_associated_device (pointer); + +	status = gdk_device_grab (keyboard, +	                          window, +	                          GDK_OWNERSHIP_NONE, +	                          TRUE, +	                          GDK_KEY_PRESS_MASK, +	                          NULL, +	                          activate_time); +#endif +  	if (status == GDK_GRAB_SUCCESS) {  		return TRUE;  	}  | 
