hwkey: add double keycode type handling
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 9 Dec 2015 05:32:55 +0000 (14:32 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Thu, 10 Dec 2015 02:13:43 +0000 (11:13 +0900)
According to real target behavior, some HW key buttons must
send a press event one more while long pressing. I named this
type of key called "double keycode key". The double keycode
key has same value for long-press and short-press keycode.

Change-Id: Ie7f227bd0836727b9b6683473dd37308a8309b3d
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
(cherry picked from commit 09ff007b6842731e2b86ba89e2d41faf31406cc6)

tizen/src/ui/skinkeyitem.cpp

index 6ed7a97ede890e580e9f8aa08e70b0498cca3ba2..8710e6849cef775e37408b82d4c8b79eb8aaab3f 100644 (file)
@@ -37,6 +37,8 @@ extern "C" {
 #include "util/ui_operations.h"
 }
 
+#define LONG_PRESS_TIME (1800)
+
 SkinKeyItem::SkinKeyItem(QGraphicsItem *parent, HardwareKey *hwKey,
     QImage *pressedImg, bool reMasking, HoverType &hover) :
     QGraphicsRectItem(hwKey->getRect(), parent)
@@ -56,7 +58,7 @@ SkinKeyItem::SkinKeyItem(QGraphicsItem *parent, HardwareKey *hwKey,
     hoverPen.setColor(Qt::transparent);
 
     longPressTimer = new QTimer();
-    longPressTimer->setInterval(2 * 1000);
+    longPressTimer->setInterval(LONG_PRESS_TIME);
     longPressTimer->setSingleShot(true);
     connect(longPressTimer, SIGNAL(timeout()), this, SLOT(longPressHook()));
 
@@ -82,12 +84,19 @@ void SkinKeyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
             target, hwKey->getRect(), LayoutForm::pressed));
     }
 
+    /* HW key event */
     if (hwKey->hasLongPressKeycode() == true) {
-        qDebug() << "dual key pressed";
-
-        /* long press checking first */
         longPressTimer->start();
-        return;
+
+        if (hwKey->getKeycodeType().getLongPressKeycode() ==
+            hwKey->getKeycodeType().getShortPressKeycode()) { /* double keycode key */
+            qDebug() << "double key pressed";
+        } else { /* dual keycode key */
+            qDebug() << "dual key pressed";
+
+            /* do nothig */
+            return;
+        }
     }
 
     const int keycode = hwKey->getKeycode();
@@ -112,16 +121,27 @@ void SkinKeyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
     const int keycode = hwKey->getKeycode();
 
     if (hwKey->hasLongPressKeycode() == true) {
-        if (longPressTimer->remainingTime() <= 0) {
-            /* long press */
-            qDebug() << "dual key released";
-            return;
-        } else {
-            /* short press */
-            longPressTimer->stop();
-
-            qDebug() << hwKey->getName() << "key short pressed:" << keycode;
-            do_hw_key_event(KEY_PRESSED, keycode);
+        if (hwKey->getKeycodeType().getLongPressKeycode() ==
+            hwKey->getKeycodeType().getShortPressKeycode()) { /* double keycode key */
+            if (longPressTimer->remainingTime() <= 0) {
+                // long press
+                qDebug() << "double key released";
+            } else {
+                // short press
+                longPressTimer->stop();
+            }
+        } else { /* dual keycode key */
+            if (longPressTimer->remainingTime() <= 0) {
+                // long press
+                qDebug() << "dual key released";
+                return;
+            } else {
+                // short press
+                longPressTimer->stop();
+
+                qDebug() << hwKey->getName() << "key short pressed:" << keycode;
+                do_hw_key_event(KEY_PRESSED, keycode);
+            }
         }
     }
 
@@ -137,8 +157,12 @@ void SkinKeyItem::longPressHook()
         const int keycode = hwKey->getKeycodeType().getLongPressKeycode();
         qDebug() << hwKey->getName() << "key long pressed:" << keycode;
         do_hw_key_event(KEY_PRESSED, keycode);
-        qDebug() << hwKey->getName() << "key released:" << keycode;
-        do_hw_key_event(KEY_RELEASED, keycode);
+
+        if (hwKey->getKeycodeType().getLongPressKeycode() !=
+            hwKey->getKeycodeType().getShortPressKeycode()) {
+            qDebug() << hwKey->getName() << "key released:" << keycode;
+            do_hw_key_event(KEY_RELEASED, keycode);
+        }
     }
 }