Add popup callbacks for closing with Esc key
authorLukasz Bialek <l.bialek@samsung.com>
Sat, 19 Sep 2015 09:42:45 +0000 (11:42 +0200)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 07:55:23 +0000 (07:55 +0000)
[Issue] http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=14099
[Problem] Popups are not closed when Esc button is pressed
[Cause] Only Mobile branch supports callbacks for HW back button
[Solution] Add callbacks for Esc button and connect them with
           existing popup-closing code

Original beta/m42 patch:
http://165.213.202.130/gerrit/#/c/87930/

Bug: http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=14765

Change-Id: Ic7656ee4a034b95aa5ee71ac85c79711e57d15e7
Signed-off-by: Lukasz Bialek <l.bialek@samsung.com>
tizen_src/ewk/efl_integration/browser/javascript_modal_dialog_efl.cc
tizen_src/ewk/efl_integration/browser/javascript_modal_dialog_efl.h

index 7834198..f966d9b 100755 (executable)
@@ -206,8 +206,9 @@ bool JavaScriptModalDialogEfl::ShowJavaScriptDialog() {
   else
     eext_object_event_callback_add(popup_, EEXT_CALLBACK_BACK, CancelButtonHandlerForConfirm, this);
 #endif
-   evas_object_focus_set(popup_, true);
-   evas_object_show(popup_);
+  evas_object_event_callback_add(popup_, EVAS_CALLBACK_KEY_UP, KeyUpCallback, this);
+  evas_object_focus_set(popup_, true);
+  evas_object_show(popup_);
 
   int width = 0, height = 0;
 #if defined(USE_WAYLAND)
@@ -369,6 +370,27 @@ void JavaScriptModalDialogEfl::CancelButtonHandlerForPrompt(void *data, Evas_Obj
   dialog->web_view_->SmartCallback<EWebViewCallbacks::PopupReplyWaitFinish>().call(0);
 }
 
+bool MapsToHWBackKey(char* keyname) {
+  // Escape key is associated with HW Back Key. Everything else is not.
+  return strcmp(keyname, "Escape") == 0;
+}
+
+// General key up callback for all platforms designed to handle keyboard HW Back key
+void JavaScriptModalDialogEfl::KeyUpCallback(void *data, Evas *e, Evas_Object *obj, void *event_info) {
+  Evas_Event_Key_Up* key_struct = static_cast<Evas_Event_Key_Up*>(event_info);
+  if (!MapsToHWBackKey(key_struct->keyname))
+    return;
+
+  JavaScriptModalDialogEfl* dialog = static_cast<JavaScriptModalDialogEfl*>(data);
+
+  if (dialog->type_ == PROMPT || dialog->type_ == NAVIGATION)
+    CancelButtonHandlerForPrompt(data, obj, event_info);
+  else if (dialog->type_ == ALERT)
+    CancelButtonHandlerForAlert(data, obj, event_info);
+  else
+    CancelButtonHandlerForConfirm(data, obj, event_info);
+}
+
 void JavaScriptModalDialogEfl::close() {
   if(popup_) {
     evas_object_del(popup_);
index 8bd44da..ddb9101 100644 (file)
@@ -46,6 +46,7 @@ class JavaScriptModalDialogEfl {
                            const base::string16& default_prompt_text,
                            const content::JavaScriptDialogManager::DialogClosedCallback& callback);
 
+  static void KeyUpCallback(void *data, Evas *e, Evas_Object *obj, void *event_info);
   bool ShowJavaScriptDialog();
   Evas_Object* popupAdd();
   bool setLabelText(const char* message);