modified process of using virtio keyboard queue and added key release event when context menu is activated
Signed-off-by: Sungmin Ha <sungmin82.ha@samsung.com>
+* 1.5.38
+- modified process of using virtio keyboard queue and added key release event when context menu is activated
+== Sungmin Ha <sungmin82.ha@samsung.com> 2013-05-14
* 1.5.37
- call setBounds of display in arrangeSkin on only mac
== GiWoong Kim <giwoong.kim@samsung.com> 2013-05-06
-Version: 1.5.37
+Version: 1.5.38
Maintainer: Yeong-Kyoon Lee<yeongkyoon.lee@samsung.com>
Source: emulator
VirtIOKeyboard *vkbd = (VirtIOKeyboard *)vdev;
int index = 0;
- TRACE("virtqueue handler.\n");
if (virtio_queue_empty(vkbd->vq)) {
INFO("virtqueue is empty.\n");
return;
/* 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);
}
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");
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) {
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);
@Override
public void menuDetected(MenuDetectEvent e) {
Menu menu = EmulatorSkin.this.contextMenu;
+ keyReleaseEvent();
if (menu != null && EmulatorSkin.this.isDragStartedInLCD == false) {
lcdCanvas.setMenu(menu);
@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();
}
};
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();
+ }
}