Title: [138697] trunk/Tools
Revision
138697
Author
[email protected]
Date
2013-01-02 20:47:46 -0800 (Wed, 02 Jan 2013)

Log Message

[EFL][WK2] Fix tooltip bugs in MiniBrowser.
https://bugs.webkit.org/show_bug.cgi?id=102209

Patch by Byungwoo Lee <[email protected]> on 2013-01-02
Reviewed by Gyuyoung Kim.

Set tooltip on the elm_window instead of ewk_view, and add delay to
show the tooltip window.

Setting tooltip on the ewk_view makes elementary error message because
ewk_view is not an elementary widget. To remove the error message,
tooltip should be set on the elm_window.

Most browsers show the tooltip after a mouse pointer stays on an
element object that has tooltip text.
But elm_tooltip widget itself doesn't have delay or handle mouse
events to show/hide.

So additional codes are added to show/hide tooltip widget along with
mouse events.
  1) When a mouse pointer stays for a second on an element which has
     tooltip text, then tooltip widget is displayed.
  2) When a mouse pointer is moved or out of ewk_view, hide the tooltip
     widget.

* MiniBrowser/efl/main.c:
(_Tooltip_Information):
(_Browser_Window):
(on_tooltip_show):
(window_tooltip_hide):
(window_tooltip_update):
(on_mouse_in):
(on_mouse_move):
(on_mouse_out):
(window_free):
(on_tooltip_text_set):
(on_tooltip_text_unset):
(window_create):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (138696 => 138697)


--- trunk/Tools/ChangeLog	2013-01-03 04:44:09 UTC (rev 138696)
+++ trunk/Tools/ChangeLog	2013-01-03 04:47:46 UTC (rev 138697)
@@ -1,3 +1,43 @@
+2013-01-02  Byungwoo Lee  <[email protected]>
+
+        [EFL][WK2] Fix tooltip bugs in MiniBrowser.
+        https://bugs.webkit.org/show_bug.cgi?id=102209
+
+        Reviewed by Gyuyoung Kim.
+
+        Set tooltip on the elm_window instead of ewk_view, and add delay to
+        show the tooltip window.
+
+        Setting tooltip on the ewk_view makes elementary error message because
+        ewk_view is not an elementary widget. To remove the error message,
+        tooltip should be set on the elm_window.
+
+        Most browsers show the tooltip after a mouse pointer stays on an
+        element object that has tooltip text.
+        But elm_tooltip widget itself doesn't have delay or handle mouse
+        events to show/hide.
+
+        So additional codes are added to show/hide tooltip widget along with
+        mouse events.
+          1) When a mouse pointer stays for a second on an element which has
+             tooltip text, then tooltip widget is displayed.
+          2) When a mouse pointer is moved or out of ewk_view, hide the tooltip
+             widget.
+
+        * MiniBrowser/efl/main.c:
+        (_Tooltip_Information):
+        (_Browser_Window):
+        (on_tooltip_show):
+        (window_tooltip_hide):
+        (window_tooltip_update):
+        (on_mouse_in):
+        (on_mouse_move):
+        (on_mouse_out):
+        (window_free):
+        (on_tooltip_text_set):
+        (on_tooltip_text_unset):
+        (window_create):
+
 2013-01-02  Tony Chang  <[email protected]>
 
         Unreviewed, rolling out r138661.

Modified: trunk/Tools/MiniBrowser/efl/main.c (138696 => 138697)


--- trunk/Tools/MiniBrowser/efl/main.c	2013-01-03 04:44:09 UTC (rev 138696)
+++ trunk/Tools/MiniBrowser/efl/main.c	2013-01-03 04:47:46 UTC (rev 138697)
@@ -29,6 +29,7 @@
 static const char APP_NAME[] = "EFL MiniBrowser";
 static const int TOOL_BAR_ICON_SIZE = 24;
 static const int TOOL_BAR_BUTTON_SIZE = 32;
+static const double TOOLTIP_DELAY_SECONDS = 1.0;
 
 #define info(format, args...)       \
     do {                            \
@@ -75,6 +76,13 @@
     return &ewkViewClass;
 }
 
+typedef struct _Tooltip_Information {
+    Ecore_Timer *show_timer;
+    Eina_Bool activated;
+    Eina_Bool text_set;
+    Eina_Bool shown;
+} Tooltip_Information;
+
 typedef struct _Browser_Window {
     Evas_Object *elm_window;
     Evas_Object *ewk_view;
@@ -82,6 +90,7 @@
     Evas_Object *back_button;
     Evas_Object *forward_button;
     int current_zoom_level; 
+    Tooltip_Information tooltip;
 } Browser_Window;
 
 typedef struct _File_Selector_Data {
@@ -166,11 +175,77 @@
     return NULL;
 }
 
