keyboard: fixed unlimited input for mac
authorsungmin ha <sungmin82.ha@samsung.com>
Mon, 14 Sep 2015 07:38:27 +0000 (16:38 +0900)
committersungmin ha <sungmin82.ha@samsung.com>
Mon, 14 Sep 2015 07:56:13 +0000 (16:56 +0900)
fixed bug of key state (caps lock and shift)

Change-Id: I1466b24bd3fdf734d28c9be96636281fe737133a
Signed-off-by: sungmin ha <sungmin82.ha@samsung.com>
tizen/src/ui/input/keyboardhelper.cpp
tizen/src/ui/input/keyboardhelper.h

index 643a73f..3244020 100644 (file)
@@ -155,7 +155,11 @@ void KeyboardHelper::createKeyMap()
 
     /* modifiers */
     keyMap.insert(Qt::Key_Shift, 42); /* shift */
+#ifdef CONFIG_DARWIN
+    keyMap.insert(Qt::Key_Meta, 29); /* ctrl for Mac */
+#else
     keyMap.insert(Qt::Key_Control, 29); /* ctrl */
+#endif
     keyMap.insert(Qt::Key_Alt, 56); /* alt */
 
     /* numbers */
@@ -328,6 +332,18 @@ void KeyboardHelper::pressFilterMtChecking(QKeyEvent *event)
     }
 }
 
+void KeyboardHelper::changeCapsLockState(void)
+{
+    if (get_emul_caps_lock_state() != capsLockState) {
+        virtio_keyboard_event(58);
+        virtio_keyboard_event(58 | 0x80);
+        set_emul_caps_lock_state(get_emul_caps_lock_state() ^ 1);
+
+        qDebug() << "qemu CapsLock state was synchronized with host key value (" <<
+               get_emul_caps_lock_state() << ")";
+    }
+}
+
 void KeyboardHelper::keyPressed(QKeyEvent *event)
 {
     const int keyCode = event->key();
@@ -364,6 +380,9 @@ void KeyboardHelper::keyPressed(QKeyEvent *event)
         } else if (event->nativeModifiers() == 0) {
             capsLockState = OFF;
         }
+#elif CONFIG_DARWIN
+        capsLockState = ON;
+        changeCapsLockState();
 #else
         if (event->nativeModifiers() == 18) {
             capsLockState = ON;
@@ -371,7 +390,7 @@ void KeyboardHelper::keyPressed(QKeyEvent *event)
             capsLockState = OFF;
         }
 #endif
-        qDebug() << "caps_lock state : " << capsLockState << "pressed";
+        qDebug() << "caps_lock state(" << capsLockState << ") pressed";
         return;
     }
 
@@ -406,14 +425,10 @@ void KeyboardHelper::keyPressed(QKeyEvent *event)
         }
     }
 
-    if (get_emul_caps_lock_state() != capsLockState) {
-        virtio_keyboard_event(58);
-        virtio_keyboard_event(58 | 0x80);
-        set_emul_caps_lock_state(get_emul_caps_lock_state() ^ 1);
+#ifndef CONFIG_DARWIN
+    changeCapsLockState();
+#endif
 
-        qDebug() << "qemu CapsLock state was synchronized with host key value (" <<
-            get_emul_caps_lock_state() << ")";
-    }
     if (get_emul_num_lock_state() != numLockState) {
         virtio_keyboard_event(69);
         virtio_keyboard_event(69 | 0x80);
@@ -428,6 +443,11 @@ void KeyboardHelper::keyPressed(QKeyEvent *event)
         /* for auto release */
         keyCodeList.append(ret);
         do_qt_keyboard_key_event(KEY_PRESSED, ret);
+#ifdef CONFIG_DARWIN
+        if ((event->modifiers() & Qt::ControlModifier) && event->nativeModifiers()) {
+            keyReleased(event);
+        }
+#endif
     }
 }
 
@@ -492,6 +512,10 @@ void KeyboardHelper::keyReleased(QKeyEvent *event)
         qDebug() << "num_lock state : " << numLockState << "released";
         return;
     } else if (keyCode == Qt::Key_CapsLock) {
+#ifdef CONFIG_DARWIN
+        capsLockState = OFF;
+        changeCapsLockState();
+#endif
         qDebug() << "caps_lock state : " << capsLockState << "released";
         return;
     }
index cc5f8fd..0399885 100644 (file)
@@ -68,6 +68,7 @@ private:
 
     void pressFilterMtChecking(QKeyEvent *event);
     void releaseFilterMtChecking(QKeyEvent *event);
+    void changeCapsLockState(void);
 };
 
 #endif // KEYBOARDHELPER_H