forked from 1b-agent/opencadstudio-upstream
Properties… in the Plot dialog froze the application on Windows. `on_printer_properties` called `DocumentPropertiesW` with `DM_IN_PROMPT` from inside the closure handed to `iced::window::run`, and iced runs that closure synchronously on the winit event-loop thread. The driver's property sheet wants to run its own modal message loop on that same thread, so the two loops collide: the sheet is never created at all, the window stops painting, and the thread spins at 100% of one core with no way back. Measured on Windows 11 x86-64: the pinned thread is the window's own UI thread, and compstui.dll plus the driver's PrintConfig.dll are loaded into the process, so execution does reach the driver's property-sheet code and never leaves it. It reproduces with a physical printer as readily as with Microsoft Print to PDF, so the mechanism was broken for every printer, not only the virtual one named in the report. The system's own printing-preferences UI is now started as a separate process, which pumps its own messages and leaves ours free, so the freeze is impossible by construction rather than merely unlikely. The command that does it already existed for the case where no printer is selected; it now serves a named printer too, and the in-process modal path is gone. Preferences still reach the job: the sheet writes the per-user DEVMODE that the plot path reads back through `DocumentPropertiesW`, which was confirmed by changing the orientation in the sheet and watching the value the plot path reads change with it. The new test pins down that the printer name must reach `printui` as a single argument: split across several it matches nothing and the process exits 0 without drawing anything, which would be a failure with nothing to show the user. Fixes #1474 Co-Authored-By: Claude Opus 5 <[email protected]>