+static Eina_Bool
+on_tooltip_show(void *user_data)
+{
+    Browser_Window *window = (Browser_Window *)user_data;
+
+    window->tooltip.show_timer = NULL;
+    elm_object_tooltip_show(window->elm_window);
+    window->tooltip.shown = EINA_TRUE;
+    return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+window_tooltip_hide(Browser_Window *window)
+{
+    if (window->tooltip.show_timer) {
+        ecore_timer_del(window->tooltip.show_timer);
+        window->tooltip.show_timer = NULL;
+    }
+
+    if (window->tooltip.shown) {
+        elm_object_tooltip_hide(window->elm_window);
+        window->tooltip.shown = EINA_FALSE;
+    }
+}
+
+static void
+window_tooltip_update(Browser_Window *window)
+{
+    window_tooltip_hide(window);
+
+    if (window->tooltip.activated && window->tooltip.text_set)
+        window->tooltip.show_timer = ecore_timer_add(TOOLTIP_DELAY_SECONDS, on_tooltip_show, window);
+}
+
+static void
+on_mouse_in(void *user_data, Evas *e, Evas_Object *ewk_view, void *event_info)
+{
+    Browser_Window *window = (Browser_Window *)user_data;
+
+    window->tooltip.activated = EINA_TRUE;
+    window_tooltip_update(window);
+}
+
+static void
+on_mouse_move(void *user_data, Evas *e, Evas_Object *ewk_view, void *event_info)
+{
+    window_tooltip_update((Browser_Window *)user_data);
+}
+
+static void
+on_mouse_out(void *user_data, Evas *e, Evas_Object *ewk_view, void *event_info)
+{
+    Browser_Window *window = (Browser_Window *)user_data;
+
+    window->tooltip.activated = EINA_FALSE;
+    window_tooltip_update(window);
+}
+
 static void window_free(Browser_Window *window)
 {
+    evas_object_event_callback_del(window->ewk_view, EVAS_CALLBACK_MOUSE_IN, on_mouse_in);
+    evas_object_event_callback_del(window->ewk_view, EVAS_CALLBACK_MOUSE_OUT, on_mouse_out);
+    evas_object_event_callback_del(window->ewk_view, EVAS_CALLBACK_MOUSE_MOVE, on_mouse_move);
+
     evas_object_del(window->ewk_view);
     /* The elm_win will take care of freeing its children */
     evas_object_del(window->elm_window);
+
+    if (window->tooltip.show_timer)
+        ecore_timer_del(window->tooltip.show_timer);
+
     free(window);
 }
 
@@ -954,8 +1029,9 @@
     Browser_Window *window = (Browser_Window *)user_data;
     const char *message = (const char*)event_info;
 
-    elm_object_tooltip_text_set(window->ewk_view, message);
-    elm_object_tooltip_show(window->ewk_view);
+    elm_object_tooltip_text_set(window->elm_window, message);
+    window->tooltip.text_set = EINA_TRUE;
+    window_tooltip_update(window);
 }
 
 static void
@@ -963,7 +1039,9 @@
 {
     Browser_Window *window = (Browser_Window *)user_data;
 
-    elm_object_tooltip_unset(window->ewk_view);
+    window_tooltip_hide(window);
+    elm_object_tooltip_unset(window->elm_window);
+    window->tooltip.text_set = EINA_FALSE;
 }
 
 static void
@@ -1004,6 +1082,12 @@
         return NULL;
     }
 
+    /* Initialize tooltip information */
+    window->tooltip.show_timer = NULL;
+    window->tooltip.activated = EINA_FALSE;
+    window->tooltip.text_set = EINA_FALSE;
+    window->tooltip.shown = EINA_FALSE;
+
     /* Create window */
     window->elm_window = elm_win_add(NULL, "minibrowser-window", ELM_WIN_BASIC);
     elm_win_title_set(window->elm_window, APP_NAME);
@@ -1146,6 +1230,10 @@
 
     view_focus_set(window, EINA_TRUE);
 
+    evas_object_event_callback_add(window->ewk_view, EVAS_CALLBACK_MOUSE_IN, on_mouse_in, window);
+    evas_object_event_callback_add(window->ewk_view, EVAS_CALLBACK_MOUSE_OUT, on_mouse_out, window);
+    evas_object_event_callback_add(window->ewk_view, EVAS_CALLBACK_MOUSE_MOVE, on_mouse_move, window);
+
     return window;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to