jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=8b19745cf5a7c98c50f63bddaa28aa2bcf4c1090

commit 8b19745cf5a7c98c50f63bddaa28aa2bcf4c1090
Author: Avi Levin <avi.le...@samsung.com>
Date:   Sun May 10 17:50:04 2015 +0300

    elm_entry: porting evas smart callbacks to eo
---
 src/lib/elm_entry.c  | 126 ++++++++++++++++++++++++++++++---------------------
 src/lib/elm_entry.eo |  19 +++++++-
 2 files changed, 92 insertions(+), 53 deletions(-)

diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index 52d8070..0755404 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -880,7 +880,7 @@ _elm_entry_elm_widget_theme_apply(Eo *obj, Elm_Entry_Data 
*sd)
    evas_event_thaw(evas_object_evas_get(obj));
    evas_event_thaw_eval(evas_object_evas_get(obj));
 
-   evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
+   eo_do(obj, eo_event_callback_call(ELM_LAYOUT_EVENT_THEME_CHANGED, NULL));
 
    evas_object_unref(obj);
 
@@ -892,7 +892,7 @@ _cursor_geometry_recalc(Evas_Object *obj)
 {
    ELM_ENTRY_DATA_GET(obj, sd);
 
-   evas_object_smart_callback_call(obj, SIG_CURSOR_CHANGED, NULL);
+   eo_do(obj, eo_event_callback_call(ELM_ENTRY_EVENT_CURSOR_CHANGED, NULL));
 
    if (!sd->deferred_recalc_job)
      {
@@ -1151,7 +1151,7 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data 
*sd)
         if (top && top_is_win && sd->input_panel_enable && 
!sd->input_panel_show_on_demand &&
             !edje_object_part_text_imf_context_get(sd->entry_edje, "elm.text"))
           elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
-        evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL);
+        eo_do(obj, eo_event_callback_call(ELM_LAYOUT_EVENT_FOCUSED, NULL));
         if (_elm_config->atspi_mode)
           elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_TRUE);
         _return_key_enabled_check(obj);
@@ -1164,7 +1164,7 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data 
*sd)
         if (top && top_is_win && sd->input_panel_enable &&
             !edje_object_part_text_imf_context_get(sd->entry_edje, "elm.text"))
           elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
-        evas_object_smart_callback_call(obj, SIG_UNFOCUSED, NULL);
+        eo_do(obj, eo_event_callback_call(ELM_LAYOUT_EVENT_UNFOCUSED, NULL));
         if (_elm_config->atspi_mode)
           elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_FALSE);
 
@@ -1271,9 +1271,9 @@ _hover_del_job(void *data)
    sd->hov_deljob = NULL;
 }
 
