Enlightenment CVS committal
Author : moom
Project : e17
Module : proto
Dir : e17/proto/etk/src/lib
Modified Files:
etk_textblock.c etk_textblock.h etk_widget.c
Log Message:
* [Textblock] Fix a bug that appeared when we deleted a line of the
textblock (see estickies)
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_textblock.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- etk_textblock.c 4 Aug 2006 19:58:49 -0000 1.26
+++ etk_textblock.c 20 Aug 2006 20:41:20 -0000 1.27
@@ -77,6 +77,7 @@
static void _etk_tb_constructor(Etk_Textblock *tb);
static void _etk_tb_destructor(Etk_Textblock *tb);
+static void _etk_textblock_node_printf(Etk_Textblock_Node *node, int n_tabs);
static Etk_Textblock_Node *_etk_textblock_node_new(Etk_Textblock_Node *parent,
Etk_Textblock_Node *prev, Etk_Textblock_Node_Type node_type,
Etk_Textblock_Tag_Type tag_type);
static Etk_Textblock_Node *_etk_textblock_node_free(Etk_Textblock_Node *node);
static void _etk_textblock_node_type_set(Etk_Textblock_Node *node,
Etk_Textblock_Node_Type node_type, Etk_Textblock_Tag_Type tag_type);
@@ -651,7 +652,7 @@
Etk_Textblock_Iter *it;
Etk_Textblock_Node *start_line, *end_line, *line;
Etk_Textblock_Node *start_paragraph, *end_paragraph, *paragraph;
- Etk_Textblock_Node *n;
+ Etk_Textblock_Node *n, *new_node;
Evas_List *l;
Etk_Bool done;
@@ -732,7 +733,8 @@
{
if (it->node == start_iter->node && it->pos <= start_iter->pos)
continue;
- else if (it != end_iter && it->node == end_iter->node && it->pos >
end_iter->pos)
+
+ if (it != end_iter && it->node == end_iter->node && it->pos >
end_iter->pos)
{
it->index -= end_iter->index;
it->pos -= end_iter->pos;
@@ -747,6 +749,24 @@
/* Merge the start and the end lines, and remove the other lines */
if (start_line != end_line)
{
+ /* Make sure the start line node has at least one child */
+ if (etk_string_length_get(start_line->text) > 0)
+ {
+ new_node = _etk_textblock_node_new(start_line, NULL,
ETK_TEXTBLOCK_NODE_NORMAL, ETK_TEXTBLOCK_TAG_DEFAULT);
+ new_node->text = start_line->text;
+ new_node->unicode_length = start_line->unicode_length;
+ start_line->text = NULL;
+ start_line->unicode_length = 0;
+
+ for (l = tb->iters; l; l = l->next)
+ {
+ it = l->data;
+ if (it->node == start_line)
+ it->node = new_node;
+ }
+ }
+
+ /* Add the children of the end line node to the start line node */
while (end_line->children)
_etk_textblock_node_attach(end_line->children, start_line,
start_line->last_child);
@@ -1295,6 +1315,30 @@
*w = tw / len;
}
+/**
+ * @brief Prints the textblock hierarchy for debug
+ * TODO: etk_textblock_printf(): Remove this function
+ */
+void etk_textblock_printf(Etk_Textblock *tb)
+{
+ Evas_List *l;
+ Etk_Textblock_Object_SD *sd;
+
+ if (!tb)
+ return;
+
+ printf("TEXTBLOCK PRINTF\n"
+ "----------------\n");
+ _etk_textblock_node_printf(&tb->root, -1);
+ printf("\n");
+ for (l = tb->evas_objects; l; l = l->next)
+ {
+ sd = evas_object_smart_data_get(l->data);
+ printf("Iterator node: %d %d | %s\n", sd->cursor->node->type,
sd->cursor->node->tag.type,
+ etk_string_get(sd->cursor->node->text) ?
etk_string_get(sd->cursor->node->text) : "NULL");
+ }
+}
+
/**************************
*
* Etk specific functions
@@ -2401,9 +2445,9 @@
ETK_WARNING("The iterator is not attached to a textblock node");
return ETK_FALSE;
}
- else if (iter->node->children)
+ else if (iter->node->type == ETK_TEXTBLOCK_NODE_ROOT)
{
- ETK_WARNING("The node of the iterator is not a leaf");
+ ETK_WARNING("The iterator can't be attached to the root node");
return ETK_FALSE;
}
else if (iter->node->type == ETK_TEXTBLOCK_NODE_PARAGRAPH)
@@ -2411,9 +2455,9 @@
ETK_WARNING("The iterator can't be attached to a paragraph node");
return ETK_FALSE;
}
- else if (iter->node->type == ETK_TEXTBLOCK_NODE_ROOT)
+ else if (iter->node->children)
{
- ETK_WARNING("The iterator can't be attached to the root node");
+ ETK_WARNING("The node of the iterator is not a leaf");
return ETK_FALSE;
}
else if (iter->pos < 0 || iter->pos > iter->node->unicode_length ||
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_textblock.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- etk_textblock.h 27 Jul 2006 00:40:40 -0000 1.15
+++ etk_textblock.h 20 Aug 2006 20:41:20 -0000 1.16
@@ -249,6 +249,7 @@
int etk_textblock_unicode_length_get(const char *unicode_string);
Etk_Bool etk_textblock_is_white_char(int c);
void etk_textblock_char_size_get(Evas *evas, const char *font_face, int
font_size, int *w, int *h);
+void etk_textblock_printf(Etk_Textblock *tb);
/** @} */
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -3 -r1.73 -r1.74
--- etk_widget.c 19 Aug 2006 19:18:03 -0000 1.73
+++ etk_widget.c 20 Aug 2006 20:41:20 -0000 1.74
@@ -394,7 +394,7 @@
* @param theme_file the path of the .edj theme-file. If NULL, it will use the
theme-file of its theme-parent
* (or parent if it is has no theme-parent). If none of its theme-parents has
a non-null theme-file, it will use the
* current theme-file of Etk. @n
- * Children of the widget will automatically inherit this theme-file if they
have no theme-file already set
+ * Children of the widget will automatically inherit this theme-file if their
theme-file is NULL
*/
void etk_widget_theme_file_set(Etk_Widget *widget, const char *theme_file)
{
@@ -414,9 +414,9 @@
/**
* @brief Gets the theme-file of the widget. See etk_widget_theme_file_set()
for more infos about theme-file
* @param widget a widget
- * @return Returns the theme-file used by the widget (if NULL, it uses the
theme-file of its parent)
- * @note To get the theme-file really used by the widget, you have to walk
through the theme-parents of the widget @n
- * until you find the first theme-parent that uses a non-null theme-file. This
is the theme-file used of the widget. @n
+ * @return Returns the theme-file used by the widget (if NULL, it uses the
theme-file of its theme-parent)
+ * @note To get the theme-file really used by the widget, you have to walk
through the theme-parents of the widget
+ * until you find the first theme-parent that uses a non-null theme-file. This
is the theme-file used by the widget. @n
* If no theme-parent has a non-null theme-file, then it uses the current
theme-file of Etk, that you can get with
* etk_theme_widget_theme_get()
*/
@@ -515,8 +515,8 @@
* @param widget a widget
* @param parent the new parent
* @param remove_from_container if @a remove_from_container is ETK_TRUE and if
the parent of the widget is a container,
- * the remove_child() function of the container parent will be called. So @a
remove_from_container should most of the
- * time be set to ETK_TRUE, except when etk_widget_parent_set_full() is called
from the remove_child() function of a
+ * the child_remove() function of the parent container will be called. So @a
remove_from_container should most of the
+ * time be set to ETK_TRUE, except when etk_widget_parent_set_full() is called
from the child_remove() function of a
* container, in order to avoid an infinite loop.
* @widget_implementation
* @note If you want to add a widget to a container, use etk_container_add()
instead!
@@ -577,7 +577,7 @@
/**
* @brief Sets whether the widget should have an event object. An event object
is a simple invisible rectangle that
- * grabs the mouse events. It can be useful for example if you want to know
when a container with no theme object
+ * grabs the mouse events. It is useful for example if you want to know when a
container with no theme object
* (a table, a box, ...) is clicked. @n
* If a widget already has a theme object, then this function has no effect
since the theme object is already used to
* grab the mouse events
@@ -629,7 +629,8 @@
/**
* @brief Sets whether the widget should repeat the mouse events it receives
* @param widget a widget
- * @param repeat_mouse_events if @a repeat_mouse_events is ETK_TRUE, the
parent widget will also receive the mouse events
+ * @param repeat_mouse_events if @a repeat_mouse_events is ETK_TRUE, the parent
+ * widget will also receive the mouse events
*/
void etk_widget_repeat_mouse_events_set(Etk_Widget *widget, Etk_Bool
repeat_mouse_events)
{
-------------------------------------------------------------------------
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