From: Alexander Larsson Date: Thu, 14 Apr 2011 19:35:48 +0000 (+0200) Subject: [broadway] Handle keyboard modifiers in state X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=887743728f435a5b4ef20deb79feb26f8e525cae;p=~andy%2Fgtk [broadway] Handle keyboard modifiers in state --- diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js index 683172ade..e8e2ea444 100644 --- a/gdk/broadway/broadway.js +++ b/gdk/broadway/broadway.js @@ -951,6 +951,14 @@ function getEffectiveEventTarget (id) { } function updateForEvent(ev) { + lastState &= ~(GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK); + if (ev.shiftKey) + lastState |= GDK_SHIFT_MASK; + if (ev.ctrlKey) + lastState |= GDK_CONTROL_MASK; + if (ev.altKey) + lastState |= GDK_MOD1_MASK; + lastTimeStamp = ev.timeStamp; if (ev.target.surface && ev.target.surface.window) { var win = ev.target.surface.window; @@ -2555,7 +2563,7 @@ function handleKeyDown(e) { // browser behaviors or it has no corresponding keyPress // event, then send it immediately if (!ignoreKeyEvent(ev)) - sendInput("k", [keysym]); + sendInput("k", [keysym, lastState]); suppress = true; } @@ -2600,7 +2608,7 @@ function handleKeyPress(e) { // Send the translated keysym if (keysym > 0) - sendInput ("k", [keysym]); + sendInput ("k", [keysym, lastState]); // Stop keypress events just in case return cancelEvent(ev); @@ -2619,7 +2627,7 @@ function handleKeyUp(e) { } if (keysym > 0) - sendInput ("K", [keysym]); + sendInput ("K", [keysym, lastState]); return cancelEvent(ev); } diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c index 75a639fc8..cdab101ab 100644 --- a/gdk/broadway/gdkdisplay-broadway.c +++ b/gdk/broadway/gdkdisplay-broadway.c @@ -263,6 +263,8 @@ parse_input_message (BroadwayInput *input, const char *message) case 'k': case 'K': msg.key.key = strtol(p, &p, 10); + p++; /* Skip , */ + msg.key.state = strtol(p, &p, 10); break; case 'g': diff --git a/gdk/broadway/gdkdisplay-broadway.h b/gdk/broadway/gdkdisplay-broadway.h index 3a414e29d..2f6003725 100644 --- a/gdk/broadway/gdkdisplay-broadway.h +++ b/gdk/broadway/gdkdisplay-broadway.h @@ -79,6 +79,7 @@ typedef struct { typedef struct { BroadwayInputBaseMsg base; + guint32 state; int key; } BroadwayInputKeyMsg; diff --git a/gdk/broadway/gdkeventsource.c b/gdk/broadway/gdkeventsource.c index e7f8574d5..18fbe645b 100644 --- a/gdk/broadway/gdkeventsource.c +++ b/gdk/broadway/gdkeventsource.c @@ -259,10 +259,13 @@ _gdk_broadway_events_got_input (GdkDisplay *display, event->key.window = g_object_ref (window); event->key.time = message->base.time; event->key.keyval = message->key.key; + event->key.state = message->key.state; event->key.hardware_keycode = message->key.key; event->key.length = 0; gdk_event_set_device (event, display->core_pointer); + display_broadway->last_state = message->key.state; + node = _gdk_event_queue_append (display, event); _gdk_windowing_got_event (display, node, event, message->base.serial); }