Fix for N_SE-40699
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_SearchBar.cpp
index 4f5c3f7..311cb6c 100644 (file)
@@ -671,7 +671,6 @@ _SearchBar::GetButtonStatus(void) const
 result
 _SearchBar::SetButtonText(const String& text)
 {
-       __isButtonTextChangedByApp = true;
        SysTryReturn(NID_UI_CTRL, __pCancelButton, E_SYSTEM, E_SYSTEM,
                     "[E_SYSTEM] A system error has occurred. The cancel button instance is null.");
 
@@ -681,6 +680,8 @@ _SearchBar::SetButtonText(const String& text)
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
                     "[E_SYSTEM] A system error has occurred. Failed to set text.");
 
+       __isButtonTextChangedByApp = true;
+
        return r;
 }
 
@@ -1800,60 +1801,86 @@ _SearchBar::OnFocusLost(const _Control &source)
 bool
 _SearchBar::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
 {
+       if (!__pEdit->IsUsbKeyboardConnected())
+       {
+               return false;
+       }
+
+       if (!__pEdit->IsSearchFieldFocused())
+       {
+               return false;
+       }
+
        _KeyCode keyCode = keyInfo.GetKeyCode();
 
-       if (keyCode == _KEY_RIGHT)
+       switch (keyCode)
        {
-               if (GetMode() == SEARCH_BAR_MODE_NORMAL)
-               {
-                       __pEdit->SetFocused();
-                       return true;
-               }
+               case _KEY_RIGHT:
+                       SetFocusCallbackParameter(false);
+                       if (&source == __pEdit)
+                       {
+                               if ((!__isButtonEnabled || !__isUsableCancelButton) && __pContentControl && __pContentControl->GetVisibleState() && __pContentControl->GetEnableState())
+                               {
+                                       __pContentControl->SetFocused();
+                                       __pContentControl->OnDrawFocus();
 
-               if (!__isButtonEnabled || __pCancelButton->IsFocused() || !__isUsableCancelButton)
-               {
-                       return true;
-               }
+                                       return true;
+                               }
+                               else if (__isButtonEnabled && __isUsableCancelButton)
+                               {
+                                       __pCancelButton->SetFocused();
+                               }
 
-               __pCancelButton->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-               SetFocusCallBackParameter(false);
-               __pCancelButton->SetFocused();
-               __pCancelButton->Invalidate(true);
+                               return true;
+                       }
 
-               return true;
-       }
+                       if (&source == __pCancelButton && __pContentControl && __pContentControl->GetVisibleState() && __pContentControl->GetEnableState())
+                       {
+                               __pContentControl->SetFocused();
+                               __pContentControl->OnDrawFocus();
 
-       if (keyCode == _KEY_LEFT)
-       {
-               if (__pCancelButton->GetButtonStatus() == _BUTTON_STATUS_HIGHLIGHTED)
-               {
-                       __pCancelButton->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                       __pCancelButton->Invalidate();
-                       __pEdit->SetFocused();
-               }
+                               return true;
+                       }
 
-               if (__pCancelButton->GetButtonStatus() == _BUTTON_STATUS_DISABLED)      //Searchbar Button is disabled, left arrow key is pressed
-               {
-                       __pCancelButton->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                       SetButtonEnabled(false);
-                       __pEdit->SetFocused();
-               }
+                       break;
 
-               return true;
-       }
+               case _KEY_LEFT:
+                       if (&source == __pCancelButton)
+                       {
+                               __pEdit->SetFocused();
+                               return true;
+                       }
+
+                       if (&source == __pContentControl)
+                       {
+                               if ((__isButtonEnabled && __isUsableCancelButton))
+                               {
+                                       __pCancelButton->SetFocused();
+                               }
+                               else
+                               {
+                                       __pEdit->SetFocused();
+                               }
+                               return true;
+                       }
 
-       if (keyCode == _KEY_ENTER || keyCode == _KEY_TAB)
-       {
-               if (GetMode() == SEARCH_BAR_MODE_NORMAL)
-               {
-                       return false;
-               }
+                       break;
 
-               SetMode(SEARCH_BAR_MODE_NORMAL);
-               __isKeyPressed = true;
-               SetFocused();
+               case _KEY_ENTER:
+                       if (&source == __pCancelButton)
+                       {
+                               SetMode(SEARCH_BAR_MODE_NORMAL);
+                               __isKeyPressed = true;
+                               SetFocused();
+                               _Control::OnDrawFocus();
 
-               return true;
+                               return true;
+                       }
+
+                       break;
+
+               default:
+                       return false;
        }
 
        return false;
@@ -2750,14 +2777,14 @@ _SearchBar::SendOpaqueCommand(const String& command)
 }
 
 void
-_SearchBar::SetFocusCallBackParameter(bool state)
+_SearchBar::SetFocusCallbackParameter(bool state)
 {
        __isFocusCallbackToBeFired = state;
        return;
 }
 
 bool
-_SearchBar::IsFocusCallBackToBeFired(void) const
+_SearchBar::IsFocusCallbackToBeFired(void) const
 {
        return __isFocusCallbackToBeFired;
 }