Re: [PATCH spice-gtk 3/5] widget: give more context to send_key()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



ACK.

On 08/15/2012 09:59 PM, Marc-André Lureau wrote:
- use a more explicit SendKeyType enum
- if the key is a modifier key, we don't want to delay press event
---
  gtk/spice-widget.c |   21 +++++++++++++--------
  1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index 2bb7b38..a3369d5 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -982,8 +982,12 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
  #endif

  /* ---------------------------------------------------------------- */
+typedef enum {
+    SEND_KEY_PRESS,
+    SEND_KEY_RELEASE,
+} SendKeyType;

-static void send_key(SpiceDisplay *display, int scancode, int down)
+static void send_key(SpiceDisplay *display, int scancode, SendKeyType type, gboolean press_delayed)
  {
      SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
      uint32_t i, b, m;
@@ -1022,7 +1026,7 @@ static void release_keys(SpiceDisplay *display)
              continue;
          }
          for (b = 0; b < 32; b++) {
-            send_key(display, i * 32 + b, 0);
+            send_key(display, i * 32 + b, SEND_KEY_RELEASE, FALSE);
          }
      }
  }
@@ -1065,9 +1069,10 @@ static gboolean key_event(GtkWidget *widget, GdkEventKey *key)
      SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
      int scancode;

-    SPICE_DEBUG("%s %s: keycode: %d  state: %d  group %d",
+
+    SPICE_DEBUG("%s %s: keycode: %d  state: %d  group %d modifier %d",
              __FUNCTION__, key->type == GDK_KEY_PRESS ? "press" : "release",
-            key->hardware_keycode, key->state, key->group);
+            key->hardware_keycode, key->state, key->group, key->is_modifier);

      if (check_for_grab_key(display, key->type, key->keyval)) {
          g_signal_emit(widget, signals[SPICE_DISPLAY_GRAB_KEY_PRESSED], 0);
@@ -1092,10 +1097,10 @@ static gboolean key_event(GtkWidget *widget, GdkEventKey *key)
                                              key->hardware_keycode);
      switch (key->type) {
      case GDK_KEY_PRESS:
-        send_key(display, scancode, 1);
+        send_key(display, scancode, SEND_KEY_PRESS, !key->is_modifier);
          break;
      case GDK_KEY_RELEASE:
-        send_key(display, scancode, 0);
+        send_key(display, scancode, SEND_KEY_RELEASE, !key->is_modifier);
          break;
      default:
          g_warn_if_reached();
@@ -1134,12 +1139,12 @@ void spice_display_send_keys(SpiceDisplay *display, const guint *keyvals,

      if (kind & SPICE_DISPLAY_KEY_EVENT_PRESS) {
          for (i = 0 ; i < nkeyvals ; i++)
-            send_key(display, get_scancode_from_keyval(display, keyvals[i]), 1);
+            send_key(display, get_scancode_from_keyval(display, keyvals[i]), SEND_KEY_PRESS, FALSE);
      }

      if (kind & SPICE_DISPLAY_KEY_EVENT_RELEASE) {
          for (i = (nkeyvals-1) ; i >= 0 ; i--)
-            send_key(display, get_scancode_from_keyval(display, keyvals[i]), 0);
+            send_key(display, get_scancode_from_keyval(display, keyvals[i]), SEND_KEY_RELEASE, FALSE);
      }
  }


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]