Enlightenment CVS committal Author : moom Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_entry.c Log Message: * [Entry] You can now paste some text in the entry =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_entry.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- e_entry.c 20 Aug 2006 09:48:13 -0000 1.25 +++ e_entry.c 20 Aug 2006 12:27:33 -0000 1.26 @@ -9,6 +9,7 @@ { Evas_Object *entry_object; Evas_Object *editable_object; + Ecore_Event_Handler *selection_handler; int enabled; int focused; @@ -23,6 +24,7 @@ static void _e_entry_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_entry_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_entry_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static int _e_entry_selection_notify_handler(void *data, int type, void *event); static void _e_entry_smart_add(Evas_Object *object); static void _e_entry_smart_del(Evas_Object *object); @@ -391,9 +393,11 @@ } } else if (strcmp(event->keyname, "v") == 0) - { - //ecore_x_selection_clipboard_request(); - } + { + if ((win = e_win_evas_object_win_get(obj))) + ecore_x_selection_clipboard_request(win->evas_win, + ECORE_X_SELECTION_TARGET_UTF8_STRING); + } } /* Otherwise, we insert the corresponding character */ else if ((event->string) && @@ -472,6 +476,52 @@ } } +/* Called when the the "selection_notify" event is emitted */ +static int +_e_entry_selection_notify_handler(void *data, int type, void *event) +{ + Evas_Object *entry; + E_Entry_Smart_Data *sd; + Ecore_X_Event_Selection_Notify *ev; + Ecore_X_Selection_Data *selection_data; + Evas_Object *editable; + int cursor_pos, selection_pos; + int start_pos, end_pos; + int selecting; + int changed = 0; + + if ((!(entry = data)) || (!(sd = evas_object_smart_data_get(entry)))) + return 1; + if (!sd->focused) + return 1; + + editable = sd->editable_object; + cursor_pos = e_editable_cursor_pos_get(editable); + selection_pos = e_editable_selection_pos_get(editable); + start_pos = (cursor_pos <= selection_pos) ? cursor_pos : selection_pos; + end_pos = (cursor_pos >= selection_pos) ? cursor_pos : selection_pos; + selecting = (start_pos != end_pos); + + ev = event; + if (ev->selection == ECORE_X_SELECTION_CLIPBOARD) + { + if (strcmp(ev->target, ECORE_X_SELECTION_TARGET_UTF8_STRING) == 0) + { + Ecore_X_Selection_Data_Text *text_data; + + text_data = ev->data; + if (selecting) + changed = e_editable_delete(editable, start_pos, end_pos); + changed |= e_editable_insert(editable, start_pos, text_data->text); + } + } + + if (changed) + evas_object_smart_callback_call(entry, "changed", NULL); + + return 1; +} + /* Editable object's smart methods */ static void _e_entry_smart_add(Evas_Object *object) @@ -518,6 +568,10 @@ _e_entry_mouse_up_cb, NULL); evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_MOVE, _e_entry_mouse_move_cb, NULL); + sd->selection_handler = ecore_event_handler_add( + ECORE_X_EVENT_SELECTION_NOTIFY, + _e_entry_selection_notify_handler, + object); } static void _e_entry_smart_del(Evas_Object *object) @@ -527,8 +581,10 @@ if ((!object) || !(sd = evas_object_smart_data_get(object))) return; + ecore_event_handler_del(sd->selection_handler); evas_object_del(sd->editable_object); evas_object_del(sd->entry_object); + free(sd); } static void _e_entry_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y) ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs