All notable changes to XDrawChem are documented here. Entries are derived from the Debian changelog and commit history.
- 3D structure generation restored — Tools → "Build 3D model of molecule" now
produces a 3D MDL molfile locally using OpenBabel's
OBBuilderfor initial coordinate generation followed by 250 steps of MMFF94 (or UFF fallback) conjugate-gradients minimization. The original BUILD3D code called a Fortran-based CGI service on SourceForge that no longer exists; the feature had been disabled with a placeholder dialog. No network call required now. - MDL MOL/SDF file I/O —
chemdata_mdl.cppnow reads and writes standard MDL MOL and SDF files via OpenBabel, replacing the previous no-op stubs. - SDF multi-record browser — When opening an
.sdffile via File → Open, a browser dialog lists all records with molecule names and lets the user navigate with Previous/Next, import individual records, or import all at once. - CIP R/S and E/Z stereochemistry labels — Tools → "Show CIP labels" toggles
display of Cahn-Ingold-Prelog descriptors computed by OpenBabel.
- R/S (tetrahedral): shown in bold blue text next to chiral centers (e.g. asymmetric carbon atoms with wedge/hash bonds).
- E/Z (cis/trans): shown at the midpoint of stereogenic double bonds.
- Labels are cached and only recomputed when the molecule structure changes.
- Memory leaks in
application_ob.cpp—OBNewLoad()andOBNewSave()now properly delete temporaryOBMolobjects. - Memory leak in
molecule_obmol.cpp—convertToOBMol()no longer leaks the returnedOBMol*on error paths.
- Remaining
SIGNAL()/SLOT()string macros converted to pointer-to-member syntax acrossapplication.cpp,render2d_event.cpp, andmain.cpp. Zero string-basedconnect()calls remain in active code. qDebug()runtime noise gated behindQLoggingCategory— allqDebug()/qInfo()/qWarning()calls in the chemistry and I/O layers now use category macros so they can be silenced withQT_LOGGING_RULES=xdc=false.
netaccess.cpp— removed large commented-outQHttp-based dead code and unreachableslotFinished/slotData/rfslots.- Repository cleanup — legacy Qt3/Qt4 source trees removed from
master; source directory renamed fromxdrawchem-qt5/toxdrawchem/. - Flatpak — cleaned up bare-name desktop/metainfo/icon copies inside the sandbox
so
appstreamcli composedoes not see duplicate<id>entries and reject the build.
- README: updated screenshot to reflect current UI.
backlog.md: refreshed to reflect completed v2.1 items.
- Fix three instances of malloc/strcpy buffer overflow + use-after-free on QByteArray
temporary in OpenBabel format resolution (
application_ob.cpp,tool_2d3d.cpp) - Fix potential buffer overflow in
char type[5]strcpy on user-defined atom labels (molecule_obmol.cpp,ioiface.cpp) - Replace
system()shell invocation for Ghemical/KryoMol send withQProcess::startDetachedto eliminate shell injection risk - Remove dead
http.cpp/http.hmodule and deadXDC_SERVER/getenvcode paths - Fix
-Wreorderwarning inCMLParserconstructor
- Ring menu: wire Amino Acids, Nucleic Acids, Sugars, and Useful Groups submenus
to
setRingAction(they were silent since the Qt6 port) - Ring menu: add
setData()to Useful Groups (FMOC, BOC, DABCYL, DABSYL, DANSYL, EDANS, Biotin) so dispatch actually works - Custom ring submenu: restore dispatch via per-action lambda forwarding to
FromRingMenu(silent since the Qt6 port; user-saved rings can be placed again) - Custom ring save: fix signal-11 crash on save caused by uninitialised
ringmenumember pointer inapplication.h - Custom ring menu refresh: swap only the User-defined submenu in place rather
than rebuilding the whole ring menu (avoids a paint-device warning and stale
defaultAction pointers in
drawRingButton) - Property panel: refresh on ring placement, name-to-structure, selection change, clipboard operations, undo, text/label edits, delete (previously only refreshed for raw drawing actions)
- Property panel: track currently-selected molecule rather than always showing the first molecule
- Amino Acids menu: remove non-natural amino acids (nitrophenylalanine, statine) that can still be retrieved via PubChem lookup
- Debian: bump Standards-Version to 4.7.2
- Flatpak: app-id renamed to
io.github.bryanherger.xdrawchem(Flathub requirement) - Flatpak: desktop and metainfo files now install with reverse-DNS filenames
- Flatpak: OpenBabel build uses
cmake-ninja+builddir:truefor sandbox correctness - DEB and RPM: include the reverse-DNS desktop / metainfo / icon copies in
debian/xdrawchem.installand%files(CMake installs both bare and reverse-DNS names; both packaging systems are strict about unpackaged files) - RPM
%files: use literalio.github.bryanherger.*glob patterns so future reverse-DNS additions (e.g. MIME icons) don't need spec changes - Added
index.htmlfor GitHub Pages redirect to repo
- Flatpak: fix RapidJSON 1.1.0 const-member build error on GCC 14 (
-fpermissive) - Flatpak: pre-install RapidJSON as a module; add
--disable-rofiles-fuse - Release: fix DEB filename collision when noble and jammy extracted together
- Windows: replace Chocolatey/SourceForge NSIS fallback with
winget install NSIS.NSIS
(All rc4 changes below)
- Dative bond toolbar button now shows a distinct half-arrow icon (was blank)
- Dative bond rubber-band preview now draws correctly while dragging
- Arrow tool: clicking the button face now activates the last-chosen arrow type
- Arrow tool:
bracket_typeproperly initialised so first use draws the correct arrow
- Dead woodsidelabs.com endpoints replaced with PubChem REST API
- "Find on PubChem…" (Ctrl+F) now searches PubChem by name, CAS, or formula
- Molecule Information dialog (Ctrl+I) now populates CAS, IUPAC name, synonyms
netaccess.cpprewritten:NetAccessis now a plainQObject(not aQDialog)- "Build 3D model" menu item shows informative dialog (server was defunct)
- CMake:
generated/defs.houtput directory avoids name collision with executable - All deprecation warnings cleared on Linux (GCC 13), macOS (Xcode 16), Windows (MSVC)
- Name-to-structure: Tools → "Name to structure…" accepts IUPAC, common, and CAS names via PubChem REST API (backlog 5.7)
- InChI input: SMILES dialog detects
InChI=prefix and routes through OpenBabel (5.8)
- Single
VERSIONfile at repository root; all four platform builds read from it defs.h.intemplate with@APP_VERSION@placeholder; CMake stamps it at build time- About/Support dialogs: replaced SourceForge URLs with GitHub repo and issues links
- All 13 translation files updated to match new C++ source strings
- RPM spec:
%{xdcver}macro;-DAPP_VERSIONpassed through Docker via environment - RPM
%files: addedxdrawchem.metainfo.xml - macOS:
ob_compat.hforce-included for Xcode 16 / libc++19 (removesstd::binary_function) - Windows: NSIS
makensis.exefound dynamically;ilammy/msvc-dev-cmdreplaced with inlinevcvarsall.bat x64
- Dative (coordinate covalent) bond type (bond order 9, half-arrowhead rendering)
- ACS publication style preset
- Improved SVG export via Qt6
QSvgGenerator - Copy as SVG or 300 dpi PNG to clipboard
- Canonical SMILES output via OpenBabel
- IUPAC name lookup via PubChem REST API
- PubChem structure browser integration
- Valence checking
- PDF export
- Georgian translation (contributed by EkaterinePapava)
- Qt 6.2 compatibility:
QMenu::addActionargument order fixed inapplication.cppandhelpwindow.cpp(keysequence must be last argument)
- 13 test suites, 274 tests, all passing
- Zero build warnings or errors against Qt 6.2+
CMakeLists.txtreplaces legacyqmake.profilesQXmlSimpleReader→QXmlStreamReader(removed in Qt6)QHttpusage removed (removed in Qt5)- 266 Qt3-era
foreach→ C++11 range-for loops - Old-style
SIGNAL/SLOTmacros → pointer-to-member syntax throughout
- Fix #9: double bond inner-line geometry at non-linear angles
- Fix #10: "Clean up molecule" preserves molecule orientation (Procrustes alignment)
- Fix #13: curved arrow tips aligned using arc tangent direction
- Fix #14: Bézier arrow drawing (was entirely non-functional)
- Fix #15: SMILES output no longer produces
**(MDL Molfile column fix) - Fix #18: OpenBabel 3 builds without manual
.profile editing
- GitHub Actions CI for DEB (Ubuntu 24.04), RPM (Rocky 9), Windows (MSVC), macOS
- AppStream
xdrawchem.metainfo.xmlfor GNOME Software / KDE Discover .desktopfile and application icon for desktop integration
- 261-test unit suite (10 suites), executed during every build
- Initial Debian packaging