Merge "bug fix: TC-115 (same cause TC-89)" into tizen accepted/tizen_3.0.m14.3_ivi tizen_3.0.m14.3_ivi accepted/tizen/ivi/20141010.215341 submit/tizen_ivi/20141010.150151 submit/tizen_ivi/20141010.175342 tizen_3.0.m14.3_ivi_release
authorJanos Kovacs <jankovac503@gmail.com>
Wed, 8 Oct 2014 11:33:19 +0000 (04:33 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Wed, 8 Oct 2014 11:33:19 +0000 (04:33 -0700)
src/homescreen/CicoHSControlBarTouch.cpp
src/homescreen/CicoHSMenuTouch.cpp
src/homescreen/CicoHSMenuTouch.h
src/homescreen/CicoHSMenuWindow.cpp
src/homescreen/CicoHSSwipeTouch.cpp
src/homescreen/CicoHSSwipeTouch.h
src/homescreen/CicoHomeScreen.cpp
src/homescreen/CicoHomeScreen.h
src/onscreen/CicoOSPopWindow.cpp
src/statusbar/CicoStatusBar.cpp

index 048f710..ea3d1ac 100644 (file)
@@ -88,21 +88,25 @@ void
 CicoHSControlBarTouch::TouchUpControlBar(void *data, Evas *evas,
                                          Evas_Object *obj, void *event_info)
 {
+    Evas_Event_Mouse_Down *info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
+
     ICO_DBG("CicoHSControlBarTouch::TouchUpControlBar Enter(down=%d)",
             (int)touch_down);
 
     if (touch_down == false)    {
-        // multi touch up, skiep
-        ICO_DBG("CicoHSControlBarTouch::TouchUpControlBar not down, Skip");
+        ICO_DBG("CicoHSControlBarTouch::TouchUpControlBar No Down");
+        // Menu manipulation is normally processed, even if there is no touchdown.
     }
     touch_down = false;
 
     if (data == NULL) {
-        ICO_PRF("TOUCH_EVENT Ctrl-Bar Down->Up app=(NIL)");
+        ICO_PRF("TOUCH_EVENT Ctrl-Bar Down->Up (%d,%d) app=(NIL)",
+                info->output.x, info->output.y);
         ctl_bar_window->TouchHome();
     }
     else {
-        ICO_PRF("TOUCH_EVENT Ctrl-Bar Down->Up app=%s", (const char *)data);
+        ICO_PRF("TOUCH_EVENT Ctrl-Bar Down->Up (%d,%d) app=%s",
+                info->output.x, info->output.y, (const char *)data);
         ctl_bar_window->TouchShortcut((const char *)data);
     }
     ICO_DBG("CicoHSControlBarTouch::TouchUpControlBar Leave");
index 92e5cd4..dd9461e 100644 (file)
@@ -11,6 +11,7 @@
  *
  * @date    Aug-08-2013
  */
+#include "CicoHomeScreen.h"
 #include "CicoHSMenuTouch.h"
 #include "CicoSound.h"
 
@@ -27,6 +28,8 @@ Ecore_Timer *CicoHSMenuTouch::timer;
 bool CicoHSMenuTouch::long_act;
 bool CicoHSMenuTouch::touch_down;
 
+Evas_Object *CicoHSMenuTouch::grabbed_object;
+
 CicoHSMenuWindow* CicoHSMenuTouch::menu_window;
 
 /*============================================================================*/
@@ -47,6 +50,7 @@ CicoHSMenuTouch::Initialize(CicoHSMenuWindow* menu_window)
     timer = NULL;
     long_act = false;
     touch_down = false;
+    grabbed_object = NULL;
 
     CicoHSMenuTouch::menu_window = menu_window;
 }
@@ -131,13 +135,20 @@ Eina_Bool
 CicoHSMenuTouch::LongPushed(void *data)
 {
     ICO_TRA("CicoHSMenuTouch::LongPushed Enter");
-    long_act = true;
     timer = NULL;
 
-    /*stop select*/
-    menu_window->ChangeTerminateMode();
+    if (CicoHomeScreen::getInstance()->GetMode() == ICO_HS_MODE_MENU)   {
+        long_act = true;
+
+        /*stop select*/
+        menu_window->ChangeTerminateMode();
 
-    ICO_TRA("CicoHSMenuTouch::LongPushed Leave");
+        ICO_TRA("CicoHSMenuTouch::LongPushed Leave");
+    }
+    else    {
+        long_act = false;
+        ICO_TRA("CicoHSMenuTouch::LongPushed Leave(Not in Menu)");
+    }
     return ECORE_CALLBACK_CANCEL;
 }
 
@@ -171,8 +182,10 @@ CicoHSMenuTouch::TouchUpMenu(void *data, Evas *evas, Evas_Object *obj, void *eve
         timer = NULL;
     }
     else if (touch_down == false)   {
-        ICO_DBG("CicoHSMenuTouch::TouchUpMenu: (%d,%d) No Down, Skip", x, y);
-        return;
+        ICO_DBG("CicoHSMenuTouch::TouchUpMenu: (%d,%d) No Down", x, y);
+        // Menu manipulation is normally processed, even if there is no touchdown.
+        touch_state_b_x = x;
+        touch_state_b_y = y;
     }
     touch_down = false;
 
@@ -194,7 +207,6 @@ CicoHSMenuTouch::TouchUpMenu(void *data, Evas *evas, Evas_Object *obj, void *eve
             touch_state_a_x, touch_state_a_y, appid ? appid: "(NULL)");
 
     if (abs(sub_x) > abs(sub_y)) {
-
         /* menu slide*/
         if (sub_x > ICO_HS_MENU_TOUCH_FLICK_THREASHOLD_DISTANCE) {
             menu_window->GoBackMenu();
@@ -235,6 +247,63 @@ CicoHSMenuTouch::TouchUpMenu(void *data, Evas *evas, Evas_Object *obj, void *eve
 
 /*--------------------------------------------------------------------------*/
 /**
+ * @brief   CicoHSMenuTouch::FocusOutEvas
+ *          focus out at menu evas
+ *
+ * @param[in]   data        data(canvas object, unused)
+ * @param[in]   evas        evas(unused)
+ * @param[in]   event_info  event information(unused)
+ * @return      none
+ */
+/*--------------------------------------------------------------------------*/
+void
+CicoHSMenuTouch::FocusOutEvas(void *data, Evas *evas, void *event_info)
+{
+    // Ungrab focus
+    if (grabbed_object) {
+        evas_object_focus_set(grabbed_object, EINA_FALSE);
+        grabbed_object = NULL;
+    }
+
+    // Focus Out, Cancel menu touch
+    if (timer != NULL) {
+        // delete timer
+        ecore_timer_del(timer);
+        timer = NULL;
+    }
+    else if (touch_down == false)   {
+        ICO_DBG("CicoHSMenuTouch::FocusOutEvas: No Down, Skip");
+        return;
+    }
+    touch_down = false;
+
+    if (long_act)   {
+        // Stop Terminate Mode
+        long_act = false;
+        menu_window->ChangeNormalMode();
+    }
+
+    ICO_PRF("TOUCH_EVENT Menu FocusOut(Evas)");
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * @brief   CicoHSMenuTouch::SetGrabbedObject
+ *          set/reset grabbed Evas Object
+ *
+ * @param[in]   object      grabbed Evas object or NULL
+ * @return      none
+ */
+/*--------------------------------------------------------------------------*/
+void
+CicoHSMenuTouch::SetGrabbedObject(Evas_Object *object)
+{
+    ICO_DBG("CicoHSMenuTouch::SetGrabbedObject %p", object);
+    grabbed_object = object;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
  * @brief   CicoHSMenuTouch::TouchDownTerm
  *          touch down action at terminate icon
  *
@@ -248,7 +317,11 @@ CicoHSMenuTouch::TouchUpMenu(void *data, Evas *evas, Evas_Object *obj, void *eve
 void
 CicoHSMenuTouch::TouchDownTerm(void *data, Evas *evas, Evas_Object *obj, void *event_info)
 {
-    ICO_DBG("CicoHSMenuTouch::TouchDownTerm:");
+    Evas_Event_Mouse_Down *info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
+    char *appid = reinterpret_cast<char*>(data);
+
+    ICO_PRF("TOUCH_EVENT Term Down (%d,%d) app=%s",
+            info->output.x, info->output.y, appid ? appid : "(NIL)");
     touch_down = true;
 }
 
@@ -267,20 +340,20 @@ CicoHSMenuTouch::TouchDownTerm(void *data, Evas *evas, Evas_Object *obj, void *e
 void
 CicoHSMenuTouch::TouchUpTerm(void *data, Evas *evas, Evas_Object *obj, void *event_info)
 {
-    // if no down, skip
-    ICO_DBG("CicoHSMenuTouch::TouchUpTerm: down=%d", (int)touch_down);
+    Evas_Event_Mouse_Down *info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
+    char *appid = reinterpret_cast<char*>(data);
+
+    ICO_PRF("TOUCH_EVENT Term Up   (%d,%d) app=%s",
+            info->output.x, info->output.y, appid ? appid : "(NIL)");
     if (touch_down == false)    {
-        ICO_DBG("CicoHSMenuTouch::TouchUpTerm: No Down, Skip");
-        return;
+        ICO_DBG("CicoHSMenuTouch::TouchUpTerm: No Down");
+        // Menu manipulation is normally processed, even if there is no touchdown.
     }
     touch_down = false;
 
     // play opration sound
     CicoSound::GetInstance()->PlayOperationSound();
 
-    char *appid = reinterpret_cast<char*>(data);
-    ICO_PRF("TOUCH_EVENT Term Down->Up app=%s", appid ? appid : "(NIL)");
-
     strncpy(terminate_appid, appid, ICO_HS_MAX_PROCESS_NAME);
 
     menu_window->ShowTerminateButton();
@@ -302,7 +375,10 @@ void
 CicoHSMenuTouch::TouchUpTerminateYes(void *data, Evas *evas, Evas_Object *obj,
                                      void *event_info)
 {
-    ICO_PRF("TOUCH_EVENT TermYes Up app=%s", terminate_appid);
+    Evas_Event_Mouse_Down *info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
+
+    ICO_PRF("TOUCH_EVENT TermYes (%d,%d) app=%s",
+            info->output.x, info->output.y, terminate_appid);
 
     // play opration sound
     CicoSound::GetInstance()->PlayOperationSound();
@@ -322,9 +398,13 @@ CicoHSMenuTouch::TouchUpTerminateYes(void *data, Evas *evas, Evas_Object *obj,
  */
 /*--------------------------------------------------------------------------*/
 void
-CicoHSMenuTouch::TouchUpTerminateNo(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+CicoHSMenuTouch::TouchUpTerminateNo(void *data, Evas *evas, Evas_Object *obj,
+                                    void *event_info)
 {
-    ICO_PRF("TOUCH_EVENT TermNo Up app=%s", terminate_appid);
+    Evas_Event_Mouse_Down *info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
+
+    ICO_PRF("TOUCH_EVENT TermNo (%d,%d) app=%s",
+            info->output.x, info->output.y, terminate_appid);
 
     // play opration sound
     CicoSound::GetInstance()->PlayOperationSound();
index 33f6cd8..ba09800 100644 (file)
@@ -32,13 +32,13 @@ class CicoHSMenuTouch
     static void Finalize(void);
     static void TouchDownMenu(void *data, Evas *evas, Evas_Object *obj, void *event_info); 
     static void TouchUpMenu(void *data, Evas *evas, Evas_Object *obj, void *event_info);
-
+    static void FocusOutEvas(void *data, Evas *evas, void *event_info);
     static void TouchDownTerm(void *data, Evas *evas, Evas_Object *obj, void *event_info); 
     static void TouchUpTerm(void *data, Evas *evas, Evas_Object *obj, void *event_info);
-
     static void TouchUpTerminateYes(void *data, Evas *evas, Evas_Object *obj, void *event_info);
     static void TouchUpTerminateNo(void *data, Evas *evas, Evas_Object *obj, void *event_info);
     static Eina_Bool LongPushed(void *data);
+    static void SetGrabbedObject(Evas_Object *object);
 
   private:
     static char terminate_appid[ICO_HS_MAX_PROCESS_NAME];
@@ -53,6 +53,8 @@ class CicoHSMenuTouch
     static bool long_act;
     static bool touch_down;
 
+    static Evas_Object  *grabbed_object;
+
   protected:
     CicoHSMenuTouch operator=(const CicoHSMenuTouch&);
     CicoHSMenuTouch(const CicoHSMenuTouch&);
index d4fcb70..ed50c4d 100644 (file)
@@ -124,6 +124,8 @@ CicoHSMenuWindow::SetMenuBack(void)
                                    CicoHSMenuTouch::TouchDownMenu,NULL);
     evas_object_event_callback_add(canvas, EVAS_CALLBACK_MOUSE_UP,
                                    CicoHSMenuTouch::TouchUpMenu,NULL);
+    evas_event_callback_add(evas, EVAS_CALLBACK_CANVAS_FOCUS_OUT,
+                            CicoHSMenuTouch::FocusOutEvas, (void *)canvas);
     evas_object_move(canvas, 0, 0);
     evas_object_resize(canvas, width, height);
     evas_object_show(canvas);
index 1580c15..cce3d85 100644 (file)
@@ -15,6 +15,7 @@
 #include "CicoHSAppInfo.h"
 #include "CicoHomeScreen.h"
 #include "CicoHSSystemState.h"
+#include "CicoHSMenuTouch.h"
 #include "ico_syc_inputctl.h"
 #include <linux/input.h>
 
@@ -30,7 +31,7 @@ int CicoHSSwipeTouch::touch_state_b_y;
 int CicoHSSwipeTouch::touch_state_a_x;
 int CicoHSSwipeTouch::touch_state_a_y;
 
-int CicoHSSwipeTouch::touch_down;
+bool CicoHSSwipeTouch::touch_down;
 bool CicoHSSwipeTouch::set_xy_pos;
 
 int CicoHSSwipeTouch::num_windows;
@@ -56,7 +57,7 @@ CicoHSSwipeTouch::Initialize(CicoHSControlBarWindow* ctl_bar, CicoHSAppHistoryEx
                              int width, int height)
 {
     num_windows = 0;
-    touch_down = 0;
+    touch_down = false;
     set_xy_pos = false;
 
     ctl_bar_window = ctl_bar;
@@ -101,14 +102,14 @@ CicoHSSwipeTouch::TouchDownSwipe(void *data, Evas *evas, Evas_Object *obj, void
     CicoHSSwipeInputWindow  *window;
     int     x, y;
 
-    touch_down ++;
+    touch_down = true;
 
     info = reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
     window = (CicoHSSwipeInputWindow *)data;
     x = info->output.x + window->GetPosX();
     y = info->output.y + window->GetPosY();
-    ICO_PRF("TOUCH_EVENT Swipe Down (%d,%d)->(%d,%d) (%d)",
-            info->output.x, info->output.y, x, y, touch_down);
+    ICO_PRF("TOUCH_EVENT Swipe Down (%d,%d)->(%d,%d)",
+            info->output.x, info->output.y, x, y);
 
     if ((x >= 0) && (x < 4096) && (y >= 0) && (y < 4096))   {
         if (set_xy_pos == false)    {
@@ -119,6 +120,8 @@ CicoHSSwipeTouch::TouchDownSwipe(void *data, Evas *evas, Evas_Object *obj, void
         touch_state_a_x = x;
         touch_state_a_y = y;
     }
+
+    CicoHSMenuTouch::SetGrabbedObject(obj);
 }
 
 /*--------------------------------------------------------------------------*/
@@ -157,23 +160,19 @@ CicoHSSwipeTouch::TouchUpSwipe(void *data, Evas *evas, Evas_Object *obj, void *e
         touch_state_a_y = y;
     }
 
-    ICO_PRF("TOUCH_EVENT Swipe Up   (%d,%d)->(%d,%d) before(%d,%d) (%d)",
-            info->output.x, info->output.y, touch_state_a_x, touch_state_a_y,
-            touch_state_b_x, touch_state_b_y, touch_down - 1);
+    CicoHSMenuTouch::SetGrabbedObject(NULL);
 
-    if (touch_down > 1) {
-        touch_down --;
-        ICO_DBG("TouchUpSwipe: touch counter not 0(%d), Skip", touch_down);
-        return;
-    }
+    ICO_PRF("TOUCH_EVENT Swipe Up   (%d,%d)->(%d,%d) before(%d,%d)",
+            info->output.x, info->output.y, touch_state_a_x, touch_state_a_y,
+            touch_state_b_x, touch_state_b_y);
 
-    if (touch_down == 0)    {
+    if (touch_down == false)    {
         set_xy_pos = false;
-        ICO_DBG("TouchUpSwipe: no touch down, Skip");
+        ICO_DBG("TouchUpSwipe: No Down, Skip");
         return;
     }
 
-    touch_down --;
+    touch_down = false;
 
     if (set_xy_pos == false)    {
         ICO_DBG("TouchUpSwipe: unknown coordinate, Skip");
@@ -436,7 +435,7 @@ CicoHSSwipeTouch::TouchMoveSwipe(void *data, Evas *evas, Evas_Object *obj, void
     touch_state_a_x = x;
     touch_state_a_y = y;
 
-    if ((set_xy_pos == false) || (touch_down == 0)) {
+    if ((set_xy_pos == false) || (touch_down == false)) {
         set_xy_pos = true;
         touch_state_b_x = touch_state_a_x;
         touch_state_b_y = touch_state_a_y;
index 4f5a0bc..4240566 100644 (file)
@@ -53,7 +53,7 @@ class CicoHSSwipeTouch
     static int touch_state_a_x;
     static int touch_state_a_y;
 
-    static int touch_down;
+    static bool touch_down;
     static bool set_xy_pos;
     static int num_windows;
     static CicoHSSwipeInputWindow* swipe_windows[ICO_HS_MAX_SWIPEWINDOWS];
index 9b64cfb..781048d 100644 (file)
@@ -110,6 +110,17 @@ CicoHomeScreen::~CicoHomeScreen(void)
     }
 }
 
+//--------------------------------------------------------------------------
+/**
+ *  @brief  get this class instance
+ */
+//--------------------------------------------------------------------------
+CicoHomeScreen*
+CicoHomeScreen::getInstance(void)
+{
+    return hs_instance;
+}
+
 /*--------------------------------------------------------------------------*/
 /**
  * @brief   CicoHomeScreen::ShowHomeScreenLayer
index 52c0432..32fc1c7 100644 (file)
@@ -75,6 +75,7 @@ class CicoHomeScreen
   public:
     CicoHomeScreen(void);
     ~CicoHomeScreen(void);
+    static CicoHomeScreen* getInstance(void);
     int Initialize(int orientation,CicoGKeyFileConfig *config);
     void InitializeAppHistory(void);
     void Finalize(void);
index 3c50f3b..ffd563e 100644 (file)
@@ -295,6 +295,7 @@ CicoOSPopWindow::InitializeWindow(void)
     }
     // icon setup
     m_icon = evas_object_image_filled_add(ecore_evas_get(m_window));
+    evas_object_pointer_mode_set(m_icon, EVAS_OBJECT_POINTER_MODE_NOGRAB);
     edje_object_part_swallow(m_theme, "icon", m_icon);
     /* getting size of screen */
     /* home screen size is full of display*/
index e13276b..234992e 100644 (file)
@@ -92,6 +92,7 @@ CicoStatusBar::Initialize(void)
 
     ICO_DBG("Initialize start windowobj_.");
     windowobj_ = evas_object_rectangle_add(ecore_evas_get(window_));
+    evas_object_pointer_mode_set(windowobj_, EVAS_OBJECT_POINTER_MODE_NOGRAB);
 
     // statusbar RGBcolor setting
     evas_object_color_set(windowobj_, 0, 0, 0, 255);