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

Reply via email to