#include "runtime/browser/native_window.h"
#include <Ecore_Wayland.h>
+#include <EWebKit.h>
+#include <EWebKit_internal.h>
#include <cstdint>
#include "common/arraysize.h"
namespace {
const char* kEdjePath = "/usr/share/edje/xwalk/xwalk_tizen.edj";
const char* kWinowRotationEventKey = "wm,rotation,changed";
+const char* kWinowFocusedEventKey = "focused";
+const char* kWinowUnfocusedEventKey = "unfocused";
const int kPortraitNaturalAngle[] = {
0, // PORTRAIT_PRIMARY
: window_(NULL),
window_type_(Type::NORMAL),
initialized_(false),
- layout_(NULL),
+ focus_(NULL),
content_(NULL),
rotation_(0),
handler_id_(0) {
EVAS_SIZE_EXPAND_FILL(top_layout);
elm_object_content_set(conformant, top_layout);
evas_object_show(top_layout);
- layout_ = top_layout;
+
+ // focus
+ Evas_Object* focus = elm_bg_add(top_layout);
+ evas_object_size_hint_align_set(focus, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(focus, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_focus_allow_set(focus, EINA_TRUE);
+ elm_object_part_content_set(top_layout, "elm.swallow.content", focus);
+ EVAS_SIZE_EXPAND_FILL(focus);
+ elm_access_object_unregister(focus);
+ elm_atspi_accessible_role_set(focus, ELM_ATSPI_ROLE_FILLER);
+ evas_object_show(focus);
+ focus_ = focus;
+
+ // focus callback
+ auto focus_callback = [](void* user_data,
+ Evas_Object*,
+ void*) -> void {
+ NativeWindow* window = static_cast<NativeWindow*>(user_data);
+ window->DidFocusChanged(true);
+ };
+ auto unfocus_callback = [](void* user_data,
+ Evas_Object*,
+ void*) -> void {
+ NativeWindow* window = static_cast<NativeWindow*>(user_data);
+ window->DidFocusChanged(false);
+ };
+
+ evas_object_smart_callback_add(focus,
+ kWinowFocusedEventKey,
+ focus_callback,
+ this);
+ evas_object_smart_callback_add(focus,
+ kWinowUnfocusedEventKey,
+ unfocus_callback,
+ this);
// Rotation
auto rotation_callback = [](void* user_data,
natural_orientation_ = ScreenOrientation::PORTRAIT_PRIMARY;
}
+ elm_win_indicator_mode_set(window_, ELM_WIN_INDICATOR_SHOW);
+
initialized_ = true;
}
// issue elm_object_part_content_unset() on it first.
evas_object_show(content);
-
- // Hide unseted evas object to avoid focus and event callback problem.
evas_object_hide(
- elm_object_part_content_unset(layout_, "elm.swallow.content"));
- elm_object_part_content_set(layout_, "elm.swallow.content", content);
+ elm_object_part_content_unset(focus_, "elm.swallow.content"));
+ elm_object_part_content_set(focus_, "elm.swallow.content", content);
+ elm_object_focus_set(focus_, EINA_TRUE);
content_ = content;
// attached webview was resized by evas_norender API
}
}
+void NativeWindow::DidFocusChanged(bool got) {
+ if (content_ != NULL) {
+ ewk_view_focus_set(content_, got ? EINA_TRUE : EINA_FALSE);
+ }
+}
+
int NativeWindow::AddRotationHandler(RotationHandler handler) {
int id = handler_id_++;
handler_table_[id] = handler;