Blame SOURCES/0007-spice-gtk-save-mouse-button-state-on-mouse-click.patch

7b23b6
From 7e0f7bda8d5817c0cbfc56be4cf3727b98f223f4 Mon Sep 17 00:00:00 2001
7b23b6
From: Francesco Giudici <fgiudici@redhat.com>
7b23b6
Date: Mon, 20 Apr 2020 14:37:57 +0200
7b23b6
Subject: [PATCH 7/9] spice-gtk: save mouse button state on mouse click
7b23b6
7b23b6
This will be used later to couple it with relative mouse movement under
7b23b6
Wayland: we just get the mouse movement from the Wayland protocols
7b23b6
callback.
7b23b6
7b23b6
Signed-off-by: Francesco Giudici <fgiudici@redhat.com>
7b23b6
Acked-by: Frediano Ziglio <fziglio@redhat.com>
7b23b6
(cherry picked from commit 0fe70950524c28d383f34876c66107117581c72f)
7b23b6
---
7b23b6
 src/spice-widget-priv.h |  1 +
7b23b6
 src/spice-widget.c      | 22 +++++++++++++++++++++-
7b23b6
 2 files changed, 22 insertions(+), 1 deletion(-)
7b23b6
7b23b6
diff --git a/src/spice-widget-priv.h b/src/spice-widget-priv.h
7b23b6
index 436c802..0b282f5 100644
7b23b6
--- a/src/spice-widget-priv.h
7b23b6
+++ b/src/spice-widget-priv.h
7b23b6
@@ -96,6 +96,7 @@ struct _SpiceDisplayPrivate {
7b23b6
     SpiceSmartcardChannel   *smartcard;
7b23b6
 
7b23b6
     enum SpiceMouseMode     mouse_mode;
7b23b6
+    int                     mouse_button_mask;
7b23b6
     int                     mouse_grab_active;
7b23b6
     bool                    mouse_have_pointer;
7b23b6
     GdkCursor               *mouse_cursor;
7b23b6
diff --git a/src/spice-widget.c b/src/spice-widget.c
7b23b6
index 8b91f52..7700f47 100644
7b23b6
--- a/src/spice-widget.c
7b23b6
+++ b/src/spice-widget.c
7b23b6
@@ -1954,7 +1954,21 @@ static int button_gdk_to_spice(guint gdk)
7b23b6
     };
7b23b6
 
7b23b6
     if (gdk < SPICE_N_ELEMENTS(map)) {
7b23b6
-        return map [ gdk ];
7b23b6
+        return map[gdk];
7b23b6
+    }
7b23b6
+    return 0;
7b23b6
+}
7b23b6
+
7b23b6
+static int button_gdk_to_spice_mask(guint gdk)
7b23b6
+{
7b23b6
+    static const int map[] = {
7b23b6
+        [1] = SPICE_MOUSE_BUTTON_MASK_LEFT,
7b23b6
+        [2] = SPICE_MOUSE_BUTTON_MASK_MIDDLE,
7b23b6
+        [3] = SPICE_MOUSE_BUTTON_MASK_RIGHT,
7b23b6
+    };
7b23b6
+
7b23b6
+    if (gdk < SPICE_N_ELEMENTS(map)) {
7b23b6
+        return map[gdk];
7b23b6
     }
7b23b6
     return 0;
7b23b6
 }
7b23b6
@@ -2160,11 +2174,17 @@ static gboolean button_event(GtkWidget *widget, GdkEventButton *button)
7b23b6
         spice_inputs_channel_button_press(d->inputs,
7b23b6
                                           button_gdk_to_spice(button->button),
7b23b6
                                           button_mask_gdk_to_spice(button->state));
7b23b6
+        /* Save the mouse button mask to couple it with Wayland movement */
7b23b6
+        d->mouse_button_mask = button_mask_gdk_to_spice(button->state);
7b23b6
+        d->mouse_button_mask |= button_gdk_to_spice_mask(button->button);
7b23b6
         break;
7b23b6
     case GDK_BUTTON_RELEASE:
7b23b6
         spice_inputs_channel_button_release(d->inputs,
7b23b6
                                             button_gdk_to_spice(button->button),
7b23b6
                                             button_mask_gdk_to_spice(button->state));
7b23b6
+        /* Save the mouse button mask to couple it with Wayland movement */
7b23b6
+        d->mouse_button_mask = button_mask_gdk_to_spice(button->state);
7b23b6
+        d->mouse_button_mask ^= button_gdk_to_spice_mask(button->button);
7b23b6
         break;
7b23b6
     default:
7b23b6
         break;
7b23b6
-- 
7b23b6
2.26.2
7b23b6