-static void
+static Eina_Bool
 _hover_dismissed_cb(void *data,
-                    Evas_Object *obj EINA_UNUSED,
+                    Eo *obj EINA_UNUSED, const Eo_Event_Description *desc 
EINA_UNUSED,
                     void *event_info EINA_UNUSED)
 {
    ELM_ENTRY_DATA_GET(data, sd);
@@ -1292,6 +1292,8 @@ _hover_dismissed_cb(void *data,
    elm_widget_scroll_freeze_pop(data);
    ecore_job_del(sd->hov_deljob);
    sd->hov_deljob = ecore_job_add(_hover_del_job, data);
+
+   return EINA_TRUE;
 }
 
 static void
@@ -1397,7 +1399,8 @@ _paste_cb(void *data,
 
    ELM_ENTRY_DATA_GET(data, sd);
 
-   evas_object_smart_callback_call(data, SIG_SELECTION_PASTE, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_PASTE, NULL));
 
    sd->selection_asked = EINA_TRUE;
 
@@ -1448,7 +1451,8 @@ _cut_cb(void *data,
 {
    ELM_ENTRY_DATA_GET(data, sd);
 
-   evas_object_smart_callback_call(data, SIG_SELECTION_CUT, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CUT, NULL));
    /* Store it */
    sd->sel_mode = EINA_FALSE;
    if (!_elm_config->desktop_entry)
@@ -1470,7 +1474,8 @@ _copy_cb(void *data,
 {
    ELM_ENTRY_DATA_GET(data, sd);
 
-   evas_object_smart_callback_call(data, SIG_SELECTION_COPY, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_COPY, NULL));
    sd->sel_mode = EINA_FALSE;
    if (!_elm_config->desktop_entry)
      {
@@ -1558,8 +1563,8 @@ _menu_call(Evas_Object *obj)
 
         if (top) elm_hoversel_hover_parent_set(sd->hoversel, top);
 
-        evas_object_smart_callback_add
-          (sd->hoversel, "dismissed", _hover_dismissed_cb, obj);
+        eo_do(sd->hoversel, eo_event_callback_add
+          (ELM_HOVER_EVENT_DISMISSED, _hover_dismissed_cb, obj));
         if (sd->have_selection)
           {
              if (!sd->password)
@@ -1769,7 +1774,8 @@ _long_press_cb(void *data)
    sd->long_pressed = EINA_TRUE;
 
    sd->longpress_timer = NULL;
-   evas_object_smart_callback_call(data, SIG_LONGPRESSED, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_CLICKABLE_INTERFACE_EVENT_LONGPRESSED, NULL));
 
    return ECORE_CALLBACK_CANCEL;
 }
@@ -1934,7 +1940,7 @@ _mouse_move_cb(void *data,
 
 static void
 _entry_changed_handle(void *data,
-                      const char *event)
+                      const Eo_Event_Description* event)
 {
    Evas_Coord minh;
    const char *text;
@@ -1972,7 +1978,7 @@ _entry_changed_handle(void *data,
    /* callback - this could call callbacks that delete the
     * entry... thus... any access to sd after this could be
     * invalid */
-   evas_object_smart_callback_call(data, event, NULL);
+   eo_do(data, eo_event_callback_call(event, NULL));
 }
 
 static void
@@ -1981,7 +1987,7 @@ _entry_changed_signal_cb(void *data,
                          const char *emission EINA_UNUSED,
                          const char *source EINA_UNUSED)
 {
-   _entry_changed_handle(data, SIG_CHANGED);
+   _entry_changed_handle(data, ELM_ENTRY_EVENT_CHANGED);
 }
 
 static void
@@ -1997,11 +2003,11 @@ _entry_changed_user_signal_cb(void *data,
    if (edje_info)
      {
         memcpy(&info, edje_info, sizeof(info));
-        evas_object_smart_callback_call(data, SIG_CHANGED_USER, &info);
+        eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_CHANGED_USER, 
&info));
      }
    else
      {
-        evas_object_smart_callback_call(data, SIG_CHANGED_USER, NULL);
+        eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_CHANGED_USER, 
NULL));
      }
    if (_elm_config->atspi_mode)
      {
@@ -2029,7 +2035,7 @@ _entry_preedit_changed_signal_cb(void *data,
                                  const char *emission EINA_UNUSED,
                                  const char *source EINA_UNUSED)
 {
-   _entry_changed_handle(data, SIG_PREEDIT_CHANGED);
+   _entry_changed_handle(data, ELM_ENTRY_EVENT_PREEDIT_CHANGED);
 }
 
 static void
@@ -2038,7 +2044,7 @@ _entry_undo_request_signal_cb(void *data,
                               const char *emission EINA_UNUSED,
                               const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_UNDO_REQUEST, NULL);
+   eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_UNDO_REQUEST, NULL));
 }
 
 static void
@@ -2047,7 +2053,7 @@ _entry_redo_request_signal_cb(void *data,
                               const char *emission EINA_UNUSED,
                               const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_REDO_REQUEST, NULL);
+   eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_REDO_REQUEST, NULL));
 }
 
 static void
@@ -2065,7 +2071,8 @@ _entry_selection_start_signal_cb(void *data,
      {
         if (entry != data) elm_entry_select_none(entry);
      }
-   evas_object_smart_callback_call(data, SIG_SELECTION_START, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_START, NULL));
 
    top = elm_widget_top_get(data);
    if (txt && top && (elm_win_window_id_get(top)))
@@ -2104,7 +2111,8 @@ _entry_selection_changed_signal_cb(void *data,
    ELM_ENTRY_DATA_GET(data, sd);
 
    sd->have_selection = EINA_TRUE;
-   evas_object_smart_callback_call(data, SIG_SELECTION_CHANGED, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CHANGED, NULL));
    _selection_store(ELM_SEL_TYPE_PRIMARY, data);
    _update_selection_handler(data);
    if (_elm_config->atspi_mode)
