#include "ui/gfx/geometry/size.h"
#include "ui/gfx/image/image.h"
+#if defined(OS_TIZEN)
+#include <efl_extension.h>
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/render_frame_host.h"
+#endif
+
namespace atom {
namespace {
const int kDefaultWindowWidthDip = 800;
const int kDefaultWindowHeightDip = 600;
+#if defined(OS_TIZEN)
+const char* kBackKeyEventScript =
+ "(function(){"
+ "var __event = document.createEvent(\"CustomEvent\");\n"
+ "__event.initCustomEvent(\"tizenhwkey\", true, true, null);\n"
+ "__event.keyName = \"back\";\n"
+ "document.dispatchEvent(__event);\n"
+ "\n"
+ "for (var i=0; i < window.frames.length; i++)\n"
+ "{ window.frames[i].document.dispatchEvent(__event); }"
+ "})()";
+const char* kMenuKeyEventScript =
+ "(function(){"
+ "var __event = document.createEvent(\"CustomEvent\");\n"
+ "__event.initCustomEvent(\"tizenhwkey\", true, true, null);\n"
+ "__event.keyName = \"menu\";\n"
+ "document.dispatchEvent(__event);\n"
+ "\n"
+ "for (var i=0; i < window.frames.length; i++)\n"
+ "{ window.frames[i].document.dispatchEvent(__event); }"
+ "})()";
+#endif
}
NativeWindowEfl::NativeWindowEfl(
elm_box_pack_end(box, web_view_);
web_contents()->Focus();
+
+#if defined(OS_TIZEN)
+ eext_object_event_callback_add(web_view_, EEXT_CALLBACK_BACK,
+ &HWBackKeyCallback, this);
+ eext_object_event_callback_add(web_view_, EEXT_CALLBACK_MORE,
+ &HWMoreKeyCallback, this);
+#endif
+}
+
+NativeWindowEfl::~NativeWindowEfl() {
+ eext_object_event_callback_del(web_view_, EEXT_CALLBACK_BACK,
+ &HWBackKeyCallback);
+ eext_object_event_callback_del(web_view_, EEXT_CALLBACK_MORE,
+ &HWBackKeyCallback);
}
void NativeWindowEfl::Close() {
return new NativeWindowEfl(web_contents, options, parent);
}
+#if defined(OS_TIZEN)
+// static
+void NativeWindowEfl::HWBackKeyCallback(void* data, Evas_Object*, void*) {
+ NativeWindow* thiz = static_cast<NativeWindow*>(data);
+ // TODO: We need to consider to clear selection or exit fullscreen
+ // before send JS custom event.
+ content::RenderFrameHost* rfh = thiz->web_contents()->GetMainFrame();
+ if (rfh) {
+ rfh->ExecuteJavaScriptWithUserGestureForTests(
+ base::UTF8ToUTF16(kBackKeyEventScript));
+ }
+}
+
+// static
+void NativeWindowEfl::HWMoreKeyCallback(void* data, Evas_Object*, void*) {
+ NativeWindow* thiz = static_cast<NativeWindow*>(data);
+ content::RenderFrameHost* rfh = thiz->web_contents()->GetMainFrame();
+ if (rfh) {
+ rfh->ExecuteJavaScriptWithUserGestureForTests(
+ base::UTF8ToUTF16(kMenuKeyEventScript));
+ }
+}
+#endif
+
}
// Converts between content bounds and window bounds.
virtual gfx::Rect ContentBoundsToWindowBounds(const gfx::Rect& bounds) override;
virtual gfx::Rect WindowBoundsToContentBounds(const gfx::Rect& bounds) override;
- ~NativeWindowEfl() override {};
+ ~NativeWindowEfl() override;
static void OnWindowDeleteRequest(void* data, Evas_Object*, void*);
+#if defined(OS_TIZEN)
+ static void HWBackKeyCallback(void*, Evas_Object*, void*);
+ static void HWMoreKeyCallback(void*, Evas_Object*, void*);
+#endif
+
Evas_Object* window_;
Evas_Object* web_view_;