From 92a07a2d92dcc56b1bf910644610f54a7446e466 Mon Sep 17 00:00:00 2001 From: sungmin ha Date: Tue, 14 May 2013 16:34:42 +0900 Subject: [PATCH] virtio-keyboard: problems related key release event modified process of using virtio keyboard queue and added key release event when context menu is activated Signed-off-by: Sungmin Ha --- package/changelog | 3 ++ package/pkginfo.manifest | 2 +- tizen/src/hw/maru_virtio_keyboard.c | 21 ++++------- .../org/tizen/emulator/skin/EmulatorSkin.java | 37 ++++++++++--------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/package/changelog b/package/changelog index 15fd1c419f..fa9bcfd4a6 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 1.5.38 +- modified process of using virtio keyboard queue and added key release event when context menu is activated +== Sungmin Ha 2013-05-14 * 1.5.37 - call setBounds of display in arrangeSkin on only mac == GiWoong Kim 2013-05-06 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index cca35913ea..61751c79fe 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,4 +1,4 @@ -Version: 1.5.37 +Version: 1.5.38 Maintainer: Yeong-Kyoon Lee Source: emulator diff --git a/tizen/src/hw/maru_virtio_keyboard.c b/tizen/src/hw/maru_virtio_keyboard.c index 6cae72f2e7..9c36770935 100644 --- a/tizen/src/hw/maru_virtio_keyboard.c +++ b/tizen/src/hw/maru_virtio_keyboard.c @@ -42,7 +42,6 @@ static void virtio_keyboard_handle(VirtIODevice *vdev, VirtQueue *vq) VirtIOKeyboard *vkbd = (VirtIOKeyboard *)vdev; int index = 0; - TRACE("virtqueue handler.\n"); if (virtio_queue_empty(vkbd->vq)) { INFO("virtqueue is empty.\n"); return; @@ -51,7 +50,7 @@ static void virtio_keyboard_handle(VirtIODevice *vdev, VirtQueue *vq) /* Get a queue buffer which is written by guest side. */ do { index = virtqueue_pop(vq, &elem); - TRACE("virtqueue pop. index: %d\n", index); + TRACE("virtqueue pop.\n"); } while (index < VIRTIO_KBD_QUEUE_SIZE); } @@ -67,7 +66,7 @@ void virtio_keyboard_notify(void *opaque) return; } - TRACE("[Enter] virtqueue notifier. %d\n", written_cnt); + TRACE("[Enter] virtqueue notifier.\n"); if (!virtio_queue_ready(vkbd->vq)) { INFO("virtqueue is not ready.\n"); @@ -83,19 +82,14 @@ void virtio_keyboard_notify(void *opaque) while ((written_cnt--)) { kbdevt = &vkbd->kbdqueue.kbdevent[vkbd->kbdqueue.rptr]; - - while (((EmulKbdEvent*)(elem.in_sg[index].iov_base))->code != 0) { - if (++index == VIRTIO_KBD_QUEUE_SIZE) { - index--; - TRACE("virtio queue is full.\n"); - break; - } - } + if (((EmulKbdEvent*)(elem.in_sg[vkbd->kbdqueue.rptr].iov_base))->code != 0) { + TRACE("FIXME: virtio queue is full.\n"); + } /* Copy keyboard data into guest side. */ TRACE("copy: keycode %d, type %d, elem_index %d\n", - kbdevt->code, kbdevt->type, index); - memcpy(elem.in_sg[index++].iov_base, kbdevt, sizeof(EmulKbdEvent)); + kbdevt->code, kbdevt->type, vkbd->kbdqueue.rptr); + memcpy(elem.in_sg[vkbd->kbdqueue.rptr].iov_base, kbdevt, sizeof(EmulKbdEvent)); memset(kbdevt, 0x00, sizeof(EmulKbdEvent)); if (vkbd->kbdqueue.wptr > 0) { @@ -106,7 +100,6 @@ void virtio_keyboard_notify(void *opaque) vkbd->kbdqueue.rptr++; if (vkbd->kbdqueue.rptr == VIRTIO_KBD_QUEUE_SIZE) { vkbd->kbdqueue.rptr = 0; - TRACE("kbdqueue is full.\n"); } } qemu_mutex_unlock(&vkbd->event_mutex); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index fe93359c37..b683eb44b5 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -569,6 +569,7 @@ public class EmulatorSkin { @Override public void menuDetected(MenuDetectEvent e) { Menu menu = EmulatorSkin.this.contextMenu; + keyReleaseEvent(); if (menu != null && EmulatorSkin.this.isDragStartedInLCD == false) { lcdCanvas.setMenu(menu); @@ -595,23 +596,7 @@ public class EmulatorSkin { @Override public void focusLost(FocusEvent event) { logger.info("lost focus"); - - /* key event compensation */ - if (pressedKeyEventList.isEmpty() == false) { - for (KeyEventData data : pressedKeyEventList) { - KeyEventData keyEventData = new KeyEventData( - KeyEventType.RELEASED.value(), data.keycode, - data.stateMask, data.keyLocation); - communicator.sendToQEMU( - SendCommand.SEND_KEY_EVENT, keyEventData, false); - - logger.info("auto release : keycode=" + keyEventData.keycode + - ", stateMask=" + keyEventData.stateMask + - ", keyLocation=" + keyEventData.keyLocation); - } - } - - pressedKeyEventList.clear(); + keyReleaseEvent(); } }; @@ -1743,4 +1728,22 @@ public class EmulatorSkin { return currentState.getCurrentRotationId(); } + public void keyReleaseEvent() { + /* key event compensation */ + if (pressedKeyEventList.isEmpty() == false) { + for (KeyEventData data : pressedKeyEventList) { + KeyEventData keyEventData = new KeyEventData( + KeyEventType.RELEASED.value(), data.keycode, + data.stateMask, data.keyLocation); + communicator.sendToQEMU( + SendCommand.SEND_KEY_EVENT, keyEventData, false); + + logger.info("auto release : keycode=" + keyEventData.keycode + + ", stateMask=" + keyEventData.stateMask + + ", keyLocation=" + keyEventData.keyLocation); + } + } + + pressedKeyEventList.clear(); + } } -- 2.34.1