[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