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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs