uBrowser: Refactor extra actions menu to use Elementary ctxpopup
authorPiotr Tworek <p.tworek@samsung.com>
Wed, 29 Apr 2015 13:10:14 +0000 (15:10 +0200)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
Unfortunately the previous elementary menu object did not work correctly
on 2.4 targets. It was shown, but with an transparent background making
it difficult to use. This patch changes uBrowser to use elementary
ctxpopup widget as the basis of extra actions menu. This widget is
rendered properly all currently supported platforms.

While at this the patch also changes the menu options a bit. On the
refactoring branch stuff like zoom in/out does work on desktop so the patch
exposes it there. Since window resizing is also much more reliable, menu options
for resizing windows are not longer needed.

Change-Id: Ibf09267a81854b5e49f17fa79ba827275459246f
Signed-off-by: Piotr Tworek <p.tworek@samsung.com>
tizen_src/ewk/ubrowser/window.cc
tizen_src/ewk/ubrowser/window.h
tizen_src/ewk/ubrowser/window_ui.cc
tizen_src/ewk/ubrowser/window_ui.h

index bf9252e..b97dfed 100644 (file)
@@ -192,6 +192,11 @@ void Window::EnableMouseEvents(bool enable) {
   ewk_view_mouse_events_enabled_set(web_view_, enable);
 }
 
+bool Window::AreTouchEventsEnabled() const {
+  log_trace("%s", __PRETTY_FUNCTION__);
+  return ewk_view_touch_events_enabled_get(web_view_);
+}
+
 double Window::GetScale() const {
   log_trace("%s", __PRETTY_FUNCTION__);
   return ewk_view_scale_get(web_view_);
index 3c27c83..aebad7f 100644 (file)
@@ -36,6 +36,7 @@ class Window {
   void Resize(int width, int height);
   void EnableTouchEvents(bool);
   void EnableMouseEvents(bool);
+  bool AreTouchEventsEnabled() const;
   double GetScale() const;
   void SetScale(double);
 
index ddd98b9..9dfe0ab 100644 (file)
@@ -67,8 +67,6 @@ WindowUI::WindowUI(Window& window, Browser& browser)
 
   EnableBackButton(false);
   EnableForwardButton(false);
-
-  extra_actions_menu_ = CreateExtraActionsMenu(window_.GetEvasObject());
 }
 
 void WindowUI::OnURLChanged(const char* url) {
@@ -123,45 +121,40 @@ Evas_Object* WindowUI::AddButton(Evas_Object* parent,
   return bt;
 }
 
+namespace {
+
+void _HideCtxPopup(void* data, Evas_Object* obj, void*) {
+  evas_object_hide(obj);
+}
+
+} // namespace
+
 Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) {
-  Evas_Object* menu =  elm_menu_add(parent);
-  elm_menu_item_add(menu, NULL, NULL,
-      "Override User Agent String", &WindowUI::OnUAOverride, this);
+  Evas_Object* menu =  elm_ctxpopup_add(parent);
+  evas_object_smart_callback_add(menu, "dismissed", _HideCtxPopup, NULL);
+
+  elm_ctxpopup_item_append(menu, "Override User Agent String",
+      NULL, &WindowUI::OnUAOverride, this);
 
   if (browser_.IsDesktop()) {
-    elm_menu_item_add(menu, NULL, NULL,
-        "Show Web Inspector", &WindowUI::OnInspectorShow, this);
-    elm_menu_item_add(menu, NULL, NULL, "Simulate screen rotation",
-        &WindowUI::OnRotate, this);
-
-    Elm_Object_Item* resize = elm_menu_item_add(menu, NULL, NULL, "Resize",
-        NULL, NULL);
-    elm_menu_item_add(menu, resize, NULL, "360x640",
-        &WindowUI::OnResize, new std::pair<const char*, WindowUI*>("360x640", this));
-    elm_menu_item_add(menu, resize, NULL, "800x600",
-        &WindowUI::OnResize, new std::pair<const char*, WindowUI*>("800x600", this));
-    elm_menu_item_add(menu, resize, NULL, "1024x768",
-        &WindowUI::OnResize, new std::pair<const char*, WindowUI*>("1024x768", this));
-    elm_menu_item_add(menu, resize, NULL, "1280x720",
-        &WindowUI::OnResize, new std::pair<const char*, WindowUI*>("1280x720", this));
+    elm_ctxpopup_item_append(menu, "Show Web Inspector", NULL,
+        &WindowUI::OnInspectorShow, this);
+  }
+#if !defined(OS_TIZEN)
+  elm_ctxpopup_item_append(menu, "Simulate screen rotation", NULL,
+      &WindowUI::OnRotate, this);
+#endif
+
+  if (window_.AreTouchEventsEnabled()) {
+    elm_ctxpopup_item_append(menu, "Enable mouse events", NULL,
+        &WindowUI::OnSelectMouseInput, this);
+  } else {
+    elm_ctxpopup_item_append(menu, "Enable touch events", NULL,
+        &WindowUI::OnSelectTouchInput, this);
   }
 
-  Elm_Object_Item* input = elm_menu_item_add(menu, NULL, NULL, "Input event type",
-      NULL, NULL);
-  elm_menu_item_add(menu, input, NULL, "Mouse",
-      &WindowUI::OnSelectMouseInput, this);
-  elm_menu_item_add(menu, input, NULL, "Touch",
-      &WindowUI::OnSelectTouchInput, this);
-
-#if defined(OS_TIZEN)
-  // Techincally those functions change page scale factor, not zoom in/out.
-  // The code was borrowed from mini_browser app. On desktop support for
-  // page scale factor is disabled so don't show the options.
-  elm_menu_item_add(menu, NULL, NULL,
-      "Zoom in", &WindowUI::OnZoomIn, this);
-  elm_menu_item_add(menu, NULL, NULL,
-      "Zoom out", &WindowUI::OnZoomOut, this);
-#endif // OS_TIZEN
+  elm_ctxpopup_item_append(menu, "Zoom in", NULL, &WindowUI::OnZoomIn, this);
+  elm_ctxpopup_item_append(menu, "Zoom out", NULL, &WindowUI::OnZoomOut, this);
 
   return menu;
 }
@@ -242,10 +235,12 @@ void WindowUI::OnStopOrReload(void *data, Evas_Object*, void*) {
 void WindowUI::OnShowExtraActionsMenu(void *data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI* thiz = static_cast<WindowUI*>(data);
+  Evas_Object* popup = thiz->CreateExtraActionsMenu(
+      thiz->window_.GetEvasObject());
   int x, y;
   evas_object_geometry_get(obj, &x, &y, 0, 0);
-  elm_menu_move(thiz->extra_actions_menu_, x, y);
-  evas_object_show(thiz->extra_actions_menu_);
+  evas_object_move(popup, x, y);
+  evas_object_show(popup);
 }
 
 void WindowUI::OnURLEntered(void *data, Evas_Object*, void*) {
@@ -255,12 +250,13 @@ void WindowUI::OnURLEntered(void *data, Evas_Object*, void*) {
   elm_object_focus_set(thiz->url_entry_, EINA_FALSE);
 }
 
-void WindowUI::OnUAOverride(void* data, Evas_Object*, void*) {
+void WindowUI::OnUAOverride(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
   const char* ua = thiz->window_.GetUserAgent();
   thiz->ShowTextEntryPopup("User Agent Override", ua,
       &WindowUI::OnUAOverrideEntered);
+  elm_ctxpopup_dismiss(obj);
 }
 
 void WindowUI::OnUAOverrideEntered(void* data, Evas_Object*, void*) {
@@ -274,37 +270,32 @@ void WindowUI::OnUAOverrideEntered(void* data, Evas_Object*, void*) {
   delete p;
 }
 
-void WindowUI::OnInspectorShow(void* data, Evas_Object*, void*) {
+void WindowUI::OnInspectorShow(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   static_cast<WindowUI*>(data)->browser_.ShowInspectorWindow();
+  elm_ctxpopup_dismiss(obj);
 }
 
-void WindowUI::OnRotate(void* data, Evas_Object*, void*) {
+void WindowUI::OnRotate(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   static_cast<WindowUI*>(data)->window_.FakeRotate();
+  elm_ctxpopup_dismiss(obj);
 }
 
-void WindowUI::OnResize(void* data, Evas_Object*, void*) {
-  std::pair<const char*, WindowUI*>* pr =
-      static_cast<std::pair<const char*, WindowUI*>*>(data);
-  int width, height;
-  sscanf(pr->first, "%dx%d", &width, &height);
-  log_trace("%s %dx%d", __PRETTY_FUNCTION__, width, height);
-  pr->second->window_.Resize(width, height);
-}
-
-void WindowUI::OnSelectMouseInput(void* data, Evas_Object*, void*) {
+void WindowUI::OnSelectMouseInput(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
   thiz->window_.EnableTouchEvents(false);
   thiz->window_.EnableMouseEvents(true);
+  elm_ctxpopup_dismiss(obj);
 }
 
-void WindowUI::OnSelectTouchInput(void* data, Evas_Object*, void*) {
+void WindowUI::OnSelectTouchInput(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
   thiz->window_.EnableTouchEvents(true);
   thiz->window_.EnableMouseEvents(false);
+  elm_ctxpopup_dismiss(obj);
 }
 
 namespace {
@@ -317,14 +308,16 @@ inline void _change_zoom(Window& win, double delta) {
 }
 }
 
-void WindowUI::OnZoomIn(void* data, Evas_Object*, void*) {
+void WindowUI::OnZoomIn(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
   _change_zoom(thiz->window_, kViewScaleDelta);
+  elm_ctxpopup_dismiss(obj);
 }
 
-void WindowUI::OnZoomOut(void* data, Evas_Object*, void*) {
+void WindowUI::OnZoomOut(void* data, Evas_Object* obj, void*) {
   log_trace("%s", __PRETTY_FUNCTION__);
   WindowUI *thiz = static_cast<WindowUI*>(data);
   _change_zoom(thiz->window_, -kViewScaleDelta);
+  elm_ctxpopup_dismiss(obj);
 }
index 8f1b6c9..8d11ed1 100644 (file)
@@ -46,7 +46,6 @@ class WindowUI {
   static void OnUAOverrideEntered(void* data, Evas_Object*, void*);
   static void OnInspectorShow(void* data, Evas_Object*, void*);
   static void OnRotate(void* data, Evas_Object*, void*);
-  static void OnResize(void* data, Evas_Object*, void*);
   static void OnSelectMouseInput(void* data, Evas_Object*, void*);
   static void OnSelectTouchInput(void* data, Evas_Object*, void*);
   static void OnZoomIn(void* data, Evas_Object*, void*);
@@ -57,7 +56,6 @@ class WindowUI {
   Evas_Object* navbar_;
   Evas_Object* urlbar_;
   Evas_Object* url_entry_;
-  Evas_Object* extra_actions_menu_;
   Evas_Object* stop_reload_button_;
   Evas_Object* progress_bar_;
   Evas_Object* forward_button_;