2000-11-30 Not Zed * e-memory.c (e_strv_new): Fix typename of args (for all funcs). (e_strv_set_ref): Assert the index is in range. (e_strv_set_ref_free): " (e_strv_set): " (e_strv_get): " 2000-11-29 Not Zed * e-sexp.c (term_eval_lt): Plug a memleak, need to free results from term_eval(). (term_eval_gt): (term_eval_eq): 2000-11-27 Not Zed * e-memory.c (e_mempool_new): Added some locking to global data. This should make the interfaces mt-safe, although each object is only per-thread safe. 2000-11-22 Not Zed * e-memory.c (e_mempool_alloc): If we dont get a big enough chunk in the first node, give up. Otherwise we spend too much time searching. (e_mempool_strdup): Doh, and allocate enough for the terminating NUL at that. (e_strv_set_ref_free): New function, set a reference to a string that is then owned/free'd by the strv. (e_strv_destroy): If there are any strings to destroy, free them here. 2000-11-21 Not Zed * e-memory.c (e_memchunk_alloc0): New function to allocate a zero'd out chunk. (e_mempool_strdup): New function to strdup into a mempool. 2000-11-20 Not Zed * e-memory.[ch]: New routines for fast memory management and compact string array storage. * Makefile.am (libeutil_la_SOURCES): Added e-memory.[ch]. 2000-11-09 JP Rosevear * e-dbhash.h: oops thats func not *func * e-dbhash.c (e_dbhash_foreach_key): Memset the data DBT to 0 2000-11-07 JP Rosevear * Makefile.am: Build e-dbhash.[hc] * e-dbhash.[hc]: New routines to manage a db database on disk that contains md5 hashed data and indexed by uids. Provides comparison functions and such so the caller does not have to do the md5 bits. 200-10-30 Kjartan Maraas * e-dialog-widgets.c: #include to quench warning. * e-sexp.c: #include for same reason. 2000-10-27 * Makefile.am: build md5-utils * md5-utils.c: Make part of util, get rid of camel stream util function include string.h * md5-utils.h: ditto 2000-10-27 * e-pilot-map.c (e_pilot_map_lookup_uid): Return null if no pnode was found. 2000-10-27 JP Rosevear * e-pilot-map.c (map_sax_start_element): Get archive field while parsing (map_write_foreach): Write out archive field (e_pilot_map_pid_is_archived): implement (e_pilot_map_uid_is_archived): ditto (e_pilot_map_insert): Insert new node structures (e_pilot_map_lookup_pid): Take into account the list is now a list of structures (e_pilot_map_lookup_uid): ditto 2000-10-26 Michael Meeks * ename/e-address-western.c (e_address_western_is_postal): unsigned chars. * ename/e-name-western.c (e_name_western_get_one_prefix_at_str): cast to unsigned char. 2000-10-25 Dan Winship * e-html-utils.c (e_text_to_html): Deal properly with URLs at the end of the buffer. (The old code would append a "�" to the text.) 2000-10-23 JP Rosevear * e-pilot-map.c (e_pilot_map_lookup_pid): Lookup a pid by uid. (e_pilot_map_lookup_uid): Lookup a uid by pid. Now this is wrapped, we can store archive info internally * e-pilot-map.h: New accessor prototypes 2000-10-23 Dan Winship * ename/Makefile.am (INCLUDES): Remove unused GNOMELOCALEDIR setting. 2000-10-23 JP Rosevear * e-pilot-map.c: Operate with EPilotMap structure so things are abstract to the caller (e_pilot_map_pid_is_archived): Infrastructure for marking records as archived (e_pilot_map_uid_is_archived): ditto * e-pilot-map.h: Add more to public interface, including EPilotMap structure 2000-10-23 JP Rosevear * e-pilot-map.c: Pilot map functions grabbed from existing conduits * e-pilot-map.h (e_pilot_map_write): Header 2000-10-18 Dan Winship * e-html-utils.c (e_text_to_html): If unicode_get_utf8 returns -1, assume it was actually undeclared iso-8859-1 text. 2000-10-17 Jesse Pavel * ename/e-address-western.c: made the routines use the stardard e_strstrcase instead of the included function that existed earlier. 2000-10-11 Iain Holmes * ename/e-address-western.c (e_address_western_parse): g_strconcat needs to be NULL terminated or it goes funny. Tue Sep 26 16:48:49 2000 Christopher James Lahey * Makefile.am: Added $(EXTRA_GNOME_CFLAGS). 2000-09-25 Jeffrey Stedfast * Makefile.am: add ename as a SUBDIR 2000-09-18 Christopher James Lahey * e-list-iterator.c, e-list.c, e-list.h: Made e_list a bit more reentrant. If a iterator gets its data pulled out from under it while in a loop, it goes back one so that loops will be able to continue. 2000-09-18 Christopher James Lahey * Makefile.am: Removed all the files moved to gal. * e-dialog-widgets.c: Fixed the #include lines to deal properly with gal. * e-gui-utils.c, e-gui-utils.h: Removed all of the functionality that was moved to gal. * e-canvas-utils.c, e-canvas-utils.h, e-canvas-vbox.c, e-canvas-vbox.h, e-canvas.c, e-canvas.h, e-cursors.c, e-cursors.h, e-font.c, e-font.h, e-popup-menu.c, e-popup-menu.h, e-printable.c, e-printable.h, e-unicode.c, e-unicode.h, e-util.c, e-util.h, e-xml-utils.c, e-xml-utils.h: Moved to gal. 2000-09-13 Christopher James Lahey * e-font.c: Fixed an uninitialized variable. 2000-09-12 Lauris Kaplinski * e-unicode.c (e_utf8_to_gtk_string_sized): Use underscores for untranslatable characters (e_utf8_from_gtk_string_sized): Ditto 2000-09-12 Dan Winship * e-font.c (e_font_from_gdk_font): Change this a bit so that if you pass it a bold font, it puts that in font->bold and finds a lighter font for font->font (if it can). This is for themes like Metal where the default font is bold. (find_variants): renamed from find_best_bold 2000-09-11 Dan Winship * e-font.c (find_best_bold): Thou shalt leave space for the trailing \0. * e-util.c (e_strstrcase): The return value should not be const. (Well, unless the input was, but you can't know that.) 2000-09-11 Christopher James Lahey * e-unicode.c, e-unicode.h: Added e_utf8_gtk_editable_get_text and e_utf8_gtk_editable_set_text. 2000-09-11 Lauris Kaplinski * e-font.c: Try to find real bold variant of X font, fall to double stroke only if not found 2000-09-10 Ettore Perazzoli * e-gtk-utils.c: New. (e_gtk_signal_connect_full_while_alive): New. * e-gtk-utils.h: New. 2000-09-08 Lauris Kaplinski * e-font.c: Use experimental 16-bit font stuff for EFonts 2000-09-08 Dan Winship * e-popup-menu.h: remove consts from the EPopupMenu structure: the caller may want to modify its own EPopupMenu before calling e_popup_menu_run. 2000-09-07 Lauris Kaplinski * e-dialog-widgets.c (e_dialog_editable_get): Use UTF-8 (e_dialog_editable_set): Use UTF-8 * e-font.c (translate_encoding): More encodings (e_gdk_font_encoding): Use experimental stuff * e-unicode.* (e_utf8_gtk_editable_insert_text): New wrapper 2000-09-07 Federico Mena Quintero * e-canvas.c (emit_event): Remove incorrect optimization. Events are read-only! 2000-09-04 Lauris Kaplinski * e-unicode.c: Added new font code, but comment it out now * e-font.h, e-font.c: Test code for font analyzing 2000-09-02 Lauris Kaplinski * e-unicode.h, e-unicode.c: New functions e_utf8_gtk_clist_append, e_utf8_gtk_clist_set_text e_unicode_init 2000-08-31 Lauris Kaplinski * e-html-utils.c (e_text_to_html): Use UTF-8 * e-unicode.h: * e-unicode.c (g_unichar_to_utf8): glib 1.3 function (gdk_keyval_to_unicode): gdk 1.3 function (e_utf8_from_gdk_event_key): Use keyval, not string 2000-08-30 Lauris Kaplinski * e-unicode.h: #define gnome_font_get_size and gnome_font_get_width, and gnome_font_lookup_default, if compiling with gnome-print 0.20 2000-08-30 Dan Winship * Makefile.am (libeutil_la_LIBADD): make e-util depend on libunicode * e-popup-menu.c (make_item): Use GtkMenuItem rather than GtkPixmapMenuItem for items with no pixmaps, so that if the whole menu is pixmapless, you don't get a column of blank pixmaps. 2000-08-24 Lauris Kaplinski * e-unicode.h: * e-unicode.c (e_utf8_gtk_menu_item_new_with_label): New wrapper 2000-08-23 Lauris Kaplinski * e-unicode.h: * e-unicode.c (e_utf8_strstrcase): New function 2000-08-23 Federico Mena Quintero * e-dialog-widgets.c (e_dialog_editable_set): Constify. 2000-08-22 Lauris Kaplinski * e-unicode.h: * e-unicode.c: e_utf8_gtk_editable_get_chars e_utf8_gtk_entry_get_text e_utf8_gtk_entry_set_text e_utf8_to_gtk_string: New convenience functions 2000-08-22 Lauris Kaplinski * e-unicode.h: * e-unicode.c: Some convenience functions to deal with Gtk+ and UTF-8 * Makefile.am: Added e-unicode.h, e-unicode.c 2000-08-21 Lauris Kaplinski * e-font.h: * e-font.c: Changed UTF-8 syntax from char-based to byte-based 2000-08-21 Peter Williams * e-html-utils.c (e_text_to_html): Fix a booboo in the tab expansion code (didn't use the new value of 'out'). 2000-08-19 Lauris Kaplinski lauris@helixcode.com * e-font.h: #define e_font_height(f) to save some space 2000-08-19 Lauris Kaplinski lauris@helixcode.com * e-font.h: * e-font.c: Thin wrapper around GdkFont to deal with UTF-8 directly Also handles bold/italic styling 2000-08-14 Peter Williams * e-sexp.c (scanner_config): Add "-" to be an acceptable first character for an operation -- yaaay subtraction! 2000-08-11 Peter Williams * e-html-utils.c (e_text_to_html): Fix the tab expansion for when the length would exceed the ten characters that we allocated. 2000-08-10 Dan Winship * e-setup.[ch]: Remove. The shell tells the components where the evolution homedir is now. * Makefile.am (libeutil_la_SOURCES): Remove e-setup.c * e-html-utils.c (e_text_to_html): If converting both spaces and newlines, then convert tabs too. The joys of pseudo-
.