@@ -2122,7 +2130,8 @@ _entry_selection_cleared_signal_cb(void *data,
    if (!sd->have_selection) return;
 
    sd->have_selection = EINA_FALSE;
-   evas_object_smart_callback_call(data, SIG_SELECTION_CLEARED, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CLEARED, NULL));
    if (sd->cut_sel)
      {
         elm_cnp_selection_set
@@ -2153,7 +2162,8 @@ _entry_paste_request_signal_cb(void *data,
      ELM_SEL_TYPE_PRIMARY : ELM_SEL_TYPE_CLIPBOARD;
 
    if (!sd->editable) return;
-   evas_object_smart_callback_call(data, SIG_SELECTION_PASTE, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_PASTE, NULL));
 
    top = elm_widget_top_get(data);
    if ((top) && (elm_win_window_id_get(top)))
@@ -2212,7 +2222,8 @@ _entry_cursor_changed_manual_signal_cb(void *data,
                                        const char *emission EINA_UNUSED,
                                        const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_CURSOR_CHANGED_MANUAL, NULL);
+   eo_do(data, eo_event_callback_call
+     (ELM_ENTRY_EVENT_CURSOR_CHANGED_MANUAL, NULL));
    if (_elm_config->atspi_mode)
      eo_do(data, 
eo_event_callback_call(ELM_INTERFACE_ATSPI_TEXT_EVENT_ACCESS_TEXT_CARET_MOVED, 
NULL));
 }
@@ -2270,7 +2281,7 @@ _entry_anchor_down_signal_cb(void *data,
    _signal_anchor_geoms_do_things_with_lol(sd, &ei);
 
    if (!sd->disabled)
-     evas_object_smart_callback_call(data, SIG_ANCHOR_DOWN, &ei);
+     eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_DOWN, &ei));
 }
 
 static void
@@ -2293,7 +2304,7 @@ _entry_anchor_up_signal_cb(void *data,
    _signal_anchor_geoms_do_things_with_lol(sd, &ei);
 
    if (!sd->disabled)
-     evas_object_smart_callback_call(data, SIG_ANCHOR_UP, &ei);
+     eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_UP, &ei));
 }
 
 static void
@@ -2309,12 +2320,13 @@ _anchor_hover_del_cb(void *data,
      (sd->anchor_hover.hover, EVAS_CALLBACK_DEL, _anchor_hover_del_cb, obj);
 }
 
-static void
+static Eina_Bool
 _anchor_hover_clicked_cb(void *data,
-                         Evas_Object *obj EINA_UNUSED,
-                         void *event_info EINA_UNUSED)
+      Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    elm_entry_anchor_hover_end(data);
+
+   return EINA_TRUE;
 }
 
 static void
@@ -2375,9 +2387,9 @@ _entry_hover_anchor_clicked_do(Evas_Object *obj,
         ei.hover_right = tmp;
      }
 
