Pd-L2ork Changelog/Laundry List Ivica Ico Bukvic http://l2ork.music.vt.edu TODO *coll object's window name (make it display dynamically loaded document as well as update whenever new document is opened) *gridflow compatibility *further test py for stability and figure out packaging of libflext *partition and clean-up pd.tk (essentially merge 0.43 once it goes stable) *improve color dialog *Make possible for multiple objects to be sent to front and back (will use infinite undo) *Implement keyboard patching shortcuts *reading files into an array without xruns? CHANGELOG Any newer updates are now merged with the github commits. For additional info on the changes, visit http://github.com/pd-l2ork/ 2011-12-17 *Minor bug fixes to infinite undo (text not being properly recreated when redoing inside a message) *More robust copying from external buffer *Silly (nitpicky) one: undo create object when redrawing draws bogus inlet on objects that could not be created but were autopatched *Fixed offset logic in paste and duplicate *Removed one more stray debugging statement 2011-12-15 *Complete overhaul of the infinite undo. All functions now work (including newly added ones) and behave properly as part of an infinite undo. *Make paste from script more robust (scripts with embedded patchers simply don't work). *FINALLY fixed the multiple entry bug the right way. 2011-12-09 *Fixed minor regression in undo_cut where first connection was not getting saved *Fixed https://github.com/pd-l2ork/pd/commit/d7825ce8b4701011cafa2100d40fa9420c35e134 bug *Added proper repositioning of objects after they have been cut/deleted followed by an undo/redo which always places them at the end and thus makes redoing of cut buggy as it originally relied on whatever selection one had as opposed to the proper original selection. 2011-12-03 *Fixed a couple of bugs with consistency errors that resulted from some of the previous improvements *Added -console flage to startup flags to enable console as soon as pd starts up *Fixed resizing of the console window (making it smaller destroys the bottom bar) 2011-11-29 *Further refined auto-resize object logic and improved gop redraw logic *Ability to restrict gop size even if it has no parent to never go below the text size (if hidetext is not enabled) *Various small stray bugs and improvements *Major bug-fix (affects all versions of Pd, including gui-rewrite) where doubly-embedded gop patchers had problems being displayed properly (2nd child patcher in 3-layered gop-enabled patches would show its gray rectangle on the parent patch as opposed its subpatch) *Enabled edit mode as soon as changes to an object/canvas have taken place via properties dialog 2011-11-22 *Ability to move/resize red GOP rectangle via GUI *Allowed GOP-enabled objects to be resized lower than what the default nlet spacing allows *Limit GOP resizing to the size of the text (if hidetext is not enabled on GOP-ed objects) 2011-11-15 *Fixed bug where "Save As" did not always add .pd extension to the file *Base path (for open/save dialog) is now updated when opening file from the command line to the directory of the file being opened 2011-11-13 *fixed graph-on-parent enable/disable does not activate undo/redo on the parent window (or the gop-ed patch unless it is open) *improved verifyquit mechanism to accomodate abstractions *fixed bug where hide text value was not properly interpreted by the canvas apply redo/undo *fixed stray stderr tcl/tk errors 2011-11-11 *Reenabled universal copy/paste (forgot to uncomment some parts) *Universal copy/paste also resizes the canvas as per original script 2011-10-25 *Fixed a monster segfault bug that occurred when using toggling graph-on-parent and cut in succession (usually in combination with undo/redo). 2011-10-24 *Added undo/redo for creating new objects 2011-10-22 *Implemented universal copy/paste 2011-10-21 *Fixed gop enable/disable segfault (when doing so on an empty canvas) *Added undo for the canvas properties 2011-08-24 *Fixed gop redrawing issue when passed coords message via script *Fixed pack not converting null lists into bangs 2011-05-17 *Fixed resize bugs on hslider and vslider objects where gui-based resizing did not also rescale their actual range. *Disabled automatic moving of newly created objects if they were autopatched. 2011-04-27 *Fixed stuck DIO Error notification bug. 2011-04-23 *Optimized redrawing of iemgui objects. *Fixed bug where vu_meter after having its scale disabled and then re-enabled it failed to draw the object properly (this one applies to all other Pd versions as well). 2011-04-20 *Reverted autopatching detection of inlets as autopatch preempts creation of objects. 2011-04-19 *fixed regression introduced with the 20110416 release where undo would crash. *improved duplicate mechanism to not overwrite single-step undo. *added more intelligent checking for the autopatching (howputnew function in g_text.c), making sure that the originating object has outlets to connect to). *optimized autopatch when pasting. 2011-04-18 *reworked how the _changed send functions so that it does not cause segfault when invoked in conjunction with a data structure array. Currently data structure arrays do not support this feature, but this may be addressed in the future (if necessary). *creating an array and a graph now results in editor automatically entering the edit mode. 2011-04-16 *added autopatch when pasting one object with one object selected. *fixed where startmotion when creating a new object and then pasting a new one below incorrectly continued to apply to the newly created object. 2011-04-13 *updated disis_wiimote external fixing IR reporting bug and improving redundancy checking before triggering threaded cues for rumble and led (which have caused unnecessary xruns on low-powered machines). *fixed trigger object to also support full name types (e.g. anything, float, vs. a and f). 2011-04-11 *finally discovered the root of all double-entry bugs (fingers crossed) and reverted all other previous workarounds for this problem. *released vastly improved disis_netreceive object that now features 100% gui-thread-safe operation. *fixed regression in the scrolling algorithm that has resulted from merging movable label for iemgui objects. 2011-04-04 *disabled creation of magicGlass object on canvas (thanks to Jonathan Wilkes for a bug report) *fixed bug where patch cords were not getting erased (due to fundamental fixes in the previous patch how the things are being destructed, this has resulted in this bug being "hidden" until now). 2011-04-03 *coll object's editor ability to deiconify when clicked and the window is currently iconified *ability to drag labels for iemgui objects (similar to resize with another bevel created in the top right corner of the object that is visible only if a label is not empty *adjust positioning of the resize/label displacing widget *Improved filtering of ctrl+key calls so that certain keys are globally ignored unless associated with an actual canvas *recreating windows sometimes reuses the old .x* name and thus for some reason doubles actions invoked from tcl/tk (even though tcl/tk sends only one call out), a.k.a. double-entry bug. Similarly, per-canvas vars sometimes got corrupt startup data (as it is stored in an array whose id corresponds with the canvas name). Consequently, fundamentally altered how Pd allocates memory from the pool to ensure no two canvas_classes will ever share the same name within the same session *fixed memory leak in glist_delete *removed some of the workarounds for the aforesaid double-entry bug which proved to be fixes for the symptoms rather than the core problem *fixed redraw issue after deleting objects that appeared after fixing the double-entry bug. *imported latest changes to the pddp project from the main pd-extended branch. 2011-03-26 *when sub-patch of a closed sub-patch is changed and closed, upon closing the parent patch which prompts the "do you wish to save the patch" dialog, it does not display the window title properly. *when object is being retyped, dynamically readjust patch cords. *some patch cords still don't show up on top of objects. *reworked how patches are being closed using "menuclose 1" to avoid random crashes. *fixed problem where doubly-nested gops still caused double-entry bug after cut/undo inside the abstraction. 2011-03-16 *fixed crash that occurs when having started with -jack flag without jackd running, jackd is started and dsp is reinitialized (dsp off, followed by dsp on) 2011-03-15 *fixed crash when creating an object from abstraction due to incomplete implementation of auto-update of inlet order that should be invoked only when moving nlets around 2011-03-12 *reworked $@ implementation to make it universal 2011-03-10 *patched delwrite~ clear patch *changed IOhannes's patch to adapt it to 0.42.5 and fixed bugs in it where his implementation would cause segfaults when invoked either within the patch itself or within the abstraction (the two required different memory allocation strategies). I did not include either Iohannes's $# nor $@-n feature Mathieu suggested as they are arguably both superfluous ($# can be done by using [list length], while $@-n can be recreated just as simply by doing (e.g. within the context of an abstraction): [loadbang] | [list $@] | [list split n] *fixed offset on the console's initial spawning location to avoid it overlapping the main pd window. *fixed stray bug with static values in trigger when receiving "anything" type input *separate console from the main window, make it resizable, and improve upon its design *move clear console button to console window *link Console key presses to the main Pd window *transfer keypresses on the main window and consequently patches *help browser shortcuts and transferring keypresses onto the main window *implement help browser keyboard shortcut (RETURN) for opening specific folder *added wm icons to all Pd windows *provided "send message to pd" console feedback. *2 means of sending messages to pd are synced. *multi-deselect (when selecting a region while holding shift and already having objects selected, those that are in the region and are already selected should be deselected) *trigger should accept static values as outlet information (e.g. 0 should be always 0 not a float and blah should be symbol blah) *crash when trying to invoke [; menuclose 1( from inside the patch *when new nlet is created in a subpatcher, nlets are updated on parent but their color (signal vs. non-signal) is wrong. *cord inspector causes pops/clicks even when disabled when mouse goes over the patch cords *delwrite should have a default length of the buffer as 1 second (as opposed default buffer size of 0 msec which causes unexpected results without any error reporting) *default cyclone/rand~ value has no effect until it is given a value via its first inlet *vastly improved scrolling algorithm including fix for multiline comments at 12-point font size does not provide accurate scrollbar information *tofront/back is misbehaving (again) *nlet highlighting bug reported by Jonathan Wilkes *cut/copy/paste not working between text entries and canvas (may need a more robust detection between textentry items and canvas items--currently depends on item name rather than type) *right-click->properties does not deselect previous item *console should not be editable *keyboard presses when focused on main Pd window does not translate onto patches *console offers improved highlighting *coll's editor does not come to front when coll is clicked and its document is already visible *coll's document always opens as dirty *duplicate not working between patchers *intelligent select between multiple windows (only one instance is active at any time) *magicglass perform is invoked when touching *~ nlets *duplicate broken on the same patcher *tofront/back does not dirty the canvas *tofront/back failed the first time it was invoked *copy/paste not working across patchers *fixed major CPU hit due to a bug in Cord Inspector implementation. Now the CPU usage is back to what it is in pd-extended. *further performance optimizations to the Cord Inspector. *improved edit mode detection and fixed edit menu activation accordingly. *fixed regression having to do with the gop boundaries *further cleaned-up graph boundaries (may require a better approach) *fixed bug with array properties "return" key shortcut *fixed regression with new patch title not loading *fixed bug with cord inspector where inlets were unnecessarily brought forward *fixed segfault when doing to-front/back without any object being selected *added enabling/disabling menu options when appropriate (e.g. cannot cut/paste if nothing is selected) *bound relevant canvas actions to the menu actions so that they can be invoked only if the menu actions are enabled (e.g. cut/copy/paste etc.) *requires further testing *relevant menu options reflect changes across all Pd windows (e.g. duplicate) *added special behavior for the cut/copy/paste menu in the root window *added previous window to the Window menu *revamped to-front and to-back behavior so that it does not rely upon select/cut/paste/undo hack. Therefore the audio and patch states now remain uninterrupted by these actions. *added to-front/back-specific undo actions. *reintroduced "to front" and "to back" into the popup menu. *Synced latest pddp documentation *fixed regression where gatom was not getting properties inside array *sometimes lines to inlets were not properly drawn (once objects are resized to accomodate appropriate nlet spacing) *updated Abstractions *added spectdelay~ a port of John Gibson's frequency-based delay/eq/feedback to the L2Ork externals and provided a helpfile *recompiled disis_munger~ and py.pd_linux lib to use latest version of the flext library (a part of L2Ork addons) *implemented apply undo for array properties and partially implemented apply undo for graph-on-parent object properties (does not apply to abstractions or top-level windows currently until I figure out how to address the indexing of toplevel windows inside the glist as well as how to address to which window such an undo belongs). *properties are disabled when right-clicking on an abstraction as modifying its settings externally does not make sense when one does not see the actual contents inside it. So, to edit the properties of an abstraction, one has to open the actual abstraction. *fixed how new arrays are created so that they always fit within the specified boundaries. Please note arrays that have been already created in prior patches remain untouched in terms of graph auto-resizing (legacy code is provided in g_editor.c canvas_vis that deals with this if anyone wishes to convert their arrays but is incomplete in that it assumes all arrays require resizing--this is however unnecessary as simple recreation of said arrays or manual readjustment of their settings ought to do the trick. -This feature needs further testing--feedback is most appreciated. *fixed how arrays deal with moving array points via mouse by restricting them within the array bounds--this should work for all gui-driven array operations, while array alterations via snapshots and other external ways of manipulating arrays remain unbound so as to allow for traditional data-flow debugging--this may change down the road in part due to introduction of the magicGlass option and in part due to belief that data monitoring should only report ranges specified by the graph. -This feature needs further testing--feedback is most appreciated. *added new feature for arrays where they report a bang through the _changed send (if one is provided) whenever they have been altered by a mouse click'n'drag--this in conjunction with array graph auto-resizing makes arrays formidable alternatives for multisliders. -This feature needs further testing--feedback is most appreciated. *when an array subpatch is opened and resized, the array automatically now resizes to properly fill the window. -This feature needs further testing--feedback is most appreciated. *fixed where array was not visible after reopening the patch if any of its points touched upon y graph limits. *fixed couple of segfaults caused by gridflow incompatibility--more problems remain with gridflow library compatibility, likely due to widgetbehavior and possibly also magicGlass incompatibility. Further investigation is necessary. *fixed memory leak in the disis_phasor~ external where the destructor was never properly called and updated its documentation (available in the l2ork_addons package). *fixed highlighting of signal nlets where nlet would revert to non-signal appearance after being highlighted/connected. *reintroduced array listview (this was a regression in respect to pd-extended). *improved appearance of the array listview. *fixed a few broken links in the pddp documentation and added new l2ork-specific array features to the pddp documentation. *made resize handle smaller to limit obstruction of smaller gui objects *added update of scrollbars upon creation of a new object *fixed scrollbar update regression when typing *fixed cords not showing up on top of objects when objects are first created and placed *added auto-resizing to text objects so that outlets never overlap (this does not affect gop patches as it is assumed one wishes to keep the gop size specific) *implemented Jonathan Wilkes' patch for select object that allows mixed arguments *further fixes to the build script *nlet highlighting should not be brought to front as that causes weird graphical glitches with "to front/back" tool *build script updates/fixes *resolves problem where pd-l2ork executable does not start-up properly when invoked without path-to-binary *fixed one stray consistency error *based on feedback included zexy abstractions into building process to ensure consistency until abstraction matter is resolved in a consistent way *fixed uninstall script to properly handle filenames with "$" in them *added dev package for those who wish to compile entire thing from source (use l2ork_addons tar_em_up.sh script to build tarballs; run the script without flags to get instructions on how to use it) *updated online install documentation *implemented resizable options for all iemgui objects (some require different behavior than others (e.g. number2 resizes horizontally based on the number of characters, while vertical resize also adjusts font size as well as gui triangle preceding characters, thus resulting in changes in width as well as height--consequently the target size tries to be as close to the mouse cursor as possible while altering width, height, font size and number of characters visible) *changed the whole project naming scheme to reflect "L2Orkified" version (pdextended becomes pd-l2ork, install dir is /usr/local/lib/pd-l2ork, uses default.pdl2ork config file, reflects different version) *changed appearance and updated content of the about.pd patch *fixed regression where help files for core objects were erroneously replaced by incorrect pddp documentation *synced backport of the new browser and adjusted appearance to match the theme *fixed bug where pddplink failed to open related files *fixed resizable canvas so that it updates scrollbars after resizing, dirties the canvas, and properly relocates scale handle when moved *added apply undo/redo (applies to vanilla objects with properties (e.g. gatom) plus currently as a test implementation only to the cnv object from the iemgui set--I will add it to other applicable imegui objects once the implementation is thoroughly tested). *added resize handle to the cnv object. *implemented auto-update of properties window (width/height and in cnv case also selection area width/height if the properties window is open). *fixed bug where autoconnect tries to auto-connect cnv objects. *fixed regression where gatom objects after being duplicated are only partially selected. *colored selection rectangle the same color as default select color *fixed bug where gop-ed abstractions with hidden text should not resize when activated to accommodate text that is not there to begin with *fixed segfault when trying to disconnect (NB: core Pd developers may want to check this one out as it may affect core Pd as well--it is very sporadic and difficult to reproduce, however--I finally caught it by using Pd via gdb for an extended period of time working on patches). FWIW, this may be also specific to magicGlass feature. m_obj.c line 527 if (!(oc = o->o_connections)) return; change to: if (!o || !(oc = o->o_connections)) return; *added ignore attempts at obj_connect that involve same object (happened sometimes when using undo/redo due to the ugly workaround for the tk_canvas unique id bug) *provided new build mechanism *fixed regression when closing and then reopening the same patch *synced with the latest pd-extended 0.42.x branch build scripts (installs in /usr/lib/pd-extended and produces pdextended binary) *fixed stray bugs with iemgui objects *realigned some of the iemgui objects in the autopatch mode *other minor bugs'n'fixes *changed paste so that it pastes where the current mouse position is rather than duplicating original x/y positions. more so, the newly spawned objects are grabbed (as if creating an object from a menu), allowing easy repositioning. This change will greatly help in making sure that objects are not spawned very far from the current canvas location (as per Jonathan's comment/suggestion) due to the new scrolling algorithm. *duplicate now works on other canvases thus supplanting old paste which preserves x/y positions. There is no offset if the newly pasted canvas is different than the old one. *fixed bug where scrollbars would not redraw after initial drag of a newly created object. *enabled autopatch for iemgui objects. *Invoking disabled ctrl+r now enables both the edit mode and the cord inspector (as per Iohannes's suggestion). *This one was *really* bad: Cut/Paste/Undo/Redo creates double entries on gop-in-gop patches -basically, after literally a day of troubleshooting and posting hooks all over the pd source it appears window_name never changes (in other words tcl/tk canvas's documentation lies about giving a unique id to every new object) *recreation of objects must not apply to pd patchers (when clicked to change their names) *changing name on a gop-ed pd patcher automatically resizes patcher gop window and positions outlets properly *Added ctrl+enter option *cleaned up stderr errors about canvases/widgets not found *when closing dirty patch and dirty abstraction, prompts are incorrectly focusing on and pointing to wrong windows *cord inspector uses globally defined font size *removed xy stretch option from the font menu as it appears to be unstable *corrected text color on pd patcher *fixed remaining regression segfault due to the way iemgui's implementation of universal color inside g_numbox.c (I missed it in yesterday's patch) *Improved "discard changes" prompt *fixed 2 regressions introduced in the last patch: 1) segfault due to the way iemgui's implementation of universal color 2) stale GOP elements due to incorrect check for an open window *made iemgui use default $select_color as defined in pd.tk while leaving legacy definition for IEM_GUI_COLOR_SELECTED color (as defined in g_all_guis.h) *cleaned up bugs in mycanvas where label did not follow the object *cleaned up segfault on number2 when creating a label *modularized highlight nlet color and width and moved them to pd.tk *changed the way highlight nlet filters different objects and reverts their nlet color properly to original state (e.g. iemgui uses black as default whereas text objects use gray nlets *cutting gop-ed patch while its canvas is open leaves stale gop rectangle *when moving gop-ed object, do not activate unless it is only clicked upon. When clicked upon, the object will "shrink" into an undefined object. All cord connections will be preserved. This avoids activating it when it is being dragged and thus also avoids a slew of redraw bugs that result from the following: 1) create a gop-ed patch (an abstraction) that has at least one vanilla object visible (e.g. a gatom) 2) select it and change its name to another existing gop-ed patch (other than one that was populating this object so far) 3) open the newly-created gop patcher and try creating a new object. You will get double of everything, eventually resulting in a crash (unless you cut the object and recreate it before closing) *double-entry after editing gop. (ALSO FIXES: *erasing gop's stale non-iemgui objects when editing). To reproduce this problem do the following: 1)create GOP 2)alter GOP's name into invalid or other object ->seems like deleting old object does not go well when it uses gop-ed vanilla objects 3)alter it back 4)create object inside GOP *fixed regression in iemgui objects where highlight did not work on gop-ed canvases *changed magic tool name to "Cord Inspector" as per Iohannes's suggestion *made invalid dotted (red) objects have thicker border and red-ish background to make them more noticeable (also based on Iohannes' feedback) *find menu *inlet and outlet highlighting reset *magicglass not reporting negative sig~ *added ~ prefix to signal data magicglass monitoring *magicglass not displaying list *magicglass widget not properly resizing *added magicglass flashing indicator *fixed magicglass flicker