librnd 3.1.2 (r34089)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: do not uninstall genht headers twice when libgenht is system installed (causes error)

	[core]
		-Fix: wrong comment on temp file name creation fallback
		-Fix: conf: when creating a new empty list, do not create an empty item in it
		-Fix: uninitialized local var caused segfault on error branch while creating project file

	[doc]
		-Fix: typo in -dev package desc in packaging doc

	[gtk]
		-Fix: opengl rendering: line/arc gc width needs to be determined at draw time, not at gc set time; the gc may be configured once, then subsequent zooming would change coords-per-pixel
		-Fix: framed hbox/vbox expand/fill in the right direction

	[gtk2]
		-Fix: make opengl preview widget contexts share textures with top window drawing area gl context - needed for preview showing the same pixmaps work correctly with the same cached texture IDs

	[gtk4]
		-Fix: make sure window destroy callback runs when window is closed from code
		-Fix: tree view: while destroying a tree widget, avoid triggering set cursor to NULL (there's no real cursor change)
		-Fix: more advanced setup to avoid double close callbacks caused by glib async signal mess
		-Fix: when setting initial preview zoom/pan to zoom_win, do not assume x1;y1 being 0;0

	[irc]
		-Fix: use app name instead of hardwiring pcb-rnd when saving the log

	[lib_hid_common]
		-Fix: when the preferences dialog is not active, do not attempt to refresh it from conf change callbacks
		-Fix: typo in win32-specific path handling of the new fileselect dialog
		-Fix: preferences config tree: save user config file or mark design changed if array type value changed

	[lib_hid_gl]
		-Fix: uninitialized gl version (on missing call)
		-Fix: refuse direct render backend on ES (where probably only vao would work)
		-Fix: opengl ES shader bugs: wrong name for texture2D() call, have to use "varying" instead of in/out for vertex->fragment communication, there's no f suffix for floats, use 3.0 for float comparison (thanks to Majenko)
		-Fix: vao init version check: accept anything >= 1.0 on ES , only desktop requires >=3.0
		-Add: on some ES versions there's no way to get the major version as an integer; try to parse it out from the version string

	[script]
		-Fix: one-liner shouldn't segfault if language engine is not found
		-Add: print info line to log if no installed scripting language would be found (no puplug dir set in fungw)

librnd 3.1.1 (r34045)
~~~~~~~~~~~~~~~~~~~~~
	[core]
		-Fix: conf system shouldn't throw error on shifting 0-length array for prepend
		-Fix: suppress error message on duplicate action and choose the app's action to keep for the actions that got moved from pcb-rnd to librnd at librnd 3.1.0; this is how librnd 3.1.1+ will work with old pcb-rnd executables
		-Fix: comment description of the dialog box geo change event: it means geometry _may_ have changed (gtk4 for exmaple will flood with unchanged geo on leave/enter)
		-Fix: set as many of the -c plugins/ before gui/export initialization as possible, but then try again the ones that didn't work after export/gui initialization: they may be export/gui conf nodes; for exmaple this allows setting opengl backend via -c even tho it is a hid_gtk_* plugin conf node
		-Fix: input handler makes event with hidlib (when hidlib is known)
		-Fix: provide a new set of key input handler calls to pass on hidlib to the event handler
		-Fix: DAD: wrong parameter name in comment about "tree row append under"

	[doc]
		-Add: developer doc: drawing on DAD widget and rendering path through HIDs and libs
		-Fix: packager's: remove $C from packages.html when not used
		-Fix: packager's doc: remove duplicate $PREFIC/lib/librnd3/scconfig from file listing

	[gtk]
		-Fix: remove gtkx cflags and ldflags: gtk2 plugins should use gtk2 flags, gtk4 plugins should use gtk4 flags so it is possible to compile both as plugins
		-Fix: hidgl_init() needs to be called on an existing gl context so it needs to wait until the widget is created
		-Fix: force-realize the new dialog after creation and iterate so that it is really created before returning so that the caller can manipulate widget states
		-Fix: dlg_attr* widget implementations should be dispatched to per-version gtk common instead of directly including global common - this gives the version dependent layer a chance to override or extend dad widget implementations without a maze of #ifdefs
		-Fix: hid glue: call backend uninit on pixmap uninit to get bakcend caches free'd
		-Fix: don't use gdk pixmap type directly in common code, gtk4 won't have it
		-Fix: don't call implementation-specific pixmap uninit if it is not available
		-Cleanup: use hidgl reset at the end of crosshair draw instead of low level gl xor mode setting
		-Cleanup: do not include stencil and opengl headers directly, everyhting shall go through hidgl.h
		-Cleanup: gtk2-gl shall not incldue opengl.h as no low level drawing is done
		-Cleanup: top window placement function name reflects its timing nature
		-Cleanup: gdkc_window_get_pointer() should have no return value (not used at caller)
		-Cleanup: compat API: unify calling convention on paned: pass GtkWidget and cast in compat
		-Cleanup: const correctness on gdk key query
		-Cleanup: move gtk2-only tree table keyboard workaround to the gtk2 layer so common code doesn't need #ifdefs on gtk version
		-Add: abstract drawing area type and class for the preview widget: in gtk2 it's a drawing area in gtk4 it's a GLarea
		-Add: preview opengl rendering creates new context with low level draw before first draw
		-Add: support for sparse grid in gtk2 and gtk4 opengl render
		-Add: bind gl texture free

	[gtk2]
		-Del: remove top window resize grip widget: it's not a natural gtk thing, it never made into lesstif or the gtk4 port and poll shows nobody would miss it anyway
		-Fix: missing include for preview context init
		-Fix: wrong order of hidgl init and new context calls in top window drawing area
		-Fix: correct "top-left" coords of pixmap rendering when flipped
		-Fix: flip (mirror) content of pixmap if displayed on flipped board
		-Fix: when rendering pixmap in composite rendering mode, also calculate and set clip
		-Fix: don't let global grid extend beyond the drawing area even if board is flipped
		-Add: uninit pixmap call that frees local transformed caches

	[gtk4]
		-Fix: do not scale color for transparency, it makes the output too light
		-Fix: window placement: window x;y needs to be queried separately because allocation is in window-coordinates
		-Fix: drawing area realized signal doesn't have a return value
		-Fix: make sure lib_gtk_common conf file is specified only once to avoid redundant Makefile rules generating the C version of the file
		-Fix: always declare gtkc_event_*
		-Fix: when acquiring x;y from a widget for a non-mouse event, convert surface coords into widget coords (fixes pcb-rnd "del key jumps crosshair away" bug)
		-Cleanup: remove xor color tuning from high level: in the vao backend we do not have real xor, only some blending cheat so color needs to be tuned locally
		-Cleanup: compiler warnings: missing cast on paned
		-Cleanup: remove scrollbar dead code
		-Cleanup: const correctness in css bg color set
		-Cleanup: realize/unrealize singals do have void * user data even if the code doesn't use it at the moment
		-Cleanup: rnd_gtk_tree_table_arrow_width() is gtk2-only
		-Cleanup: missing casts for top window custom scrollbar
		-Cleanup: wrong number of arguments for wt_preview singal callback
		-Workaround: gtk4 bug: GUI locks up if popup menu is not hidden before executing actions, e.g. in case of context menu inserting new layer
		-Add: call gl render
		-Add: port wt_preview compat to gtk_gl_area
		-Add: comment about popdown memleak and gui lockup
		-Add: top window and attribute dialog delayed placement because gtk4 is fighting it
		-Add: top win scrollbar widget: "jump here" when clicked outside of the slider

	[lesstif]
		-Fix: correct "top-left" coords of pixmap rendering when flipped
		-Fix: flip (mirror) content of pixmap if displayed on flipped board
		-Add: prepare the code for sparse grid (disable it for now as it's a gtk-only config node)

	[lib_hid_common]
		-Fix: preferences dialog: remove references to pcb-rnd from text printed on GUI

	[lib_hid_gl]
		-Cleanup: remove PRIM_MASK_* code from direct draw: all users got deleted between pcb-rnd 2.1.2 and 2.1.3 back in 2019
		-Split: original drawing backend into draw_direct and the API to draw.h to make room for alternate implementations
		-Cleanup: stencil calls to stencil_gl.[ch]
		-Cleanup: remove low level gl calls from anywhere else but backend code
		-Cleanup: rename colour to color - the codebase follows US English
		-Cleanup: functions with no arguments should be (void) in the low level draw API
		-Cleanup: do not use "static inline", it's not c89; use portable RND_INLINE instead
		-Cleanup: rename solid_rectangle to fillrect: shorter and more consistent with the codebase
		-Cleanup: rename texture_quad to textrect for consistency with other rect calls
		-Cleanup: rename "circular" cap drawing internals to be consistent with the rest of the code base: round cap
		-Cleanup: move stencil op reset from gtk gl to draw low level
		-Clenaup: view (translate+zoom) low level gl setup from gtk side to draw backend (new opengl does not have matrix transformations)
		-Cleanup: abstract push/pop matrix so that gtk doesn't need to do these with gl low level
		-Cleanup: disable a large chunk of dead code - seemingly some old stencil/mask draw code from before layer compositing
		-Cleanup: report error into the message log, not to stdout, when stencil bits are not available
		-Add: support for sparse grid
		-Add: hidgl_set_color() so that hids won't need to use low level draw .h directly
		-Add: error backend: in case no backend is available for rendering, print an error message and provide nop for all calls (better than a segf on NULL function ptr calls)
		-Add: vao backend for non-compat-mode opengl (gtk4), with ES and desktop shaders
		-Add: infrastructure for tracing opengl calls
		-Add: plugin configuration for backend selection logics
		-Add: stencil backends; config bools for disabling each stencil backend
		-Add: support for texture free (releases opengl texture name)

	[lohgid]
		-Fix: make_gc call-through should pass on delegatee hid instead of loghid's own hid - most GUI HIDs will store this pointer and make a check on USE_GC() to make sure no foreign gc is used and loghid would be considered foreign

	[scconfig]
		-Fix: lib_gtk_common is not compiled anymore, disable or depend on lib_gtk2_common and lib_gtk4_common
		-Fix: warn about missing lesstif only if the user explicitly requested it
		-Fix: warn about missing libstroke only if the stroke plugin is explicitly requested by the user
		-Fix: refine no-system-installed-fungw warning to tell it's librnd that needs to be reconfigured
		-Add: refine the gtk2+gl disable warning - opengl is much less generic than it seemed when that message was originally written: every version of gtk and probably every single HID using opengl will have different dependencies
		-Add: more accurate gtk2 vs. gtk4 warnings and notes for all combination of explicit and implicit requests
		-Add: more sophisticated gtk2 vs. gtk4 conflict resolvement: if the user expressed explicit interest in either version on the command line, prefer that one instead of the standard gtk2-over-gtk4 preference
		-Change: switch gtk4 from disable-all to disable so --all=plugin picks it up

	[script]
		-Fix: live script error message: request the user to system-install fungw (not necessarily from source) and reconfigure librnd, not pcb-rnd

librnd 3.1.0 (r33720)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: build all objects of gensexpr so that all headers can be installed
		-Fix: install the two missing headers in src_3rd genht
		-Add: install headers of gensexpr when the lib plugin is compiled

	[core]
		-Fix: typo in anyload declaration
		-Add: publish safe_fs rnd_file_stat() for efficient but portable access to multiple stat fields
		-Add: event for bootstrapping a board change from the lib (required for preferences window to mark the board changed when config on design role changes)
		-Add: mark some menu item fields obsolete and scheduled removal

	[dad]
		-Add: publish RND_DAD_SUBDIALOG so that dialg boxes can be build to include caller supplied subdialogs
		-Add: publish RND_DAD_STRING_SELECT_REGION so that dialog box code can force-select a region of string entries

	[diag_rnd]
		-Import: conf related diag actions from pcb-rnd so that all Ringdove apps have them
		-Import: finish importing diag actions by enabling the plugin and triggering ./configure from tab

	[doc]
		-Add: start documenting wayland specific GUI limitations

	[fsd]
		-Fix: don't segfault in shortcut saving if there's no app dotdir

	[gtk]
		-Split: win resize binding in two, because gtk2 prefers it before show() and gtk4 needs it after show()
		-Add: abstract GDK_MOD1_MASK: gtk4 renamed MOD1 to ALT
		-Add: abstract mouse cursor names (enum or char * or both) to compat layer because gtk4 does it differently
		-Add: internal xpm creation API to allow scaling later
		-Add: configuration node to control icon_scale - optional
		-Cleanup: replace ghid_ prefix with rnd_gtk_
		-Cleanup: replace rnd_hid_gtk_ prefix with rnd_gtk_
		-Cleanup: replace prefix with rnd_gtkg_ in glue API
		-Cleanup: remove _port_ from function names not dealing with ports directly
		-Cleanup: replace GHID_ prefix with RND_GTK_
		-Add: extend the doc to explain the source code split in lib_gtk_common
		-Del: drawing_area_size_allocate_cb() - it's a noop
		-Del: gtkc_widget_get_preferred_height() - no caller
		-Add: API to abstract drawing area configure event, installed on the top window's drawing area
		-Cleanup: rename the dwg resize compatibility event struct to a more generic xy event since it can be reused for mouse as well
		-Change: xy event delivers coords in long (strictly speaking: an int can be 16 bit)
		-Change: do the top window scroll wheel binding through the event xy wrapper for gtk4 compatibility
		-Change: extend the xy event call API to xyz so that mouse scroll wheel key modifiers can be passed back
		-Change: do the top window drawing area enter/leave events using compat.h (for gtk4 transition)
		-Change: do the top window drawing area mouse motion events using compat.h (for gtk4 transition)
		-Cleanup: remove gdk event type dependency from rnd_gtk_note_event_location() so it would work in gtk4 too
		-Change: generalize drawing area event setup, preparing for gtk4
		-Cleanup: switch over preview widget motion, scroll and resize from direct signal binding to compat binding for portability to gtk4
		-Change: do the preview drawing area mouse press/release events using compat.h (for gtk4 transition)
		-Add: generalize event setup so it can be reused independently of drawing widgets
		-Move: resize grip into a separate function; creation to compat layer since gtk4 likely won't have it
		-Move: resize grip xpm from gtk-common to gtk2-common; it won't be supported in gtk4 in any form
		-Move: resize grip: move out from gtk2 topwin - it's a large chunk of unrelated code and may be removed later
		-Update: "who did what" kind of historic banner to reflect changes made for pcb-rnd
		-Split: low level input singal connect/disconnect from common gtk to version-specific gtk as signal handling changed in gtk4
		-Cleanup: use compat layer for top window mouse press/release signals for gtk4 portability
		-Cleanup: figure and pass on modifier keys with mouse button press event from the compat layer so less version-dependent queries are made in gtk-common
		-Cleanup: use version-portable mouse press event for the get location loop
		-Add: compatibility layer for key press event handling
		-Cleanup: top window key presses go through the compatibility layer
		-Cleanup: use compat event bindings for location loop key events
		-Cleanup: switch over preview widget key handling to compat layer
		-Cleanup: bu_command uses the compat layer for key bindings
		-Split: move label wrapper for click bind to the compat layer, it works differently in gtk4
		-Add: compat API for tracking window size changes instead of gtk2-only configure event
		-Add: compat layer for window and widget destroy and delete signals
		-Cleanup: use compat layer for enter event on top window drawing area
		-Split: keyboard translation to gtk version generic and specific halves for gtk4 porting
		-Cleanup: strict match event callback function signature with (void *) user data
		-Cleanup: reclassify private bu_menu functions to static
		-Del: unused rnd_gtk_create_menu_widget_path()
		-Del: remove accel group support from bu_menu: we are not using menu accel for hotkey handline
		-Del: unused action group from global gtk state (we took away hotkey handling from gtk long ago)
		-Cleanup: menu API: don't depend on the custom menu type, pass GtkWidget (gtk4 will use a different widget)
		-Cleanup: move custom menu widget implementation into the .c file to make it private and remove it from the API; gtk4 will not need it
		-Cleanup: move menu toggle callback to private as the glue code always called it with one specific implementation; this removes GtkAction from the API (which is really an internal implementation detail and gtk4 doesn't have)
		-Cleanup: bu_menu: move API doc from .c to .h
		-Cleanup: bu_menu: mark all private functions static
		-Move: bu_menu to lib_gtk2_common - it will be a totally different implementation for gtk4
		-Add: abstract GdkCursorType into compat.h because it's changed in gtk4
		-Move: adjustment tune from ui_zoompan to the compat layer as it has to be done differently in gtk4
		-Add: abstract entry set/get into the compat layer because gtk4 changed the API
		-Add: abstract gtk_entry_set_width_chars() into the compat layer because gtk4 made this more complicated too
		-Del: gtkc_widget_add_class_style() - only the gtk3 port depended on it
		-Split: RND_GTK_KEY() into a gtk2 and a gtk4 variant; only gtk2 needs scconfig detection on this
		-Add: compatibility call for widget background color set - gtk4 doesn't have this (maybe we will need to use css)
		-Add: port wrap-click-bind on labels and picture boxes to use the centralized signal handler macros isntead of manual bindings so they will work with gtk4
		-Cleanup: get rid of end-packing, always use start-packing (in preparation of packing abstraction needed for gtk4)
		-Add: compat API for packing widgets; switch over from gtk2/gtk3 API to the compat API for packing widgets
		-Cleanup: use compat rnd_gtk_color_t instead of GdkColor
		-Add: compat API for frame-set-child
		-Cleanup: use compat api for setting frame child when creating top window
		-Add: abstract creating scrolled windows (gtk2 requires 2 args, gtk4 requires no arg)
		-Add: abstract "get entry widget from combo-box-with-entry" into compat.h because gtk4 does this differently
		-Add: abstract adding a child to a scrolled window - gtk4 requires a specific call for it
		-Add: disable gtk2-specific tree-table workarounds for other versions of gtk
		-Add: abstract tree-table key press binding, event forwarding included
		-Fix: tree table key handler: use librnd's control key modifier to check if control is pressed for ctrl+c
		-Add: abstract copy-text-to-clipboard into compat
		-Add: abstract button child set for picture buttons
		-Add: abstract gtk window destroy: in gtk2 it's widget destroy, in gtk4 a specific window destroy call
		-Add: abstract packing paned children into compat (as gtk4 changed the functions slightly)
		-Add: dad label creation API because truncated/rotated labels are different in gtk4
		-Add: abstract window set id to compat because gtk4 doesn't have it
		-Add: abstract window resize and move - gtk4 has removed this API because of wayland
		-Add: abstract "add main vbox in the content area of a dialog box" mechanism into compat; gtk4 needs different packing
		-Add: abstract show_all(), gtk4 doesn't have that
		-Add: abstract run dialog because gtk4 doesn't have it
		-Move: old, gtk2-only, native gtk file selector from gtk common to gtk2 common - gtk4 won't have a native version at all
		-Add: abstract widget destroy (gtk4 doesn't have it)
		-Add: abstract waiting for destroy events to get delivered (gtk4 removed APIs)
		-Cleanup: move top bar theming to compat layer, hopefully gtk4 can implement it as a no-op
		-Add: abstract gtk_main_quit() (gtk4 removed the API)
		-Add: abstract button set image (not present in gtk4)
		-Add: abstract top window set child (gtk4 doesn't have containers)
		-Cleanup: replace event box with a plain box and remove container based population of it in the top window upper bar - the event box was used earlier to a theme-update trick that was disabled years ago because of risk of unreproduciable crash
		-Add: abstract box that is created only for setting the background color - in gtk2 it was an event box, but there's no such thing in gtk4
		-Cleanup: use compat layer for background color modification in top window alert section
		-Add: abstract widget set focusable
		-Add: abstract scrollbar creation for gtk4 API change
		-Add: abstract left ptr named mouse cursor
		-Add: abstract custom mouse cursor index-to-shape conversion because shape type differs between gtk2 and gtk4
		-Cleanup: remove long unused mouse cursor name defs
		-Add: abstract setting custom mouse cursor call
		-Add: abstract widget-set-cursor
		-Add: abstract cursor warp - gtk4 doesn't have that API because of their bondage&discipline approach
		-Add: abstract wt preview redraw (invalidate)
		-Fix: preview widget: use compat layer for making the widget focusable
		-Add: abstract one more level of preview expose event as it's very different in gtk4
		-Add: abstract main and quit because gtk4 had to change the API on this too
		-Add: abstract parse arguments callback: gtk app initialization changed in gtk4
		-Add: abstract low level top window creation call, gtk4 has it differently
		-Add: abstract window origin query
		-Move: top window drawing update to compat layer as gtk4 changed render mechanism
		-Change: get_origin abstraction: pass on a widget, not a window, let the version-dependent backend figure how to get the window for that
		-Add: abstract clipboard get text, it's going to be different in gtk4
		-Add: abstract beep
		-Add: abstract explicit iterate call
		-Add: abstract benchmark (gtk4 needs to do flushes differently)
		-Add: abstract opening popup menus
		-Add: abstract mod1 mask apple fix - gtk4 likely won't need it
		-Add: abstract checkbutton set
		-Add: abstract check button signal name
		-Add: abstract check button get
		-Add: abstract setting scrollbar value - gtk4 doesn't have "range" for adjustment
		-Add: abstract scrollbar getvalue
		-Cleanup: rename adj to scb because our internal API is about scrollbars, adjustment is just the gtk2 implementation
		-Fix: zoom adjustment compat API: expect a scrollbar because gtk4 won't have ranges
		-Add: workaround button minimal size and image border (in gtk4) for image buttons
		-Fix: when adding dock box (not frame), don't make it expand: the main drawing area should take all extra space
		-Fix: pack attribute dialog widgets with alignment 'start' instead of 'fill' in the non-expfill direction to match DAD alignment expectations
		-Move: gtk gl common code from gtk2 gl hid to lib_gtk_common so that it is available for gtk4 as well
		-Fix: don't include gtk2-specific header in common code
		-Cleanup: don't hardwire gtk2_gl where hid is easily available
		-Fix: remove gtk2_gl direct reference where it can be avoided
		-Cleanup: remove gtk2 hid hardwirings from the common gtk gl code
		-Move: color-to-name function from common to gtk-version-specific plugin as color type changed from gtk2 to gtk4
		-Add: abstract the whole scrollbar+adjustment creation code from top-dialog - gtk4 needs it differently to work around yet another gtk4 bug
		-Change: generalize rnd_gtk_menu_widget() into rnd_gtk_menu_popup_pre(); in gtk4 it won't return a widget as popup widgets are not yet created
		-Fix: port color literal (gtk2 uses 16 bit int, gtk4 uses float 0..1)
		-Add: unify top window scrollbar thickness on default theme
		-Fix: use portable check button get active in DAD code for bools
		-Fix: symmetric keyboard unbinding macro for gtk4 event controller
		-Fix: symmetric mouse button unbinding macro for gtk4 event controller
		-Fix: symmetric gtk window destroy unbinding macro for gtk4 event controller
		-Add: set paned position on widget creation: workaround for async widget creation (gtk4)

	[hid]
		-Add: rnd_hid_fileselect(), wrapper aroud hid->fileselect that long term will obsolete hid->fileselect()
		-Cleanup: move hid->fileselect() description comment to rnd_hid_fileselect() and mark hid->fileselect() obsolete
		-Cleanup: use rnd_hid_fileselect() instead of direct hid call

	[hid_gtk2_gl]
		-Fix: uninitialize menu on exit
		-Del: long unused subcomposite start/end calls
		-Del: remove long unused dummy functions for line cap angle and faded color
		-Cleanup: split up main and preview expose gl code, move out the common gl context initialization code into a separate function (removes code dup)
		-Cleanup: remove unused variable from crosshair rendering
		-Change: crosshair draw function replaced interactive gl functions with vertex array
		-Change: draw the background using vertex array instead of interactive GL functions
		-Change: ghid_gl_draw_bg_solid_color() shouldn't take hidlib but x1,y1, x2,y2 because it's a generic low level gl rectangle draw function really
		-Split: preview expose code into a gtk2 specific and a common (zoom-setup + gl draw) part
		-Split: gtk2-specific code from common gtk-gl code
		-Add: comment to explain why ghid_gl_set_line_cap() is empty

	[lib_hid_common]
		-Import: generic part of preferences window, including the last four tabs from pcb-rnd so thye are available in all ringdove apps
		-Cleanup: remove the temporary Rnd_ prefixes, use rnd_ for the public API
		-Fix: preferences: do the initialization with 0 app specific tabs on the first call to Preferences() action if the app did not initialize - this makes it easier and safer to use preferences dialogs for simple apps that don't have specific preferences tabs

	[lib_hid_gl]
		-Change: replace GL_QUADS with GL_TRIANGLE_FAN since GL_QUADS is deprecated
		-Change: direct-draw a rectangle using vertex array instead of interactive GL functions
		-Move: expose init and Z_NEAR from lib_gtk2_gl (this is generic gl utility code useful for any gl rendering)
		-Move: background filled rectangle draw function from gtk2_gl
		-Cleanup: use line cap enum type for line end cap instead of int to make the API self-documenting
		-Cleanup: prefix Z_NEAR to avoid namespace pollution
		-Split: low level crosshair draw moved to generic gl draw code - it would be used independently of the toolkit

	[scconfig]
		-Add: include full version string in config.h so apps can print it for easier debugging
		-Add: explicit variable for libarchdir in librnd.mak
		-Add: gtk4 detection logic
		-Fix: don't let both gtk2 and gtk4 configured as builtin; porefer gtk2 over gtk4 for now


librnd 3.0.2 (r33224)
~~~~~~~~~~~~~~~~~~~~~
	[core]
		-Fix: don't crash on NULL string in rnd_conf_print_native_field() (ConfDump() action)

	[dad]
		-Add: HATT for subdialog: allows a DAD dialog to place a subdialog in the widget tree (subdialog typically received from the caller)
		-Add: assert on subdialog can not be set()
		-Add: new, DAD based file selection dialog (default on all HIDs)

	[doc]
		-Add: user manual for the new fsd
		-Add: define what exactly the CHANGE_CB does for a tree

	[gtk]
		-Cleanup: util_watch doesn't depend on in_mouse
		-Fix: tree table: add the tree view widget directly in the scrolled window so they can interact; this way moving the cursor will automatically update scroll
		-Fix: do not omit tree table when RND_HATF_SCROLL is not set (did not set wltop)
		-Fix: uninitialized pixels in custom mouse cursor imported from xbm smaller than 24x24
		-Fix: DAD tree click release should stop gtk from double-opening the given subtree
		-Fix: more robust fix for subtree expand when the arrow is clicked: let gtk handle the arrow
		-Fix: tree table enter_cb is called only on double click or enter on a row
		-Add: implement the subdialog HATT
		-Add: implement internal DAD API for widget poke: entry selection

	[gtk4]
		-Del: comment referring to gtk3
		-Del: trunc_text custom widget for gtk3 - there's a different one for gtk4
		-Add: mark rules-hint not to be used with gtk4

	[hid]
		-Fix: describe what really rnd_hid_fsd_flags_t fields do (most of them are deprecated and have no effect)
		-Add: mark RND_HID_FSD_IS_TEMPLATE obsolete and schedule removal
		-Add: fileselect descr argument is not really used at the moment
		-Add: API for optional DAD widget poke

	[hid_gtk2_gl]
		-Fix: gdk_color_parse() doesn't handle alpha, remove it when it is present in the input color string

	[lesstif]
		-Fix: remember if popup is open and don't lose get_xy coords (crosshair coords) so that actions triggered from the right context popup won't ask for new coords
		-Fix: close the popup menu when an item is selected and mark the popup inactive after the corresponding action finished
		-Fix: tree table: call DAD CHANGE_CB on enter pressed
		-Fix: tree table: double click on entry should call change cb
		-Fix: memory handling error on HATT_STRING set()
		-Add: HATT_SUBDIALOG implementation

	[lib_hid_common]
		-Import: plus and minus xpm's from pcb-rnd (layer selector)

	[scconfig]
		-Fix: do not accept lesstif installation if it doesn't have XmEXTERNAL_HIGHLIGHT (required for picture buttons and toggle buttons)

	[script]
		-Fix: use the 'selected' callback instead of the 'changed' callback for DAD_TREE() because the API around 'changed' is not clear

librnd 3.0.1 (r32954)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: running 'make' in any plugin changes to the right source directory to rebuild that plugin

	[core]
		-Fix: change internal GUI HID load mechanism: do not autoload HID plugins, but try to selectively load only the ones that are requested by the user or preferences; when there is absolutely no preference, load them all, but make sure to load lesstif first because it is broken and order of -lXm and -lXt matters even in dynamic linking

	[dad]
		-Fix: coord spin: print values to at most 6 decimal digits to reduce rounding errors

	[doc]
		-Add: link edakrill from the -rnd box
		-Add: mention genht and fungw in INSTALL for extended user scripting

	[gtk_common]
		-Fix: implicit declaration of tool function in dlg_topwin

	[hid]
		-Fix: don't ever fall back to automatically pick a GUI hid if it's marked hidden

	[lib_gtk_common]
		-Fix: implicit declaration of tool calls in bu_menu
		-Add: center view after the initial zoom-to-extent

	[lib_hid_common]
		-Fix: Zoom() without arguments is "auto zoom" which should zoom to extent _and_ center (pan)

	[loghid]
		-Fix: do not let loghid hook itself (would lead to infinite loop)
		-Fix: sanity check on all loghid calls to avoid infinite loop (loghid calling loghid)
		-Fix: mark loghid's GUI sniffer hidden so it's never picked up as default/fallback HID

	[poly]
		-Fix: excess semicolon ruined strict C89 validity

	[scconfig]
		-Cleanup: const correctness: don't make char * const if it's malloc'd and free'd

	[tests]
		-Fix: don't mind if some files are already removed in make clean's make uninstall of the local librnd installation


librnd 3.0.0 (r32916)
~~~~~~~~~~~~~~~~~~~~~
	[action]
		-Add: API CHANGE: introduce RND_APP_PREFIX() for RND_ACT_FAIL() and other ACT macros to know the host application namespace prefix
		-Cleanup: rename from pcb_act* prefix to rnd_act* prefix for clarity and namespace

	[anyload]
		-Add: spare fields

	[conf]
		-Fix: don't crash if native node is queried before the hash is initialized
		-Fix: don't crash if app didn't specify user conf dir
		-Fix: conf ignores should be coming from the app using rnd_app.*, not hardwired in librnd
		-Cleanup: rename pcb_conf_merge_all to rnd_conf_merge_all to keep namespace clean
		-Cleanup: API CHANGE: rename RND_CFR_DEFAULTPCB to RND_CFR_DEFAULTDSG because librnd is not about PCBs only but abotu any design a CAD-like app does
		-Cleanup: fix up the symbol name of rnd_conf_pcb_hid_uninit() in internal public API (remove the _pcb from the middle, probably an earlier renaming error)
		-Add: comment to explain a status bit left-over from pcb-rnd
		-Add: spare fields in callback struct

	[core]
		-Fix: don't crash on action uninitialization if the action system was not initialized
		-Fix: API CHANGE: typo in public symbol prefix (rnd_pcphl_*)
		-Fix: use %lx for printing unsigned long on version mismatch error msg
		-Del: pcb_compat.h: it was relevant in the 2.x.x series for backward compatibility, but 3.0.0 has other breaking API changes as well
		-Del: pre-3.0.0 compatibility layers
		-Change: lib versioning scheme for detaching from pcb-rnd
		-Cleanup: API CHANGE: rename pcb_conf_internal to rnd_conf_internal to clean the namespace
		-Cleanup: rename pcb_long64_t to have rnd_ prefix
		-Cleanup: remove unused PCB_PACKAGE, rename PCB_VERSION and PCB_REVISION to RND_* for namespace purity (internal public API)
		-Cleanup: remove references to pcb from public API comments
		-Cleanup: prefix pcbhl_ with rnd_ for keeping the namespace clean
		-Cleanup: rename pcb_color_* to rnd_color_* in internal API for clarity
		-Cleanup: namespace: pcb_hid_dlg prefix changed to rnd
		-Cleanup: namespace: pcb_dad public internals to rnd_dad prefix
		-Cleanup: rename pcb_conf_* to rnd_conf_* for namespace cleanup
		-Cleanup: pcb_ -> rnd_ prefixes in actions, safe_fs, pixmap, internal hid APIs
		-Cleanup: pcb_ -> rnd_ prefixes in hidlib error init, macro of tools, macro of grid, macro of conf
		-Cleanup: PCB_ -> RND_ prefixes in PCB_OBJ_PROP
		-Cleanup: PCB_ -> RND_ prefixes in internal feature macro
		-Cleanup: rename pcb in internal APIs and comments
		-Cleanup: remove some pcb-rnd refs from anyload
		-Add: spare fields in pixmap structs, color cache and hidlib API
		-Add: rnd_coord_t spare to all struct with spare fields (rnd_coord_t size depends on configuration)
		-Add: SetGridOffs() action
		-Add: publish the prototype of rnd_pcbhl_conf_postproc() for pcb-rnd to be able to set the home dir
		-Add: install all funchash headers - pcb-rnd needs them

	[DAD]
		-Fix: don't use lable for DAD_COORD in gui actions
		-Cleanup: API CHANGE: make RND_DAD_CFG_NOLABEL the default and remove the feature macro
		-Add: spare fields in spin struct

	[doc]
		-Fix: doc link points to developer/, there's no user doc for the lib
		-Fix: refine the documentation on how menu file name is really used
		-Fix: broken link to minisvn (web svn cgi)
		-Fix: license title is not pcb-rnd but librnd
		-Del: key/menu related rules from Makefile (librnd doesn't come with a menu file)
		-Cleanup: remove $LP and $LC from packager's doc (we install only librnd, that's $P and $C)
		-Update: unix installation from pcb-rnd
		-Update: change README from pcb-rnd to librnd
		-Update: AUTHORS and INSTALL from pcb-rnd to librnd
		-Update: README with the dir layout
		-Update: html headers and main web page from pcb-rnd to librnd
		-Update: there's only one recommended init sequence now which is generic enough for all cases
		-Import: action doc from pcb-rnd for those actions that got moved from pcb-rnd to librnd
		-Add: document how spare fields are used to achieve better binary compatibility
		-Add: 'news' page
		-Add: test compilation result on IRIX
		-Add: packager's doc
		-Add: explain better why there's no windows binaries for the lib
		-Add: action/ in the dir listing
		-Add: logo, @ png for mail addresses
		-Add: change -rnd on the index page to Ringdove link collection
		-Add: mention ldconfig in INSTALL

	[gtk]
		-Fix: --help doesn't hardwire pcb-rnd
		-Cleanup: rename PCB_GTK_KEY() to RND_GTK_KEY() in the internal public API
		-Cleanup: rename PCB_WORKAROUND_* to RND_WORKAROUND_* (in internal public API) to clean the namespace
		-Cleanup: PCB_ -> RND_ prefixes in internals
		-Cleanup: PCB_ -> RND_ prefixes in preview widget
		-Cleanup: rename event coord converter macro so it doesn't have PCB in its name anymore
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_gtk)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_conf_hid_gtk)
		-Cleanup: rename pcb_ -> rnd_ (file name pcb_gtk.h to rnd_gtk.h)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb -> rnd in internal APIs
		-Cleanup: rename pcb -> rnd in internal APIs

	[hid_batch]
		-Fix: --help doesn't hardwire pcb-rnd
		-Cleanup: remove pcb terminology

	[hid_lesstif]
		-Fix: wrong FSF address in a non-unified address block in the license banner
		-Fix: invalid memory write on filling in lesstif command line arguments to other plugins in the wrong array
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs for motif box
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_x and pcb_y)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs

	[hid_remote]
		-Fix: use rnd_config so that app prefix is defined for actions
		-Cleanup: rename pcb_ -> rnd_ in internal APIs

	[hidlib]
		-Fix: accept NULL for rnd_app.conf_internal, take it as if it was an empty string
		-Cleanup: code style/indentation after rnd_app refactoring
		-Cleanup: remove old/obsolete struct fields (now that we have a breaking API change for 3.0.0 anyway)
		-Change: API CHANGE: move package ver/name/url into rnd_app
		-Change: API CHANGE: move conf paths into rnd_app
		-Change: API CHANGE: move crosshair move/suspend/restore into rnd_app
		-Change: API CHANGE: move crosshair attached/marks draw into rnd_app
		-Change: API CHANGE: move expose callbacks into rnd_app
		-Change: API CHANGE: move conf_internal into rnd_app
		-Move: rnd_conf_lib_dir and rnd_conf_dot_dir into rnd_app as these need to be filled in by the app
		-Move: conf postproc hook to rnd_app
		-Add: move menu related back references to rnd_app
		-Add: explain where the API wrapper is called from
		-Add: rnd_fix_locale_and_env() is rewritten as a macro so it can perform some checks that depend on app compilation
		-Add: rnd_fix_locale_and_env() throws an error on coord bit configuration mismatch between librnd and the app
		-Add: app revision field in rnd_app for better version report
		-Add: spare fields in hid_attrib and main arg struct

	[irc]
		-Cleanup: namespace pollution: use rnd_ instead of pcb_ for internal action names
		-Cleanup: remove unnecessary pcb-rnd references, generalize for ringdove
		-Cleanup: pcb_ -> rnd_ prefixes
		-Add: when reporting version on irc, include both host application and librnd versions

	[lib_gensexpr]
		-Change: buildin by default (apps will need it)
		-Change: move package into core (would be alone in the lib_io package)

	[lib_hid_common]
		-Fix: wrong plugin name in cookie string
		-Fix: remove plugins/dialogs from the conf system on uninit
		-Fix: missing header for the plugins dialog
		-Fix: zoom with =0.1mm broke because it did not convert with unit
		-Cleanup: API CHANGE: rename pcb_* to rnd_* in public API
		-Cleanup: API CHANGE: rename PCB_GUI_NOGUI to RND_GUI_NOGUI
		-Cleanup: rename pcb -> rnd in internal APIs
		-Cleanup: const correcness
		-Import: online-help xpm from pcb-rnd
		-Import: manage plugins dialog from pcb-rnd (the plugin infra is common to all ringdove apps)
		-Add: xpm name resolution action so that non-gui app plugins don't need to depend on lib_hid_common for optional GUI

	[lib_hid_gl]
		-Cleanup: remove prototype for non-existent function

	[lib_wget]
		-Cleanup: API CHANGE: rename pcb_* symbols to rnd_* (to clean the namespace)
		-Change: buildin by default (apps will need it)
		-Change: user agent should be more generic: librnd-wget
		-Add: spare fields

	[menu]
		-Cleanup: remove pcb_ and PCB_ prefix from the internal public API in favor of rnd_ and RND_

	[poly]
		-Cleanup: rename pcb_ prefix to rnd_ in pline support, polyarea internals and poly offs
		-Cleanup: rename pcb_ prefix to rnd_ for pcb_poly_ in internal APIs
		-Cleanup: rename prefix pcbo_ to rndo_

	[safe_fs]
		-Fix: API CHANGE: rnd_file_readable() needs to get a rnd_hidlib_t * first arg so it can do the access checks later

	[scconfig]
		-Fix: need to install typed double linked genlist's .c file as well, as it's a template included by the app
		-Fix: use genlist's own make install instead of manually listing a few files
		-Fix: make sure all parts of genlist ends up in the .so, some apps will use them
		-Fix: do not let librnd-specific argument parsing leak out to apps (e.g. coord type)
		-Fix: do not crash when value is missing for --key=value custom args
		-Fix: 'make map_plugins' moves the resulting plugins.h into librnd scconfig dig - this one is not installed
		-Fix: do not hardwire PREFIX/lib in librnd.mak, use libarchdir
		-Fix: all plugins are considered hidlib plugins - if they are builtin, link them in librnd-hid.so
		-Fix: LIBRND_LIBDIR from config.h shall use libarchdir instead of hardwired /lib
		-Fix: put plugin srcs on the dep list even if they are configured with --plugin and not --buildin
		-Fix: LIBRND_PLUGIN dir set with full path from trunk to fix up deps
		-Fix: missing return value for dep resolver
		-Fix: install genht's ht.c, it's part of the public API
		-Fix: proper pointer comparison for NULL
		-Fix: install/uninstall rule: don't do anything manually for genlist, it's installed using its own Makefile
		-Fix: install doc to $(SHAREDIR)/doc/librnd3 so different versions of the lib can be installed in parallel
		-Fix: the postarg hook needs special casing for when running from librnd's configure, since there's no librnd install yet
		-Fix: move -l's at the end of the command line for building the .so files - some C compilers are sensitive to this
		-Fix: save NULL as empty string when saving fungw ldflags in plugin state
		-Cleanup: split to-be-removed header installation from core header extra installation
		-Cleanup: require template users to define $(LIBRND_LIBDIR) so templates can cross-call
		-Cleanup: remove app-specific installation paths from config.h
		-Cleanup: prefix BINDIR with RND_
		-Cleanup: move GUI hid related detectioins from public scconfig helper API into internal - ringdove apps won't need to deal with this anymore
		-Cleanup: move the coord bits logics back from public API to private - apps should use whatever librnd was configured with
		-Cleanup: remove hooks_gui.c from the public scconfig API: only librnd shoudl deal with gui details
		-Cleanup: move librnd-only help from public scconfig API to local implementation
		-Cleanup: remove unused LIBDIR_INSTALLED from Makefile.conf template
		-Del: obsolete fallback def of RND_DAD_CFG_NOLABEL that already got removed
		-Del: hidlib property of plugins: every plugin in librnd is hidlib, and no other plugin elsewhere is, no need to track this anymore; switch over central plugin list to no-hidlib syntax
		-Del: remove bison/yacc/byaccic detection, librnd doesn't have any grammar
		-Move: librnd-specific detections back from the public API to internal - apps shouldn't try to compile librnd anymore
		-Change: lib plugins that are of interest for apps are default built-in
		-Change: API CHANGE: librnd.mak doesn't depend on LIBRND_ROOT anymore (embedded checkout of librnd not supported now) but uses LIBRND_PREFIX which it also sets
		-Change: do not instal anything in /etc - host app will load from its own directory
		-Change: SHAREDIR should be $PREFIX/share/librnd3 to avoid collision with different versions
		-Change: libdir is $PREFIX/lib/librnd3 to allow multiple major versions
		-Add: install rnd_hook_detect.h, apps' hook.c depend on it
		-Add: install genregex template header, required by pcb-rnd
		-Add: install lib-like plugin header files so application plugins can depend on them
		-Add: save and install $(SHAREDIR)/plugin.state, which lists the 3state of each plugin in both scconfig importable way and shell script processable comments
		-Add: when running for an app, calculate plugin external dependencies
		-Add: mark librnd plugins external in the plugin state dump
		-Add: generate librnd.mak to have extra -I and -L for the case librnd is installed at some non-standard path
		-Add: API CHANGE: rnd_hook_postarg() needs to get librnd prefix so it can load plugin states
		-Add: export -rdynamic for tests
		-Add: save fungw ldflags in plugin state - the host app needs it in case of system installed fungw
		-Add: calculate default confdir when not specified (API CHANGE: postarg function needs to get the application name)
		-Add: install cquote in libdir/scconfig/ - apps need this to compile internal version of menu and config files
		-Add: install sccbox (for applications without scconfig)

	[script]
		-Cleanup: pcb_ -> rnd_ prefixes

	[stroke]
		-Cleanup: rename pcb_ prefix to rnd_ in internals

	[tests]
		-Fix: librnd link test gets dummy empty internal menu so it can initialize and return 0
		-Fix: librnd test: more robust uninstall
		-Cleanup: simplify live test code app initialization
		-Update: rnd_printf test doesn't need any glue layer with librnd 3.0.0 API
		-Add: librnd test: tweak plugin path so the test runs with all-plugin builds and by default use the batch hid

	[tool]
		-Add: spare fields

	[util]
		-Fix: pup list util for the packager's doc: use the right package dir
		-Import: awk_on_formats for packager's doc