-   evas_object_smart_callback_call(obj, SIG_ANCHOR_HOVER_OPENED, &ei);
-   evas_object_smart_callback_add
-     (sd->anchor_hover.hover, "clicked", _anchor_hover_clicked_cb, obj);
+   eo_do(obj, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_HOVER_OPENED, 
&ei));
+   eo_do(sd->anchor_hover.hover, eo_event_callback_add
+     (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _anchor_hover_clicked_cb, obj));
 
    /* FIXME: Should just check if there's any callback registered to
     * the smart events instead.  This is used to determine if anyone
@@ -2415,7 +2427,7 @@ _entry_anchor_clicked_signal_cb(void *data,
 
    if (!sd->disabled)
      {
-        evas_object_smart_callback_call(data, SIG_ANCHOR_CLICKED, &ei);
+        eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_CLICKED, 
&ei));
         _entry_hover_anchor_clicked_do(data, &ei);
      }
 }
@@ -2445,7 +2457,7 @@ _entry_anchor_in_signal_cb(void *data,
    _signal_anchor_geoms_do_things_with_lol(sd, &ei);
 
    if (!sd->disabled)
-     evas_object_smart_callback_call(data, SIG_ANCHOR_IN, &ei);
+     eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_IN, &ei));
 }
 
 static void
@@ -2465,7 +2477,7 @@ _entry_anchor_out_signal_cb(void *data,
    _signal_anchor_geoms_do_things_with_lol(sd, &ei);
 
    if (!sd->disabled)
-     evas_object_smart_callback_call(data, SIG_ANCHOR_OUT, &ei);
+     eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ANCHOR_OUT, &ei));
 }
 
 static void
@@ -2474,7 +2486,7 @@ _entry_key_enter_signal_cb(void *data,
                            const char *emission EINA_UNUSED,
                            const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_ACTIVATED, NULL);
+   eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ACTIVATED, NULL));
 }
 
 static void
@@ -2483,7 +2495,7 @@ _entry_key_escape_signal_cb(void *data,
                             const char *emission EINA_UNUSED,
                             const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_ABORTED, NULL);
+   eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_ABORTED, NULL));
 }
 
 static void
@@ -2492,7 +2504,7 @@ _entry_mouse_down_signal_cb(void *data,
                             const char *emission EINA_UNUSED,
                             const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_PRESS, NULL);
+   eo_do(data, eo_event_callback_call(ELM_ENTRY_EVENT_PRESS, NULL));
 }
 
 static void
@@ -2501,7 +2513,8 @@ _entry_mouse_clicked_signal_cb(void *data,
                                const char *emission EINA_UNUSED,
                                const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, NULL));
 }
 
 static void
@@ -2510,7 +2523,8 @@ _entry_mouse_double_signal_cb(void *data,
                               const char *emission EINA_UNUSED,
                               const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_CLICKED_DOUBLE, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED_DOUBLE, NULL));
 }
 
 static void
@@ -2519,7 +2533,8 @@ _entry_mouse_triple_signal_cb(void *data,
                               const char *emission EINA_UNUSED,
                               const char *source EINA_UNUSED)
 {
-   evas_object_smart_callback_call(data, SIG_CLICKED_TRIPLE, NULL);
+   eo_do(data, eo_event_callback_call
+     (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED_TRIPLE, NULL));
 }
 
 static Evas_Object *
@@ -2672,7 +2687,8 @@ _text_append_idler(void *data)
         free(sd->append_text_left);
         sd->append_text_left = NULL;
         sd->append_text_idler = NULL;
-        evas_object_smart_callback_call(obj, SIG_TEXT_SET_DONE, NULL);
+        eo_do(obj, eo_event_callback_call
+          (ELM_ENTRY_EVENT_TEXT_SET_DONE, NULL));
         return ECORE_CALLBACK_CANCEL;
      }
 }
@@ -2734,7 +2750,8 @@ _chars_add_till_limit(Evas_Object *obj,
           {
              if (!i)
                {
-                  evas_object_smart_callback_call(obj, SIG_MAX_LENGTH, NULL);
+                  eo_do(obj, eo_event_callback_call
+                    (ELM_ENTRY_EVENT_MAXLENGTH_REACHED, NULL));
                   ELM_SAFE_FREE(*text, free);
                   return;
                }
@@ -2752,7 +2769,7 @@ _chars_add_till_limit(Evas_Object *obj,
         i++;
      }
 
-   evas_object_smart_callback_call(obj, SIG_MAX_LENGTH, NULL);
+   eo_do(obj, eo_event_callback_call(ELM_ENTRY_EVENT_MAXLENGTH_REACHED, NULL));
 }
 
 EOLIAN static void
@@ -2899,7 +2916,7 @@ _entry_text_append(Evas_Object* obj, const char* entry)
              /* For the case of text set, append will have similar behaviour
               * as entry text is cleared first */
              edje_object_part_text_append(sd->entry_edje, "elm.text", entry);
-             evas_object_smart_callback_call(obj, SIG_TEXT_SET_DONE, NULL);
+             eo_do(obj, eo_event_callback_call(ELM_ENTRY_EVENT_TEXT_SET_DONE, 
NULL));
           }
      }
 }
@@ -3976,7 +3993,8 @@ _elm_entry_select_none(Eo *obj EINA_UNUSED, 
Elm_Entry_Data *sd)
         edje_object_signal_emit(sd->entry_edje, "elm,state,select,off", "elm");
      }
    if (sd->have_selection)
