[Swfdec-commits] 3 commits - swfdec-gtk/swfdec_gtk_keys.c swfdec/swfdec_keys.h swfdec/swfdec_player.c swfdec/swfdec_swf_decoder.c swfdec/swfdec_tag.c

Benjamin Otte company at kemper.freedesktop.org
Thu Sep 4 10:11:19 PDT 2008


 swfdec-gtk/swfdec_gtk_keys.c |   68 +++++++++++++++++++++++++++++++++++++++----
 swfdec/swfdec_keys.h         |    6 +++
 swfdec/swfdec_player.c       |    7 +++-
 swfdec/swfdec_swf_decoder.c  |    2 -
 swfdec/swfdec_tag.c          |    2 -
 5 files changed, 75 insertions(+), 10 deletions(-)

New commits:
commit 46faa3da43f9bcc73b618e84397d21f5fc0e9758
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Sep 4 19:09:10 2008 +0200

    add support for evdev
    
    This patch wins the "ugliest patch of 0.7" award

diff --git a/swfdec-gtk/swfdec_gtk_keys.c b/swfdec-gtk/swfdec_gtk_keys.c
index 122e8ec..90a3298 100644
--- a/swfdec-gtk/swfdec_gtk_keys.c
+++ b/swfdec-gtk/swfdec_gtk_keys.c
@@ -22,7 +22,10 @@
 #endif
 #include "swfdec_gtk_keys.h"
 
