*** Upcoming release ***
- 3.2.0: ABI compatible, API extensions

*** Later releases ***

- 3.2.1: ABI compatible, no new API
	- gtk4: can't change crosshair color, it's always dark grey [report: Igor2]
	- gui HID unload vs. open dialog boxes [report: Wojciech]
		- compile gui as plugin; run sch-rnd + gtk, open library window, exit -> segf
		- it is because the gtk plugin is unloaded and later dlg_library uninit tries to close the dialog it still thinks is open
		- BUG: gtk common should go and close all dialog boxes as first step of uninit
		- BUG: test if lesstif should go and close all dialog boxes as first step of uninit
	- BUG: use libualloc for rtree stack instead of static allocation [report: Vuokko]
	- try to enable gtk4_gl by default and see if it conflicts with gtk2 with no configure arg and --all=buildin [report: Majenko]
	- bitmap object export in png, ps, eps, svg
	- BUG: need to refresh preferences dialog tabs on board_changed_ev
		- test: sch-rnd, open two sheets from two paths, {i c p} library window, look at tree tab rc.path.design, switch sheets -> preferences window keeps showing the original sheet

- 3.2.2: ABI compatible, no new API
	- BUG: pcb-rnd make test fails on conf test on musl [report: Aron]

- 4.0.0: ABI incompatible (feature removal)
	- DEL: remove hidlib->name - only pcb-rnd should use it and only as legacy feature
	- *FEATURE: sch-rnd critical: more flexilble unit system where apps can register new units - remove k from librnd, revise sch-rnd grid menu
		- split the unit table in two, one librnd, one app
		- families should be registered
		- remove switch on families, use callback functions instead
		- upgrade rnd_printf(): %m should deal with librnd units, %a (oslt) with app units
		- make freq units pcb-rnd app specific, retest the openems exporter
	- BUG: check all librnd calls to rnd_conf_get_project_conf_name(); hidlib->filename should be renamed and split to a load_name and a real_name, for project file use load_name (because of symlink designs)
	- *BUG: sch-rnd critical: hid->attr_dlg_new() needs to get a void **hid_ctx_out argument so it can set hid_ctx before return; this is important because non-gtk HIDs will call back in sync during creating the dialog while core hid_dad will set hid_ctx only after this function returns (and the whole dialog is created); test: tree dialog {w t} in sch-rnd segfaults
	- *BUG: sch-rnd critical: rnd_app.expose_main needs to get the rnd_hidlib_t to draw (multisheet GUI needs this, as a dialog may draw non-current-GUI)
	- CLEANUP/BUG: revise rnd_dad_tree_modify_cell() - previous cell[] should be free'd...
		- apply librnd core patch TODO.hid_dad_tree
		- make sure all callers strdup() all cells
		- user implemented ->user_free_cb() should never free cell values, the lib does that
	- hidlib_init1() should rnd_conf_set() "rc/path/exec_prefix" at the end so the host app doesn't need to
	- bug_files/TODO/L4.patch: -I include/librnd4/librnd and changing installation path to avoid collision with librnd3; also requires apps to change -I
	- *FEATURE: sch-rnd critical: hid->draw_pixmap should pass the original object as void, so that the high level export plugin can embed hints in the output (e.g. sch-rnd embedding text to make the drawing searchable)
	- BUG: camv-rnd old dep workaround: remove trunk/src/Makefile.in TODO#GENHT part and test with system installed fungw+genht and camv-rnd
	- *BUG: sch-rnd critical: in the installed .mak LIBRND_LIBDIR shall include /librnd4 suffix, librnd's scconfig templates depend on this! (sch-rnd has scconfig template dups because of this)
	- *BUG: sch-rnd critical: hid export API doesn't pass hidlib when needed (->do_export and friends)
	- cleanup: rnd_pref_tab_hook_s calls need hidlib arg: open_cb, board_changed_cb, meta_changed_cb
	- feature: rnd_pref_tab_hook_s ->open should deliver extra action arguments because some tabs may have optional args to specify how exactly it should be open
	- move rnd_gtk_conf_hid.plugins.hid_gtk.global_grid.sparse and "local grid" from gtk to global config,make sure all HIDs do it
	- cleanup: remove separate RND_DAD_SET_PANE_NAME() and require every pane named in RND_DAD_BEGIN_[HV]PANE
	- remove /local/pcb/* scconfig vars
	- remove rnd_hid_cfg_keys_input_() and rnd_hid_cfg_keys_input(), rename rnd_hid_cfg_keys_input2_() and rnd_hid_cfg_keys_input2()
	- remove code marked with REMOVE_4.0.0
	- rename conf_board_ignore - it also ignores project
	- rename RND_EVENT_BOARD_CHANGED to _REPLACED
	- rename events RND_EVENT_BOARD_* to RND_EVENT_DESIGN_*
	- revise events: move anything not used by librnd to apps
	- rename textual event names from pcbev_* in event.c
	- move RND_HATT_SUBDIALOG within the enum to under RND_HATT_TEXT
	- hid_t spares: some function ptrs are spent, move them, refill spares
	- rnd_app_t spares: conf_ignore lists (two void *), new func conf_dont_merge_node(), new long multi_design
	- remove unused flags from rnd_hid_fsd_flags_t
		- remove RND_HID_FSD_IS_TEMPLATE
		- remove RND_HID_FSD_MAY_NOT_EXIST and RND_HID_FSD_IS_TEMPLATE (replace them with 0 in code)
	- remove rnd_hid_t->fileselect (code should use rnd_hid_fileselect() instead, which should call lib_hid_common's fileselect through a global pointer hook, plug_ style)
	- remove rnd_hid_t->heavy_term_layer_ind and figure how to substitute it in a portable way
	- remove rnd_hid_t->set_draw_faded and figure how to substitute
	- make HID_SC_ an enum
	- remove rnd_hid_t->point_cusror in favor of rnd_hid_t->set_mouse_cursor
	- check what's the diff between rnd_hid_t-> user_context and hid_data; maybe it is enough to keep only one
	- there are no spare fields in:
		- rnd_hid_tree_t (calloced from macro so calloc is on app side!)
		- rnd_hid_dad_subdialog_s
	- simplify menu code, remove unused features:
		- core: RND_MF_ACTIVE, RND_MF_BACKGROUND, RND_MF_FOREGROUND, RND_MF_FONT
		- check in all HIDs as well
	- scconfig: remove /local/pcb/ from templates and hooks.c on librnd side
		- remove /local/pcb from librnd central scconfig
		- for plugin control rename /local/pcb to /local/plugin/
		- search for TODO:pcb1 in *: replace with /local/rnd/ (and make sure in librnd we also set /local/rnd/ for these few, besides /local/librnd)
		- switch over librnd published templates, see TODO.template
			- use /local/mod/ for module temps instead of /local/pcb/mod
			- use /local/plugin for plugin states, like /local/pcb/hid_batch
	- conf: plugins/hid_gtk/history_size should be non-gtk-specific
		- apps may refer to it through preferences dialog
	- allow no-drawing-area mode for camv-rnd for negative coordinate gerbers
	- multi design (multides.html):
		- problem: rnd_conf_fields
			- it hosts native (merged) config data
			- thus it needs to be per design
			- but if a new plugin registers a new field, that needs to be done in every existing design!
			- if a shared tree (project, user, sys) changes, we need to re-merge all design's rnd_conf_fields
		- mark each event [local] or [global]
		- rename rnd_hidlib_t to rnd_design_t (or to something better)
		- cleanup: extned callbacks in rnd_conf_hid_callbacks_t to pass hidlib (multiple callbacks with different designs if multiple open designs are changed!)
		- rnd_hidlib_t must contain:
			- real file name (realpath'd)
			- original file name (short name, as the user called it)
		- switch over from rnd_conf and conf_core to per design conf
		- implement user file name and realpath file name
		- implement project list and pointing back
		- conf: implement a way to make sure design file list is coming from the project file only
		- implement every little detail of the new project file handling as specified
		- rnd_app.single_design setting for single design mode
		- make sure the batch HID maintains set/get_hidlib()
		- rnd_hid_parse_command_line() doesn't allow multiple filenames (but somehow it still works in sch-rnd!)
		- remove rnd_hid_enable_per_dialog_hidlib, assuming it is always 1
		- rnd_main_loop_interactive() shouldn't receiver a hidlib arg (assume it's already set in the gui earlier in main)
		- RND_EVENT_BOARD_CHANGED doesn't make sense in a multi-design env; replace it with an PRE_UNLOAD event
			- double test: pcb-rnd, load board, open propedit on an object, select a row, start new board (or rather, unload board) -> propedit should close
		- multi preview widget:
			- gtk preview widget locality: add a HID API to set local bit (see r34242, TODO "multi:")
			- bind unload event and invalidate local previews' hidlib (see r34242) so they don't crash if the caller doesn't do that
			- lesstif: implement gtk's r34242 and test with sch-rnd tree view (depends on hid_ctx return fix)
		- DAD API: think over and document if ->set_val() hv.str needs to be strdupped; probably best if the lib strdups it (revise callers)
		- export API for exporting a whole project at once (instead of exporting a single sheet); pass on project ptr, not sheet ptr

*** Unsorted ***
	- lesstif: vertical text, truncated text support