-     evas_object_smart_callback_call(obj, SIG_SELECTION_CLEARED, NULL);
+     eo_do(obj, eo_event_callback_call
+       (EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CLEARED, NULL));
 
    sd->have_selection = EINA_FALSE;
    edje_object_part_text_select_none(sd->entry_edje, "elm.text");
@@ -4362,7 +4380,8 @@ elm_entry_filter_limit_size(void *data,
         newlen = evas_string_char_len_get(utfstr);
         if ((len >= lim->max_char_count) && (newlen > 0))
           {
-             evas_object_smart_callback_call(entry, SIG_MAX_LENGTH, NULL);
+             eo_do(entry, eo_event_callback_call
+               (ELM_ENTRY_EVENT_MAXLENGTH_REACHED, NULL));
              ELM_SAFE_FREE(*text, free);
              free(current);
              free(utfstr);
@@ -4378,7 +4397,8 @@ elm_entry_filter_limit_size(void *data,
         newlen = strlen(utfstr);
         if ((len >= lim->max_byte_count) && (newlen > 0))
           {
-             evas_object_smart_callback_call(entry, SIG_MAX_LENGTH, NULL);
+             eo_do(entry, eo_event_callback_call
+               (ELM_ENTRY_EVENT_MAXLENGTH_REACHED, NULL));
              ELM_SAFE_FREE(*text, free);
              free(current);
              free(utfstr);
@@ -4512,7 +4532,7 @@ inserting:
      }
    *insert = 0;
    if (rejected)
-     evas_object_smart_callback_call(entry, SIG_REJECTED, NULL);
+     eo_do(entry, eo_event_callback_call(ELM_ENTRY_EVENT_REJECTED, NULL));
 }
 
 EOLIAN static void
@@ -4645,7 +4665,8 @@ _scroll_cb(Evas_Object *obj, void *data EINA_UNUSED)
 {
    ELM_ENTRY_DATA_GET(obj, sd);
    /* here we need to emit the signal that the elm_scroller would have done */
-   evas_object_smart_callback_call(obj, "scroll", NULL);
+   eo_do(obj, eo_event_callback_call
+     (EVAS_SCROLLABLE_INTERFACE_EVENT_SCROLL, NULL));
 
    if (sd->have_selection)
      _update_selection_handler(obj);
@@ -5060,7 +5081,8 @@ _elm_entry_elm_widget_activate(Eo *obj, Elm_Entry_Data 
*_pd EINA_UNUSED, Elm_Act
    if (!elm_widget_disabled_get(obj) &&
        !evas_object_freeze_events_get(obj))
      {
-        evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+        eo_do(obj, eo_event_callback_call
+          (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, NULL));
         if (sd->editable && sd->input_panel_enable)
           edje_object_part_text_input_panel_show(sd->entry_edje, "elm.text");
      }
diff --git a/src/lib/elm_entry.eo b/src/lib/elm_entry.eo
index 9207845..f4876a9 100644
--- a/src/lib/elm_entry.eo
+++ b/src/lib/elm_entry.eo
@@ -8,7 +8,8 @@ enum Elm.Text_Format
 }
 
 class Elm.Entry (Elm.Layout, Elm_Interface_Scrollable, 
Evas.Clickable_Interface,
-                 Elm_Interface_Atspi_Text, Elm_Interface_Atspi_Editable_Text, 
Efl.File)
+                 Elm_Interface_Atspi_Text, Elm_Interface_Atspi_Editable_Text, 
Efl.File,
+                 Evas.Selectable_Interface, Evas.Scrollable_Interface)
 {
    eo_prefix: elm_obj_entry;
    methods {
@@ -1237,6 +1238,22 @@ class Elm.Entry (Elm.Layout, Elm_Interface_Scrollable, 
Evas.Clickable_Interface,
       changed,user;
       validate;
       context,open;
+      anchor,clicked;
+      rejected;
+      maxlength,reached;
+      preedit,changed;
+      press;
+      redo,request;
+      undo,request;
+      text,set,done;
+      aborted;
+      anchor,down;
+      anchor,hover,opened;
+      anchor,in;
+      anchor,out;
+      anchor,up;
+      cursor,changed;
+      cursor,changed,manual;
    }
 
 }

-- 


Reply via email to