2000-08-09  Christopher James Lahey  

	* e-popup-menu.c: Fix the bug where it truncates the last item

2000-08-09  Christopher James Lahey  

	* e-popup-menu.c: Ooops.

2000-08-09  Christopher James Lahey  

	* e-util.c, e-util.h: Added uncompiled e_read_uri function.

2000-08-09  Christopher James Lahey  

	* e-popup-menu.c, e-popup-menu.h: Added a hide_mask argument to
	the two popup menu functions.

2000-08-07  Christopher James Lahey  

	* e-gui-utils.c, e-gui-utils.c: Added
	e_container_change_tab_order.

2000-07-27  Peter Williams  

	* e-canvas.c (e_canvas_destroy): Chain the
	destroy handler.
	
2000-07-25  Peter Williams  	
	
	* e-canvas.c (emit_event): Don't bother with 
	dereferencing the event pointer.
	(e_canvas_item_set_cursor): Reference our selection
	item; print a debug message. Deref when destroying
	(e_canvas_item_add_selection): Same.
	(e_canvas_item_remove_selection): Same.
	
2000-07-25  Peter Williams  

	* Makefile.am (libeutil_static_la_LDFLAGS): Build both libraries
	(a typo didn't build libeutil.la, only -static.)

2000-07-25  Seth Alves  

	* Makefile.am (libeutil_static_la_LDFLAGS): build static version
	of library for conduit to use

2000-07-25  Christopher James Lahey  

	* e-util.c, e-util.h: Added a bunch of e_marshal functions.

2000-07-12  Christopher James Lahey  

	* e-util.c, e-util.h: Added e_strstrcase function.

2000-07-11  Christopher James Lahey  

	* e-canvas-vbox.c: Removed some debugging printfs.
	
	* e-canvas.c (e_canvas_unrealize): Call parent unrealize method.

2000-07-10  Ettore Perazzoli  

	* e-sexp.c (eval_dump_result): `#if 0'ed out.

	* e-popup-menu.h (e_popup_menu_create): New prototype.

2000-07-10  Dan Winship  

	* e-html-utils.c: Fix warnings.

2000-07-08  Christopher James Lahey  

	* e-list.c, e-list.h: Added e_list_duplicate.

2000-07-07  Christopher James Lahey  

	* e-util.c, e-util.h: Added e_strsplit to work around a bug in
	g_strsplit.

2000-07-07  Christopher James Lahey  

	* e-iterator.c, e-iterator.h, e-list-iterator.c,
	e-list-iterator.h: Added last and insert functions.

2000-07-06  Federico Mena Quintero  

	* e-dialog-widgets.c: Added docstrings.  This file did not have
	them at all.  EEEEEEK!

2000-07-05  Dan Winship  

	* e-sexp.c (e_sexp_parse): Kill debugging message

2000-07-03  Christopher James Lahey  

	* e-iterator.c, e-iterator.h, e-list-iterator.c,
	e-list-iterator.h, e-list.c, e-list.h: New list class with
	iterators.

	* e-canvas.c: Made it so that you don't get the same selection in
	the selection list more than once.

2000-07-01  Ettore Perazzoli  

	* e-gui-utils.h: #include .  It's
	needed to be able to pass an appropriate @type arg to
	`e_notice()'.

2000-06-29  Jody Goldberg 

	* e-canvas.c (e_canvas_init) : Init the InputContext members
	(e_canvas_class_init) : Add a handler for unrealize.
	(e_canvas_focus_in) : enable the input context.
	(e_canvas_focus_out) : enable the input context.
	(e_canvas_realize) : Create an input context.
	(e_canvas_unrealize) : New function to release the input context.

2000-06-28  Dan Winship  

	* e-html-utils.c (url_extract): add ")" to the set of characters
	to back up over at the end of a potential URL.

2000-06-27  Ettore Perazzoli  

	* e-dialog-widgets.c (get_toggle_value): Use `value_var', not
	`value'.

2000-06-27  Ettore Perazzoli  

	* Makefile.am (INCLUDES): `-I$(top_srcdir)' to fix compilation
	with builddir != srcdir.

2000-06-26  Christopher James Lahey  

	* Makefile.am: Added e-canvas-vbox.c and e-canvas-vbox.h.

	* e-canvas-vbox.c, e-canvas-vbox.h: New canvas object to act like
	a vbox using the reflow system.

2000-06-20  Christopher James Lahey  

	* e-canvas.c, e-canvas.h: Added a variable to keep track of the
	cursor.  Set the cursor when selection_add is called.  Properly
	unset the cursor at the right times.

2000-06-20  Christopher James Lahey  

	* e-canvas.c: Grab the focus when setting the cursor.

2000-06-20  Christopher James Lahey  

	* e-canvas.c, e-canvas.h: Built a system for doing selections
	and/or a cursor in canvas.

2000-06-13  Christopher James Lahey  

	* e-util.c, e-util.h: Changed the needed e_marshal functions.

	* e-printable.c, e-printable.h: Added a quantize parameter to
	e_printable_height.  Also, added a e_printable_will_fit function.
	
2000-06-10  Christopher James Lahey  

	* Makefile.am: Added e-printable.c and e-printable.h.

	* e-printable.c, e-printable.h: This new class is a printing
	context.  Other classes return an EPrintable which represents a
	context for printing that object.

	* e-util.c, e-util.h: Added
	e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL and
	e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE.

2000-06-01  Christopher James Lahey  

	* e-util.c: Fixed e_marshal_INT__INT_INT_POINTER.

2000-06-01  Christopher James Lahey  

	* e-util.c, e-util.h: Added e_marshal_INT__INT_INT_POINTER.

2000-06-01  Dan Winship  

	* e-util.c (g_int_compare): Duh! -1 != 1. :)

2000-06-01  Christopher James Lahey  

	* e-sexp.c (e_sexp_term_eval): g_return_val_if_fail to prevent a crash.

2000-05-30  Not Zed  

	* e-sexp.c (e_sexp_encode_bool): Utility function to build a bool
	as part of an expression string.
	(e_sexp_encode_string): Likewise for strings.

2000-05-30  Christopher James Lahey  

	* e-canvas-utils.c, e-canvas-utils.h: Added
	e_canvas_item_show_area which makes sure that a particular area of
	a given item is in the scroll area.

2000-05-30  Federico Mena Quintero  

	* e-dialog-widgets.c (hook_radio): Use the exported function to
	set the value.
	(get_radio_value): Likewise.
	(hook_option_menu): Likewise.
	(get_option_menu_value): Likewise.
	(hook_toggle): Likewise.
	(get_toggle_value): Likewise.
	(hook_spin_button): Likewise.
	(get_spin_button_value): Likewise.
	(hook_editable): Likewise.
	(get_editable_value): Likewise.
	(e_dialog_radio_set): Radio buttons are prepended to their parent
	group's list, so we need to flip the index around when
	getting/setting the value.
	(e_dialog_radio_get): Likewise.

2000-05-27  Federico Mena Quintero  

	* e-dialog-widgets.c (e_dialog_editable_set): Moved over from
	event-editor-utils.c.
	(e_dialog_editable_get): Likewise.
	(e_dialog_toggle_set): Likewise.
	(e_dialog_toggle_get): Likewise.
	(e_dialog_spin_set): Likewise.
	(e_dialog_spin_get_double): Likewise.
	(e_dialog_spin_get_int): Likewise.
	(e_dialog_option_menu_set): Likewise, and added a value map.
	(e_dialog_option_menu_get): Likewise.
	(e_dialog_dateedit_set): Likewise.
	(e_dialog_dateedit_get): Likewise.
	(e_dialog_radio_set): New function.
	(e_dialog_radio_get): New function.

2000-05-24  Christopher James Lahey  

	* e-paned.c, e-paned.h: Removed.

2000-05-23  Federico Mena Quintero  

	* e-dialog-widgets.c (get_radio_value): Implemented.  Amazing that
	one has to go through so much pain to get a stupid value from
	GTK+.
	(hook_option_menu): Implemented.  Same complaint.
	(get_toggle_value): Implemented.
	(get_spin_button_value): Implemented.
	(get_entry_value): Implemented.
	(e_dialog_widget_hook_value): Function to hook a widget to the
	variable it will modify.
	(e_dialog_get_values): Function to feed the variables from a
	dialog's widgets.
	(e_dialog_xml_widget_hook_value): Function to hook a widget from
	a Glade file.

2000-05-23  Christopher James Lahey  

	* e-util.c, e-util.h: Added e_write_file.

2000-05-19  Federico Mena Quintero  

	* e-dialog-widgets.[ch]: New files with utilities for hooking up
	widgets in Glade-generated dialogs.

	* Makefile.am (libeutil_la_SOURCES): Added e-dialog-widgets.[ch].

2000-05-19  Christopher James Lahey  

	* e-gui-utils.c, e-gui-utils.h: Added e_container_foreach_leaf.

2000-05-18  Christopher James Lahey  

	* Makefile.am: Add imagesdir support.

	* e-gui-utils.c, e-gui-utils.h: Added e_create_image_widget for
	glade use.

2000-05-16  Christopher James Lahey  

	* e-xml-utils.c: xmlGetProp appears to return malloced memory.
	Thus we must free it.

2000-05-15  Ettore Perazzoli  

	* e-util.c (e_free_string_list): New function.

2000-05-14  Christopher James Lahey  

	* e-util.c, e-util.h: Added e_strdup_strip which returns a copy of
	the string with the leading and trailing spaces removed.

2000-05-11  NotZed  

	* e-sexp.c (e_sexp_finalise): Destroy the g_scanner when cleaning up.
	(e_sexp_finalise): Free symbol table on finalise.

2000-05-09  Christopher James Lahey  

	* e-canvas.c: Remove reflow idle when being destroyed.

2000-05-06  Christopher James Lahey  

	* e-html-utils.c: Got rid of some warnings.

	* e-util.c, e-util.h: Added e_read_file which takes a filename and
	returns a newly allocated string containing the contents of that
	file.

2000-05-03  Ettore Perazzoli  

	* e-util.h: #include  and .

	* e-util.c (e_free_object_list): New utility function.

2000-05-02  Damon Chaplin  

	* e-canvas.c (e_canvas_focus_in): 
	(e_canvas_focus_out): set and reset the GTK_HAS_FOCUS flag. We now get
	focus_out events correctly.

2000-05-02  NotZed  

	* e-sexp.c (e_sexp_finalise): Free the parse tree if we have one.
	(e_sexp_parse): If we already have a parse tree, free it.

2000-05-02  Matt Loper  

	* Makefile.am: set G_LOG_DOMAIN.

2000-05-01  Ettore Perazzoli  

	* e-xml-utils.c, e-xml-utils.h: Constified all the functions.

2000-04-27  Dan Winship  

	* e-html-utils.c (e_text_to_html): Moved here from the mailer,
	since it's of general use, and the composer needs it too.

2000-04-24  Miguel de Icaza  

	* e-popup-menu.c: New file.  Implements easy to use popup menus. 

2000-04-24  Matt Loper  

	* e-paned.c: New file. Makes a GtkPaned with more than two
	children.
	* e-paned.h: same.

	* Makefile.am: added e-paned.[ch].

2000-04-19  Christopher James Lahey  

	* e-xml-utils.c, e-xml-utils.h: Added
	e_xml_get_child_by_name_by_lang.

2000-04-16  Anders Carlsson  

      * e-canvas.c (e_canvas_class_init): Add realize.
      (e_canvas_realize): Set the back pixmap to NULL to reduce flicker.

2000-04-14  Christopher James Lahey  

	* e-xml-utils.c: Fixing a warning.

2000-04-14  Christopher James Lahey  

	* e-xml-utils.c: Add g_return_if_fails.

2000-04-12  Miguel de Icaza  

	* e-cursors.c (e_cursor_get): Prevent next hacker to get bitten by this.

2000-04-10  Christopher James Lahey  

	* e-canvas.c: Added proper keyboard focus handling.

2000-04-06  Matt Loper  

	* e-setup.c (e_setup_base_dir): Get/set Evolution's base directory
	via gnome-config.
	(mkdir_if_necessary): New function.
	(e_setup_base_dir): Use mkdir_if_necessary().

2000-03-22  NotZed  

	* e-util/e-sexp.h: Formatting cleanup.

2000-03-07  NotZed  

	* e-util/Makefile.am (libeutil_la_SOURCES): s-sexp.h -> e-sexp.h.

2000-03-12  Christopher James Lahey  
	
	* e-util/e-canvas.c, e-util/e-canvas.h: Fixed some bugs here to
	speed up reflow and to make it fail less often.

2000-03-10  Christopher James Lahey  

	* e-util/e-canvas.c, e-util/e-canvas.h: Designed a new system for
	doing hierarchical displays in the canvas.  Adds an extra idle
	loop to the canvas system.

2000-03-05  Christopher James Lahey  

	* e-util/e-xml-utils.c: Fixed e_xml_set_integer_prop_by_name.

2000-03-04  Christopher James Lahey  

	* e-util/e-xml-utils.c, e-util/e-xml-utils.h: Added
	e_xml_set_integer_prop_by_name.

2000-02-28  NotZed  
	
	* e-util/e-sexp.[ch]: Added.  moved from filter-sexp.[ch]

	* e-util/Makefile.am (libeutil_a_SOURCES): Add e-sexp.
	(noinst_LTLIBRARIES): Changed to a libtool library.

2000-02-24  Christopher James Lahey  

	* e-util/e-xml-utils.c, e-util/e-xml-utils.h: Added
	e_xml_get_integer_prop_by_name.

	* e-util/Makefile.am: Added e-util.c.

	* e-util/e-util.h: Added e-util.c functions.

	* e-util/e-util.c: New file for compare functions

2000-02-24  Christopher James Lahey  
	
	* e-util/e-canvas-utils.h: Fixed the comment at the top and added
	#ifndef __E_CANVAS_UTILS__.

	* e-util/Makefile.am: Added e-xml-utils.c and
	e-xml-utils.h.

	* e-util/e-xml-utils.h, e-util/e-xml-utils.c: Added files for some
	xml utilities.

	* e-util/e-util.h: Added type EFocus which describes which
	direction the focus will be coming from.

2000-02-23  Dan Winship  

	* e-util/e-setup.c (e_setup_base_dir): Make ~/evolution mode 700
	rather than mode 600 (and use the symbolic name rather than the
	number).
	
2000-02-09  Christopher James Lahey  
	
	* e-util/Makefile.am: Add canvas utilities to libeutil.