Enlightenment CVS committal Author : moom Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: Etk.h Makefile.am etk_combobox.c etk_entry.c etk_entry.h etk_types.h Added Files: etk_editable.c etk_editable.h Removed Files: etk_editable_text_object.c etk_editable_text_object.h Log Message: * Rewrite the entry using the code of e_editable.c/h from e17 =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/Etk.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- Etk.h 17 Aug 2006 17:18:14 -0000 1.38 +++ Etk.h 17 Aug 2006 23:17:58 -0000 1.39 @@ -34,7 +34,7 @@ #include "etk_dialog.h" #include "etk_dnd.h" #include "etk_drag.h" -#include "etk_editable_text_object.h" +#include "etk_editable.h" #include "etk_embed.h" #include "etk_engine.h" #include "etk_entry.h" =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/Makefile.am,v retrieving revision 1.42 retrieving revision 1.43 diff -u -3 -r1.42 -r1.43 --- Makefile.am 13 Aug 2006 20:33:15 -0000 1.42 +++ Makefile.am 17 Aug 2006 23:17:58 -0000 1.43 @@ -32,7 +32,7 @@ etk_dialog.h \ etk_dnd.h \ etk_drag.h \ -etk_editable_text_object.h \ +etk_editable.h \ etk_embed.h \ etk_engine.h \ etk_entry.h \ @@ -100,7 +100,7 @@ etk_dialog.c \ etk_dnd.c \ etk_drag.c \ -etk_editable_text_object.c \ +etk_editable.c \ etk_embed.c \ etk_engine.c \ etk_entry.c \ =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_combobox.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- etk_combobox.c 13 Aug 2006 22:42:23 -0000 1.25 +++ etk_combobox.c 17 Aug 2006 23:17:58 -0000 1.26 @@ -11,12 +11,12 @@ #include "etk_signal.h" #include "etk_signal_callback.h" -#define ETK_COMBOBOX_DEFAULT_ITEM_HEIGHT 24 - /** * @addtogroup Etk_Combobox * @{ */ + +#define ETK_COMBOBOX_DEFAULT_ITEM_HEIGHT 24 enum Etk_Combobox_Signal_Id { =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_entry.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- etk_entry.c 8 Aug 2006 18:51:22 -0000 1.17 +++ etk_entry.c 17 Aug 2006 23:17:58 -0000 1.18 @@ -1,27 +1,27 @@ /** @file etk_entry.c */ #include "etk_entry.h" -#include <stdio.h> #include <stdlib.h> #include <string.h> +#include "etk_editable.h" +#include "etk_toplevel_widget.h" #include "etk_signal.h" #include "etk_signal_callback.h" -#include "etk_editable_text_object.h" -#include "etk_toplevel_widget.h" +#include "etk_utils.h" /** * @addtogroup Etk_Entry -* @{ + * @{ */ -enum _Etk_Entry_Signal_Id +enum Etk_Entry_Signal_Id { ETK_ENTRY_TEXT_CHANGED_SIGNAL, ETK_ENTRY_NUM_SIGNALS }; -enum _Etk_Entry_Propery_Id +enum Etk_Entry_Propery_Id { - ETK_ENTRY_PASSWORD_PROPERTY + ETK_ENTRY_PASSWORD_MODE_PROPERTY }; static void _etk_entry_constructor(Etk_Entry *entry); @@ -29,15 +29,18 @@ static void _etk_entry_property_get(Etk_Object *object, int property_id, Etk_Property_Value *value); static void _etk_entry_realize_cb(Etk_Object *object, void *data); static void _etk_entry_unrealize_cb(Etk_Object *object, void *data); -static void _etk_entry_key_down_cb(Etk_Object *object, void *event, void *data); +static void _etk_entry_key_down_cb(Etk_Object *object, void *event_info, void *data); static void _etk_entry_mouse_in_cb(Etk_Object *object, Etk_Event_Mouse_In_Out *event, void *data); static void _etk_entry_mouse_out_cb(Etk_Object *object, Etk_Event_Mouse_In_Out *event, void *data); +static void _etk_entry_mouse_down_cb(Etk_Object *object, Etk_Event_Mouse_Up_Down *event, void *data); +static void _etk_entry_mouse_up_cb(Etk_Object *object, Etk_Event_Mouse_Up_Down *event, void *data); +static void _etk_entry_mouse_move_cb(Etk_Object *object, Etk_Event_Mouse_Move *event, void *data); static void _etk_entry_focus_cb(Etk_Object *object, void *data); static void _etk_entry_unfocus_cb(Etk_Object *object, void *data); -static void _etk_entry_text_changed_cb(Etk_Object *object, void *data); static Etk_Signal *_etk_entry_signals[ETK_ENTRY_NUM_SIGNALS]; + /************************** * * Implementation @@ -45,8 +48,9 @@ **************************/ /** + * @internal * @brief Gets the type of an Etk_Entry - * @return Returns the type on an Etk_Entry + * @return Returns the type of an Etk_Entry */ Etk_Type *etk_entry_type_get() { @@ -54,12 +58,15 @@ if (!entry_type) { - entry_type = etk_type_new("Etk_Entry", ETK_WIDGET_TYPE, sizeof(Etk_Entry), ETK_CONSTRUCTOR(_etk_entry_constructor), NULL); + entry_type = etk_type_new("Etk_Entry", ETK_WIDGET_TYPE, sizeof(Etk_Entry), + ETK_CONSTRUCTOR(_etk_entry_constructor), NULL); - _etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL] = etk_signal_new("text_changed", entry_type, -1, etk_marshaller_VOID__VOID, NULL, NULL); + _etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL] = etk_signal_new("text_changed", + entry_type, -1, etk_marshaller_VOID__VOID, NULL, NULL); + + etk_type_property_add(entry_type, "password_mode", ETK_ENTRY_PASSWORD_MODE_PROPERTY, + ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE)); - etk_type_property_add(entry_type, "password", ETK_ENTRY_PASSWORD_PROPERTY, ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE)); - entry_type->property_set = _etk_entry_property_set; entry_type->property_get = _etk_entry_property_get; } @@ -73,7 +80,8 @@ */ Etk_Widget *etk_entry_new() { - return etk_widget_new(ETK_ENTRY_TYPE, "theme_group", "entry", "focusable", ETK_TRUE, "focus_on_click", ETK_TRUE, NULL); + return etk_widget_new(ETK_ENTRY_TYPE, "theme_group", "entry", + "focusable", ETK_TRUE, "focus_on_click", ETK_TRUE, NULL); } /** @@ -85,13 +93,19 @@ { if (!entry) return; - if(!entry->editable_object) - entry->text = strdup(text); - else + + if (!entry->editable_object) { - etk_editable_text_object_text_set(entry->editable_object, text); - etk_signal_emit(_etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL], ETK_OBJECT(entry), NULL); + if (entry->text != text) + { + free(entry->text); + entry->text = strdup(text); + } } + else + etk_editable_text_set(entry->editable_object, text); + + etk_signal_emit(_etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL], ETK_OBJECT(entry), NULL); } /** @@ -101,68 +115,41 @@ */ const char *etk_entry_text_get(Etk_Entry *entry) { - if (!entry || !entry->editable_object) + if (!entry) return NULL; - if(entry->is_password) - return entry->password_text; + + if (!entry->editable_object) + return entry->text; else - return etk_editable_text_object_text_get(entry->editable_object); + return etk_editable_text_get(entry->editable_object); } /** - * @brief Turns an entry into a password entry or disables it + * @brief Sets whether or not the entry is in password mode * @param entry an entry - * @param on wether we want to to be a password entry or not + * @param password_mode ETK_TRUE to turn the entry into a password entry, ETK_FALSE to turn it into a normal entry */ -void etk_entry_password_set(Etk_Entry *entry, Etk_Bool on) +void etk_entry_password_mode_set(Etk_Entry *entry, Etk_Bool password_mode) { - if (!entry) + if (!entry || entry->password_mode == password_mode) return; - - if(entry->is_password == on) - return; - if(on) - { - char *text; - int i; - - entry->is_password = ETK_TRUE; - etk_signal_connect("text_changed", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_text_changed_cb), NULL); - - if(!entry->editable_object) - return; - - entry->password_text = strdup(etk_editable_text_object_text_get(entry->editable_object)); - text = calloc(strlen(entry->password_text) + 1, sizeof(char)); - for(i = 0; i < strlen(entry->password_text); i++) - strncat(text, "*", strlen(entry->password_text)); - etk_editable_text_object_text_set(entry->editable_object, text); - } - else - { - entry->is_password = ETK_FALSE; - etk_signal_disconnect("text_changed", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_text_changed_cb)); - if(entry->password_text && entry->editable_object) - { - etk_editable_text_object_text_set(entry->editable_object, entry->password_text); - free(entry->password_text); - } - - } + if (entry->editable_object) + etk_editable_password_mode_set(entry->editable_object, password_mode); + entry->password_mode = password_mode; + etk_object_notify(ETK_OBJECT(entry), "password_mode"); } /** - * @brief Gets wether an entry is a password entry + * @brief Gets whether or not the entry is in password mode * @param entry an entry - * @return Returns true if its a password entry, false otherwise + * @return Returns ETK_TRUE if the entry is in password mode, ETK_FALSE otherwise */ -Etk_Bool etk_entry_password_get(Etk_Entry *entry) +Etk_Bool etk_entry_password_mode_get(Etk_Entry *entry) { - if (!entry || !entry->editable_object) - return ETK_FALSE; - - return entry->is_password; + if (!entry) + return ETK_FALSE; + return entry->password_mode; } /************************** @@ -178,8 +165,8 @@ return; entry->editable_object = NULL; - entry->is_password = ETK_FALSE; - entry->password_text = NULL; + entry->password_mode = ETK_FALSE; + entry->selection_dragging = ETK_FALSE; entry->text = NULL; etk_signal_connect("realize", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_realize_cb), NULL); @@ -187,26 +174,31 @@ etk_signal_connect("key_down", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_key_down_cb), NULL); etk_signal_connect("mouse_in", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_mouse_in_cb), NULL); etk_signal_connect("mouse_out", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_mouse_out_cb), NULL); + etk_signal_connect("mouse_down", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_mouse_down_cb), NULL); + etk_signal_connect("mouse_up", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_mouse_up_cb), NULL); + etk_signal_connect("mouse_move", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_mouse_move_cb), NULL); etk_signal_connect("focus", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_focus_cb), NULL); etk_signal_connect("unfocus", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_unfocus_cb), NULL); } +/* TODO: free text */ + /* Sets the property whose id is "property_id" to the value "value" */ static void _etk_entry_property_set(Etk_Object *object, int property_id, Etk_Property_Value *value) { Etk_Entry *entry; if (!(entry = ETK_ENTRY(object)) || !value) - return; + return; switch (property_id) - { - case ETK_ENTRY_PASSWORD_PROPERTY: - etk_entry_password_set(entry, etk_property_value_bool_get(value)); - break; + { + case ETK_ENTRY_PASSWORD_MODE_PROPERTY: + etk_entry_password_mode_set(entry, etk_property_value_bool_get(value)); + break; default: - break; - } + break; + } } /* Gets the value of the property whose id is "property_id" */ @@ -215,16 +207,16 @@ Etk_Entry *entry; if (!(entry = ETK_ENTRY(object)) || !value) - return; + return; switch (property_id) - { - case ETK_ENTRY_PASSWORD_PROPERTY: - etk_property_value_bool_set(value, etk_entry_password_get(entry)); - break; + { + case ETK_ENTRY_PASSWORD_MODE_PROPERTY: + etk_property_value_bool_set(value, entry->password_mode); + break; default: - break; - } + break; + } } /************************** @@ -237,61 +229,142 @@ static void _etk_entry_realize_cb(Etk_Object *object, void *data) { Etk_Entry *entry; - Etk_Widget *entry_widget; Evas *evas; - if (!(entry_widget = ETK_WIDGET(object)) || !(evas = etk_widget_toplevel_evas_get(entry_widget))) + if (!(entry = ETK_ENTRY(object)) || !(evas = etk_widget_toplevel_evas_get(ETK_WIDGET(entry)))) return; - entry = ETK_ENTRY(entry_widget); - entry->editable_object = etk_editable_text_object_add(evas); - if(entry->text != NULL) - { - etk_editable_text_object_text_set(entry->editable_object, entry->text); - free(entry->text); - entry->text = NULL; - } + entry->editable_object = etk_editable_add(evas); + etk_editable_text_set(entry->editable_object, entry->text); + etk_editable_password_mode_set(entry->editable_object, entry->password_mode); + etk_editable_cursor_hide(entry->editable_object); + etk_editable_selection_hide(entry->editable_object); evas_object_show(entry->editable_object); - etk_widget_swallow_object(entry_widget, "text_area", entry->editable_object); + etk_widget_swallow_object(ETK_WIDGET(entry), "text_area", entry->editable_object); } /* Called when the entry is unrealized */ static void _etk_entry_unrealize_cb(Etk_Object *object, void *data) { Etk_Entry *entry; + const char *text; if (!(entry = ETK_ENTRY(object))) return; + + free(entry->text); + if ((text = etk_editable_text_get(entry->editable_object))) + entry->text = strdup(text); + else + entry->text = NULL; + + evas_object_del(entry->editable_object); entry->editable_object = NULL; } /* Called when the user presses a key */ -static void _etk_entry_key_down_cb(Etk_Object *object, void *event, void *data) +static void _etk_entry_key_down_cb(Etk_Object *object, void *event_info, void *data) { - Etk_Event_Key_Up_Down *key_event = event; Etk_Entry *entry; - Etk_Bool text_changed = ETK_FALSE; - - if (!(entry = ETK_ENTRY(object)) || !entry->editable_object) - return; - - if (strcmp(key_event->key, "BackSpace") == 0) - text_changed = etk_editable_text_object_delete_char_before(entry->editable_object); - else if (strcmp(key_event->key, "Delete") == 0) - text_changed = etk_editable_text_object_delete_char_after(entry->editable_object); - else if (strcmp(key_event->key, "Left") == 0) - etk_editable_text_object_cursor_move_left(entry->editable_object); - else if (strcmp(key_event->key, "Right") == 0) - etk_editable_text_object_cursor_move_right(entry->editable_object); - else if (strcmp(key_event->key, "Home") == 0) - etk_editable_text_object_cursor_move_at_start(entry->editable_object); - else if (strcmp(key_event->key, "End") == 0) - etk_editable_text_object_cursor_move_at_end(entry->editable_object); - else - text_changed = etk_editable_text_object_insert(entry->editable_object, key_event->string); + Evas_Object *editable; + Etk_Event_Key_Up_Down *event; + int cursor_pos, selection_pos; + int start_pos, end_pos; + Etk_Bool selecting; + Etk_Bool changed = ETK_FALSE; + + if (!(entry = ETK_ENTRY(object)) || !(event = event_info) || !event->keyname) + return; - if (text_changed) - etk_signal_emit(_etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL], object, NULL); + editable = entry->editable_object; + cursor_pos = etk_editable_cursor_pos_get(editable); + selection_pos = etk_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); + + /* TODO: CTRL + A, X, C, V */ + + /* Move the cursor/selection to the left */ + if (strcmp(event->key, "Left") == 0) + { + if (evas_key_modifier_is_set(event->modifiers, "Shift")) + etk_editable_cursor_move_left(editable); + else if (selecting) + { + if (cursor_pos < selection_pos) + etk_editable_selection_pos_set(editable, cursor_pos); + else + etk_editable_cursor_pos_set(editable, selection_pos); + } + else + { + etk_editable_cursor_move_left(editable); + etk_editable_selection_pos_set(editable, etk_editable_cursor_pos_get(editable)); + } + } + /* Move the cursor/selection to the right */ + else if (strcmp(event->key, "Right") == 0) + { + if (evas_key_modifier_is_set(event->modifiers, "Shift")) + etk_editable_cursor_move_right(editable); + else if (selecting) + { + if (cursor_pos > selection_pos) + etk_editable_selection_pos_set(editable, cursor_pos); + else + etk_editable_cursor_pos_set(editable, selection_pos); + } + else + { + etk_editable_cursor_move_right(editable); + etk_editable_selection_pos_set(editable, etk_editable_cursor_pos_get(editable)); + } + } + /* Move the cursor/selection to the start of the entry */ + else if ((strcmp(event->keyname, "Home") == 0) || + ((event->string) && (strlen(event->string) == 1) && (event->string[0] == 0x1))) + { + etk_editable_cursor_move_to_start(editable); + if (!evas_key_modifier_is_set(event->modifiers, "Shift")) + etk_editable_selection_pos_set(editable, etk_editable_cursor_pos_get(editable)); + } + /* Move the cursor/selection to the end of the entry */ + else if ((strcmp(event->keyname, "End") == 0) || + ((event->string) && (strlen(event->string) == 1) && (event->string[0] == 0x5))) + { + etk_editable_cursor_move_to_end(editable); + if (!evas_key_modifier_is_set(event->modifiers, "Shift")) + etk_editable_selection_pos_set(editable, etk_editable_cursor_pos_get(editable)); + } + /* Remove the previous character */ + else if ((strcmp(event->keyname, "BackSpace") == 0) || + ((event->string) && (strlen(event->string) == 1) && (event->string[0] == 0x8))) + { + if (selecting) + changed = etk_editable_delete(editable, start_pos, end_pos); + else + changed = etk_editable_delete(editable, cursor_pos - 1, cursor_pos); + } + /* Remove the next character */ + else if ((!strcmp(event->keyname, "Delete")) || + ((event->string) && (strlen(event->string) == 1) && (event->string[0] == 0x4))) + { + if (selecting) + changed = etk_editable_delete(editable, start_pos, end_pos); + else + changed = etk_editable_delete(editable, cursor_pos, cursor_pos + 1); + } + /* Otherwise, we insert the corresponding character */ + else if ((event->string) && ((strlen(event->string) != 1) || (event->string[0] >= 0x20))) + { + if (selecting) + changed = etk_editable_delete(editable, start_pos, end_pos); + changed |= etk_editable_insert(editable, start_pos, event->string); + } + + if (changed) + etk_signal_emit(_etk_entry_signals[ETK_ENTRY_TEXT_CHANGED_SIGNAL], ETK_OBJECT(entry), NULL); } /* Called when the mouse enters the entry */ @@ -314,89 +387,81 @@ etk_toplevel_widget_pointer_pop(entry_widget->toplevel_parent, ETK_POINTER_TEXT_EDIT); } -/* Called when the entry is focused */ -static void _etk_entry_focus_cb(Etk_Object *object, void *data) +/* Called when the entry is pressed by the mouse */ +static void _etk_entry_mouse_down_cb(Etk_Object *object, Etk_Event_Mouse_Up_Down *event, void *data) { Etk_Entry *entry; - - if (!(entry = ETK_ENTRY(object)) || !entry->editable_object) + Evas_Coord ox, oy; + int pos; + + if (!(entry = ETK_ENTRY(object))) return; - etk_editable_text_object_cursor_show(entry->editable_object); + + evas_object_geometry_get(entry->editable_object, &ox, &oy, NULL, NULL); + pos = etk_editable_pos_get_from_coords(entry->editable_object, event->canvas.x - ox, event->canvas.y - oy); + if (pos >= 0) + { + etk_editable_cursor_pos_set(entry->editable_object, pos); + if (!evas_key_modifier_is_set(event->modifiers, "Shift")) + etk_editable_selection_pos_set(entry->editable_object, pos); + + entry->selection_dragging = ETK_TRUE; + } } -/* Called when the entry is unfocused */ -static void _etk_entry_unfocus_cb(Etk_Object *object, void *data) +/* Called when the entry is released by the mouse */ +static void _etk_entry_mouse_up_cb(Etk_Object *object, Etk_Event_Mouse_Up_Down *event, void *data) { Etk_Entry *entry; - - if (!(entry = ETK_ENTRY(object)) || !entry->editable_object) + + if (!(entry = ETK_ENTRY(object))) return; - etk_editable_text_object_cursor_hide(entry->editable_object); - etk_editable_text_object_cursor_move_at_start(entry->editable_object); + entry->selection_dragging = ETK_FALSE; } -/* Called when the entry's text is changed and its a password */ -static void _etk_entry_text_changed_cb(Etk_Object *object, void *data) +/* Called when the mouse moves over the entry */ +static void _etk_entry_mouse_move_cb(Etk_Object *object, Etk_Event_Mouse_Move *event, void *data) { - Etk_Entry *entry; - const char *text; - char *text2; - int i; + Etk_Entry *entry; + Evas_Coord ox, oy; + int pos; if (!(entry = ETK_ENTRY(object))) - return; + return; - if(entry->password_text) + if (entry->selection_dragging) { - int size; - - text = etk_editable_text_object_text_get(entry->editable_object); - if(!text) - return; - - while(*text == '*') - ++text; - - if(*text == '\0') - { - int size; - - /* set the visible text, the *'s */ - text = etk_editable_text_object_text_get(entry->editable_object); - size = strlen(text) + 1; - text2 = calloc(size, sizeof(char)); - snprintf(text2, size, "%s", text); - etk_editable_text_object_text_set(entry->editable_object, text2); - free(text2); - - /* save the real text */ - size = strlen(entry->password_text) + 1; - text2 = calloc(size, sizeof(char)); - snprintf(text2, size - 1, "%s", entry->password_text); - free(entry->password_text); - entry->password_text = text2; - - return; - } - else - { - size = strlen(text) + strlen(entry->password_text) + 1; - text2 = calloc(size, sizeof(char)); - snprintf(text2, size, "%s%s", entry->password_text, text); - free(entry->password_text); - entry->password_text = text2; - } + evas_object_geometry_get(entry->editable_object, &ox, &oy, NULL, NULL); + pos = etk_editable_pos_get_from_coords(entry->editable_object, event->cur.canvas.x - ox, event->cur.canvas.y - oy); + if (pos >= 0) + etk_editable_cursor_pos_set(entry->editable_object, pos); } - else - entry->password_text = strdup(etk_editable_text_object_text_get(entry->editable_object)); +} - text = etk_entry_text_get(entry); - text2 = calloc(strlen(text) + 2, sizeof(char)); - for(i = 0; i < strlen(text); i++) - strncat(text2, "*", strlen(text)); - etk_editable_text_object_text_set(entry->editable_object, text2); +/* Called when the entry is focused */ +static void _etk_entry_focus_cb(Etk_Object *object, void *data) +{ + Etk_Entry *entry; + + if (!(entry = ETK_ENTRY(object)) || !entry->editable_object) + return; + + etk_editable_cursor_show(entry->editable_object); + etk_editable_selection_show(entry->editable_object); +} + +/* Called when the entry is unfocused */ +static void _etk_entry_unfocus_cb(Etk_Object *object, void *data) +{ + Etk_Entry *entry; + + if (!(entry = ETK_ENTRY(object)) || !entry->editable_object) + return; - free(text2); + etk_editable_cursor_move_to_end(entry->editable_object); + etk_editable_selection_move_to_end(entry->editable_object); + etk_editable_cursor_hide(entry->editable_object); + etk_editable_selection_hide(entry->editable_object); } /** @} */ =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_entry.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- etk_entry.h 12 Mar 2006 09:21:50 -0000 1.5 +++ etk_entry.h 17 Aug 2006 23:17:58 -0000 1.6 @@ -8,42 +8,42 @@ /** * @defgroup Etk_Entry Etk_Entry + * @brief An Etk_Entry is a widget that allows the user to type, select or delete a single-line text * @{ */ -/** @brief Gets the type of an entry */ +/** Gets the type of an entry */ #define ETK_ENTRY_TYPE (etk_entry_type_get()) -/** @brief Casts the object to an Etk_Entry */ +/** Casts the object to an Etk_Entry */ #define ETK_ENTRY(obj) (ETK_OBJECT_CAST((obj), ETK_ENTRY_TYPE, Etk_Entry)) -/** @brief Checks if the object is an Etk_Entry */ +/** Checks if the object is an Etk_Entry */ #define ETK_IS_ENTRY(obj) (ETK_OBJECT_CHECK_TYPE((obj), ETK_ENTRY_TYPE)) /** - * @struct Etk_Entry - * @brief An Etk_Entry is a widget to edit single-line text + * @brief @widget A field where the user can edit a single-line text + * @structinfo */ -struct _Etk_Entry +struct Etk_Entry { /* private: */ /* Inherit from Etk_Widget */ Etk_Widget widget; Evas_Object *editable_object; - - Etk_Bool is_password; - char *password_text; - char *text; + Etk_Bool password_mode; + Etk_Bool selection_dragging; + char *text; }; -Etk_Type *etk_entry_type_get(); + +Etk_Type *etk_entry_type_get(); Etk_Widget *etk_entry_new(); void etk_entry_text_set(Etk_Entry *entry, const char *text); const char *etk_entry_text_get(Etk_Entry *entry); -void etk_entry_password_set(Etk_Entry *entry, Etk_Bool on); -Etk_Bool etk_entry_password_get(Etk_Entry *entry); - - +void etk_entry_password_mode_set(Etk_Entry *entry, Etk_Bool password_mode); +Etk_Bool etk_entry_password_mode_get(Etk_Entry *entry); + /** @} */ #endif =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_types.h,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- etk_types.h 17 Aug 2006 17:18:14 -0000 1.52 +++ etk_types.h 17 Aug 2006 23:17:58 -0000 1.53 @@ -46,7 +46,7 @@ typedef struct _Etk_Drag Etk_Drag; typedef struct Etk_Embed Etk_Embed; typedef struct Etk_Engine Etk_Engine; -typedef struct _Etk_Entry Etk_Entry; +typedef struct Etk_Entry Etk_Entry; typedef struct _Etk_Event_Key_Up_Down Etk_Event_Key_Up_Down; typedef struct _Etk_Event_Mouse_In_Out Etk_Event_Mouse_In_Out; typedef struct _Etk_Event_Mouse_Move Etk_Event_Mouse_Move; ------------------------------------------------------------------------- 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