[Spice-devel] [PATCH spice-gtk] widget: Use deprecated function to ungrab device
Snir Sheriber
ssheribe at redhat.com
Wed Mar 22 06:26:32 UTC 2017
Hi,
Yep, fixed it:)
I would prefer to revert both grabbing and ungrabbing to the deprecated
functions until a suitable
gdk_seat_ungrab function will be available but maybe a comment
explaining why seat_ungrab is
not in use (just to avoid that someone will change it again) will be be
enough.
Anyways, Ack.
Snir.
On 03/16/2017 12:42 PM, Pavel Grunt wrote:
> Avoid broken grab (alt+tab not working), regression since
> ef7a6fa1798c8e53c0b77330b398a78181cf90e5
>
> Currently it is not possible to ungrab just keyboard/mouse
> using GdkSeat functions:
> https://bugzilla.gnome.org/show_bug.cgi?id=780133
> Use deprecated gdk_device_ungrab to do it
> ---
> src/spice-widget.c | 49 +++++++++++++++++++++++++++++--------------------
> 1 file changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index 9a7ea56..c7db2a8 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -890,6 +890,19 @@ static void try_keyboard_grab(SpiceDisplay *display)
> }
> }
>
> +static void ungrab_keyboard(G_GNUC_UNUSED SpiceDisplay *display)
> +{
> + G_GNUC_BEGIN_IGNORE_DEPRECATIONS
> +#if GTK_CHECK_VERSION(3, 20, 0)
> + /* we want to ungrab just the keyboard - it is possible using deprecated gdk_device_ungrab */
> + GdkDevice *keyboard = gdk_seat_get_keyboard(spice_display_get_default_seat(display));
> + gdk_device_ungrab(keyboard, GDK_CURRENT_TIME);
> +#else
> + gdk_keyboard_ungrab(GDK_CURRENT_TIME);
> +#endif
> + G_GNUC_END_IGNORE_DEPRECATIONS
> +}
> +
> static void try_keyboard_ungrab(SpiceDisplay *display)
> {
> SpiceDisplayPrivate *d = display->priv;
> @@ -899,11 +912,7 @@ static void try_keyboard_ungrab(SpiceDisplay *display)
> return;
>
> SPICE_DEBUG("ungrab keyboard");
> -#if GTK_CHECK_VERSION(3, 20, 0)
> - gdk_seat_ungrab(spice_display_get_default_seat(display));
> -#else
> - gdk_keyboard_ungrab(GDK_CURRENT_TIME);
> -#endif
> + ungrab_keyboard(display);
> #ifdef G_OS_WIN32
> // do not use g_clear_pointer as Windows API have different linkage
> if (d->keyboard_hook) {
> @@ -1161,6 +1170,19 @@ static void mouse_wrap(SpiceDisplay *display, GdkEventMotion *motion)
>
> }
>
> +static void ungrab_pointer(G_GNUC_UNUSED SpiceDisplay *display)
> +{
> + G_GNUC_BEGIN_IGNORE_DEPRECATIONS
> +#if GTK_CHECK_VERSION(3, 20, 0)
> + /* we want to ungrab just the pointer - it is possible using deprecated gdk_device_ungrab */
> + GdkDevice *pointer = gdk_seat_get_pointer(spice_display_get_default_seat(display));
> + gdk_device_ungrab(pointer, GDK_CURRENT_TIME);
> +#else
> + gdk_pointer_ungrab(GDK_CURRENT_TIME);
> +#endif
> + G_GNUC_END_IGNORE_DEPRECATIONS
> +}
> +
> static void try_mouse_ungrab(SpiceDisplay *display)
> {
> SpiceDisplayPrivate *d = display->priv;
> @@ -1171,13 +1193,7 @@ static void try_mouse_ungrab(SpiceDisplay *display)
> if (!d->mouse_grab_active)
> return;
>
> - G_GNUC_BEGIN_IGNORE_DEPRECATIONS
> -#if GTK_CHECK_VERSION(3, 20, 0)
> - gdk_seat_ungrab(spice_display_get_default_seat(display));
> -#else
> - gdk_pointer_ungrab(GDK_CURRENT_TIME);
> -#endif
> - G_GNUC_END_IGNORE_DEPRECATIONS
> + ungrab_pointer(display);
> gtk_grab_remove(GTK_WIDGET(display));
> #ifdef G_OS_WIN32
> ClipCursor(NULL);
> @@ -2044,14 +2060,7 @@ static gboolean button_event(GtkWidget *widget, GdkEventButton *button)
> FIXME: should be multiple widget grab, but how?
> or should know the position of the other widgets?
> */
> - /* FIXME: gdk_pointer_ungrab() is deprecated */
> - G_GNUC_BEGIN_IGNORE_DEPRECATIONS
> -#if GTK_CHECK_VERSION(3, 20, 0)
> - gdk_seat_ungrab(spice_display_get_default_seat(display));
> -#else
> - gdk_pointer_ungrab(GDK_CURRENT_TIME);
> -#endif
> - G_GNUC_END_IGNORE_DEPRECATIONS
> + ungrab_pointer(display);
> }
>
> if (!d->inputs)
More information about the Spice-devel
mailing list