-static const guint8 flash_keycodes[] = {
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+
+static const guint8 flash_keycodes_old[] = {
   /*   0 */ 0, 0, 0, 0, 0, 
   /*   5 */ 0, 0, 0, 0, SWFDEC_KEY_ESCAPE,
   /*  10 */ SWFDEC_KEY_1, SWFDEC_KEY_2, SWFDEC_KEY_3, SWFDEC_KEY_4, SWFDEC_KEY_5, 
@@ -36,9 +39,9 @@ static const guint8 flash_keycodes[] = {
   /*  50 */ SWFDEC_KEY_SHIFT, SWFDEC_KEY_BACKSLASH, SWFDEC_KEY_Z, SWFDEC_KEY_X, SWFDEC_KEY_C, 
   /*  55 */ SWFDEC_KEY_V, SWFDEC_KEY_B, SWFDEC_KEY_N, SWFDEC_KEY_M, SWFDEC_KEY_COMMA, 
   /*  60 */ SWFDEC_KEY_DOT, SWFDEC_KEY_SLASH, SWFDEC_KEY_SHIFT, SWFDEC_KEY_NUMPAD_MULTIPLY, SWFDEC_KEY_ALT,
-  /*  65 */ SWFDEC_KEY_SPACE, 0, SWFDEC_KEY_F1, SWFDEC_KEY_F2, SWFDEC_KEY_F3, 
+  /*  65 */ SWFDEC_KEY_SPACE, SWFDEC_KEY_CAPS_LOCK, SWFDEC_KEY_F1, SWFDEC_KEY_F2, SWFDEC_KEY_F3, 
   /*  70 */ SWFDEC_KEY_F4, SWFDEC_KEY_F5, SWFDEC_KEY_F6, SWFDEC_KEY_F7, SWFDEC_KEY_F8,
-  /*  75 */ SWFDEC_KEY_F9, SWFDEC_KEY_F10, SWFDEC_KEY_NUM_LOCK, 0, SWFDEC_KEY_NUMPAD_7,
+  /*  75 */ SWFDEC_KEY_F9, SWFDEC_KEY_F10, SWFDEC_KEY_NUM_LOCK, SWFDEC_KEY_SCROLL_LOCK, SWFDEC_KEY_NUMPAD_7,
   /*  80 */ SWFDEC_KEY_NUMPAD_8, SWFDEC_KEY_NUMPAD_9, SWFDEC_KEY_NUMPAD_SUBTRACT, SWFDEC_KEY_NUMPAD_4, SWFDEC_KEY_NUMPAD_5,
   /*  85 */ SWFDEC_KEY_NUMPAD_6, SWFDEC_KEY_NUMPAD_ADD, SWFDEC_KEY_NUMPAD_1, SWFDEC_KEY_NUMPAD_2, SWFDEC_KEY_NUMPAD_3,
   /*  90 */ SWFDEC_KEY_NUMPAD_0, SWFDEC_KEY_NUMPAD_DECIMAL, 0, 0, 0,
@@ -49,12 +52,60 @@ static const guint8 flash_keycodes[] = {
   /* 115 */ 0, 0, 0, 0, 0
 };
 /*
-SWFDEC_KEY_SCROLL_LOCK 78
 SWFDEC_KEY_BREAK 110
 SWFDEC_KEY_META 115
 SWFDEC_KEY_META_R 116
 SWFDEC_KEY_MENU 117
 */
+static const guint8 flash_keycodes_evdev[] = {
+  /*   0 */ 0, SWFDEC_KEY_ESCAPE, SWFDEC_KEY_1, SWFDEC_KEY_2, SWFDEC_KEY_3, 
+  /*   5 */ SWFDEC_KEY_4, SWFDEC_KEY_5, SWFDEC_KEY_6, SWFDEC_KEY_7, SWFDEC_KEY_8, 
+  /*  10 */ SWFDEC_KEY_9, SWFDEC_KEY_0, SWFDEC_KEY_MINUS, SWFDEC_KEY_EQUAL, SWFDEC_KEY_BACKSPACE, 
+  /*  15 */ SWFDEC_KEY_TAB, SWFDEC_KEY_Q, SWFDEC_KEY_W, SWFDEC_KEY_E, SWFDEC_KEY_R, 
+  /*  20 */ SWFDEC_KEY_T, SWFDEC_KEY_Y, SWFDEC_KEY_U, SWFDEC_KEY_I, SWFDEC_KEY_O, 
+  /*  25 */ SWFDEC_KEY_P, SWFDEC_KEY_LEFT_BRACKET, SWFDEC_KEY_RIGHT_BRACKET, SWFDEC_KEY_ENTER, SWFDEC_KEY_CONTROL, 
+  /*  30 */ SWFDEC_KEY_A, SWFDEC_KEY_S, SWFDEC_KEY_D, SWFDEC_KEY_F, SWFDEC_KEY_G, 
+  /*  35 */ SWFDEC_KEY_H, SWFDEC_KEY_J, SWFDEC_KEY_K, SWFDEC_KEY_L, SWFDEC_KEY_SEMICOLON, 
+  /*  40 */ SWFDEC_KEY_APOSTROPHE, SWFDEC_KEY_GRAVE, SWFDEC_KEY_SHIFT, SWFDEC_KEY_BACKSLASH, SWFDEC_KEY_Z, 
+  /*  45 */ SWFDEC_KEY_X, SWFDEC_KEY_C, SWFDEC_KEY_V, SWFDEC_KEY_B, SWFDEC_KEY_N, 
+  /*  50 */ SWFDEC_KEY_M, SWFDEC_KEY_COMMA, SWFDEC_KEY_DOT, SWFDEC_KEY_SLASH, SWFDEC_KEY_SHIFT, 
+  /*  55 */ SWFDEC_KEY_NUMPAD_MULTIPLY, SWFDEC_KEY_ALT, SWFDEC_KEY_SPACE, SWFDEC_KEY_CAPS_LOCK, SWFDEC_KEY_F1, 
+  /*  60 */ SWFDEC_KEY_F2, SWFDEC_KEY_F3, SWFDEC_KEY_F4, SWFDEC_KEY_F5, SWFDEC_KEY_F6, 
+  /*  65 */ SWFDEC_KEY_F7, SWFDEC_KEY_F8, SWFDEC_KEY_F9, SWFDEC_KEY_F10, SWFDEC_KEY_NUM_LOCK, 
+  /*  70 */ SWFDEC_KEY_SCROLL_LOCK, SWFDEC_KEY_NUMPAD_7, SWFDEC_KEY_NUMPAD_8, SWFDEC_KEY_NUMPAD_9, SWFDEC_KEY_NUMPAD_SUBTRACT, 
+  /*  75 */ SWFDEC_KEY_NUMPAD_4, SWFDEC_KEY_NUMPAD_5, SWFDEC_KEY_NUMPAD_6, SWFDEC_KEY_NUMPAD_ADD, SWFDEC_KEY_NUMPAD_1, 
+  /*  80 */ SWFDEC_KEY_NUMPAD_2, SWFDEC_KEY_NUMPAD_3, SWFDEC_KEY_NUMPAD_0, SWFDEC_KEY_NUMPAD_DECIMAL, 0,
+  /*  85 */ 0, 0, SWFDEC_KEY_F11, SWFDEC_KEY_F12, 0,
+  /*  90 */ 0, 0, 0, 0, 0,
+  /*  95 */ 0, SWFDEC_KEY_ENTER, SWFDEC_KEY_CONTROL, SWFDEC_KEY_NUMPAD_DIVIDE, 0,
+  /* 100 */ SWFDEC_KEY_ALT, 0, SWFDEC_KEY_HOME, SWFDEC_KEY_UP,  SWFDEC_KEY_PAGE_UP,
+  /* 105 */ SWFDEC_KEY_LEFT, SWFDEC_KEY_RIGHT, SWFDEC_KEY_END, SWFDEC_KEY_DOWN, SWFDEC_KEY_PAGE_DOWN,
+  /* 110 */ SWFDEC_KEY_INSERT, SWFDEC_KEY_DELETE, 0, 0, 0,
+  /* 115 */ 0, 0, 0, 0, 0
+};
+
+static const guint8 *
+compute_keycodes (void)
+{
+  /* This is a huge hack, but a proper solution is probably very complicated
+   * and I'm lazy:
+   * We need a proper way to convert X keycodes to Windows virtual keycodes
+   * and according to the people in #xorg-devel noone else has succeeded there
+   * so far. */
+  static const GdkKeymapKey ten = { 10, 0, 0 };
+  guint keyval = gdk_keymap_lookup_key (gdk_keymap_get_default (), &ten);
+  
+  /* sanity check */
+  g_assert (G_N_ELEMENTS (flash_keycodes_old) == G_N_ELEMENTS (flash_keycodes_evdev));
+
+  if (keyval == GDK_1) {
+    return flash_keycodes_old;
+  } else if (keyval != GDK_9) {
+    g_printerr ("FIXME: Failed to detect proper keyboard layout, assuming evdev.\n");
+  }
+
+  return flash_keycodes_evdev;
+}
 
 /**
  * swfdec_gtk_keycode_from_hardware_keycode:
@@ -69,7 +120,12 @@ SWFDEC_KEY_MENU 117
 guint
 swfdec_gtk_keycode_from_hardware_keycode (guint hardware_keycode)
 {
-  if (hardware_keycode >= G_N_ELEMENTS (flash_keycodes))
+  static const guint8 *keycodes = NULL;
+
+  if (G_UNLIKELY (keycodes == NULL))
+    keycodes = compute_keycodes ();
+
+  if (hardware_keycode >= G_N_ELEMENTS (flash_keycodes_evdev))
     return 0;
-  return flash_keycodes[hardware_keycode];
+  return keycodes[hardware_keycode];
 }
commit 7b738ca6f5a896a5cdea7d4170540cd7858d51f3
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Sep 4 19:08:07 2008 +0200

    add some more keys to our enum
    
    and update the docs about it.

diff --git a/swfdec/swfdec_keys.h b/swfdec/swfdec_keys.h
index 277508b..547af02 100644
--- a/swfdec/swfdec_keys.h
+++ b/swfdec/swfdec_keys.h
@@ -1,5 +1,5 @@
 /* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -23,6 +23,9 @@
 G_BEGIN_DECLS
 
 typedef enum {
+  SWFDEC_KEY_LEFT_MOUSE = 1,
+  SWFDEC_KEY_RIGHT_MOUSE = 2,
+  SWFDEC_KEY_MIDDLE_MOUSE = 4,
   SWFDEC_KEY_BACKSPACE = 8,
   SWFDEC_KEY_TAB = 9,
   SWFDEC_KEY_CLEAR = 12,
@@ -111,6 +114,7 @@ typedef enum {
   SWFDEC_KEY_F14 = 125,
   SWFDEC_KEY_F15 = 126,
   SWFDEC_KEY_NUM_LOCK = 144,
+  SWFDEC_KEY_SCROLL_LOCK = 145,
   SWFDEC_KEY_SEMICOLON = 186,
   SWFDEC_KEY_EQUAL = 187,
   SWFDEC_KEY_COMMA = 188,
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index de94f60..f86103c 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -132,6 +132,9 @@
 
 /**
  * SwfdecKey:
+ * @SWFDEC_KEY_LEFT_MOUSE: the left mouse button
+ * @SWFDEC_KEY_RIGHT_MOUSE: the left mouse button
+ * @SWFDEC_KEY_MIDDLE_MOUSE: the middle mouse button
  * @SWFDEC_KEY_BACKSPACE: the backspace key
  * @SWFDEC_KEY_TAB: the tab key
  * @SWFDEC_KEY_CLEAR: the clear key
@@ -220,6 +223,7 @@
  * @SWFDEC_KEY_F14: the F14 key
  * @SWFDEC_KEY_F15: the F15 key
  * @SWFDEC_KEY_NUM_LOCK: the num lock key
+ * @SWFDEC_KEY_SCROLL_LOCK: the scroll lock key
  * @SWFDEC_KEY_SEMICOLON: the semicolon key (on English keyboards)
  * @SWFDEC_KEY_EQUAL: the equal key (on English keyboards)
  * @SWFDEC_KEY_COMMA: the comma key (on English keyboards)
@@ -233,7 +237,8 @@
  * @SWFDEC_KEY_APOSTROPHE: the apostrophe key (on English keyboards)
  *
  * Lists all known key codes in Swfdec and their meanings on an English 
- * keyboard.
+ * keyboard. Note that key codes in Flash represent virtual key codes as used
+ * in Microsoft Windows.
  */
 
 /*** timeval type mapping ***/
commit b1cd2e1a035ef84b05391c1221c4f08156b1773a
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Sep 4 12:24:21 2008 +0200

    missing tag functions are FIXME's

diff --git a/swfdec/swfdec_swf_decoder.c b/swfdec/swfdec_swf_decoder.c
index 318af69..46e9960 100644
--- a/swfdec/swfdec_swf_decoder.c
+++ b/swfdec/swfdec_swf_decoder.c
@@ -342,7 +342,7 @@ swfdec_swf_decoder_parse_one (SwfdecSwfDecoder *s)
 	SWFDEC_WARNING ("tag %d %s must be first tag in file, ignoring",
 	    tag, swfdec_swf_decoder_get_tag_name (tag));
       } else if (func == NULL) {
-	SWFDEC_WARNING ("tag function not implemented for %d %s",
+	SWFDEC_FIXME ("tag function not implemented for %d %s",
 	    tag, swfdec_swf_decoder_get_tag_name (tag));
       } else if (s->main_sprite->parse_frame < s->main_sprite->n_frames) {
 	s->parse_sprite = s->main_sprite;
diff --git a/swfdec/swfdec_tag.c b/swfdec/swfdec_tag.c
index 240da9f..3cad0a0 100644
--- a/swfdec/swfdec_tag.c
+++ b/swfdec/swfdec_tag.c
@@ -222,7 +222,7 @@ tag_func_define_sprite (SwfdecSwfDecoder * s, guint define_sprite_tag)
     if (tag == 0) {
       break;
     } else if (func == NULL) {
-      SWFDEC_WARNING ("tag function not implemented for %d %s",
+      SWFDEC_FIXME ("tag function not implemented for %d %s",
           tag, swfdec_swf_decoder_get_tag_name (tag));
     } else if ((swfdec_swf_decoder_get_tag_flag (tag) & 1) == 0) {
       SWFDEC_ERROR ("invalid tag %d %s during DefineSprite",


More information about the Swfdec-commits mailing list