[gtk+/broadway: 71/71] [broadway] Add initial keyboard event support
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/broadway: 71/71] [broadway] Add initial keyboard event support
- Date: Thu, 25 Nov 2010 21:21:14 +0000 (UTC)
commit 80f332308f584311998ee24f18389e204170b7c1
Author: Alexander Larsson <alexl redhat com>
Date: Thu Nov 25 21:57:31 2010 +0100
[broadway] Add initial keyboard event support
gdk/broadway/broadway.js | 17 ++++++++++++
gdk/broadway/gdkeventsource.c | 56 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 72 insertions(+), 1 deletions(-)
---
diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js
index fb20a98..85f5448 100644
--- a/gdk/broadway/broadway.js
+++ b/gdk/broadway/broadway.js
@@ -293,6 +293,21 @@ function on_mouse_up (ev) {
send_input ("B", [get_surface_id(ev), ev.pageX, ev.pageY, ev.button, ev.timeStamp])
}
+var last_key_down = 0;
+function on_key_down (ev) {
+ var key_code = ev.keyCode;
+ if (key_code != last_key_down) {
+ send_input ("k", [key_code, ev.timeStamp]);
+ last_key_down = key_code;
+ }
+}
+
+function on_key_up (ev) {
+ var key_code = ev.keyCode;
+ send_input ("K", [key_code, ev.timeStamp]);
+ last_key_down = 0;
+}
+
function cancel_event(ev)
{
ev = ev ? ev : window.event;
@@ -350,6 +365,8 @@ function connect()
document.onmousemove = on_mouse_move;
document.onmousedown = on_mouse_down;
document.onmouseup = on_mouse_up;
+ document.onkeydown = on_key_down;
+ document.onkeyup = on_key_up;
if (document.addEventListener) {
document.addEventListener('DOMMouseScroll', on_mouse_wheel, false);
diff --git a/gdk/broadway/gdkeventsource.c b/gdk/broadway/gdkeventsource.c
index fb9b14d..548f58b 100644
--- a/gdk/broadway/gdkeventsource.c
+++ b/gdk/broadway/gdkeventsource.c
@@ -96,7 +96,7 @@ _gdk_events_got_input (GdkDisplay *display,
GdkScreen *screen;
GdkWindow *root, *window;
char *p;
- int x, y, button, id;
+ int x, y, button, id, dir,key;
guint64 time;
GdkEvent *event = NULL;
char cmd;
@@ -227,6 +227,60 @@ _gdk_events_got_input (GdkDisplay *display,
}
break;
+ case 's':
+ id = strtol(p, &p, 10);
+ p++; /* Skip , */
+ x = strtol(p, &p, 10);
+ p++; /* Skip , */
+ y = strtol(p, &p, 10);
+ p++; /* Skip , */
+ dir = strtol(p, &p, 10);
+ p++; /* Skip , */
+ time = strtol(p, &p, 10);
+ display_broadway->last_x = x;
+ display_broadway->last_y = y;
+
+ window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (id));
+
+ if (window)
+ {
+ event = gdk_event_new (GDK_SCROLL);
+ event->scroll.window = g_object_ref (window);
+ event->scroll.time = time;
+ event->scroll.x = x - GDK_WINDOW_OBJECT (window)->x;
+ event->scroll.y = y - GDK_WINDOW_OBJECT (window)->y;
+ event->scroll.x_root = x;
+ event->scroll.y_root = y;
+ event->scroll.direction = dir == 0 ? GDK_SCROLL_UP : GDK_SCROLL_DOWN;
+ gdk_event_set_device (event, display->core_pointer);
+
+ node = _gdk_event_queue_append (display, event);
+ _gdk_windowing_got_event (display, node, event, 0);
+ }
+
+ break;
+ case 'k':
+ case 'K':
+ key = strtol(p, &p, 10);
+ p++; /* Skip , */
+ time = strtol(p, &p, 10);
+
+ window = display_broadway->mouse_in_toplevel;
+
+ if (window)
+ {
+ event = gdk_event_new (cmd == 'k' ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
+ event->key.window = g_object_ref (window);
+ event->key.time = time;
+ event->key.keyval = key;
+ event->key.length = 0;
+ gdk_event_set_device (event, display->core_pointer);
+
+ node = _gdk_event_queue_append (display, event);
+ _gdk_windowing_got_event (display, node, event, 0);
+ }
+
+ break;
default:
g_print ("Unknown input command %s\n", message);
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]