This patch contains enhancements of an earlier patch (gtk-mailund-980713-0), and the optimisations of the text widget found in gtk-mailund-980718-0. Small extension of gtk-mailund-980713-0.patch: ============================================== This patch adds user data to text properties in gtktext, thus making it possible to associate abitrary data to sections of the text. This can be usefull when e.g. associating links from parts of the text to other parts or other files (html links, comments which can be hidden/show with double-clicks etc.). See gtk-mailund-980720-0.editor or later for an example. A gpointer to user_data is added to the text property struct, and three functions is added to the GtkText struct: /* Comparison of text property user data. If NULL (default) user * data pointers are compared. The function must return true for * equal and false for no equal. */ gboolean (* compare_data) (gpointer, gpointer); /* Used for making a copy of user data. If this function is NULL, * the pointer is simply copied. WARNING: This is *not* a good * idear if you afterwards delete properies! The clone and free * function should work together, not against each other. */ gpointer (* clone_data) (gpointer); /* Destructor for user data. If NULL g_free is used. */ void (* free_data) (gpointer); These are used for more complex user data. If these are not specified comparison is done on the gpointes, clone_data copies pointers, and g_free is used to free user_data. Therefore, if properties are ever deleted, at least one of clone_data or free_data should be provided. The two functions void gtk_text_set_property_data (GtkTextProperty *prop, gpointer user_data); gpointer gtk_text_get_property_data (GtkTextProperty *prop); is used to access the user data, and the function void gtk_text_insert_with_data (GtkText *text, GdkFont *font, GdkColor *fore, GdkColor *back, gpointer data, const char *chars, gint length); is used for inserting text associated to user data. The function gtk_text_insert is now a wrapper which calls gtk_text_insert_with_data, with data == NULL. It is kept for compatibility. This patch also creates a better interface to the text properties. The function gtk_text_get_property_length () returns the property length, guint gtk_text_get_property_length (GtkTextProperty *prop); while the function gtk_text_set_property () void gtk_text_set_property (GtkText *text, guint from, guint to, GdkFont *font, GdkColor *fore, GdkColor *back, gpointer data); makes it possible to change the property of an interval of text. WARNING: I fear this function messes up the marks or something, but I am not sure. It leaves the properties in perfect order, but I have experienced segmentation faults afterwards, because a marks property suddently is NULL. Whether this is because of an error in this function, or the function just provokes it, I don't know. gtk-mailund-980718-0.patch ========================== Optimisation of advance_mark_n and decrese_mark_n by jumping in intervals corresponding to property lengths. Optimisation of find_mark_near by using the new {advance,decrese}_mark_n. /mailund