<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>News feed</title><link>https://inkscape.org/*membership/blog/</link><description>A feed full of news</description><atom:link href="/*membership/blog/feed/" rel="self"/><language>en</language><lastBuildDate>Tue, 01 Sep 2026 16:06:54 +0000</lastBuildDate><item><title>August Bug Accelerator 2026
</title><link>https://inkscape.org/*membership/blog/august-bug-accelerator-2026/</link><description><p>Now that we&#39;re in first month of the second round of the BAP, we&#39;ve been getting settled into our new rhythm, figuring out our direction for this round of the program, and helping Martin (@doctormo) get the new renderer in shape.</p>
<p>As of the end of last month, we said goodbye to one of our developers, Se&aacute;n de B&uacute;rca (@leftmostcat), leaving Mike to carry things alone for some time until we could get confirmation of the vote to bring in another developer to the program. As of (date), we welcomed Tav (@tavmjong), after the vote to bring him on as our second developer successfully passed.</p>
<p>As for what we&#39;ve been up to, Mike has been working tirelessly alongside Martin to refine the merge request that will ultimately become Inkscape&#39;s new renderer, bringing much awaited colorspace support (including native CMYK), better handling of image formats and bit depths (through the use of <a href="https://gnome.pages.gitlab.gnome.org/glycin/">Glycin</a>), and other improvements both under the hood and in user-facing features.</p>
<p>Simultaneously, both Mike and Tav have continued landing critical fixes and improvements across multiple areas, such as the Unified Font Browser (which will be default in 1.5, no longer experimental), Page handling, and others.</p>
<h3>Volunteer + Community Contributions</h3>
<p>Another bit of exciting news this month, is that we&#39;ve been able to recruit some help from the community in knocking more 1.5 bugs off the board. While not officially part of the BAP, I&#39;d still like to highlight the work of our volunteer contributors and even those who just help to confirm fixes (and bugs alike). Your work helps us to make Inkscape 1.5 even stronger.</p>
<h2>Michael Terry</h2>
<ul>
<li>
<p>Total time tracked: 84h 36m</p>
</li>
<li>
<p>In progress and open items (37h 54m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6354">#6354</a> Fill and Stroke changes when you apply a text change - (50m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5142">#5142</a> Text tool&#39;s font dropdown not loading fonts until mouse hover - (55m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6325">#6325</a> Mismatch of gradients when copy and paste from one file to another - (1h 20m)</li>
<li><a href="https://gitlab.com/inkscape/-/work_items/5620">#5620</a> Inkscape master: Sometimes panels load rolled up - (1h 28m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6334">#6334</a> Change image in Object Properties doesn&#39;t use native dialog - (26m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7767">!7767</a> Draft: New Rendering Engine (CMYK etc) - (32h 55m)</li>
</ul>
</li>
<li>
<p>Merged 3 merge requests (57m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8124">!8124</a> Rm redundant call to finishItem in RectTool destructor - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8125">!8125</a> Speed up Objects dialog when selecting many objects in dialog - (33m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8122">!8122</a> Fix Wide Screen state after interlace mode changes - (20m)</li>
</ul>
</li>
<li>
<p>Fixed 22 issues (38h 58m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6363">#6363</a> Unified Font Browser: Remove the random &quot;text&quot; label at the bottom of the Features tab - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6372">#6372</a> Unified Font Browser: Sliders don&#39;t merge changes into a single undo step - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6386">#6386</a> Unified Font Browser: preview text is displaying both list and grid versions - (26m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6365">#6365</a> Unified Font Browser: Changing the preview sizes causes a massive performance hit - (52m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6381">#6381</a> Unified Font Browser: scrolling gets jittery near odd-height fonts - (3h 17m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6361">#6361</a> Unified Font Browser: Scrolling fonts is slow (can lock up) with many fonts installed - (49m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6315">#6315</a> Default font size in the Font and Text dialog should mirror the text toolbar&#39;s default - (40m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6362">#6362</a> Unified Font Browser: Feature settings don&#39;t have proper strings - (1h 13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6360">#6360</a> Unified Font Browser: Sorting causes Inkscape to lock up - (2h 22m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6377">#6377</a> Unified Font Browser: &quot;Text&quot; tab shouldn&#39;t exceed the visible height of the dialog - (28m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6375">#6375</a> 1.5-dev: crash when loading a pile of fonts - (2h 56m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6333">#6333</a> No indicator for where layers will land when dragging and dropping - (2h 18m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5614">#5614</a> Changing the font size in Unified Font Browser changes the font family - (1h 44m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/631">#631</a> 1.5-dev: Extension Manager: Cannot install extensions nor view details on &quot;Orphan Extensions&quot; - (3h 28m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6281">#6281</a> Can&#39;t change gradient using dropdown in certain file - (3h 51m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6371">#6371</a> Unified Font Browser: Remove the font size slider - (8m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6359">#6359</a> 1.5-dev: Split the Text and Font Dialog and Unified Font Browser (no toggle needed; can co-exist) (29m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6355">#6355</a> Unified Font Browser: &quot;Dialog options&quot; missing icon, misleading tooltip - (1h 29m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6238">#6238</a> 1.5-dev: The preferences dialog size is not restored when reopened - (2h 23m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6289">#6289</a> Can unselect individual objects when layer is selected - (24m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6279">#6279</a> If nothing is selected Esc should escape the selected group (not layer!) - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6253">#6253</a> Congested and unstable font collection labels in the new Font and Text dialog - (2m)</li>
</ul>
</li>
<li>
<p>Other project tasks (6h 47m):</p>
<ul>
<li>Triage, testing, project discussions and chats, meetings, coordination, and related meta work (6h 45m)</li>
<li>Additional development work (2m)</li>
</ul>
</li>
</ul>
<h2>Tavmjong Bah</h2>
<ul>
<li>
<p>Total time tracked: 38h</p>
</li>
<li>
<p>In progress and open items (13h 25m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6356">#6356</a> Gradient Editor not tracking on-canvas gradient selection - (7h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6343">#6343</a> 1.5-dev: Certain spinbuttons (partially) ignore numlock on the numpad (Linux) - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6354">#6354</a> Fill and Stroke changes when you apply a text change - (4h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6352">#6352</a> 1.5-dev: Objects deform randomly when moving individual nodes - (1h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6145">#6145</a> 1.5-dev: About Screen crashes on 6th entry - (30m)</li>
</ul>
</li>
<li>
<p>Merged 4 merge requests (16h 35m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8128">!8128</a> Replace Gtk::ComboBox by Gtk::DropDown for Page selection - (10h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8126">!8126</a> Fix a test to not accidentally be a no-op - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8125">!8125</a> Speed up Objects dialog when selecting many objects in dialog - (5h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8113">!8113</a> Fix unified font browser preview text options for grid view - (20m)</li>
</ul>
</li>
<li>
<p>Fixed 1 issues (6h 45m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6340">#6340</a> The Page list at in the status bar unfolds outside the window (down as opposed to up) - (6h 45m)</li>
<li><span><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6391">#6391</a> Selecting a range of items in layer list takes minutes (via (</span><a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/8125">!8125</a>))</li>
</ul>
</li>
<li>Investigated 1 issue (30m):
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4734">#4734</a> Straight line on start when I try to draw a curve with pen tool in Spiro option - (30m)</li>
</ul>
</li>
<li>
<p>Other project tasks (45m):</p>
<ul>
<li>Code review and related activity not tracked in GitLab, including review of <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8106">!8106</a>.</li>
</ul>
</li>
</ul>
<h2>Roland Taylor</h2>
<ul>
<li>
<p>Total time tracked: 65h 4m</p>
</li>
<li>
<p>New issue reporting and investigation - (3h 30m):</p>
</li>
<li>
<p>Testing and verification - (1h 15m):</p>
</li>
<li>
<p>Other issue tasks (inbox and tracker management, review, labelling, triage, prioritisation, research, and coordination) - (12h 29m):</p>
</li>
<li>
<p>Non-issue tasks (47h 50m):</p>
<ul>
<li>
<p>Meetings &amp; meeting prep - (2h 22m)</p>
</li>
<li>
<p>Milestone review &amp; follow-up - (15h 25m)</p>
</li>
<li>
<p>MR follow-up, review, testing, and management - (8h 54m)</p>
</li>
<li>
<p>Admin duties (spreadsheet management, correspondence, managing assignments, reporting, and other administrative tasks) - (21h 9m)</p>
</li>
</ul>
</li>
</ul>
</description><pubDate>Tue, 01 Sep 2026 16:06:54 +0000</pubDate><guid>https://inkscape.org/*membership/blog/august-bug-accelerator-2026/</guid></item><item><title>July Bug Accelerator 2026
</title><link>https://inkscape.org/*membership/blog/july-bug-accelerator-2026/</link><description><p>With July being the final month for the 1st round of the 2026 Bug Accelerator Program, we focused on rapidly landing quality of life fixes and clearing the way for the next round of BAP work in the next 3 months. With this round of changes and fixes, Inkscape 1.5 is now in a much stronger position, with over 60% completion of the current milestones.</p>
<p>Mike and Sean worked through a wide range of regressions and usability problems, including both issues new to 1.5, and old issues that have existed in Inkscape for years. Some of the new changes include document tabs scrolling, text and font fixes, grid fixes (a much improved UX), startup screen improvements, various shortcut fixes, improved SVG font handling, extension management fixes, and so much more.</p>
<p>Frankly, with so many changes, it&#39;s hard to fully quantify just how much work has been landed this month (and really, this cycle). Many thanks go to the BAP devs and the Inkscape veterans who&#39;ve been providing guidance, assistance and also fixing issues alongside the BAP devs.</p>
<p>We still have more to go, so testing, feedback, and even suggestions are much appreciated.</p>
<h2>Michael Terry</h2>
<ul>
<li>
<p>Total time tracked: 52h 8m</p>
</li>
<li>
<p>In progress and open items (9h 11m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6238">#6238</a> 1.5-dev: The preferences dialog&#39;s size is not restored when reopened - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5142">#5142</a> Text tool&#39;s font dropdown not loading fonts until mouse hover - (42m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6253">#6253</a> Congested and unusable font collection labels in the new Font and Text dialog - (1h 1m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/631">#631</a> 1.5-dev: Extension Manager: Cannot install extensions nor view details on &quot;Orphan Extensions&quot; - (1h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6279">#6279</a> If nothing is selected Esc should escape the selected group (not layer!) - (1h 52m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6168">#6168</a> Set Inverse Mask cause the masking object to lose its path effects - (3h 14m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6334">#6334</a> Change image in Object Properties doesn&#39;t use native file dialog - (14m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5765">#5765</a> Recent files list deleted files - (38m)</li>
</ul>
</li>
<li>
<p>Merged 17 merge requests (2h 54m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8046">!8046</a> Use white for default specular color - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8074">!8074</a> Transform page border paths for coord system - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8080">!8080</a> Correctly return when actions do not require parameters - (0m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8081">!8081</a> Fix grammar of action names - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8082">!8082</a> Address clangtidy issues - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8072">!8072</a> Don&#39;t warn on encountering non-file URIs - (3m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8071">!8071</a> Fix template and template category i18n on startup screen - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8070">!8070</a> Reword paste submenu in Edit and right-click menus - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8054">!8054</a> Base show grids value on visibility status of grids alone - (35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8067">!8067</a> Restore grid alpha on load - (1m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8063">!8063</a> Don&#39;t display actions which require unprovided params in shortcuts list - (16m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8064">!8064</a> Default to not converting `ScalarUnit` limits - (7m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8052">!8052</a> Add frame to startup screen close button - (22m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8051">!8051</a> Remove references to saving window position - (6m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8017">!8017</a> Remove CanvasItemDrawing from Drawing object completely - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7925">!7925</a> Add effect runner which accepts Variant dictionary arguments - (9m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7989">!7989</a> Fix version information when updating a document - (2m)</li>
</ul>
</li>
<li>
<p>Fixed 29 issues (32h 35m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6330">#6330</a> SVG Font Editor does not correctly layout glyphs where the EM-size is not 1000 - (51m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5832">#5832</a> Converting a solid color to a gradient leaves the fill-opacity attribute unexposed - (57m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6108">#6108</a> Layers &amp; Objects dialog: Keyboard navigation can no longer access lock, visibility - (3h 7m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6115">#6115</a> 1.4.3 &quot;Open SVG Image as separate document&quot; doesn&#39;t work if the SVG file dropped into Inkscape doesn&#39;t have a file extension - (24m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5203">#5203</a> Crash on attempting to duplicate layer - (1h 38m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6150">#6150</a> Mouse cannot select a zero-length path with Selector Tool or with Node Tool - (1h 13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6240">#6240</a> 1.5-dev: Document tabs can&#39;t be scrolled and don&#39;t overflow - (5h 40m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6320">#6320</a> rect rx percent value misinterpreted when image is present - (1h 17m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6291">#6291</a> Deletion triggers unexpected Layer change with XML dialog open - (49m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6260">#6260</a> Layer name (label) lost when converting to group - (11m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6309">#6309</a> 1.5-dev: HSL values saved without &quot;%&quot;, causing colours to be displayed as black in 1.4 and other applications - (1h 36m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6271">#6271</a> Inkscape master: Unchecking &quot;Hide dialogs from taskbar&quot; doesn&#39;t work - (1h 13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5608">#5608</a> Inkscape master: Panel and document tabs don&#39;t apply theme tab styles - (8m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5613">#5613</a> INX multiline fields not resizing in Inkscape 1.5-dev - (2m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6008">#6008</a> Filter Primitives Drag and Drop broken - (53m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4895">#4895</a> New text dialog - Filtering does not work for custom collections - (36m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6224">#6224</a> Font size units in the new Font and Text dialog can&#39;t be set - (1h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5658">#5658</a> Bezier Tool: Spiro mode preview broken - (1h 11m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4906">#4906</a> Ctrl+scroll zoom function conflict with node tool grow selection - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6102">#6102</a> Text alignment is not persistent for new text objects - (2h 35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4668">#4668</a> CLI option --export-margin stopped working - (2h 52m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6066">#6066</a> Embedded Scripts not shown in Document Properties on load - (24m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5319">#5319</a> Image elements in inx files are rendered too small in master - (1h 13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5580">#5580</a> Inkscape (master): menus fail to scroll when submenus are open - (24m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6227">#6227</a> &quot;Object Properties - URL&quot; changes on the fly are not commited - (14m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5603">#5603</a> main window &quot;not responding&quot; while &quot;manage extensions&quot; is open - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5605">#5605</a> Inkscape master: cannot cycle through tabs after panel tabs improvements MR - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6018">#6018</a> Layers panel doesn&#39;t display iconography - (9m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/628">#628</a> Extension Manager needs to decouple available extension polling - (1h 10m)</li>
</ul>
</li>
<li>
<p>Other development activity (25m):</p>
<ul>
<li>Additional development work.</li>
</ul>
</li>
<li>
<p>Other project tasks (7h 3m):</p>
<ul>
<li>Triage, testing, project discussions and chats, meetings, coordination, and related meta work.</li>
</ul>
</li>
</ul>
<h2>Se&aacute;n de B&uacute;rca</h2>
<ul>
<li>
<p>Total time tracked: 55h 5m</p>
</li>
<li>
<p>In progress and open items (9h 40m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8083">!8083</a> Allow exiting a group with Ctrl+Escape or Escape-with-no-selection - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8085">!8085</a> Let font category pill boxes flow across multiple lines - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6339">#6339</a> Nodes do not snap to page borders with y axis up - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4321">#4321</a> No hotkey hints in the Node Management Tool - (10m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6283">#6283</a> Converting contour to path changes visual image - (35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6292">#6292</a> PDF form imported has all radio buttons selected (but not in the pdf) - (1h 35m) <em>(Investigation of root cause and poppler APIs)</em></li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6200">#6200</a> Undo/Redo gets thrown off when removing Rotate Copies LPE - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6244">#6244</a> Locked status makes clones uneditable too - (2h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6145">#6145</a> 1.5-dev: About Screen crashes on 6th entry - (4h)</li>
</ul>
</li>
<li>
<p>Merged 24 merge requests (10h 15m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8084">!8084</a> Fix rendering of svg fonts with non-default em widths - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8079">!8079</a> Fix opening no-extension SVG files as separate documents - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8078">!8078</a> When changing to a gradient or similar, drop fill/stroke opacity - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8075">!8075</a> Fix keyboard focus in the Layer &amp; Objects dialog - (45m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8073">!8073</a> Fix sorting for parent/child nodes - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8056">!8056</a> Allow selecting a zero-length path - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8061">!8061</a> Add dropdown menu and left/right buttons for desktop tabs - (1h 15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8066">!8066</a> Fix incorrect selection after deleting object with XML Editor open - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8059">!8059</a> Make &quot;Dialogs are hidden in taskbar&quot; pref only visible in X11 - (40m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8055">!8055</a> Fix drag and drop on filter effects dialog - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8057">!8057</a> When clearing the font collection filter, update the font list - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8050">!8050</a> Fix scrolling on document tabs not actually switching document - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8011">!8011</a> Add a combined font size-and-unit widget - (1h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8019">!8019</a> Avoid some node scroll actions conflicting with Zoom - (35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8004">!8004</a> Add gap to some pen and pencil points - (30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8002">!8002</a> Allow scrolling document tabs with scroll wheel - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8031">!8031</a> Support --export-margin CLI arg again - (30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8029">!8029</a> Show an error when a File-&gt;Open Recent file can&#39;t be loaded - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8023">!8023</a> Stop text alignment from resetting as you create a text element - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8030">!8030</a> When the document is replaced, update the list of scripts - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8014">!8014</a> Make document and dialog tabs themable by gtk themes - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8032">!8032</a> Fix size of &lt;image&gt; elements in extensions - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6148">!6148</a> Add Group Translucency indicator and display opacity override cleanup - (55m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7999">!7999</a> Allow cycling through panel tabs with mouse scroll again - (35m)</li>
</ul>
</li>
<li>
<p>Fixed 21 issues (28h 5m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6285">#6285</a> Snapping to page borders with y axis up is broken - (1h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6306">#6306</a> Blend mode dropdown in the Fill and Stroke dialog requires scrolling - (25m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6328">#6328</a> clangtidy CI job consistently fails on forks - (55m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5018">#5018</a> Tooltips for selector tool grammatically incorrect because of &#39;dual use&#39; of strings - (20m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6327">#6327</a> Incorrectly filtering out actions with no required parameter - (10m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6286">#6286</a> Color selector names are being rendered incorrectly - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6296">#6296</a> PDF Generation Warns on Hyperlink Creation in Inkscape 1.4 - (1h 5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6246">#6246</a> Label for &quot;Edit | Paste&hellip;&quot; submenu should not end with an ellipsis (&hellip;) - (40m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5760">#5760</a> Inkscape master: Template names and categories do not have translations applied - (1h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/664">#664</a> View-&gt;Page Grid checkbox unchecked with grid displayed and vice versa - (2h 50m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/3297">#3297</a> Warnings opening Keyboard shortcuts page, and minor text suggestions - (2h 20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6162">#6162</a> Ctrl+Drag for constrained translation selects instead of dragging - (3h 55m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6324">#6324</a> 1.5-dev: Grid alpha value is not restored - (15m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/6287">#6287</a> Scale &gt; Width regression with 1.5-dev - (2h 25m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/work_items/632">#632</a> Extensions Manager crashes in Inkscape 1.5-dev - (30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5659">#5659</a> LPE offset orange dot became white diamond again - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6212">#6212</a> [Dialog: Welcome] x button undiscoverable in dark mode - (2h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6270">#6270</a> 1.5-dev: Remove/Disable the option to save window positions from preferences - (35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6137">#6137</a> 1.5-dev: Specular filter with no explicit color results in invisible object - (4h 35m) <em>(Investigation of underlying cause, incl. bisect)</em></li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6174">#6174</a> Undoing spin button changes is tedious - (1h 20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5828">#5828</a> Selecting mutlitple layers with SHIFT key doesn&#39;t work - (40m)</li>
</ul>
</li>
<li>
<p>Other project tasks (7h 5m):</p>
<ul>
<li>
<p>Bug Accelerator and project meetings - 6h 35m</p>
</li>
<li>
<p>Build environment setup and maintenance - 30m</p>
</li>
</ul>
</li>
</ul>
<h2>Roland Taylor</h2>
<ul>
<li>
<p>Total time tracked: 65h 4m</p>
</li>
<li>
<p>Closed/resolved/invalidated 33 issues (2h 45m):</p>
</li>
<li>
<p>Moved/migrated 57 issues (4h 31m):</p>
</li>
<li>
<p>Confirmed/tested/reproduced 20 issues (3h 13m):</p>
</li>
<li>
<p>Reported/created 12 new issues (1h 22m):</p>
</li>
<li>
<p>Identified Feature/UX requests (6 issues) (15m):</p>
</li>
<li>
<p>24 issues marked as &quot;Needs info/needs reproducibility&quot;/recorded for follow-up (1h 24m):</p>
</li>
<li>
<p>Linked/closed 9 duplicates (20m):</p>
</li>
<li>
<p>Other issue tasks (review, labelling, triage, prioritisation, research, coordination) (13h 35m):</p>
</li>
<li>
<p>Non-issue tasks (37h 39m):</p>
<ul>
<li>
<p>Meetings &amp; meeting prep - 2h 50m</p>
</li>
<li>
<p>Milestone review &amp; follow-up - 8h 11m</p>
</li>
<li>
<p>MR follow-up/testing/building - 1h 48m</p>
</li>
<li>
<p>Admin duties (spreadsheet management, correspondence, managing assignments, reporting, and other administrative tasks) - 24h 50m</p>
</li>
</ul>
</li>
</ul>
<harper-render-box popover="manual" style="pointer-events: none; border: medium; visibility: hidden !important;"></harper-render-box>
</description><pubDate>Fri, 31 Jul 2026 22:40:35 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-bug-accelerator-2026/</guid></item><item><title>June 2026 Bug Accelerator
</title><link>https://inkscape.org/*membership/blog/june-2026-bug-accelerator/</link><description><p>June has been quite the month for us as we had to catch up from a later start to May. Still, we managed to hit a milestone of 60% completion on the 1.5 Milestones list, even if temporarily, thanks to the hard work of the BAP dev team and Inkscape&#39;s dedicated volunteers.</p>
<p>To help us clear the way to handling some of the remaining high priority issues, we did a sprint towards the end of this month where we tackled a vast number of lower priority issues, such as missing tooltips, minor quirks, and other little bugs that could make testing a pain.</p>
<p>Thanks are in order not only for the BAP devs and long-time Inkscape developers, but also for the many volunteer contributors who&#39;ve helped in other ways, by following up on reports and testing sometimes obscure challenges to ensure that the results we&#39;re landing are hitting the mark.</p>
<h2>Michael Terry</h2>
<ul>
<li>
<p>Total time tracked: 133h 20m</p>
</li>
<li>
<p>In progress and open items (49h 35m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4477">#4477</a> Shape builder tool does not detect the interior region - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6219">#6219</a> 1.5-dev: Printing exits with unspecified error - (26m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6194">#6194</a> Format Options applying to all instances of a format in Batch Export - (27m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6168">#6168</a> Set Inverse Mask cause the masking object to lose its path effects - (33m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4583">#4583</a> BackgroundImage as source for filter primitives doesn&#39;t work (even with `enable-background=new`) - (33m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4238">#4238</a> When exporting, the filetype in the Windows &#39;SaveAs&#39; dialogbox always defaults to the .SVG filetype instead of the chosen filetype - (34m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6055">#6055</a> Regression: Resizing flowed text is laggy - (36m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4906">#4906</a> Ctrl+scroll zoom function conflict with node tool grow selection - (41m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5604">#5604</a> Palette Stretch to fill doesn&#39;t work on Windows - (43m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6222">#6222</a> Missing tooltips for the opacity/lock/hide icons in the Layers and Objects dialog - (47m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6240">#6240</a> 1.5-dev: Document tabs can&#39;t be scrolled and don&#39;t overflow - (57m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5605">#5605</a> Inkscape master: cannot cycle through tabs after panel tabs improvements MR - (1h 9m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6008">#6008</a> Filter Primitives Drag and Drop broken - (1h 10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6227">#6227</a> &quot;Object Properties - URL&quot; changes on the fly are not commited - (2h 20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6018">#6018</a> Layers panel doesn&#39;t display iconography - (3h 19m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5608">#5608</a> Inkscape master: Panel and document tabs don&#39;t apply theme tab styles - (3h 19m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5617">#5617</a> LPEs produce deformed paths when clipped - (3h 48m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5603">#5603</a> main window &quot;not responding&quot; while &quot;manage extensions&quot; is open - (5h 1m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6167">#6167</a> polygon/star tool: horizontality issue with upright command - (5h 8m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6224">#6224</a> Font size units in the new Font and Text dialog can&#39;t be set - (5h 19m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5658">#5658</a> Bezier Tool: Spiro mode preview broken - (5h 55m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8021">!8021</a> Pass modified clicks to root handler for select tool - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8022">!8022</a> Don&#39;t silently allow invalid PDF page selection - (13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/3994">#3994</a> Style of new text object doesn&#39;t maintain hairline stroke width - (28m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6178">#6178</a> 1.5-dev: Recolor Selection does not update colors after undo/redo on canvas - (22m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5590">#5590</a> Inkscape (master) cannot cycle through dropdown items (using scrollwheel) with dropdown closed - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5695">#5695</a> PDF export with Capypdf uses wrong stroke-width on markers. - (5h 22m)</li>
</ul>
</li>
<li>
<p>Merged 11 merge requests (2h 34m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7974">!7974</a> Set desktop style with our own object set - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7967">!7967</a> Add special handling on Marker style changes when painting - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8015">!8015</a> Collect text colors from all tspans for recolor - (24m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8010">!8010</a> Bump size of guide handle control for ease of interaction - (3m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8006">!8006</a> Correct orientation of &quot;Mark Dimension&quot; text - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7994">!7994</a> Correct inkscape spin button vertical scroll direction - (9m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7988">!7988</a> Use character length for SPText description - (4m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7971">!7971</a> Fix axis defaults in OpenType 2 for PDF output - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7972">!7972</a> Fix glyph and text previews in SVG fonts dialog - (33m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7963">!7963</a> Fix broken cursor updating in InkSpinButton widget - (30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7954">!7954</a> Don&#39;t scale ellipse stroke width when preference is disabled - (7m)</li>
</ul>
</li>
<li>
<p>Fixed 28 issues (68h 54m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4897">#4897</a> Theming colors checkbox should be hidden when they cannot be edited - (5h 38m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6170">#6170</a> Additional objects added by LPE remain after removing LPE - (42m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6166">#6166</a> 1.5-dev: Object properties dialog empty when text selected - (42m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6177">#6177</a> color codes missing from palette in 1.5 - (1h 9m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6220">#6220</a> 1.5-dev PDF export missing some elements - (2h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6160">#6160</a> Images with preserveAspectRatio set to meet render incorrectly - (4h 38m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6095">#6095</a> Drawing a closed path using Pencil Tool with Pressure Sensitivity on translates the path on mouse up - (3h 3m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6234">#6234</a> GIMP Palette export doesn&#39;t include a name value - (1h 6m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6208">#6208</a> 1.5-dev: Crash Report dialog hidden if you switch to another window with preferences open (GNOME/Wayland) - (1h 13m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5794">#5794</a> Bspline issue when moving nodes - (3h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5839">#5839</a> Refactor hardcoded modifiers to use Inkscape::Modifiers - (20h 46m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5584">#5584</a> transform-origin=center conflicts with text-anchor=middle - (7m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6229">#6229</a> Document windows don&#39;t consistently restore their size - (1h 28m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6175">#6175</a> Imported palettes not available in palette at the bottom - (2h 5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/678">#678</a> `--export-area` only works for PNG export; silently ignored for other formats - (9h 9m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5820">#5820</a> GTK4 - Popover closes if it needs more space - (44m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6226">#6226</a> Objects can&#39;t be moved using arrows keys - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6079">#6079</a> 1.5-dev Tweak Tool shortcut key regression - (1h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5626">#5626</a> PDF Latex Export: Text is transparent - (41m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6171">#6171</a> 1.5-dev: Recolor Selection missing tooltips - (31m)</li>
<li><a href="https://gitlab.com/inkscape/inbox/-/issues/13064">#13064</a> Crash when applying swatch to stroke - (1h 5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6198">#6198</a> Pencil tool, B-Spline mode, Shape: Bend from Clipboard, issue - (57m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4819">#4819</a> Modular grid: invalid values for margin, gap, height, width can be entered without feedback (or result), negative gaps can result in useless offsets - (1h 42m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6163">#6163</a> 1.5-dev: Object with Inverse Mask applied exports incorrectly with CapyPDF exporter - (26m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6192">#6192</a> 1.5-dev: Recolor Selection requires two Escape presses to close popover - (1h 54m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6164">#6164</a> Non-breaking spaces converted to regular spaces when pasted in Inkscape - (57m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6161">#6161</a> No error message or feedback when attempting to open a moved/missing file from the Welcome Screen - (45m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5694">#5694</a> Inkscape master: Pasting live path effects don&#39;t work - (11m)</li>
</ul>
</li>
<li>
<p>Other project tasks (12h 17m):</p>
<ul>
<li>Incubator meetings, triage, testing, discussion, coordination, related project follow-up, and other tasks.</li>
</ul>
</li>
</ul>
<h2>Se&aacute;n de B&uacute;rca</h2>
<ul>
<li>
<p>Total time tracked: 47h 15m</p>
</li>
<li>
<p>New items that were investigated and reported upstream in gtk (2h 5m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6188">#6188</a> 1.5-dev: LPE dialog dropdown does not disappear when clicking somewhere else in the dialog - (2h 5m)</li>
</ul>
</li>
<li>
<p>In progress and open items (14h 15m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4477">#4477</a> Shape builder tool does not detect the interior region - (2h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5905">#5905</a> Crash when font deleted or installed while the Text and Font dialog is open - (1h 20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7986">!7986</a> Don&#39;t block main UI while Extension Manager is open - (1h 55m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5828">#5828</a> Layer and Objects treeview selection behavior is unintuitive - (1h 35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7999">!7999</a> Allow cycling through panel tabs with mouse scroll again - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/4879">#4879</a> Internal PDF import: User is not informed about incorrect page selection - (3h 40m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6153">#6153</a> Duplicate-Drag works only if Touch-Select is enabled - (1h 35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/3297">#3297</a> Warnings opening Keyboard shortcuts page, and minor text suggestions - (45m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8008">!8008</a> Restore Layer dialog icons - (1h 5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8003">!8003</a> Fix bottom palette not stretching correctly - (10m)</li>
</ul>
</li>
<li>
<p>Merged 23 merge requests (8h 5m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7959">!7959</a> Add limits to grid values. - (50m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7958">!7958</a> Fix recolor popup from not receiving initial focus - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7956">!7956</a> Add fallback tooltips to palette colors - (35m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7955">!7955</a> When deleting an LPE, delete its satellites too - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7953">!7953</a> Notify user if a document can&#39;t be opened from startup window - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7943">!7943</a> Fix pasting LPEs - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7957">!7957</a> Fix b-spline LPE not showing up when bending from clipboard - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7946">!7946</a> Add back a bare-bones Text object props panel - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7969">!7969</a> Convert more tools to the new Modifiers system - (1h 25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7970">!7970</a> Fix tweak toolbar mode change only temporarily changing on key press - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7978">!7978</a> Add some tooltips to recolor dialog - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7975">!7975</a> Fix crash with selecting object with Fill/Stroke dialog open - (10m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7979">!7979</a> Support the custom/loaded palette in the bottom palette bar too - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7981">!7981</a> Make restoring-window-size work more consistently - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7985">!7985</a> Prevent Pages Tool margin popup from closing prematurely - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7982">!7982</a> Fix many keyboard shortcuts - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7993">!7993</a> Make the crash dialog non-modal - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7992">!7992</a> Use Modifiers system in even more tools - (40m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8000">!8000</a> Fix pencil-with-pressure strokes from warping away - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7998">!7998</a> Support a `double` precision of up to 16 when writing to xml - (15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/8001">!8001</a> Be more forgiving when reading palette files with blank names - (5m)</li>
<li><a href="https://gitlab.com/inkscape/extensions/-/merge_requests/731">!731</a> Fix gimp palette files being exported with a bogus Name field - (5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7997">!7997</a> Stop straight bspline corners from becoming curves when moved - (20m)</li>
</ul>
</li>
<li>
<p>Fixed 11 issues (22h 50m):</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6041">#6041</a> Stroke width of &quot;Slice&quot; scaled, despite disabling (Star issue moved) - (25m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6214">#6214</a> Problem setting opacity from the layers and objects dialog - (2h 15m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5184">#5184</a> SVG Font Editor glyph previews broken - (4h 30m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6223">#6223</a> Expand boolean operation tests - (6h 45m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6218">#6218</a> Incorrect font family displayed on the Status Bar when working with multiple text objects - (45m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6228">#6228</a> Changing the color picker mode in Fill and Stroke to OKHsl changes white to black - (1h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6155">#6155</a> Scroll direction for spin buttons is inverted - (20m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/5803">#5803</a> Guide Handle hard to select - (2h 5m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6147">#6147</a> Measurement tool, Mark Dimension, text is upsidedown - (50m)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6208">#6208</a> 1.5-dev: Crash Report dialog hidden if you switch to another window with preferences open (GNOME/Wayland) - (3h)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/work_items/6085">#6085</a> 1.5-dev: Recolor artwork does not work on tspans - (55m)</li>
</ul>
</li>
</ul>
<h2>Roland Taylor</h2>
<ul>
<li>
<p>Total time tracked: 65h 10m</p>
</li>
<li>
<p>Closed/resolved/invalidated 34 issues (2h 40m):</p>
</li>
<li>
<p>Moved/migrated 26 issues (3h 21m):</p>
</li>
<li>
<p>Confirmed/tested/reproduced 51 issues (6h 45m):</p>
</li>
<li>
<p>Reported/created 16 new issues (2h 06m):</p>
</li>
<li>
<p>Identified Feature/UX requests (8 issues) (26m):</p>
</li>
<li>
<p>24 issues marked as &quot;Needs info/needs reproducibility&quot;/recorded for follow-up (3h 48m):</p>
</li>
<li>
<p>Linked/closed 10 duplicates (1h 25m):</p>
</li>
<li>
<p>Other issue tasks (review, labelling, triage, prioritization, research, coordination) (22h 08m):</p>
</li>
<li>
<p>Non-issue tasks (22h 31m):</p>
<ul>
<li>
<p>Meetings &amp; meeting prep - 3h 46m</p>
</li>
<li>
<p>Milestone review &amp; follow-up - 3h 46m</p>
</li>
<li>
<p>MR followup/testing/building - 2h 26m</p>
</li>
<li>
<p>Admin duties (spreadsheet management, correspondence, managing assignments, etc.) - 12h 33m</p>
</li>
</ul>
</li>
</ul>
</description><pubDate>Wed, 01 Jul 2026 18:10:34 +0000</pubDate><guid>https://inkscape.org/*membership/blog/june-2026-bug-accelerator/</guid></item><item><title>May 2026 Bug Accelerator
</title><link>https://inkscape.org/*membership/blog/may-2026-bug-accelerator/</link><description><p>
This month we began the Bug Accelerator Program with developers Michael (@mikix) and Seán (@leftmostcat) fixing bugs, and Roland (<a href="https://inkscape.org/~rolandixor/">@rolandixor</a>) as the bug administrator. This is our <a href="https://inkscape.org/*membership/blog/march-bug-accelerator-2025/">second time</a> in a row having a bug administrator as part of this program.
</p>
<h2>Michael Terry</h2>
<ul>
<p>
Total time tracked: 61h
</p>
<li>
<p>
New items that were investigated and reported upstream in gtk (tracked time: 1h 30m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/6190">#6190</a> 1.5-dev (Windows 11) Fails to restore maximized window after going fullscreen - (18m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/5551">#5551</a> Unclosable pop over with nested popovers -- was fixed upstream following report - (1h 12m)
</li>
</ul>
</li>
<li>
<p>
In progress items that are ready for review but haven't landed yet (tracked time: 18h 50m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/6097">#6097</a> 1.5-dev: Inkscape does not advertise most formats on the clipboard on Windows - 4h 57m
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/4897">#4897</a> Theming colors checkbox should be hidden when they cannot be edited - 4h 52m
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/5694">#5694</a> Inkscape master: Pasting live path effects don't work - 4h 24m
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/6154">#6154</a> 1.5-dev: Moving an object with Inverse Mask applied deletes the masking object - 3h 46m
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/6166">#6166</a> 1.5-dev: Object properties dialog empty when text selected - 40m
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/work_items/6181">#6181</a> 1.5-dev: Filter Editor name search bar non-functional - 11m
</li>
</ul>
</li>
<li>
<p>
Merged 13 merge requests (tracked time: 30h 29m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7931">[!7931]</a> Fix some resizing issues on Windows by not setting GTK_CSD - (7h 52m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7930">[!7930]</a> Only define _FORTIFY_SOURCE when not in Debug mode - (10m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7924">[!7924]</a> Fix crash when selecting non-visible objects - (42m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7922">[!7922]</a> Fix AppImage crashing during save on older distros - (1h 22m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7923">[!7923]</a> Fix divide-by-zero crash when using calligraphy tool - (2h 57m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7933">[!7933]</a> Make saving imported raster images work again - (6h 52m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7928">[!7928]</a> Fix "live preview" of extensions from losing selection - (3h 30m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7935">[!7935]</a> Fix crash when opening Filter Gallery - (20m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7938">[!7938]</a> Fix inverse clip LPE for duplicated objects - (3h 16m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7941">[!7941]</a> Fix tiling gap size when exporting - (1h 14m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7942">[!7942]</a> Fix exporting tiling LPEs to PDFs - (2h 6m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7932">[!7932]</a> Fix dark mode on gtk 4.20 - (1h 35m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7936">[!7936]</a> Fix color picker values when changing gradient stops - (13m)
</li>
</ul>
</li>
<li>
<p>
Fixed 3 issues (tracked time: 5h 1m):
<p/>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/6125">#6125</a> 1.5-dev: Clicking on "Select on-canvas" button for Swatches in Document Resources dialog crashes Inkscape - (42m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/6098">#6098</a> 1.5-dev: Calligraphy tool, Tracing preset – Crash - (2h 57m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/4817">#4817</a> Ubuntu 22.04: Inkscape crashes on save: Settings schema missing key - (1h 22m)
</li>
</ul>
</li>
<li>
<p>
Other project tasks (tracked time: 5h 10m)
</p>
<ul>
<li>
Meta-tasks, coordination, review, reporting, research, and other project related work.
</li>
</ul>
</li>
</ul>
<h2>Seán de Búrca</h2>
<ul>
<p>
Total time tracked: 7h 20m
</p>
<li>
<p>
Merged 6 merged requests (tracked time: 3h 30m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7928">[!7928]</a> Fix "live preview" of extensions from losing selection (summed across multiple days) - (1h 0m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7927">[!7927]</a> Remember maximized/fullscreened states (review + manual testing) - (25m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7924">[!7924]</a> Fix crash when selecting non-visible objects - (45m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7922">[!7922]</a> Fix AppImage crashing during save on older distros - (15m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7933">[!7933]</a> Make saving imported raster images work again - (50m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7932">[!7932]</a> Fix dark mode on gtk 4.20 (code review + manual testing) - (15m)
</li>
</ul>
</li>
<li>
<p>
Fixed 2 issues (tracked time: 1h 5m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/6086">#6086</a> 1.5-dev Selecting a gradient color stop shows the wrong color (applied fix, verified API usage) - (45m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/6159">#6159</a> X and Y values in 'Nudge RGB/CMY' filters are swapped (investigation and fix) - (20m)
</li>
</ul>
</li>
<li>
<p>
Issues open (3 issues, total 1h 45m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/5905">#5905</a> Crash when font deleted or installed while the Text and Font dialog is open (determining repro steps, root cause investigation) - (45m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/612">#612</a> Boolean Difference / Division / Cut Path with multiple paths yields unexpected result (investigation of current behavior and codepath) - (30m)
</li>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/issues/6041">#6041</a> stroke width scaled, despite disabling, slice and star (investigation and attempting repro) - (30m)
</li>
</ul>
</li>
<li>
<p>
1 merge request open (tracked time: 1h 0m):
</p>
<ul>
<li>
<a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/7129">[!7129]</a> Fixing deleting all nodes but one from closed path doesn't delete path -`` (1h 0m)
</li>
</ul>
</li>
</ul>
<h2>
Roland Taylor
</h2>
<ul>
<p>
Total time tracked: 65h 7m
</p>
<li>
<p>
Closed 24 issues (tracked time: 2h 15m):
</p>
</li>
<li>
<p>
Moved 42 issues from inbox to bug tracker (tracked time: 6h 10m):
</p>
</li>
<li>
<p>
Confirmed 16 issues (already in tracker or stayed in inbox) (tracked time: 2h 00m):
</p>
</li>
<li>
<p>
Reported 7 new issues (tracked time: 1h 45m):
</p>
</li>
<li>
<p>
Feature requests identified (7 issues) (tracked time: 15m):
</p>
</li>
<li>
<p>
Needs info / needs reproducibility (12 issues) (tracked time: 1h 30m):
</p>
</li>
<li>
<p>
Duplicates (6 issues) (tracked time: 20m):
</p>
</li>
<li>
<p>Other issues (reviewed, labelled, triaged) – 88 issues (tracked time: 26h 52m)</p>
</li>
<li>
<p>Non‑issue tasks (tracked time: 24h)</p>
<ul>
<li>
<p>
Meetings & meeting prep – (2h 22m)
</p>
</li>
<li>
<p>
Milestone review & followup – (8h 49m)
</p>
</li>
<li>
<p>
Inbox & triage – (3h 57m)
</p>
</li>
<li>
<p>
Bug followup & general followup – (1h 49m)
</p>
</li>
<li>
<p>
Reporting bugs & issue reports – (1h 27m)
</p>
</li>
<li>
<p>
Setup & admin – (5h 36m)
</p>
</li>
</ul>
</li>
</ul>
</description><pubDate>Sat, 30 May 2026 00:13:40 +0000</pubDate><guid>https://inkscape.org/*membership/blog/may-2026-bug-accelerator/</guid></item><item><title>October, November, and December 2025 Bug Accelerator
</title><link>https://inkscape.org/*membership/blog/october-november-and-december-2025-bug-accelerator/</link><description><h2>Tav</h2>
<ul>
<li>Fix a crash when an LPE is applied to an SVG polygon element (committed).</li>
<li>Fix crash on MacOS when opening file by right clicking on file icon.</li>
</ul>
<p>The MacOS crash was particularly important to fix. We received lots of bug reports about it. It was also quite nasty to fix since a locally compiled and installed version of Inkscape could not duplicate the conditions that lead to the crash. (This also meant using a debugger was difficult.) The solution was to create a special version of Inkscape with debug output being sent to a file (running from the command line didn&#39;t result in a crash), compile it through GitLab, then download and locally install. Once I had a version I could run locally and reproduce the crash, I ran it with 16 different permutations of start method (Command line without file, command line with file, click on Inkscape icon to start, click on a file to start) and of what opening screens were enabled (none, Splash screen only, Welcome screen only, both Splash and Welcome screens enabled). Only one combination resulted in a crash; another combination resulted in an extra Inkscape window. My conclusion, after writing a GTK test program, is that GTK3 has a bug in it. There are two different start-up functions, one for opening Inkscape with an existing file (or files) and one for opening Inkscape with a new file. Only one of these two should be called by GTK. But under some cases, both were being called leading to unpredictable behavior and the crash. I modified our code to work-around the GTK3 bug.</p>
</description><pubDate>Tue, 31 Mar 2026 16:56:38 +0000</pubDate><guid>https://inkscape.org/*membership/blog/october-november-and-december-2025-bug-accelerator/</guid></item><item><title>July and August 2025 Bug Accelerator
</title><link>https://inkscape.org/*membership/blog/july-and-august-2025-bug-accelerator/</link><description><p>The Bug Accelerator Program for 1.4 continues.</p>
<h2>Tav</h2>
<ul>
<li>Fix a number of User Interface bugs for right-to-left text.</li>
<li>Reduce the text &quot;pick-box&quot; size to make it easier to select items behind text.</li>
<li>Fix crash in the Layers and Objects dialog when trying to drop a layer onto itself.</li>
<li>Import previewed page when using Cairo to import PDF.</li>
<li>Fix a slowdown when editing nodes when the Object Properties dialog is open.</li>
<li>Fix a crash when importing an SVG with symbols or markers.</li>
<li>Located cause of Measure tool snapping bug, fixed by PBS.</li>
<li>Fix a crash when an LPE is applied to an SVG polygon element (not yet committed).</li>
</ul>
</description><pubDate>Wed, 10 Sep 2025 14:22:29 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-and-august-2025-bug-accelerator/</guid></item><item><title>May Bug Accelerator 2025
</title><link>https://inkscape.org/*membership/blog/may-bug-accelerator-2025/</link><description><p>This marks the third month of the Bug Accelerator Program for 1.4, with the 1.4.2 completed we&#39;re targeting 1.4.3.</p>
<h2>Martin Owens</h2>
<ul>
<li>Refactor pdf input preferences to standard extension prefs&nbsp; !7233</li>
<li>Backport all backport tagged merge requests to 1.4.3 !7222</li>
<li>Refactoring of ink2canvas to use modern inkex functionality + support more features of html5canvas&nbsp; inkscape/extensions!637</li>
<li>Refactor extension error reporting&nbsp; inkscape/inkscape!7217</li>
<li>Investigate extensions with dependencies are still selectable, and fail silently&nbsp; #5341</li>
<li>Add policy checking for UI toolbars for focus (1.4.x)&nbsp; !7211 more to do.</li>
<li>Investigate 1.3.1 PDF font import chooses incorrect fonts where 1.2 did not #5300</li>
<li>Cairo matrix checks for valid transforms !7199</li>
<li>Change how maximise works on macOS and remove metadata from default templates !7197</li>
<li>Investigate Gradient on a copied group cannot be changed #5589</li>
<li>Page swapping shouldn&#39;t modify the size of the page through viewPort !7194</li>
<li>Investigate LPE offset orange dot became white diamond again #5659</li>
<li>Investigate Windows: Inkscape switches back and forth between two files with grids if Document Properties open #5219</li>
<li>Check for null text before setting to ustring. !7192</li>
<li>Recursively unlock when dealign with item under cursor !7172</li>
<li>Test, Inkspace crashes when changing the brightness with pop-os gnome #4950</li>
<li>Test, duplicate filter menu entry and empty submenu in chinese #5420</li>
<li>Fix issues with shape-inside having invalid references&nbsp; !7170</li>
</ul>
<h2>Tav</h2>
<ul>
<li>Fixed &quot;context-paint&quot; as inherited into markers and groups. #3458, #5697, !7149, !7169</li>
<li>Fixed &quot;Remove from path&quot; on a textPath without xlink:href crash. #5229, !7174, !7191</li>
<li>Fixed slow performance with blur. #5356, !7180, !7187</li>
<li>Investigated: #5200, #5420, #5497, #5550, #5589, #5671, #5740.</li>
</ul>
<h2>KrIr17</h2>
<div class="notranslate" style="all: initial;">&nbsp;</div>
</description><pubDate>Wed, 04 Jun 2025 12:52:21 +0000</pubDate><guid>https://inkscape.org/*membership/blog/may-bug-accelerator-2025/</guid></item><item><title>April Bug Accelerator 2025
</title><link>https://inkscape.org/*membership/blog/april-bug-accelerator-2025/</link><description><p>This marks the second month of the Bug Accelerator Program for 1.4, with the 1.4.2 release right around the corner.</p>
<h2>Martin Owens</h2>
<ul>
<li>&nbsp;Splash screen issues on MacOS and Linux involving the CLI #5644 #5646</li>
<li>Crash in Filter Editor when Ctrl+Space is pressed #5569</li>
<li>SVG specific import preference applies to all formats #5642</li>
<li>Meetings and Administrative work</li>
</ul>
<h2>Tav</h2>
<ul>
<li>LPE Corners issue when merging paths (multiple bugs in code). #4927 #5680</li>
<li>Context paint when set on groups (multiple bugs in code). #3458 #5670</li>
<li>Back-port of fixes to Status Bar (previous/next zoom). #5588</li>
</ul>
<h2>KrIr17</h2>
<div class="notranslate" style="all: initial;">&nbsp;</div>
</description><pubDate>Wed, 14 May 2025 15:05:51 +0000</pubDate><guid>https://inkscape.org/*membership/blog/april-bug-accelerator-2025/</guid></item><item><title>Adobe Illustrator Gradient Improvements
</title><link>https://inkscape.org/*membership/blog/adobe-illustrator-gradient-improvements/</link><description><p>Below, you can find a list of what Manpreet has worked on in March 2025. Gradients were the primary focus of development this month. For more details, please see MR <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/105">!105</a>.</p>
<h2>Color Stop Operator (<code>Bs</code>)</h2>
<pre>colorSpec colorType midpoint ramppoint Bs</pre>
<ul>
<li>Added support for CMYK type (<code>type=0</code>) in colortype=5 spec.</li>
<li>Refactored the parsing of color stops.</li>
<li>Fixed a bug where incorrect color and type values were parsed.</li>
</ul>
<h2>Gradient Geometry Operator (<code>Bg</code>)</h2>
<pre>[flag] name xOrigin yOrigin angle length a b c d tx ty [aspect_ratio] Bg</pre>
<ul>
<li>Added support for aspect ratio in radial gradients.</li>
<li>Added additional <code>is_string</code> type information to all operators to resolve ambiguous parsing cases. If either <code>flag</code> or <code>aspect_ratio</code> is missing, it is determined based on the index of <code>name</code>, which is a string.</li>
</ul>
<h2>Gradient Begin Operator (<code>Bb</code>)</h2>
<pre>[idx] Bb <span class="comment"># idx=0 for fill, idx=1 for stroke</span></pre>
<ul>
<li>Added support for fill and stroke gradient instance types based on <code>idx</code>.</li>
</ul>
<h2>Gradient Instances</h2>
<p>Support for three different gradient instance definitions has been added:</p>
<ul>
<li>Gradient instance with path-render operator
<pre><span class="comment"># -- path definition --</span>
Bb <span class="comment"># Gradient begin operator</span>
1 (gradient name) 0 0 0 1 1 0 0 1 0 0 1 Bg <span class="comment"># Gradient Geometry operator</span>
<span class="comment"># -- other gradient operators --</span>
f <span class="comment"># Path render operator</span>
0 BB <span class="comment"># Gradient end operator</span></pre>
</li>
<li>Gradient instance in known styles</li>
<pre>/FillStyle :
<span class="comment"># -- fill style operators --</span>
Bb <span class="comment"># Gradient begin operator</span>
2 (gradient name) 0 0 0 1 1 0 0 1 0 0 1 Bg <span class="comment"># Gradient Geometry operator (gradient transformation is always `1 0 0 1 0 0`)</span>
<span class="comment"># -- other gradient operators --</span>
0 BB <span class="comment"># Gradient end operator</span>
<span class="comment"># -- more fill style operators --</span></pre>
<li>Gradient instance before known-style operator without path-render operator
<pre><span class="comment"># -- object definition --</span>
Bb <span class="comment"># Gradient begin operator</span>
1 (gradient name) 0 0 0 1 1 0 0 1 0 0 1 Bg <span class="comment"># Gradient Geometry operator (gradient transformation is always `1 0 0 1 0 0`)</span>
<span class="comment"># -- other gradient operators --</span>
0 BB <span class="comment"># Gradient end operator</span>
<span class="comment"># -- other styles --</span>
6 () XW <span class="comment"># Apply known style operator (known style name is never set)</span></pre>
</li>
<li>For gradient instances in known styles and before known-style operator, since the transformation is not present, the gradient from the inline object is reused in all cases.</li>
</ul>
<h2>Linear Gradients</h2>
<ul>
<li>For linear gradients the following input values are obtained from the Illustrator file:
<ul>
<li><code>xOrigin</code>, <code>yOrigin</code>, <code>angle</code>, <code>length</code> and <code>transform matrix</code> (a, b, c, d, tx, ty) from the Gradient Geometry (<code>Bg</code>) operator.</li>
</ul>
</li>
<li>The <code>transform matrix</code> represents the transformation applied to the object after the gradient was applied. This transformation must be (temporarily) removed from the object before performing any further computations.</li>
<li>A bounding box is computed as if the shape were rotated by <code>-angle</code>, then the box is rotated by <code>angle</code>; this is referred to as <code>bbox</code>.</li>
<li>The first intersection point of the gradient line and the <code>bbox</code> is <code>p1_origin</code>.</li>
<li><code>xOrigin</code> is the distance between <code>p1_origin</code> and <code>p1</code> of the gradient at the given angle.</li>
<li><code>yOrigin</code> is always zero, because for linear gradients moving perpendicular to the <code>angle</code> has no effect.</li>
<li><code>length</code> defines the distance between <code>p1</code> and <code>p2</code> of the gradient (a length of 1 covers the entire shape at the given angle).</li>
<li><code>angle</code> is applied as a gradient transformation at the end.</li>
</ul>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/gradient_linear.webp" target="_blank"><img alt="Visual breakdown of a linear gradient" src="/media.inkscape.org/media/news/uploads/gradient_linear.webp" style="width:100%"> </a>
<figcaption>Visual breakdown of a linear gradient</figcaption>
</figure>
<h3>Radial Gradients</h3>
<ul>
<li>For radial gradients the following input values are obtained from the Illustrator file:
<ul>
<li><code>xOrigin</code>, <code>yOrigin</code>, <code>angle</code>, <code>length</code>, <code>transform matrix</code> (a, b, c, d, tx, ty) and <code>aspect_ratio</code> from the Gradient Geometry (<code>Bg</code>) operator.</li>
<li><code>xHighlight</code>, <code>yHighlight</code>, <code>focus_length</code> and <code>focus_angle</code> from the Gradient Hilights (<code>Bh</code>) operator.</li>
</ul>
</li>
<li>Define a scaling function for the gradient radius and focus point as follows:
<pre>scale_function(x, y, w, h) = sqrt(w^2 * (x - 0.5)^2 + h^2 * (y - 0.5)^2) * sqrt(0.5)</pre>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/fn_scale.webp" target="_blank"><img alt="Visualization of the scale_function function for a 1x1 rectangle with varying x and y" src="/media.inkscape.org/media/news/uploads/fn_scale.webp" style="width:100%"> </a>
<figcaption>Visualization of the <strong>scale_function</strong> function for a 1x1 unit square, with varying <strong>x</strong> and <strong>y</strong>.</figcaption>
</figure>
</li>
<li><code>(xOrigin * shape_width, yOrigin * shape_height)</code> defines the origin of the radial gradient relative to the center of the shape.</li>
<li>The radius is <code>length * length_scale</code> where <code>length_scale = scale_function(xOrigin, yOrigin, shape_width, shape_height)</code></li>
<li>The focus point is <code>(xHighlight * focus_scale, yHighlight * focus_scale)</code> where <code>focus_scale = scale_function(0, 0, shape_width, shape_height)</code>.</li>
<li>Instead of using <code>xHighlight</code> and <code>yHighlight</code> directly, they are calculated from <code>focus_length</code> and <code>focus_angle</code> to ensure maximum compatibility with Illustrator.</li>
<li><code>angle</code> and <code>aspect_ratio</code> are applied as gradient transformations at the end.</li>
</ul>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/gradient_radial.webp" target="_blank"><img alt="Visual breakdown of a linear gradient" src="/media.inkscape.org/media/news/uploads/gradient_radial.webp" style="width:100%"> </a>
<figcaption>Visual breakdown of a radial gradient</figcaption>
</figure>
<h2>Other Changes</h2>
<ul>
<li>The <code>Bm</code>, <code>Bc</code>, and <code>Xm</code> gradient operators are ignored as they are not needed.</li>
<li>Added a post-processing step to remove unused gradients from the generated SVG and <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/105#note_2434747792">performance improvements</a> for the same.</li>
<li>Fixed a bug where tint values were incorrectly parsed as integers instead of floats in <code>FillGenericCustomColorOperator</code>.</li>
</ul>
<hr>
<p>A special thanks to <a href="https://gitlab.com/joneuhauser">Jonathan</a> for his invaluable help throughout this project, and a huge thanks to <a href="https://www.youtube.com/@doctormo">Martin</a> for always making sure our blog posts look sharp. And as always, a heartfelt thank you to the entire Inkscape community!</p>
</description><pubDate>Mon, 14 Apr 2025 13:45:23 +0000</pubDate><guid>https://inkscape.org/*membership/blog/adobe-illustrator-gradient-improvements/</guid></item><item><title>March Bug Accelerator 2025
</title><link>https://inkscape.org/*membership/blog/march-bug-accelerator-2025/</link><description><p>This month is the start of our new 1.4 based Bug Accelerator Program with <strong>Tav</strong> and <strong>Martin</strong> as our bug fixing developers and <strong>Krlr17</strong> as the bug administrator. This is the first time we&#39;ve had a bug administrator position so we&#39;re excited to see if we can get even better results from having dedicated support for this season.</p>
<h2>Martin Owens</h2>
<ul>
<li>
<p>Dragging and dropping only works once in the UI, Investigation #5182</p>
</li>
<li>
<p>Drag and Drop finish even must go through the context !7030</p>
</li>
<li>
<p>Fix relative transformation actions !7031</p>
</li>
<li>
<p>Inkscape 1.4.1 crashes on macOS after 15 seconds #5570</p>
</li>
<li>
<p>1.4.x Appimage cannot open PDF files #5563</p>
</li>
<li>
<p>Refactor Splash Screen&nbsp; !7045</p>
<ul>
<li>
<p>Startup time measurements and timer feature</p>
</li>
<li>
<p>Fixing translations, defaults and further refactoring</p>
</li>
<li>
<p>Resolve last issues for splash screen</p>
</li>
</ul>
</li>
<li>
<p>Replace malfunctioning function prefs setting with lambdas !7063</p>
</li>
<li>
<p>Splash screen precursor to welcome screen !7068</p>
</li>
<li>
<p>Don&#39;t edit layer if layer wasn&#39;t added !7072</p>
</li>
<li>
<p>Create a href editor for 1.4.x !7079</p>
</li>
<li>
<p>Protect update from being called during an update !7081</p>
</li>
<li>
<p>Set the scrollbar policy to external for pattern preview !7091</p>
</li>
</ul>
<h2>Tav</h2>
<ul>
<li>Ensure unique display URI&#39;s when shortening paths for recently used files. !7013 !7014</li>
<li>Prevent empty sub-paths from causing segfaults in LPEPowerStroke. !7020 !7021</li>
<li>Fix font locking when using harfbuzz &lt; 2.6.5. !7070</li>
<li>Fix several bugs causing crashes with LPECorner (empty sub-paths, joining paths, undo). !7094 Pending</li>
</ul>
<h2>Krlr17</h2>
<p><em>Not reported yet</em></p>
</description><pubDate>Wed, 02 Apr 2025 15:01:07 +0000</pubDate><guid>https://inkscape.org/*membership/blog/march-bug-accelerator-2025/</guid></item><item><title>Adobe Illustrator Compatibility Improvements
</title><link>https://inkscape.org/*membership/blog/adobe-illustrator-compatability-improvements/</link><description><p>Below, you can find a list of what Manpreet has worked on in February 2025:</p>
<h2>Gradients</h2>
<ul>
<li>Gradients have been the main focus of development. Development is ongoing in MR <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/105">!<span class="hljs-number">105</span></a>.</li>
<li><strong>Gradient Definitions:</strong> The parser now accurately interprets AI gradient definitions and extracts color stops.</li>
<li><strong>Gradient Instances:</strong> Both Linear and Radial gradients are parsed correctly, with their data being extracted. However, positioning gradient points on the canvas remains an ongoing task.</li>
</ul>
<h2>Guides and Grid</h2>
<ul>
<li>Guides and grid related changes can be found in MR <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/104">!<span class="hljs-number">104</span></a><span class="hljs-number">.</span></li>
<li>Added support for linear guides.</li>
<li>Added support for layer color and guide color based on the layer color.</li>
<li>Added support for square grids including the following grid properties:
<ul>
<li>Spacing and subdivisions</li>
<li>Grid styles: normal and dotted</li>
<li>Grid visibility</li>
<li>Major and minor grid line color</li>
<li>Approximated major and minor grid line opacity</li>
</ul>
</li>
</ul>
<h2>Other Fixes and Improvement</h2>
<ul>
<li>Fixed a parser bug where the start of a new line was not detected in certain cases.</li>
<li>Added a warning for operators that have not yet been implemented.</li>
<li>Documentation updates:
<ul>
<li>Added new header comments: <code>AI5_OpenToView</code>, <code>AI9_OpenToView</code>, <code>AI10_OpenToVie</code>, and <code>AI7_GridSettings</code>.</li>
<li>Updated the <code>Bg</code> operator to accept an optional float value instead of a boolean as the last argument.</li>
<li>Updated the Layer Begin Operator (<code>Lb</code>) to include newly discovered optional values.</li>
</ul>
</li>
</ul>
</description><pubDate>Sat, 15 Mar 2025 19:49:54 +0000</pubDate><guid>https://inkscape.org/*membership/blog/adobe-illustrator-compatability-improvements/</guid></item><item><title>Contract to Import AI Files 2025 Update
</title><link>https://inkscape.org/*membership/blog/contract-import-ai-files-2025-update/</link><description><p>To allow the import of Adobe Illustrator files into Inkscape, we are developing a Python extension. This post outlines the progress made in the second month of the project, January <span class="hljs-number">2025</span>. The work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>.</p>
<p>Below, you can find a list of what Manpreet has worked on in January 2025.</p>
<h2>Text</h2>
<p>The development of text-related functionalities is ongoing in the <code><a href="https://gitlab.com/inkscape/extras/extension-ai/-/tree/dev?ref_type=heads">dev</a></code> branch. Key changes include:</p>
<ul>
<li>Multi-line text now functions correctly, addressing previous issues with line breaks.</li>
<li>Added support for text fill and stroke, language codes, and all caps properties.</li>
<li>Fixed bugs related to superscript and subscript text.</li>
<li>Fixed a bug where styles applied to characters had an incorrect offset.</li>
</ul>
<h2>Styles</h2>
<ul>
<li>Added support for unfilled and unstroked objects based on known styles and path operators.</li>
<li>Added support for the stroke align property using the offset [live path effect.](https://inkscape-manuals.readthedocs.io/en/latest/live-path-effects.html).</li>
<li>Fixed a bug where a line shape with only inline styles sometimes had no stroke fill. (This code was later removed as this edge case now never triggers.)</li>
<li>Fixed a bug where two consecutive failed (or ignored) shapes in certain cases would entirely remove the second shape, specifically star and line shapes in the CS version.</li>
</ul>
<h2>Duplicates</h2>
<p>Duplicates handling has been a primary focus during the month, with significant progress made for both older (CS series) and newer (2020) Illustrator file formats. The previous assumption was that all objects were delineated by art dictionaries, allowing for the removal of all objects between two art dictionaries as duplicates, except for one. However, this assumption proved to be incorrect, making it necessary to adopt a different approach.</p>
<h3>Understanding the Problem</h3>
<p>Illustrator converts all objects into paths, similar to the <code><em>Path &gt; Object to Path</em></code> option in Inkscape. These baked path based representations are then saved in the file, likely to ensure compatibility with <a href="https://en.wikipedia.org/wiki/PostScript">PostScript</a> interpreters. Additionally, Illustrator also needs to retain the original object&#39;s properties such as a rectangle&#39;s width and height or a circle&#39;s radius along with the original path before any filters are applied to the object. We refer to these objects as control objects. This extra data is stored in the file, resulting in duplicate objects.</p>
<h3>Identifying duplicates</h3>
<p>The control objects are not meant to be processed by the PostScript interpreter. In PostScript, the <code>%</code> character denotes the start of a comment, which is ignored during interpretation. Illustrator makes use of Pseudo comments, specifically <code>%_</code> which are typically ignored by the PostScript interpreter but are recognized by Adobe Illustrator and other applications that parse Illustrator files. Illustrator encloses control objects within these pseudo-comments.</p>
<h3>Deduplication</h3>
<p>The control objects include dictionaries containing shape properties (stored twice sometimes) and the original outline or the path before the filters are applied. This can be seen as the blue colored highlight when an object is selected. The baked objects structure in the file depends on the control objects and the known styles that are applied. To identify the last control object and remove the other duplicates the <code>deduplicate_object</code> and <code>deduplicate_live_shape</code> functions have been implemented. If the known styles are not present, the baked object is kept and the control objects are ignored. To achieve this, the deduplication step is deferred until the next object is detected.</p>
<h2>Other Fixes and Improvements</h2>
<ul>
<li>The control objects for paths are inconsistently stored as either closed or open paths. To address this issue, a decision is made to close or open the path based on the fill part of the baked object. If the fill part is missing, a decision is made based on the position of the start and end points of the path.</li>
<li>Additional test cases and documentation have been added. The star shape-related changes are available in MR <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/99">!99</a>.</li>
<li>The Text related changes can be found in the <a href="https://gitlab.com/inkscape/extras/extension-ai/-/tree/dev?ref_type=heads">dev branch</a>,</li>
<li>while all other updates are available in MR <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/100">!100</a>.</li>
</ul>
</description><pubDate>Wed, 05 Feb 2025 08:57:48 +0000</pubDate><guid>https://inkscape.org/*membership/blog/contract-import-ai-files-2025-update/</guid></item><item><title>Inkscape Translation Contribution, and Other Short Stories
</title><link>https://inkscape.org/*membership/blog/inkscape-translation-contribution-and-other-short/</link><description><p><img alt="" height="103" src="/media.inkscape.org/media/news/uploads/ltlnx.jpeg" style="margin-left: 15px; margin-right: 15px; float: left;" width="103" />As the title stated, my Traditional Chinese translations are included in Inkscape 1.3.1 and onwards. This is my first serious contribution to an open source project, and I&rsquo;m pretty glad seeing my work actually applied onto the software. I hope they will make the experience better for Traditional Chinese Inkscape users. But how did I come to use Inkscape in the first place, and how did the translation process go? Here&rsquo;s some notes&hellip;</p>
<h2 id="so-i-started-using-inkscape">So I started using Inkscape</h2>
<p>I&rsquo;ve heard of Inkscape a long time ago, but never got around to use it, because I was more content with programs like GIMP and Krita to do design work. To be honest, Inkscape (and other vector editors) scared me with the initial learning curve. As luck would have it, I&rsquo;m a bit burnt out around June 2023 by all the drumming gigs I did in May, and tried to find other things to do, so I decided to try Inkscape for my next graphic design commision for a summer camp. It turned out to be a great decision.</p>
<p>At first I watched various tutorials on YouTube to grasp how shapes, node editing and text wrangling work in Inkscape, and was attracted to the &ldquo;Text on Path&rdquo; feature &mdash; I can&rsquo;t believe I missed out this the whole time on other image editors. After doing more work and trying out features like vectorizing photos, laying out documents, and creating letterings, I&rsquo;m completely sold on Inkscape. However my problem with the software lies in the state of Traditional Chinese translations.</p>
<h2 id="translations-and-ui">Translations and UI</h2>
<p>The Traditional Chinese translations of Inkscape at the time was, let&rsquo;s say, lacking. There were visible untranslated parts everywhere, namely in the Align and Distribute dialog, the dialog tab names, parts of the menu items, in the settings, and in the tooltips. My gripe was that some of them were <em>partially</em> translated, meaning that maybe the tool name was translated but the tooltip wasn&rsquo;t, or in the case of the Align and Distribute dialog, some align options were and some weren&rsquo;t, even though they are similar functions.</p>
<p>To be fair, before I jumped in and started translating, I didn&rsquo;t know that some parts look untranslated because the source in English changed subtly, rendering the previous translation obsolete, therefore not showing up in the interface.</p>
<p>So I wondered who can translate the interface, who did the translations previously, and as it&rsquo;s an open source project, if I could somehow help with the translations.</p>
<p>Read more about ltlnx&#39;s journey into contributing to Inkscape on their <a href="https://ltlnx.tw/inkscape-translation.html">excellent blog page</a>.</p>
<hr />
<p>Big thanks to the community for contributing to Inkscape and for sharing their stories with us.</p>
</description><pubDate>Wed, 25 Dec 2024 09:39:50 +0000</pubDate><guid>https://inkscape.org/*membership/blog/inkscape-translation-contribution-and-other-short/</guid></item><item><title>Contract to Import AI Files Update
</title><link>https://inkscape.org/*membership/blog/contract-import-ai-files-update/</link><description><p role="region">To allow the import of Adobe Illustrator files into Inkscape, we are developing a Python extension. This post outlines the progress in the 1st month of the project, October 2024. Work is carried out inside the git repository [extension-ai](https://gitlab.com/inkscape/extras/extension-ai/).</p>
<p role="region">Below, you can find a list of what Manpreet has worked on in October 2024:</p>
<h2 role="region">Duplicate Objects</h2>
<p role="region">AI files often contain multiple definitions of the same object, each defined in a different way. The tricky part was determining if a subsequent definition refers to the same object or represents a completely new object. The current approach assumes an object&#39;s definition ends when:</p>
<ul>
<li role="region">It&rsquo;s container (group or layer) ends</li>
<li role="region">An Art-dictionary is encountered</li>
</ul>
<h2 role="region">Styles</h2>
<p role="region">AI files feature two types of styles: inline styles and known styles.&nbsp;<br />
Known styles are predefined in the document setup section and are applied to objects using the XW opearator. This functionality is now working as intended. Inline styles are mostly functional, but difficulties arise with duplicate definitions of objects and styles.</p>
<p role="region">The following style attributes have been implemented:</p>
<ul>
<li role="region">Stroke: stroke-color, stroke-dash, line-join, line-cap, miter-limit, stroke-width.</li>
<li role="region">Fill: fill-color, fill-rule</li>
<li role="region">Blend: opacity</li>
</ul>
<h2 role="region">Star Shape</h2>
<p role="region">The AI Import extension supports importing star shapes with most properties implemented, including the number of points, rotation angle, clockwise / anti-clockwise, corner types, inner and outer radii and corner radii. Out of the two corner rounding types (absolute and relative), only absolute rounding is currently implemented.</p>
<h2 role="region">Text</h2>
<p role="region">The extension currently supports importing basic text elements, placing them approximately in the correct position. Some text styles like font-size, bold, italic, superscript, subscript, small-caps, underline, line-through and justification have also been implemented.</p>
</description><pubDate>Sun, 24 Nov 2024 17:39:49 +0000</pubDate><guid>https://inkscape.org/*membership/blog/contract-import-ai-files-update/</guid></item><item><title>June Bug Accelerator 2024
</title><link>https://inkscape.org/*membership/blog/june-bug-accelerator-2024/</link><description><p>Some general thoughts about the program this year compared to last year; we are starting to get to more difficult and harder to fix issues as previous efforts pick off all the smaller problems, I found this year&#39;s crop of issues to take more time, more detail and persistence than last year&#39;s. We also have a collection of macOS and windows bugs that were harder to fix because none of the hired contractors had those computers, though two did pick up one each of those types of computers part way through the program. In all future programs should make sure there is a balance of capability and we should expect the amount of bug fixing to fluctuate between releases as the difficulty of the problems changes.</p>
<p>The issues we have been working to can be found here: <a href="https://gitlab.com/groups/inkscape/-/milestones/13">https://gitlab.com/groups/inkscape/-/milestones/13</a></p>
<h3>Martin&#39;s Fixes</h3>
<ul>
<li>Some light administration</li>
<li>Fix <a href="https://gitlab.com/inkscape/inkscape/-/issues/4322">#4322</a> when constructing spiro lines that end at the beginning in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6537">!6537</a>.</li>
<li>Fix alignment of the handles reported in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4758">#4758</a> and fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6565">!6565</a>.</li>
<li>Speed improvements needed in the spray report in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4910">#4910</a> partly fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6545">!6545</a>.</li>
<li>Inkscape profiling to find speed problems with various widget redrawing and signals.</li>
<li>Problems with batch export in <a href="https://gitlab.com/inkscape/inkscape/-/issues/5092">#5092</a> and <a href="https://gitlab.com/inkscape/inkscape/-/issues/5095">#5095</a> are tested and fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6541">!6541</a>.</li>
<li>Anchor tags in PDF issues in <a href="https://gitlab.com/inkscape/inkscape/-/issues/1631">#1631</a> are more controlled because of <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6530">!6530</a>.</li>
<li>Crashes from stroke widths being zero and trying to write markers in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4705">#4705</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6529">!6529</a>.</li>
<li>Merge reviews and finishing up various patches and ports.</li>
</ul>
<p>Martin used 35.5 hours this month, totalling 84 hours for the whole program using 97% of the allotment.</p>
<h3>Tav's Fixes</h3>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4839">#4839</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6560">!6560</a> Remove GC from SPDocument.</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4916">#4916</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6559">!6559</a> Fix segmentation faults with FontSelector.</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4918">#4918</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6524">!6524</a> Fix crash when symmetrizing paths with overlapping nodes.</li>
</ul>
<p>Tav used 13 hours this month, leaving 19 hours remaining</p>
</description><pubDate>Tue, 02 Jul 2024 15:45:50 +0000</pubDate><guid>https://inkscape.org/*membership/blog/june-bug-accelerator-2024/</guid></item><item><title>May Bug Accelerator 2024
</title><link>https://inkscape.org/*membership/blog/may-bug-accelerator-2024/</link><description><p>The issues we have been working to can be found here: <a href="https://gitlab.com/groups/inkscape/-/milestones/13">https://gitlab.com/groups/inkscape/-/milestones/13</a></p>
<h3>Martin&#39;s Fixes</h3>
<ul>
<li>Some administration and mentoring</li>
<li>BatchItem Review in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6324">!6324</a> to merge fixes for <a href="https://gitlab.com/inkscape/inkscape/-/issues/4523">#4523</a> and <a href="https://gitlab.com/inkscape/inkscape/-/issues/4524">#4524</a></li>
<li>Fix on-import preference use in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6484">!6484</a> fixed both <a href="https://gitlab.com/inkscape/inkscape/-/issues/4839">#4839</a> <a href="https://gitlab.com/inkscape/inkscape/-/issues/3835">#3835</a></li>
<li>Fix preference GUI in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6485">!6485</a> fixes <a href="https://gitlab.com/inkscape/inkscape/-/issues/4810">#4810</a></li>
<li>Graphics for release in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6483">!6483</a> requested in issue <a href="https://gitlab.com/inkscape/inkscape/-/issues/5020">#5020</a></li>
<li>Items under cursor ContextMenu in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6489">!6489</a> fixes <a href="https://gitlab.com/inkscape/inkscape/-/issues/5047">#5047</a></li>
<li>Manage merge requests and issues</li>
</ul>
<p>A total of 15.5 hours, or 18% of the budget was used this month leaving 37 hours remaining.</p>
<h3>Vaibhav&#39;s Fixes</h3>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4868">#4868</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6430">!6430</a> Fixed crash on adding new stops to single-stop gradients</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4871">#4871</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6402">!6402</a> Minor issue related to the delete page button sensitivity in the page toolbar</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4881">#4881</a>, <a href="https://gitlab.com/inkscape/inkscape/-/issues/5015">#5015</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6438">!6438</a> Toolbars alignments and padding fixes</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4886">#4886</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6435">!6435</a> Fix star toolbar GTK4 port regressions</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4756">#4756</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6475">!6475</a> Statusbar Opacity label shortcut broken (regression)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4421">#4421</a>, <a href="https://gitlab.com/inkscape/inkscape/-/issues/4858">#4858</a>, <a href="https://gitlab.com/inkscape/inkscape/-/issues/4859">#4859</a>, <a href="https://gitlab.com/inkscape/inkscape/-/issues/4522">#4522</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6371">!6371</a> Layers dialog cursor selection improvements</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4925">#4925</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6458">!6458</a> Fix dialog category label alignment</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4969">#4969</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6466">!6466</a> Enforce snap alignment activation for distance markers</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4188">#4188</a>, <a href="https://gitlab.com/inkscape/inkscape/-/issues/4196">#4196</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6468">!6468</a> Various issues with the Font Collections dialog (polishing)</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/5042">#5042</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6478">!6478</a> The Opacity SpinButton undoes value change if Esc is pressed</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4876">#4876</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6478">!6478</a> Set Remove overlaps invisible when aligning nodes</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4888">#4888</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6493">!6493</a> Re-add indicator for &quot;Show this every time&quot; checkbox</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4940">#4940</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6496">!6496</a> Fix freeze on changing file filter in the Save dialog</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/5056">#5056</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6501">!6501</a> Clearing font categories freezes the UI</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/5058">#5058</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6497">!6497</a> Add ellipsis-end to page labels in the page selector</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4984">#4984</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6504">!6504</a> Node tool - delete segment changes shape</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/8602">#8602</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6508">!6508</a> Enhance font list reset button behaviour</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/5060">#5060</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6510">!6510</a> Simplify relative alignment for single selection</li>
</ul>
<p>A total of 55 hours, or 62% of the budget was used this month. This concludes this allotment of hours.</p>
<h3>Tav&#39;s Fixes</h3>
<ul>
<li>#766 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6511">!6511</a> Fix creation of new mesh gradient from shared mesh.</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4884">#4884</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6507">!6507</a> Various fixes to MenuButtons in collapsible toolbars.</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4884">#4884</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6506">!6506</a> Use on only one collapsible region for Command Toolbar.</li>
<li><a href="https://gitlab.com/inkscape/inkscape/-/issues/4884">#4884</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6446">!6446</a> Add icons or labels to toolbar MenuButtons that appear when window width is decreased.</li>
</ul>
<p>Using 19 hours.</p>
</description><pubDate>Sat, 01 Jun 2024 19:30:25 +0000</pubDate><guid>https://inkscape.org/*membership/blog/may-bug-accelerator-2024/</guid></item><item><title>April Bug Accelerator 2024
</title><link>https://inkscape.org/*membership/blog/april-bug-accelerator-2024/</link><description><p>This month was the starting point for the 1.4 release, which is Inkscape last Gtk3 based release before moving onto Gtk4. Many of the fixes in this list have been worked on in a backwards way as we fixed them in 1.4.x first and will forward port them to the main inkscape development later.</p>
<p>The issues we have been working to can be found here: <a href="https://gitlab.com/groups/inkscape/-/milestones/13">https://gitlab.com/groups/inkscape/-/milestones/13</a></p>
<h3>Martin&#39;s Fixes</h3>
<ul>
<li>Various administration to help setup the program, review bugs etc</li>
<li>Marker disapearence <a href="https://gitlab.com/inkscape/inkscape/-/issues/4696">#4696</a> after extension run fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6389">!6389</a> after a long investigation</li>
<li>Hardcoded shortcuts <a href="https://gitlab.com/inkscape/inkscape/-/issues/4318">#4318</a> fixed with customisable tool shortcuts in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6308">!6308</a></li>
<li>Crashes when running extensions in <a href="https://gitlab.com/inkscape/inkscape/-/issues/3653">#3653</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6331">!6331</a></li>
<li>Grid issues when pasting <a href="https://gitlab.com/inkscape/inkscape/-/issues/4827">#4827</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6390">!6390</a></li>
<li>Crash when deleting page <a href="https://gitlab.com/inkscape/inkscape/-/issues/4747">#4747</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6332">!6332</a></li>
<li>Minor documentation actions issue <a href="https://gitlab.com/inkscape/inkscape/-/issues/4763">#4763</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6307">!6307</a></li>
<li>Batch export filename issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/4826">#4826</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6323">!6323</a></li>
<li>PDF url and size export issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/4806">#4806</a> fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6327">!6327</a></li>
<li>Mouse dragging issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/4830">#4830</a> failed to fix in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6338">!6338</a> actually fixed in !6217</li>
<li>PDF import issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/4380">#4380</a> fixed with new option in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6397">!6397</a></li>
<li>Export crashes <a href="https://gitlab.com/inkscape/inkscape/-/issues/4523">#4523</a> and #4524 fixed in refactoring <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6324">!6324</a></li>
</ul>
<p>A total of 35 hours, or 40% of the budget was used this month.</p>
<h3>Vaibhav&#39;s Fixes</h3>
<ul>
<li>#4647, #1583 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6320">!6320</a>, <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6322">!6322</a> Fixed broken lock aspect ratio button and default text box resize behaviour</li>
<li>#4790 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6326">!6326</a> Fixed shape builder messing with the transparency of on-canvas objects</li>
<li>#4823 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6329">!6329</a> Fixed wrong and editable stroke width in clones</li>
<li>#4804 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6335">!6335</a> Various object picker tool improvements</li>
<li>#4756 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6340">!6340</a> Status bar opacity spin button tooltip improvements and fixed pasting of clipboard contents on middle-click</li>
<li>#4652 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6344">!6344</a> Fixed pressing ENTER to rename the group in the layers dialog right after its creation</li>
<li>#4553 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6347">!6347</a> Fixed icon preview dialog not updating preview on object deletion</li>
<li>#4842 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6352">!6352</a> Fixed vertical adjustment spin button in the node toolbar</li>
<li>#1967 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6355">!6355</a> Using gradient mesh tool on normal gradients will no longer crash Inkscape</li>
<li>#1261 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6358">!6358</a> Added support to add gradient stop when the last stop is selected</li>
<li>#3472, #4466 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6361">!6361</a> Various color-palette drag-and-drop improvements related to gradients</li>
<li>#3146 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6371">!6371</a> Respect the direction of selection when SHIFT+CLICKING for selecting multiple objects in the layers dialog</li>
<li>#4162 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6379">!6379</a> Minor gradient undo issue in the fill and stroke dialog</li>
<li>#3478 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/6386">!6386</a> Entering groups in the layers dialog should also enter them on the canvas</li>
</ul>
<p>A total of 33 hours, or 38% of the budget was used this month.</p>
<h3>Tav&#39;s Fixes</h3>
<ul>
<li>
<div>#297 <a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/6414">!6414</a> Change PDF text import to use the &#39;dx&#39; and &#39;dy&#39; attibutes.</div>
</li>
<li>
<div>#4767 <a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/6321">!6321</a> Fix infinite loop in text_to_glyph() with some fonts.</div>
</li>
</ul>
<div>A total of 36.5 hours or 41% of the budget was used this month.</div>
</description><pubDate>Wed, 01 May 2024 17:01:35 +0000</pubDate><guid>https://inkscape.org/*membership/blog/april-bug-accelerator-2024/</guid></item><item><title>December through February - Gtk4 Migration (Tavmjong)
</title><link>https://inkscape.org/*membership/blog/december-through-february-gtk4-migration-tavmjong/</link><description><p>Another three months have passed. My contract hours have been used up. The Gtk4 version of Inkscape runs and can be used for work but we&#39;ve encountered more problems than we anticipated. As a result, we decided during our weekly developer&#39;s meetings to base our next Inkscape release on the Gtk3 version. This will give us more time to iron out the remaining problems with the Gtk4 version. We expected all along that we would have to have a long &quot;alpha&quot; and &quot;beta&quot; periods with the Gtk4 branch so this isn&#39;t entirely unexpected.</p>
<h2>Cross Platform Support</h2>
<p>One thing that concerns us is that the cross-platform support in Gtk4 is missing some key features. For example, it is not currently possible to set custom cursors on MacOS with Gtk4. The Gtk4 team struggles with cross-platform support as it&#39;s a rare developer who both knows the MacOS GUI code base and the Gtk code base well enough to contribute patches and has time to do so. The Gnome Foundation has indicated that cross-platform support is important and is willing to invest resources if a developer who can do the work can be found.</p>
<h2>Gtk4 Maturity</h2>
<p>Inkscape is one of the most demanding users of the Gtk toolkit. This means that we often find bugs or deficiencies that others miss. Sometimes crucial documentation is missing and working examples are scarce. In order to build Inkscape with Gtk4, we need to use the latest Gtk code which means compiling the Gtk4 libraries ourselves. This will be all worked out, it just takes time.</p>
<h2>Summary of Work</h2>
<p>At the beginning of this work period, Inkscape was runnable with the Gtk4 toolkit but it wasn&#39;t a pleasant experience. I&#39;ve focused on the remaining &quot;big&quot; issues, the most important was getting keyboard shortcuts working. Event handling in Gtk4 is fundamentally different from that in Gtk3. It relies now on &quot;Event Controllers&quot; that can be attached to any widget. This is actually a good change, but as with all changes, it requires updating the code. The new Shortcut controller took quite a bit of effort get working correctly as our shortcut handling is quite complex.</p>
<p>I fixed a variety of smaller problems such as with localized formats. Gtk4 enforces that the &quot;C&quot; local and the &quot;C++&quot; local be the same. In Gtk3 the &quot;C++&quot; local defaulted to the &quot;Classic C&quot; local while the &quot;C&quot; local came from the users system. Depending on your local, numerical strings were being written different ways. For example, if your system is using the French local &quot;FR_fr&quot;, the decimal separator is a comma, while with the &quot;Classic C&quot; local it is a period. This is fine for GUI purposes, but for internal purposes, having a comma rather than a period leads to incorrect numerical values.</p>
<p>Other smaller projects included fixing the Dash-pattern widget and fixing the Color-Wheel widget.</p>
<p>My biggest effort during this period focused on the &quot;Layers and Objects dialog&quot; and the &quot;XML dialog&quot;. These dialogs both show &quot;trees&quot; of objects (e.g. rectangles, paths, text). One can drag and and drop objects to rearrange them which can change the order in which they are drawn or put them in different groups. This is done in Gtk3 by using a TreeView widget which has built-in drag and drop capabilities. The TreeView widget is deprecated in Gtk4 and some of its functionality has been removed as a result of the change in event handling.</p>
<p>It wasn&#39;t clear how to adapt to these changes. One fundamentally has three choices:</p>
<p>1. Use the TreeView widget with its existing drag and drop capabilities but with reduced functionality,<br />
2. Use the TreeView widget with the new drag and drop controllers, or<br />
3. Convert the code to using the new ListView widget which would promises great speed improvements for large lists.</p>
<p>I spent a lot of time writing toy programs, trying to get the new ListView widget to handle drag and drop (it has no internal support). I finally succeeded but due to problems on MacOS, I decided to keep the existing TreeView widget but to implement drag and drop with the new controllers. When the MacOS problems are solved, it should be straight forward to convert to the new ListView widget as the drag and drop mechanism is the same for both.</p>
<h2>Future</h2>
<p>We are still working on the Gtk4 Inkscape version. After we &quot;branch&quot; the code for Inkscape 1.4 (based on Gtk3), we will merge the new code. This will allow more developers to test and work on the code.</p>
</description><pubDate>Mon, 11 Mar 2024 16:59:52 +0000</pubDate><guid>https://inkscape.org/*membership/blog/december-through-february-gtk4-migration-tavmjong/</guid></item><item><title>September through November - Gtk4 Migration (Tavmjong)
</title><link>https://inkscape.org/*membership/blog/september-through-november-gtk4-migration-tavmjong/</link><description><p>It&#39;s been three <del>long</del> quick months since my last update. A lot has happened. Most importantly, we can compile and run a Gtk4 version of Inkscape! But while Daniel&#39;s contract was extended, he&#39;s taken on another full-time job so will only be working on Inkscape in his spare time, and I&#39;ve had less time due to family obligations. So work has slowed down. Progress is still being made with the help of others including PBS and mikekov.</p>
<h2>Toolbar Cleanup</h2>
<p>I spent some time cleaning up our toolbar code. We had a Google Summer of Code student, Vaibhav Malik, who did a great job of refactoring our toolbar code in preparation for Gtk4 where the specialized Toolbar widgets are removed. We still had some widgets derived from the removed widgets and these needed to be updated (or removed if no longer used).</p>
<h2>Builder Files</h2>
<p>We are slowly moving to defining our Graphical User Interface (GUI) by XML &quot;Builder&quot; files rather than having it hard coded in our C++ code. Widgets defined in Builder files, however, still need to be accessed inside the code. There were small changes in how they are accessed between Gtk3 and Gtk4. Daniel wrote some routines that allowed isolating these changes in one file (as well as making accessing the widgets easier). This required updating our code in many files to use his new routines.</p>
<h2>File Dialogs</h2>
<p>I updated our File Open and Save dialogs to get ready for Gtk4. This was probably the most frustrating code rewrite I&#39;ve ever done for Inkscape. At first appearances, it seemed rather trivial, but it involved several false starts, and a dive into Windows code that I am quite unfamiliar with (I even compiled Inkscape on Windows for the very first time!).</p>
<p>There were a number of issues, the most important is the handling of file name encodings. Gtk uses <a href="https://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding internally. If you are not familiar with UTF-8, it is a way of encoding <a href="https://en.wikipedia.org/wiki/Unicode">Unicode</a> characters. Unicode, itself, is a system that allows one to encode most of the worlds written scripts. It allows you, for example, to mix Japanese and Hindi in the same sentence. Most modern programs support Unicode but operating systems are not guaranteed to do so, so one must translate file names between UTF-8 (as typed in to the dialog) and whatever encoding the operating system is using. We were handling this translation ourselves (and more often than not wrongly!). Both Gtk3 and Gtk4 file dialogs have the ability to return selected files as <em>Gio::File</em> objects (Gio is a sister library to Gtk that handles low level interfaces to operating systems). This object does the right thing, returning a UTF-8 string for use in the GUI or in a system native encoding for use in accessing the file. In Gtk3 we didn&#39;t rely on this object but instead used functions that returned raw file names (left over from Gtk2 days). In Gtk4, access to raw file names was removed so one must use Gio::File objects (this is good!).</p>
<p>In our Gtk3 branch, we have the option to use &quot;native&quot; Windows file dialogs. These dialogs are not Gtk based. To fit into the changes made for Gtk4, we would need to create Gio::File objects ourselves out of the output of the dialogs. This was quite concerning to me as Windows uses <a href="https://en.wikipedia.org/wiki/UTF-16">UTF-16</a>, another encoding system for Unicode. Converting between UTF-8 and UTF-16 should, in principle, be straight forward but I wasn&#39;t in good position to test such conversions and to ensure that we could still open and save files on Windows systems regardless of the system encoding. After a number of discussion during the Inkscape developers meetings it was decided to drop these Windows-based dialogs. They were written for the Windows XP era and had received minimal love since then. Gtk actually has two other dialog options that can replace these dialogs with more modern &quot;native&quot; equivalents. We&#39;ll investigate doing so after the Gtk4 port is more mature.</p>
<p>While file name encodings was the thing that I worried most about in getting the file dialogs ready for Gtk4, there were a number of other issues that had to be addressed. Gtk4 dialogs are structured differently and have been simplified. This required several adaptations such as how we create and use file filters (i.e updating the file name extension when you change the type of file you are saving to from the drop-down menu) and in how buttons that represent options are added to the dialog. One big change, is that the dialogs drop the ability to add a preview widget. This should in part be mitigated by the fact that Gtk4 dialogs have an &quot;icon&quot; view option, although, generating icons for SVG files isn&#39;t necessarily automatic.</p>
<h2>Shortcuts</h2>
<p>I&#39;ve spend quite a bit of time working on our shortcut handling. We have rather complicated code to handle keyboard input, mostly due to our use of single letter shortcuts (e.g. &#39;R&#39; to select the Rectangle tool). Shortcuts need to be applied after other widgets and the Canvas get access to the keyboard input (otherwise, we wouldn&#39;t be able to type in text on the canvas or into the various widgets!). They also need to be added correctly so that they are shown, for example, in menus (a native Gtk feature) and in tooltips (through our own code). Gtk4 offers a simplified way of allowing us to apply shortcuts at the correct time but getting everything to work has been elusive so far. This is also tied into our desire to show icons in menus.</p>
<h2>Misc. Fixes</h2>
<p>Since we have a working GTK4 branch, we can start work on fixing the many inevitable bugs that such a big transition introduces. Some of the things I&#39;ve done include: getting the menubar to show, fixing the Startup dialog, fixing tooltips in menu items, fixing a handful of segmentation violations, and making sure newly created windows are visible.</p>
<h2>Other</h2>
<p>I got sidetracked a few times from working on Gtk4. I did some cleanup of our header files in the hope that it would reduce compile times. I also pushed the switch from C++17 to C++20. As both of these are not Gtk4 related, these were done on my own time.</p>
<h2>Current Status</h2>
<p>We <del>are</del> were about to merge the GTK4 branch into the main branch. But we&#39;ve realized that there are some problems with Gtk4 itself. Many programs have been migrated to Gtk4 but Inkscape is a very large program (over 1000 source code files!) and has far greater needs that a typical utility program. We also use the &#39;Gtkmm&#39; C++ wrapper to the Gtk &#39;C&#39; code which for historical reasons has more problems than other language ports (for the technical savvy, it predates the introduction of GObject &quot;introspection&quot; which makes writing language bindings easier). Bug fixes to Gtkmm (by Daniel) require building Gtkmm from source. Most of the issues that we find can be worked around or fixed upstream, given time. But there are some issues that probably need to be addressed first before merging the Gtk4 branch. Here are some:</p>
<ul>
<li>Our custom cursors don&#39;t work on OSX.</li>
<li>Keyboard handing problems on OSX</li>
<li>High DPI support fails with the bitmap images.</li>
<li>Shortcuts.</li>
<li>Drag and drop.</li>
</ul>
<p>A more complete list can be found at <a href="https://gitlab.com/inkscape/inkscape/-/issues/4690">Issue 4690</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</description><pubDate>Tue, 05 Dec 2023 15:29:19 +0000</pubDate><guid>https://inkscape.org/*membership/blog/september-through-november-gtk4-migration-tavmjong/</guid></item><item><title>October/November - GTK4 migration - dboles
</title><link>https://inkscape.org/*membership/blog/octobernovember-gtk4-migration-dboles/</link><description><p dir="ltr" id="docs-internal-guid-18588da0-7fff-d94b-6c8e-06097c630238" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Dev blog time again! Towards end of October, PBS boldly sped us towards running Inkscape on GTK4 by doing some temporary &lsquo;bodges&rsquo; against our gtk4 branch to fix build errors and get Inkscape at least building against GTK4 and related libraries. This meant that we could deal with immediate launch-time errors and at least get some UI up and running, which then enables more contributors to independently focus on particular subsystems or UI elements.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Around this time I was finishing up some cleanup/tidying/optimisations for the Swatches and Selectors dialog, and reviewing various MRs for Jabier. I also worked to diagnose a problem with the Display Mode radio buttons getting us into an infinite loop when the mode was changed by another method; the fix was to revert that patch until GTK4, where it works right.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I then loaded up PBS&rsquo;s gtk4-bodge branch as mentioned, and dived into helping there, finishing up build fixes and dealing with some of the immediate errors visible once we were launching. This kept me busy for most of a week! During this time I also submitted several MRs to gtkmm to add API that will be useful in future (for other projects, and for Inkscape if we can end up requiring gtkmm 4.14), as well as improving some tests for TreeIter et al., and fixing some bugs that had been revealed while porting our TreeIter use from GTK3 to 4.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">For better part of a day, I focussed on getting our Dialog* family building on GTK4 and fixing early runtime bugs. This involved finishing the extensive DnD porting I&rsquo;d started last month. I can&rsquo;t promise that will be 100% functional right away, but I&rsquo;m confident it&rsquo;s 99% of the way :-)</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">After this I have other commitments, but did get in about a day&rsquo;s work - discussing the GTK4 migration on its MR, submitting some small MRs, reviving my shortcuts migration so that Tav could pick that up, and doing a couple of small reviews to some other contributors&rsquo; MRs.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">There&rsquo;s been a lot of great work in the last couple of months, all - keep it up, and good luck!</span></p>
</description><pubDate>Wed, 29 Nov 2023 21:15:51 +0000</pubDate><guid>https://inkscape.org/*membership/blog/octobernovember-gtk4-migration-dboles/</guid></item><item><title>October - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/october-bug-accelerator-2023/</link><description><p>This month was all about preparing the Inkscape 1.3.1 release, testing and backporting all the fixes and managing the issues that cropped up with the fixes that needed to get into the release. All fixes were re-tested to make sure they wouldn&#39;t break in the process.</p>
<p>You can see a full list of backports here: <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5913">https://gitlab.com/inkscape/inkscape/-/merge_requests/5913</a></p>
<p>There was over 87 backports to process and each one was re-tested and merged into the 1.3.x branch. Quite a few needed to be manually merged as they had diverged so much from the old code that they no longer cleanly applied. Many crash fixes, lots of clean up and regression fixes to repair problems introduced by 1.3.0 back in July. All the fixes mentioned in previous reports since July have now made their way into the Inkscape release. Some tasks still remain but are relatively minor.</p>
<p>Fixes this month:</p>
<ul>
<li><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5952">!5952</a> - Fix entering custom text in the page size tool</li>
<li><a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/5999">!5999</a> - Split out Grid Line snapping from Grid intersection</li>
<li><a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/5951">!5951</a> - Crash in gradient editing with Knot signal connection</li>
<li><a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/5942">!5942</a> - Crash from size of generated image when not found</li>
<li><a href="http://gitlab.com/inkscape/inkscape/-/merge_requests/5912">!5912</a> - Context error when loading certain pdf files</li>
</ul>
</description><pubDate>Tue, 31 Oct 2023 14:37:20 +0000</pubDate><guid>https://inkscape.org/*membership/blog/october-bug-accelerator-2023/</guid></item><item><title>October - GTK4 migration - dboles
</title><link>https://inkscape.org/*membership/blog/october-gtk4-migration-dboles/</link><description><p dir="ltr" id="docs-internal-guid-de0332c6-7fff-b4f8-16d9-99de07ac9b2b" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Here&rsquo;s the report of what I did on Inkscape month ending October, focusing on the GTK4 migration.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">On the `master` branch, doing preparation on GTK3, I finalised and merged the change from Gtk:: TreeIter to TreeModel::[const_]iterator mentioned at the end of last post. I then tackled a key-press- event in our DialogBase class (Widget events need replaced by an EventController to be GTK4- ready; see previous posts!). In this I found it seemingly had not been working, who knows for how long&hellip; so fixed that. I was also able to tidy excess function overloads in my Controller helper file.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Fighting errors on my GTK4 branch, I noticed some overdue cleanups. Our `libnrtype` FontLister had some inefficient loops, string-copying, reference-count-trashing, etc. - tidied up as best I can. Our SPTagUse object had some very old code manually de/allocating C strings, so I replaced it all with std::string, and I removed more noise by using std::unique_ptr and removing defunct old code.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The `master` branch was switched over to build in C++20 mode at end of September. This adds some deprecation warnings about lambda captures, which I&rsquo;ve been fixing while &lsquo;in the area&rsquo;, and warnings about comparing enums of different types or using enums in arithmetic, etc. - which are good prompts to fix thinkoes and unclear code. So I&rsquo;ve been chipping away at those when I&rsquo;m near.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">In my `gtk4` branch, I continued my progress since mid-September. Our enum-to-class replacer script (to match changes in gtkmm 4) is great, but skipped some enums, redundant phrasings like `Align::ALIGN_START`, and IconSize - so I added fixes. I updated my commit fixing Controllers, cursors, etc. for GTK4. I tested my TreeModel::iterator changes against GTK4: trying to build each file in isolation, backporting what fixes I could to `master`, and keeping GTK4-specific stuff there.&nbsp;</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A big task we can only do on GTK4 (not backported to 3), is drag-and-drop. This has moved from Widget signals to mediation by EventControllers. My Controller module gains helpers to succinctly create and add DnD controllers to widgets, like for&nbsp; &lsquo;normal&rsquo; events, but plus C++20 designated initialisers to allow passing many or few argos from a large set available. I got DnD migrated and building for Objects, Filters &amp; Path FX, the latter revealing numerous cleanups doable on `master` to reduce the GTK4 diff. We&rsquo;ll have to interactively test and maybe slightly tweak once we can build it, of course! After this I fixed RefPtr casts (now shared_ptr) and Actionable API (finally in gtkmm4).</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Some DnD looked simple to migrate directly in `gtk4` branch, but that in our Dialog classes is more complex, so I decided to study and simplify it in `master` first. This showed a regression from my GdkEvent-to-EventController porting, causing a crash if moving a tab to a new window &amp; then right clicking it. And&hellip; fixing that revealed a bug that we didn&rsquo;t trigger the required &lsquo;reload&rsquo; of the items in said context menu to reflect new child tabs of the source and target notebooks. So I fixed those! I spent the rest of day working on a merge request for `master` that seems to considerably simplify the existing DnD code, while making it less tough to migrate to GTK4 (to be done another day :P)</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I noticed GTK3 had outdated documentation about how dragging tabs from GtkNotebook works for the receiving side, so I submitted a merge request to fix the documentation to match current code, so that other apps porting in future won&rsquo;t get confused. I then went back to a couple of issues I had filed to gtkmm in previous months and submitted MRs to fix them: one to add missing constructor and assignment of Gtk::TreePath from Gtk::TreeModel::const_iterator, and one to add Gtk::Widget .get_children() returning a vector of pointer-to-widget equivalent to GTK3ʼs Container.get_children() so apps iterating children via that useful method won&rsquo;t have as much work as I&rsquo;ve had&hellip; hehehehe.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">In GTK4 GtkModelButton becomes a private class so we won&rsquo;t be able to use it directly. I removed unneeded use in a dialog, and moved to use it by CSS node name (not class) in a helper function.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Then to a complex task: stopping using Gtk::IconSize::lookup() to get pixel size of a GtkIconSize enum, as GTK4 removes lookup(). We used this in several CellRenderers to show icons in tree views. With a lot of trial-and-error I was able to replace it by making these all CellRendererPixbuf subclasses, then tacking on any additional rendering (overlays, alpha-ising) via the render_vfunc(). This let me remove lots of code for requesting size &amp; padding, and caching icons - instead we now make GTK handle all that, and trust things will be nice and optimal there in GTK4! I also fixed icons not updating when theme or symbolic setting do, &amp; not being dim when backdropped or insensitive.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">An easy win for GTK4 was binning avoidable use of GtkContainer API in our Preferences Widgets, which I can only guess came about in the GTK2 era, if gtkmm didn&rsquo;t wrap something! Then a fix for icons: newly &lsquo;torn off&rsquo; dialog windows got the wrong symbolic state - thanks to Mike for mentioning, and for detailed review of my other icon and DnD MRs! Then more cleanups: avoiding more `new` for widgets, saving perf by avoiding unneeded copies in various function args, etc. I also spent time reviewing a new contributor&rsquo;s MR to make the About dialog close when Escape is pressed: thanks!</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I tackled some prep for widgets with Popovers. In GTK3 Popovers can be shown at </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">any</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> widget but in GTK4 this is limited to parents that </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">know</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> they have popover(s), as they must override size- allocate to call present() on the popover(s) to tell them what size is available. To get us more ready, I updated my popup_at*() helper functions &amp; PopoverMenu to require the popover has a :relative-to (parent) widget &amp;, instead of allowing popup at any widget, restricting to parent or a descendant. So in GTK4 we should stay able to say &lsquo;popup at Widget Y&rsquo; so long as it&rsquo;s a descendant, &amp; the helpers will handle fiddly details of figuring out the position, translating the coordinates to parent space, etc.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">More things I could resolve while on GTK3 to be ready for 4: We used Widget:is-focus property in some places, but GTK4 removes it, so luckily our uses were replaceable by :has-focus. We used ToolButtons in our IconPreview dialog, which is funny as that&rsquo;s not a ToolBar&hellip; so I &lsquo;translated&rsquo; that to plain GtkToggleButton. Ditto ModelButtons in our Display Mode popup, to RadioButtons. I found several places using GtkContainer child-properties &ndash; &amp; on investigating saw one set had no effect, one didn&rsquo;t set a value (just got a proxy), and the other was in a function never called by anyone. . . !</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A Fun Task was working around some GtkWidget vfuncs not being wrapped in gtkmm 4 (as C++ virtual functions). These are vfuncs css_changed() and focus(), both of which we use. I designed a custom subclass of Glib::ExtraClassInit to poke the C class vtable, save the original func pointers, and replace them with our own functions to dispatch to C++ virtual functions and/or the &lsquo;real&rsquo; one, depending on the return type/value. So widgets that need those vfuncs can now inherit from that and hence get access to C++ virtual functions they can override to implement required responses.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">More GTK3-able prep for GTK4 arose in our font lister/collection widgets: We had uses of TreeIters that in gtkmm4 must be const_iterator as they&rsquo;re used in callbacks that expect it, and const must be respected! We also had code dereferencing some iterators one too many times, i.e. expecting methods of TreeIter to be callable via -&gt; on the already-dereferenced-to TreeRow; in gtkmm 3 this worked as TreeRow is a subclass of TreeIter, but in gtkmm4 these are (rightly!) separate types. So I fixed that. Testing these, I noticed bugs in DnD of fonts into collections: using wrong coord space + not checking if get_path_at_pos() succeeded &amp; issuing a Critical if it failed &ndash; these are now fixed.</span></p>
<p>&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I got many more files building on GTK4 &amp; cleanups backported to `master`. Then 2 days migrating ComboBoxes with :wrap-width, removed in GTK4, to our PopoverMenu &ndash; with needed additions for UX. Then discussed menus with GTK devs &amp; raised feature requests to make them better for us. I finished with an MR to add palette previews to the Swatches dialog just like in the status bar menu.</span></p>
</description><pubDate>Fri, 20 Oct 2023 13:55:03 +0000</pubDate><guid>https://inkscape.org/*membership/blog/october-gtk4-migration-dboles/</guid></item><item><title>September - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/september-bug-accelerator-2023/</link><description><p>My name is Martin and I&#39;ve been working on bug fixes for 1.3.1. This is a small update month as I&#39;ve been working on other things.</p>
<ul>
<li>Fix pdf font name loading caused by cairo bug <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5829">!5829</a></li>
<li>A sibling issue in the cairo upstream was worked on in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4584">#4584</a></li>
<li>Fixed crash in live path effect in the tapering effect <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5830">!5830</a></li>
<li>Small issue in the man pages, synced to master in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5741">!5741</a></li>
</ul>
<p>7 hours were used from the budget this month.</p>
</description><pubDate>Sun, 01 Oct 2023 13:19:06 +0000</pubDate><guid>https://inkscape.org/*membership/blog/september-bug-accelerator-2023/</guid></item><item><title>September - GTK4 migration - dboles
</title><link>https://inkscape.org/*membership/blog/september-gtk4-migration-dboles/</link><description><p dir="ltr" id="docs-internal-guid-1c47d974-7fff-2d75-fade-9356130f6d1c" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Here&rsquo;s the report on the work I&rsquo;ve done on Inkscape in September, of course primarily focused on getting us GTK4-ready &ndash; but with a fair bit of bugfixes, cleanups &amp; optimisations into the bargain!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1st change was an overhaul of our widget to edit gradients/stops. This had very old-style size- requesting code that would be a pain to migrate to GTK4, so I rewrote it to be a Box and hence get&nbsp; &lsquo;normal&rsquo; GTK size-requesting. This let me move the request to CSS, which is simpler and means user themes will be able to change sizing. In this I resolved an existing TODO that we didn&rsquo;t show a focus rectangle around the bar. Next I realised it was a bit underwhelming that Tab keys could not change focus among stops (only in/out of widget overall), so I added code to make it happen. Nice!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I fixed a bug in the Path Effect menu, retaining items from past selections &amp; thus allowing activation of items that should be disabled. I also fixed a memory leak of widgets here. Also, we saw that if an invalid activation did somehow occur, the app could crash, which of course is always wrong! So I tracked down and fixed some bugs, so we now warn if something like that does happen, not crash.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A user on IRC channel pointed out that, since migrating GdkEvents to controllers, the ability to hold Alt and hover items in the Layers &amp; Objects dialog, to highlight on the canvas, did not work right. Alt detection was inverted due to a bug in GTK, and the ability to do this when the dialog didn&rsquo;t have the key-focus had been lost. I fixed these regressions, then noticed another: hovering without key-focus failied to instantly update if Alt state changed (only upon more motion), so I fixed that too, with the help of a new utility function to dis/connect a key handler to the root window on un/map.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">In other testing, I noticed the Export dialog had cosmetic gremlins. I added/unified margins, Title Case, and tooltips; removed a frame inside a popover; and replaced GtkButtonBox with GtkBox to be ready for GTK4. I also saw our helper to align icons with check/radio indicators in menus had a bug in a calculation &amp; so was offsetting a bit too far, so I fixed this to get everything lined up again.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Back to a main task, migrating GdkEvents to Controllers &ndash; I removed all GdkEvents in SpinButton, GradientSelector &amp; PointParam widgets; &amp; FontVariants/Selectors/FontCollectionSelector dialogs. In the latter dialog I also found and fixed some issues: deleting by key didn&rsquo;t work, adding one could cause GTK errors, and we were allocating widgets with `new` &amp; so leaking, so now Gtk::manage().</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Further GdkEvents were removed later from ComboBoxEnum, Desktop, and InkscapeWindow &ndash; the latter two being some of our main classes. Code that cannot avoid GdkEvents on GTK3 in the latter classes was rewritten in the (recently revitalised!) GTK4 branch and now seems to build OK!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I updated my PopoverMenu, which we are using to replace our more &lsquo;widget-y&rsquo; GtkMenus to get ready for GTK4. It had a regression stopping the selected item being updated on motion, and it was using GTK3&rsquo;s Widget.get_children(), which won&rsquo;t exist in GTK4, and which may anyway have been vulnerable to unspecified child order &ndash; that is replaced with our own vector to ensure predictability!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I fixed a cosmetic bugbear: we had `namespace Dialog` and `namespace Dialogs`: these are now one `namespace Dialog`. In this I found and fixed leaks, raw new/delete, unneeded dynamic alloc, double lookup in maps, and opportunities to use auto_connection. Later Tav saw a build error with C++20, which I tracked to a redundant template argument list in the ctor declaration, which C++20 starts rejecting, so I fixed that. I also did a lot to clean-up our desktop and avoid the huge gtkmm.h, which I hope will speed build time. And finally binned the deprecated, GTK4-unfriendly LPE Gallery!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The update to stop using GtkBox.pack_*() functions mentioned in a previous blog has been kindly tested extensively by PBS, who noticed several regressions for me to fix &ndash; and is now merged! Hopefully we are mostly there with that, and being merged to master means more keen eyes on it.&nbsp; Also, straggling uses of Gtk::Bin, gone in GTK4, were replaced or encapsulated to get us ahead of that for migration later, and to ease the merge from the current GTK3 master branch to GTK4 one.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">We spent more time trying to build the GTK4 branch, instead of just preparing for it in the `master` branch. This is a mix of work: stuff that can only be done on GTK4, and things it flags that aren&rsquo;t errors on GTK3 but can be improved there, to get more eyes on them and minimise Git work later.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A big task is replacing GTK3 Container.get_children(). In GTK/mm 4 this is gone, but we use it a lot. Thus, like UI::pack_*(), I made a function to do the same thing, but which we can use instead of Container.get_children(), so once building on GTK4 we only need swap the implementation, instead of having to update all callers. Plus, having a function that takes a Widget instead of a Container &ndash; let me later remove nearly all remaining dependencies on Gtk::Container in the `master` branch.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Another thing we can do here is stop using per-widget style/CSS providers, since in GTK4 that ability is removed and all styles must be added on the display/screen level only. Thankfully we only had one usage of this pattern in Inkscape, and it is fairly easy to replace while still on GTK3 so that we won&rsquo;t have to remember/worry about it later on GTK4. Handily, this makes the code shorter too!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I resumed everyone&rsquo;s favourite task: replacing Gtk:: Menu </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">et al.</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> with GTK4- ready alternatives, as GtkMenu* are gone there. A good start: several files with Menu members didn&rsquo;t use them, and one was in an old, unused DebugDialog. Then I got to used menus! Eventually, our LPE Editor, Page Properties and XML dialog were migrated to Gio::Menu/Actions. GTK could document menus far better, but I found the GTK4 doc of PopoverMenu the best &lsquo;at a glance&rsquo; source and worked it all out.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The menu for page size/template in our Document Properties was very fun, as it has 76 items&hellip; which (A) is not appealing to slowly scroll through and (B) can&rsquo;t be scrolled in Gio::Menu as GTK doesn&rsquo;t give scrolling there. I fixed it by splitting into submenus: US, ISO A-E and Others &ndash; IMO an overdue tidy-up. I also added the missing arrow and a tooltip for long page size names. I converted the Gradient Editor to our PopoverMenu as it has icons, which sadly GTK doesn&rsquo;t want us to see&hellip;</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I then took a break from Menus to fix some memory leaks reported by ASAN, which I&rsquo;d enabled on my local build to debug a different issue some weeks ago. Always worth doing to save your RAM!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Then, to my brain&rsquo;s delight, back to migrating from GtkMenu. First, another easy win: our combo- box-tool-item widget had members of a couple MenuItem types, but they evidently were a relic of a &ldquo;radio&rdquo; mode which has since been removed. The members were now unused, so I remove them. Then I tidied/renamed and fixed a bug in our function that shifts menu items with icons into place, renaming it to reflect that it also sets their tooltip, and fixing my bug that means only the 1st got set.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">On to our ContextMenu, when right-clicking the canvas. This already used Gio::Menu, so making it a Popover was easy. But GTK </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">really</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> don&rsquo;t want to ever </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">show</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> our icons in popover menus. To fix this, at least until someone wants to try to win an argument with GTK about it&hellip; I wrote a function to walk a widget tree, find non-empty Images (which luckily for us, GTK creates but leaves hidden) &ndash; and force said images visible. I updated the &lsquo;icon shift&rsquo; code to work on the modelbuttons in these Popovers too. Finally for menus (for now?) I found and binned various unused *menuitem includes.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I fixed a visual bug in our Ink/Spin/Scale, as seen in the Filter Editor, where if drawing a label over the scale (most don&rsquo;t!), we drew the &lsquo;filled&rsquo; part of the text as dim or invisible, depending on theme. I then turned to building our GTK4 branch again and, coincidentally, started with various fixes to said widgets needed to make them work there. I continued this for most remaining time, picking away at each file revealed to have build errors by `ninja -k0`, fixing these errors by updating them for GTK4. This included moving to the new Gtk::FileDialog, to replace the deprecated FileChooserDialog et al.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:8pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I then tacked a FUN change: gtkmm3&rsquo;s TreeIter was a normal class, used as both the TreeModel:: itererator and ::const_iterator classes. But in gtkmm 4, TreeIter is a template, on either TreeRow or TreeConstRow, so we can&rsquo;t just use it as-is. So I updated all uses of TreeIter to TreeModel::iterator. We won&rsquo;t be as const-correct as gtkmm4 allows since TreeView </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">et al.</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> are deprecated, so no point!</span></p>
</description><pubDate>Fri, 22 Sep 2023 15:07:06 +0000</pubDate><guid>https://inkscape.org/*membership/blog/september-gtk4-migration-dboles/</guid></item><item><title>August - Gtk4 Migration (Tavmjong)
</title><link>https://inkscape.org/*membership/blog/august-gtk4-migration-tavmjong/</link><description><p>August got off to a slow start as I was in the US with family the first part of the month. But then things picked up:</p>
<h2>StatusBar</h2>
<p>I finished the work I began in July on refactoring the StatusBar (the bottom most row in the Inkscape interface). I converted the pop-menus for the Zoom and Rotate widgets to use Gio::Menus, which is necessary for Gtk4.</p>
<h2>Events</h2>
<p>We&#39;ve moved to using our own event structure to handle events (mouse clicks, key strokes, etc.) within the Inkscape canvas (the part of the interface that shows the drawing). We were modifying the Gtk events that we received to help with manipulating object in the drawing. Gtk4 doesn&#39;t allow modifying events so instead we now create our own events. This required modifying the event handlers in each of our tools. I finished the work started by Matt Jakeman and PBS.</p>
<h2>SelectedStyle</h2>
<p>The SelectedStyle widget is the one in the lower left side of the Inkscape window that shows the current Fill and Stroke colors, the Opacity, and the Stroke width. I refactored this widget, removing several &quot;EventBoxes&quot; that are not supported by Gtk4 and whose functionality was not actually used (an EventBox allows one to wrap a normally non-interactive widget, like a label, to enable interactivity). In one case, the EventBox was being used. I moved the the middle-click pop-up menu to a different widget that does handle mouse events. It can be moved back if necessary in Gtk4 as with Gtk4 any widget can have interactivity added. (Did you know that middle mouse clicking on the &quot;O:&quot; label in Inkscape 1.3 will cycle through 0%, 50%, and 100% opacity? In the current development version, middle-clicking on the opacity value widget will do the same.) I also greatly simplified the code.</p>
<h2>Items Worked On:</h2>
<ul>
<li>Merge request reviews (keeping up with Daniel is almost a full time job in itself!).</li>
<li>Cleaned up InksviewWindow code (used by Inkview).</li>
<li>Removed unneeded dependency on the GDK cursor enumeration that disappears in Gtk4.</li>
<li>Updated the --debug-info version code to avoid using macros removed from Gtk4 and at the same time improving the information given.</li>
<li>Corrected badly formatted editor variable syntax in some files.</li>
<li>Cleaned up the &quot;builder&quot; files that describe some of the GUI structure, in preparation for updating to Gtk4.</li>
<li>Using our own functions to access widgets in builder files (will make it easier during the Gtk4 transition).</li>
<li>Fixed initialization of SPColor to avoid error messages when working with mesh gradients.</li>
</ul>
</description><pubDate>Tue, 19 Sep 2023 12:39:01 +0000</pubDate><guid>https://inkscape.org/*membership/blog/august-gtk4-migration-tavmjong/</guid></item><item><title>Customizable Appearance of Canvas Controls - Google Summer of Code 2023
</title><link>https://inkscape.org/*membership/blog/customizable-canvas-controls/</link><description><p><strong>Project Report by Sanidhya Singh (<em>sanidhyas3s</em>)</strong></p>
<ul>
<li><strong><a href="https://gitlab.com/sanidhyas3s/gsoc-inkscape-proposal">Project Proposal and Blogs,&nbsp;<code>sanidhyas3s/gsoc-inkscape-proposal</code></a></strong></li>
<li><a href="https://gitlab.com/sanidhyas3s/inkscape/-/tree/customize-handles"><strong>Working Branch of&nbsp;the Project,&nbsp;<code>sanidhyas3s/inkscape/customize-handles</code></strong></a></li>
<li><strong><a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5624">Merge Request,&nbsp;<code>!5624</code></a></strong></li>
</ul>
<p>&nbsp;</p>
<h2>The project and its motivation</h2>
<p>Interacting&nbsp;with path nodes&nbsp;is a vital part of Inkscape&#39;s&nbsp;user experience. Unfortunately, node handles or canvas controls were not so perfect, not providing any direct customization with most of their styling hard-coded. As a result,&nbsp;their design hadn&#39;t evolved over time, leading to extensive UX discussions calling for changes to their default style, see <code><a href="https://gitlab.com/inkscape/ux/-/issues/115">UX#115</a></code>.&nbsp;However, with no unanimous agreement on a single style definition among designers, the ability to easily change the style seemed required. This project aims to address these challenges by providing users, including our designers, with a unified file for customizing on-canvas controls, ensuring consistency yet allowing specific modifications.</p>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/demonstration_5F9koxF.webp" target="_blank"><img alt="Screen-capture showing the new handles implemented through this Project." src="/media.inkscape.org/media/news/uploads/demonstration_5F9koxF.webp" style="width:100%" /> </a>
<figcaption>The proposed default styling of node handles implemented through this project.</figcaption>
</figure>
<p>With this project, customizing handle styles is now possible through <code>share/ui/node-handles.css</code> or the corresponding user config file (e.g., <code>.config/inkscape/ui/node-handles.css</code> for Ubuntu). This simplifies the implementation of new defaults, such as <code><a href="https://gitlab.com/inkscape/ux/-/issues/181">UX#181</a></code>, without requiring designers to navigate through the code to locate various handles.&nbsp;Recognizing that our user base mainly comprises designers with distinct preferences and needs, providing them with the ability to modify canvas elements aligns with their expectations.&nbsp;Users can now modify the shapes of various handles, adjust stroke-width,&nbsp;fill and stroke colors, and tweak their opacities using this CSS. A detailed guide for the stylesheet&nbsp;and a&nbsp;sample in the form of the proposed defaults can be found at&nbsp;<code>share/ui/node-handles.css</code>.&nbsp;</p>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/CSS_Code_Snippet_1G79HEh.webp" target="_blank"><img alt="A snippet from node-handles.css, defining the new default handle style." src="/media.inkscape.org/media/news/uploads/CSS_Code_Snippet_1G79HEh.webp" style="width:100%" /> </a>
<figcaption>A snippet of <strong><code>node-handles.css</code></strong>, defining the above illustrated default handle style.</figcaption>
</figure>
<p>In addition to these functional enhancements, this project introduces two key features:</p>
<ul>
<li>
<p>Outlines, handles can now include an outline surrounding their shapes, enhancing visibility, and addressing requests from <code><a href="https://gitlab.com/inkscape/ux/-/issues/181">UX#181</a></code>&nbsp;and <code><a href="https://gitlab.com/inkscape/ux/-/issues/115">UX#115</a></code>.&nbsp;This outline is also customizable with its colors, thickness and opacity.</p>
</li>
<li>
<p>Normal rendering mode,&nbsp;the XOR rendering mode, which was unanimously disliked by everyone and caused various issues (e.g., <code><a href="https://gitlab.com/inkscape/inkscape/-/issues/929">#929</a></code>), has been replaced. Handles are now rendered simply on top of one another based on their opacity, which hopefully solves most of these issues.</p>
</li>
</ul>
<p>In addition to the core functional tasks, I also undertook an effort to improve the overall code quality. This included enhancing code readability, eliminating unused portions such as bitmap handles, and conducting a thorough cleanup of the <code>_render</code> function. The result was a substantial reduction in dead or unnecessary code, evident in the fact that the count of removed lines nearly matched the count of added lines in the project&#39;s Merge Request. Minor performance improvements were achieved by eliminating the redundant construction of the same handle multiple times, by implementing a two-level caching system between the handles (discussed under <em>Rendering and caching</em> in the next section).</p>
<p>&nbsp;</p>
<h2>Code structure and implementation details</h2>
<p>The majority of the code I authored resides in <code>canvas-item-ctrl.h</code> and <code>canvas-item-ctrl.cpp</code>, containing most of the functions discussed below. The entirety&nbsp;of the changes are spread across a total of 40 different files.&nbsp;</p>
<h3>Classes and structs</h3>
<p>The primary class I worked with is <code>CanvasItemCtrl</code>, complemented by three new structs created to support this project. The first of these is a template struct called <code>Property</code>, designed to store and set properties. The second, <code>HandleStyle</code>, brings these properties together and contains functions for extracting RGBA color values from RGB colors and their overlapping opacity for fill, stroke, and outlines. The third structure, <code>Handle</code>, is intended to be linked with each instance of <code>CanvasItemCtrl</code> through a member named <code>_handle</code>. This struct combines handle type and state (selected, hover, click, and their combinations). The state and type settings of the <code>_handle</code> member within the controls replace the earlier hard-coded style settings, as the <code>_handle</code> now completely defines the control&#39;s appearance.</p>
<h3>Parsing the stylesheet</h3>
<p>The parsing of CSS is primarily done through Libcroco, with specific requirements addressed through custom code layered on top of Libcroco functionality. CSS files are parsed using a series of functions: <code>set_selectors()</code>, <code>set_properties()</code>, and <code>clear_selectors()</code>. <code>set_selectors()</code> assigns the selector using a helper function called <code>configure_selector()</code>, based on the selector&#39;s type and pseudo classes. These selectors, represented as <code>Handle</code> instances, are then checked against all handles, and those matching the selector&#39;s definition are added to a vector of selected handles. This vector is then iterated over during <code>set_properties()</code>, and the selector&#39;s specificity is used to set the property. Selectors with higher specificity override those with lesser specificity. <code>clear_selectors()&nbsp;</code>then simply clears this vector. This parsing occurs when <code>_render</code> is first called during an Inkscape launch, triggered by the initial drawing of a handle on the canvas.</p>
<h3>Rendering and caching</h3>
<p>After parsing, styles are defined for every possible type and state configuration. When a handle needs to be drawn, it utilizes these style descriptions from the corresponding <code>HandleStyle</code> instance to construct the handle using <code>draw_shape()</code>. The pointer to the rendered shape is then saved in a common cache shared among all handles (<code>handle_cache</code>), preventing redundant rendering of the same shape, and effectively creating a two-level cache. Whenever a handle needs to be rendered and its cache (<code>_cache</code>)&nbsp;requires reconstruction, it first checks whether the handle corresponding to <code>_handle</code> exists in the shared cache. If&nbsp;not found, the system proceeds to render the shape using <code>draw_shape()</code> and subsequently stores it in the shared cache.</p>
<p>The <code>draw_shape()</code> function is mostly borrowed from the earlier <code>build_cache()</code> function, with the addition of variable stroke width and the introduction of outlines for all shapes. Some shapes are rendered pixel by pixel onto a flattened array, while others are initially drawn using Cairo and then copied to the array. Both approaches required different implementations for outlines. The former involved adding conditions according to the shape for outlines in addition to stroke and fill, while for the latter I used Cairo to mask the outside of handles and draw the outline with an adjusted width. Notably, all shapes are drawn entirely within their width, with the outline extending beyond the normal shape (but still within the width), and the stroke overlaying the fill within the normal shape. The ability to set and render styles in a hard-coded manner still exists and is employed by the guideline handles, which differ substantially from traditional handles and are already customizable through the UI.</p>
<p>The <code>_render</code> function simply positions the drawn handle on the canvas based on opacity, operating in the normal mode, <code>CANVAS_ITEM_CTRL_MODE_NORMAL</code>. Although older XOR modes remain in the code, they are no longer utilized.</p>
<h3>Integrating different tools</h3>
<p>The final step involved replacing the existing method of handling handle styling with the new approach of state and type-setting, leaving all styling to the CSS. This included modifying dozens of files wherever instances of&nbsp;<code>CanvasItemCtrl</code> was utilized. This was one of the most time-consuming aspects of the project, as discussed in the following section. However, the majority of the changes involved replacing occurrences of <code>set_shape()</code>,&nbsp;<code>set_fill()</code>, <code>set_stroke()</code> with <code>set_selected()</code>, <code>set_hover()</code>, <code>set_type()</code>, and so forth. This covered all the different tools like gradient, mesh (which required a new type to be declared for it), pages tool, LPEs adjusting in accordance to the specific needs for each.</p>
<p>&nbsp;</p>
<h2>Challenges faced during the project</h2>
<p>What I really appreciated about this project was the variety of hurdles it threw my way. Ranging from spending weeks trying to figure out how to use Libcroco properly, to plotting 20-30 lines on a calculator to figure out the equations needed for drawing a perfect &#39;&times;&#39; onto the canvas, it had a bit of everything. I&nbsp;actually enjoyed facing these challenges, as they provided me the opportunity to put my skills and knowledge to the test.</p>
<p>The most problematic thing in the earlier half of the project was working with Libcroco.&nbsp;Being written in C and not maintained for a long time now, I had only about&nbsp;a couple of code examples to&nbsp;decipher how to fit it for my project&#39;s unique requirements,&nbsp;to parse a CSS file (with custom pseudo selectors and custom classes) and set the properties for the handles according to a precedence which was again mostly designed specifically for this project. Often, I found myself digging through the library&#39;s source code, which was mostly uncommented and undocumented, searching for anything that could help me. Eventually, it worked out, and once it did, it didn&#39;t give me many issues afterward; it operated smoothly as expected for the most part.</p>
<p>As the project neared its end, my biggest task was handling the parts of the code that my project affected. Understanding what certain functions and handles did and integrating the new methods to deal with them was the main challenge. Sometimes, I had to create entirely new approaches to make certain handles work correctly. The uncertainty of whether my changes were the right ones and how they&#39;d affect other parts of the project slowed me down. I often reached out for help in our chat to make sure I was on the right track and just waited for an assurance. It was a bit tedious, but the community&#39;s input was invaluable in getting things done correctly and efficiently.</p>
<figure class="plugin_picture" style="display: block; margin: 2em auto; width:80%; max-width:600px;"><a href="/media.inkscape.org/media/news/uploads/desmos-graph_1AtK2Hx.webp" target="_blank"><img alt="A screenshot from Desmos with line equations for drawing an X." src="/media.inkscape.org/media/news/uploads/desmos-graph_1AtK2Hx.webp" style="width:100%" /> </a>
<figcaption>Experimenting with line equations to achieve the desired cross shape with outlines.</figcaption>
</figure>
<p>There were some smaller challenges along the way, like ensuring synchronization to access shared variables between threads running simultaneously,&nbsp;handling memory efficiently, and&nbsp;other tasks like figuring out how color transparency overlap works and&nbsp;drawing shapes with their outlines using Cairo or manually&nbsp;pixel by pixel based on their styling description. These challenges, while sometimes frustrating, allowed me to put what I&#39;d learned into practice, and I&#39;m glad I was able to overcome them. Of course, there were numerous other challenges I faced throughout this journey, beyond what I can recall at the moment.</p>
<p>&nbsp;</p>
<h2>Future plans and possibilities</h2>
<p>Though I find the project completed from my end, there are a few remaining tasks to address. This includes resolving any conflicts that might arise with the <code><tt>master</tt>&nbsp;</code>branch and addressing anything that could potentially block the merging process. I&#39;m also committed to fixing any bugs that may emerge during testing or making adjustments if there are specific expectations that differ from the current implementation. It&#39;s crucial that everyone is on the same page when it comes to something as directly visible to the user as this. We can progressively introduce additional shapes to offer users a broader range of options, addressing specific needs as they arise. Also, would like to take this opportunity to invite feedback and reviews of the features and their proper functioning.&nbsp;So if you find any issues or anything that should&#39;ve been done differently, please reach out through&nbsp;Inkscape Chat or elsewhere.</p>
<p>Looking beyond this project, since much of the framework is already in place, we can extend the same system of setting UI element styles through CSS to other elements on the canvas if it proves relevant. This could include elements like guides and page borders but again most of it is subject to actually being needed. Also, this can be extended&nbsp;to implement theming capabilities including canvas controls.</p>
<p>In terms of my personal plans, I&#39;m dedicated to maintaining the code I&#39;ve written and keeping it up-to-date to meet any changing requirements. Moreover, having explored a substantial portion of the codebase, I&#39;d look out to address&nbsp;any issues that pertain to the specific parts&nbsp;of the codebase that I&#39;ve worked on throughout this project. I&#39;m also open to contributing to other repositories where I can apply the knowledge and skills I&#39;ve gained. In short, I remain committed to actively contributing to Inkscape through code or otherwise.</p>
<hr />
<p>A special thanks to my mentor, Marc and all the community members&nbsp;(Rafał, Mike, Tav, PBS, Adam, Daniel, Jabier and literally everyone else)&nbsp;who helped me throughout the project, eventually making it successful.</p>
<p>Thanks for reading!</p>
<p>&nbsp;</p>
</description><pubDate>Thu, 07 Sep 2023 12:00:00 +0000</pubDate><guid>https://inkscape.org/*membership/blog/customizable-canvas-controls/</guid></item><item><title>August - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/august-bug-accelerator-2023/</link><description><p>My name is Martin and I&#39;ve been working on bug fixes for 1.3.1. This latest work will fix issues that crop up between now and the next point release and will hopefully make Inkscape more stable and have fewer regressions.</p>
<p>Many crash fixes went into this month&#39;s Bug Accelerator program. Some regarding Live Path Effects, others with general stability as issues have been reported. Bigger fixes in the PDF Font handling, margins and command line uses are also here:</p>
<ul>
<li>Fix bad bleed and margin issues <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5620">!5620</a></li>
<li>Deleting while cropping caused a crash which is now fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5615">!5615</a></li>
<li>macOS has a tofu problem, which is fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5625">!5625</a> thanks to the users that helped test</li>
<li>Invisible selection markers are now fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5637">!5637</a></li>
<li>Grid scaling issues when resizing are fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/4514">!4514</a></li>
<li>Crashes when creating taper strokes are fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5641">!5641</a></li>
<li>Bad escaping of Line Feeds in plain SVG output fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5663">!5663</a></li>
<li>Crashing when editing the page size and label fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5678">!5678</a></li>
<li>Four issues fixed in one, loading and detecting font names in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5676">!5676</a></li>
<li>Deleting nodes in live path effects fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5713">!5713</a></li>
<li>Overwriting filenames using the command line fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5710">!5710</a></li>
<li>Live path effect causing crash fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5729">!5729</a></li>
<li>Incorrect use of SPStyle caused gradients to disappear but fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5727">!5727</a></li>
<li>Highlight colour issues fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5730">!5730</a></li>
<li>Command line use of pages options documented correctly in for bug <a href="https://gitlab.com/inkscape/inkscape/-/issues/4536">#4536</a></li>
</ul>
<p>42.5 hours were used from the budget this month.</p>
</description><pubDate>Fri, 01 Sep 2023 16:53:04 +0000</pubDate><guid>https://inkscape.org/*membership/blog/august-bug-accelerator-2023/</guid></item><item><title>August - GTK4 migration - dboles
</title><link>https://inkscape.org/*membership/blog/august-gtk4-migration-dboles/</link><description><p dir="ltr" id="docs-internal-guid-355c1f5d-7fff-d53c-fa4b-17712b99ef2a" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A new month brings a new pile of great progress to make Inkscape ready for GTK4! And also a very useful selection of fixes, refactors or &#39;nice-to-haves&#39; found along the way. In all, I&rsquo;m just shy of 100 committed merge requests now, and I think that&rsquo;s a great excuse to have a long weekend and not think about Git, widgets, etc&hellip;</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I started by removing all use of GtkContainer:border-width, since Container is gone in GTK4. The border-width property can be replaced with Widget:margin in most cases, except when it was set on a top-level widget like a Window or Popover, where it must be moved to the child. In this, I noticed various places redundantly setting margin/ spacing to 0 (default) or other properties to default values, so I removed those for tidiness and speed.</span></p>
<p><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Continuing to be a primary task was migrating away from GdkEvent to GtkEventControllers, and many more widgets/dialogs have had this completed this month. I also updated PBS&#39;s work on the canvas to use our Controller helpers to get more concise code. Things ported away from events include the XML/Attributes dialog, Style dialog, FontSelectorToolbar, Preferences, TextEditor, and various uses of Widget::focus-*-event.</span></p>
<hr />
<p><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I took breaks to help fix bugs! Moving between tools in the left-hand toolbar required 2 presses of Tab, when it should&#39;ve been 1: fixed! An oversight in our extension ParameterColor which sometimes crashed the app: fixed</span></p>
<p><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I spent time fixing a regression whereby the color-palette only shows 1 row initially, despite having space for 2, but in the end it was somewhat-inadvertently fixed by Mike&rsquo;s rework of the Swatches dialog. Ah well, still fixed!</span></p>
<p><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I also noticed missing escaping of HTML entities in Preferences shortuts: fixed!</span></p>
<p><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">And on the XML/AttrDialog I noticed the code to react to the +/Ins/Del keys was not working, so&hellip; now it is!</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A big task was developing helper functions to remove most pain of porting code from Box.pack_start|end(), removed in GTK4. My new functions replicate 99% of those child/packing properties in a GTK4-proof way, by moving properties to the child widgets. Then a few manual tweaks to fix an expected small level of slight changes, as the GTK3&rarr;4 migration guide warns to anticipate. We will then be able to lift-and-shift existing code to call our versions of pack_*() instead of Box.pack_*() and should thus be able to keep the code diff to a minimum and preserve layouts. PBS has kindly started testing this and helping find small issues that I can fix!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Porting our Glade/ui files will be more work&hellip; but we&#39;ve made a start: gtk-builder-tool can simplify files, so Tav has run that on our UI files while still on GTK3, so we&rsquo;ll have less stuff to migrate, as well as no unnecessary property lines reapplying default values, which saves CPU time parsing the XML and setting those. Very nice!</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Along the way, I found some issues with missing or suboptimal spacing in the main window and within some prominent dialogs, so I&#39;ve been submitting patches to help make such areas look nicer. The Filter Editor dialog has some fixes to popover style. I also spent some time reorganising the UI file of our startup dialog, including fixing glitching bottom corners on our images when switching tabs/pages, and simplifying the widget layout.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Also receiving a good deal of attention was our SpinButtonToolItem, which I noticed retained a visual text selection on focus-out, which of course does not look great. I fixed that by clearing the selection on focus-out, migrated the widget from GdkEvents to Controllers, migrated from GtkMenu to our PopoverMenu&hellip; and removed support of the GtkToolbar proxy menu item, seeing as GTK4 removes the GtkToolbar and another dev has an MR to migrate away from ToolBars, which includes removing the fairly un-useful proxy item ability.</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Another significant continuing task is moving from GtkMenu to Gio::Menu or our snazzy PopoverMenu. First getting the treatment this month was our filter editor, &amp; here I also fixed a regression where the &#39;tails&#39; of our popovers were drawn wrong, and an older gremlin that the text in the info popup had an odd darker background.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ditto our SelectedStyle widgets: I tidied up the code for making GtkMenus, moved to PopoverMenus, &amp; added headings to let the opacity menu explain itself! Our Document Properties dialog moved to PopoverMenus too.</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">On to porting away from GdkEvents in our Command Palette, I found that it first needed some fixes: the Escape key didn&#39;t close via history, editing was not fully disabled there, some strings were not translateable, we had widgets that did nothing, and we didn&#39;t properly scroll to end of history 1st try. Phew!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Then removing events was very challenging, I suspect due to bodges for GTK3 that will go away on GTK4. Thankfully, many key events could be moved higher in abstraction: Enter/Return were replaced with Entry::activate, and arrows with Widget::focus, meaning fewer key events to convert and we neednʼt test all such keys (Enter/Return, main/KP&hellip;). </span><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Left over was closing when pressing Esc, which ideally could be done by using a GtkPopover&hellip; but for now, after trying many, *many* permutations, I found putting the handler on the top Window worked for events &ndash; and then controllers, finally!</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I&#39;ve also spent some time trying to optimise code in the Command Palette, in the hope of reducing down the time it takes to open the 1st time. Another place that has seen significant optimisation attempts is the Style dialog&#39;s string parsing.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">And later, our ColorWheels: I found that we were reallocating &amp; repopulating the HSL wheel&#39;s gradient buffers &amp; surfaces on every draw signal&hellip;! So that explained why it was sometimes very slow to redraw &amp; thrashed my CPU while moving by keys!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">That is now fixed, &amp; into the bargain I fixed Up/Down keys not working in HSLuv.</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Another item I worked on was avoiding use in our InkRuler of GtkStyleContext API that is removed in GTK4. Thankfully, there were quite easy ways around this, and the result is not only GTK4-ready but also cleaner and easier-to-grasp code! \o/</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The same is true for our color wheels, which used style props and render_focus() &ndash; neither of which are in GTK4; however, we can easily avoid them now. I also took the opportunity to improve the focus shape in &#39;ring edit&#39; &amp; dash on markers too.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I continued and stripped StyleContext API that has been removed or deprecated in GTK4 from other widgets. This was also a great way to spot various gnarly old code that could be improved.</span></p>
<hr />
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lastly, in spare moments between frantically spinning plates around the Inkscape codebase, I found some time to contribute upstream to GTK and gtkmm too.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I have submitted MRs to make the GtkPopoverMenu &#39;nested submenus&#39; functionality usable from UI files and to add some, if brief, documentation of how its CSS nodes are.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:10pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I also submitted an MR to `gtkmm` to make its SignalListItemFactory usable with the new section ListHeaders from GTK 4.12, by adding suitable signal overloads. Both of these MRs have now been merged!</span> \o/</p>
</description><pubDate>Fri, 25 Aug 2023 14:42:14 +0000</pubDate><guid>https://inkscape.org/*membership/blog/august-gtk4-migration-dboles/</guid></item><item><title>July - Gtk4 Migration (Tavmjong)
</title><link>https://inkscape.org/*membership/blog/july-gtk4-migration-tavmjong/</link><description><h2>Toolbar Refactoring</h2>
<p>I started the month working on refactoring toolbar code. Toolbars are the long, narrow widgets that contain buttons or other widgets. Gtk3 has special widget classes for toolbars. These special widgets are removed in Gtk4. They were mostly used to auto-generate drop-down menus when a window was shrunk too small to display the entire toolbar. These drop-down menus were often quite useless (and not <span jsslot=""><span data-dobid="hdw">particularly</span></span> discoverable).</p>
<p>There are four toolbars in Inkscape:</p>
<ul>
<li>The Command toolbar, usually located at the top on narrow screens or the right on wide screens (it the user hasn&#39;t set a preference). This toolbar contains buttons for things like creating a new file or cutting and pasting.</li>
<li>The Tool selector toolbar, on the left, which contains toggle buttons to switch between tools. This was refactored recently to allow the user to customize this toolbar and to allow it to be more than one button wide.</li>
<li>The Snap toolbar, in the upper right corner or along the right side. This toolbar was recently rewritten to be contained in a popup. Even more recently, an option was added to allow the user to restore a normal snap toolbar to its original position on the right of the window.</li>
<li>The Tool options toolbar, near the top of the window. This toolbar is actually many toolbars; which toolbar is shown depends on the which tool is active. These toolbars are being rewritten by a Google Summer of Code student to be more useful when the Inkscape window is narrow (and not to use the Gtk::Toolbar class that isn&#39;t available in Gtk4).</li>
</ul>
<p>So it seems that all the toolbars have received or are receiving a lot of recent love, so what did I do? A lot of refactoring! There was a lot of ancient code sitting around that needed cleanup. Some toolbars were still using the removed Gtk classes. At one time all these toolbars shared common code and could be removed around the window or even &quot;torn off&quot;, but as each toolbar was refactored, this shared code wasn&#39;t applicable any more or was more complicated than necessary. Each of these toolbars were moved from a shared &quot;class&quot; in one file to individual classes and files.</p>
<h2>Input Dialog</h2>
<p>Another project was removing the Input dialog and related code. This code needed to be modified due to changes in the Gtk API. In the Gtk2 era, one had to use the Input dialog to enable use of Wacom tablets. In the Gtk3 era, Wacom tablets worked out of the box. It took some time to understand the code (overly complicated and poorly documented) well enough to be confident it wasn&#39;t actually useful anymore. There was also a hidden hardware tab in the dialog, only enabled through hand-editing the Inkscape preference file. This tab was also not particularily useful (and partially broken because nobody ever used it). In the Gtk4 era, we will probably create a new Input dialog to allow users to link shortcuts to various tablet buttons or sliders, something Gtk4 offers.</p>
<h2>Vacation</h2>
<p>I was in the US with family at the end of the month and the beginning of August and I spent what little time I had free mostly monitoring and reviewing code written by others.</p>
<h2>Items Worked On:</h2>
<ul>
<li>Toolbar refactoring.</li>
<li>Input dialog study and removal.</li>
<li>Removing SPViewWidget and View::View.</li>
<li>Removing garbage collection of SPDesktop.</li>
<li>Removing Gtk::EventBox from the command palette, and other cleanup.</li>
<li>Creating a StatusBar widget and moving code from the DesktopWidget to it.</li>
<li>Misc. code cleanup.</li>
<li>Review/testing other merge requests.</li>
</ul>
</description><pubDate>Tue, 15 Aug 2023 14:16:13 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-gtk4-migration-tavmjong/</guid></item><item><title>July - AI Extension 2023
</title><link>https://inkscape.org/*membership/blog/july-ai-extension-2023/</link><description><p>To allow the import of Adobe Illustrator files into Inkscape, we are developing a Python extension. This post outlines the progress in the 4th month of the project, June 2023. Work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>. To read more about the progress in May, <a href="https://inkscape.org/*membership/blog/june-ai-extension-2023/">read the last blog post</a>.</p>
<hr />
<p>Nicco made a short <a href="https://diode.zone/w/m24AaAaPYdBLatfcvyaQ9n">video about the rectangles</a>.</p>
<p>Below, you can find a list of what Nicco has worked on in July 2023:</p>
<ul>
<li><strong>Tidy up</strong>: Some project files were no longer in use. At the start of the project, we used <em>pyparsing</em> to build the grammar. Now, we use our own, specialized parser. Old project files have been removed.</li>
<li>Migration to a different <strong>conversion architecture</strong>, with pictures, see <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/84">MR !84</a>. Now, the conversion of different elements can be split up into different files. AI2SVG element conversions can be tested independently and combined.</li>
<li><strong>Rectangles</strong> - <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/77">MR 77</a> has been merged. The <a href="https://diode.zone/w/m24AaAaPYdBLatfcvyaQ9n">video</a> is about this.</li>
<li><strong>Essential functions</strong> to use the Python package are now exposed when importing <em>inkai</em>: Extraction, parsing and SVG conversion.</li>
<li><strong>Gradients</strong> are now fully parsed. SVG conversion is still to do.</li>
</ul>
</description><pubDate>Wed, 09 Aug 2023 11:04:55 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-ai-extension-2023/</guid></item><item><title>July - GTK4 migration
</title><link>https://inkscape.org/*membership/blog/july-gtk4-migration-dboles/</link><description><p dir="ltr" id="docs-internal-guid-f99202ea-7fff-5d8b-4265-d159e4f942b6" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Hello! I&#39;ve joined working with Tav on migrating Inkscape from GTK/mm version 3 to version 4. See his blog about this work here: https://inkscape.org/*membership/blog/june-gtk4-migration/</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">With good experience of developing with and contributing to GTK and gtkmm, I&#39;m here mostly to do work and advise on topics relating more closely to those, whereas of course Tav is a long-standing expert in Inkscape itself and its codebase. Between us, I hope, we&#39;ll knock this task out of the park!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I started by wrangling the codebase: cloning, building, and making it work on my Mildly Venerable laptop from 2012. It was pleasantly easy, thanks to our wiki and scripts! I immediately saw some warnings re old properties from GTK2 in our startup UI and submitted a MR - first impressions are important! :-) Then I resumed Tav&#39;s work of trying to build on GTK4: piling up small migration fixes in another branch to later become our GTK4, and backporting anything I can to the master branch.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A main task was porting existing widgets (aside from those covered by PBS in his canvas work) from GdkEvents to EventControllers/Gestures. This involved creating clever helpers to make creating/adding and connecting a Controller to a Widget look more succinct and pleasant than GTK allows natively, saving us going from tidy 1-liners to piles of spaghetti. I also added a manage() helper, which ties the life of a RefPtr-held Object to a &#39;manager&#39; object, so we can add Controllers to Widgets (or Bindings to Objects) without having to hold a RefPtr to keep them alive. That is how GTK4 manages such objects, so we&#39;ll be ready: we will just remove the then-unnecessary helper!</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Converting from events to controllers varies wildly from &#39;nice and easy&#39; to &#39;oh no, why, why are you like this, how do I make these disparate combinations of inputs coexist??&#39; ...but in any case, it leads to more modern code, and our helpers make it all easier to understand. Also it often pointed me in the direction of many other things we could do to cleanup or optimise code alongside porting.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Another main task this month was reducing reliance on GtkMenu </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">et al.</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, which GTK4 removes in favour of GtkPopover, GMenuModel, etc. To this end, I have our column menu builder, as used in the notebook, filter-effects, and LPE &ndash; migrated to a snazzy new Inkscape PopoverMenu that emulates the old GtkMenu. So is the toolbar context menu, which also got cleanups and speedups.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">One thing I noted when trying to build on GTK4, and have backported to GTK3/master, is how we detect whether you are running a dark theme. We have been using GtkStyleContext, asking for the BG colour, and checking its luminance. Great, but&hellip; StyleContext is now deprecated in GTK4, so if we can reduce its use in GTK3, that&#39;s a win. Hence, I rewrote that to use the foreground colour instead, which GTK4 makes available via Widget.get_color(), which will make migrating that trivial.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I built on this by removing reliance on StyleContext API that GTK4 outright removes, specifically that we used to get BG and border colours from themes. You can&#39;t do this anymore in GTK4, only get the foreground colour - so with a bit of magicianship in our CSS to &#39;pass&#39; the needed colours as-if they&#39;re FG colours, we now have GTK4-proof code for getting those colours into our code. This was also a great occasion to tidy up the code getting colors &amp; checking for dark themes.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">I also worked to upstream some features from Inkscape. This included successfully submitting a &quot;scoped connection&quot; to libsigc++, to auto-disconnect when destroyed. We currently &lsquo;reinvent&rsquo; this as `auto_connection`. By upstreaming, we can use that and remove our copy later. My upstream MR added plenty tests to ensure the new scoped connection works right, which let me fix some bugs in ours too. I also earlier enabled our auto_connection to be movable and work in containers.</span></p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;">&nbsp;</p>
<p dir="ltr" style="line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Overall a very productive month, lots of essential work to make us GTK4-ready and various fixes and improvements along the way. August is shaping up to be just as good, so see you later at the next report!</span></p>
</description><pubDate>Sat, 05 Aug 2023 12:04:59 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-gtk4-migration-dboles/</guid></item><item><title>July - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/july-bug-accelerator-2023/</link><description><p>The release is complete and we now have a new contract to fix bugs for Inkscape. My name is Martin and I&#39;ll be working on bug fixes for 1.3.1. This latest work will fix issues that crop up between now and the next point release and will hopefully make Inkscape more stable and have fewer regressions.</p>
<p>This month is a very short month, the contract was renewed part way through the month and family emergencies didn&#39;t give me the time to focus on bug fixes. But there are some things fixes:</p>
<ul>
<li>Fix clipping mask icons which didn&#39;t work if you had both clipping and masking set at the same time <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5511">!5511</a></li>
<li>Fix viewports on markers which stripped away important information and broke their visibility in web browsers <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5513">!5513</a></li>
<li>Tidy and remove duplicate pattern <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5514">!5514</a></li>
<li>Fix crash in PDF input when page labels are in UTF16 <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5589">!5589</a></li>
<li>Refactor contributor and sponsor documentation for the release <a href="https://gitlab.com/inkscape/inkscape/-/issues/2913#note_1494461838">#2913</a> I also fixed one of the graphics and kicked off a discussion in the testing team to fix those linked pages too.</li>
</ul>
<p>9 hours were used from the budget this month.</p>
</description><pubDate>Tue, 01 Aug 2023 18:42:06 +0000</pubDate><guid>https://inkscape.org/*membership/blog/july-bug-accelerator-2023/</guid></item><item><title>June - AI Extension 2023
</title><link>https://inkscape.org/*membership/blog/june-ai-extension-2023/</link><description><p>To allow the import of Adobe Illustrator files into Inkscape, we are developing a Python extension. This post outlines the progress in the 4th month of the project, June 2023. Work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>. To read more about the progress in May, <a href="https://inkscape.org/*membership/blog/may-ai-extension-2023/">read the last blog post</a>.</p>
<hr />
<p>Nicco made a short <a href="https://diode.zone/w/2mCJZJtow9m6esqJH8U1Ay">video on raster graphics</a>.</p>
<p>Below, you can find a list of what Nicco has worked on in June 2023:</p>
<ul>
<li><strong>Live Shape Styles</strong> - Adobe Illustrator has changed how styling is specified. The new way is to specify all style in the setup of the document and reuse them for different elements. Jonathan and Nicco had a pair-programming session parsing the content.</li>
<li><strong>Irregular Corners of Rectangles</strong> in Adobe Illustrator can be converted to Path Effects in Inkscape. Rectangles are one of the live shapes. The <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/77">MR 77</a> is still open at the time of writing.</li>
<li><strong>Raster Image Graphics</strong> - Nicco did the parsing and Jonathan the SVG conversion of the data. The&nbsp;<a href="https://diode.zone/w/2mCJZJtow9m6esqJH8U1Ay">video</a> shows how a graphic is opened.</li>
<li><strong>Gradient Colors &amp; Stops</strong> - the definitions are parsed in the header. Still, we need to parse their use and convert them to SVG.</li>
<li>A new <strong>SVG conversion architecture</strong> has been started, see <a href="https://gitlab.com/inkscape/extras/extension-ai/-/merge_requests/84">MR 84</a> (not merged at the time of writing). The new one has a state machine traking the state of the AI structure while it is parsed. This way, elements can change how they display in the SVG so according to their context in the AI data structure. Example: <em>u</em> starts a group like <em>&lt;g&gt;</em> but also starts a section in a compound path. For diagrams, see the merge request.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
</description><pubDate>Mon, 10 Jul 2023 14:18:51 +0000</pubDate><guid>https://inkscape.org/*membership/blog/june-ai-extension-2023/</guid></item><item><title>June - GTK4 Migration
</title><link>https://inkscape.org/*membership/blog/june-gtk4-migration/</link><description><p>We&#39;re transitioning from Gtk3 to Gtk4. What is Gtk? It&#39;s a toolkit! Or more practically it&#39;s the buttons, menus, and other &quot;widgets&quot; used to create Inkscape&#39;s Graphical User Interface (GUI for short). It also handles mouse and keyboard events. It&#39;s an important part of Inkscape.</p>
<p>Why switch? Gtk4 is the future! It offers improved ways of doing common things. While Gtk3 is not abandoned, it is now in &quot;maintenance&quot; mode and won&#39;t be receiving much love.</p>
<p>Why switch now? The most compelling reason is that Gtk4 has the promise of being more performant, especially on MacOSX. There are other, &quot;under-the-hood&quot; benefits too.</p>
<p>Switching from Gtk3 to Gtk4 is a big thing, literally, thousands of lines of code will need to be changed. We expect it to take months to make the basic changes needed to just compile the code using the Gtk4 libraries. And then some time to fix the inevitable regressions.</p>
<p>I&#39;ve been working the past month on the transition under a contract funded by your donations. We&#39;ve also contracted Daniel Boles, a Gtk expert, to help. He&#39;ll be staring work this month.</p>
<p>So what have I been doing? The past month I&#39;ve focused on things that can be done before we create a Gtk4 code branch, that is things that can be done while still using Gtk3. Here are a few of the things I worked on (most of the work is very technical, I&#39;ll list everything at the end):</p>
<h2>Gtk::ButtonBox</h2>
<p>Gtk::ButtonBox, like the name hints, is a container for buttons. It&#39;s basically a Gtk::Box that has the added feature that all the &quot;buttons&quot; it contains are constrained to have the same width. This widget has been removed from Gtk4. The recommended replacement is to just use a Gtk::Box.</p>
<p>This project got off to a fast start. A number of places where we used Gtk::ButtonBox didn&#39;t need its special properties. For example, if the buttons were created using icons, they were automatically the same width. Things got a little more complicated if the buttons contained text. The Gtk::Box widget has a property called &quot;homogeneous&quot;, setting this true forces all the widgets contained by the box to have the same width. This handled most of the remaining cases. But there were a couple of &quot;stubborn&quot; cases. If the box had a button on the far left and a button on the far right, setting &quot;homogeneous&quot; to true caused each button to take up a third of the width of the box which was way too wide. Why? Because the Gtk3 box actually has three places you can attach widgets: at the start of the box (usually the left edge), at the end of the box (usually the right edge), and with one place for a widget in the center of the box). Even if there was not widget in the center position, the box calculates the widths as if there was one there. The solution is to not set the &quot;homogeneous&quot; property true but to use a Gtk::SizeGroup to explicitly tell Gtk that these widgets should be the same width. There was also the some monkeying around with properties to get everything to work as anyone who has worked with CSS should be familiar with.</p>
<h2>Color Management for Monitors</h2>
<p>Inkscape had code that tried to automatically apply monitor color corrections depending on which monitor an Inkscape window was being viewed on (in a multi-monitor setup). This code was very complicate and poorly documented. It relied on things removed from Gtk4 so a refactoring was necessary. It took quite a while and many tests to show that this code, which could have only worked under Linux with the X11 windowing system, didn&#39;t work and probably hadn&#39;t for some time. And even if it did work, getting it setup required setting an X11 &quot;Atom&quot; that after searching the Internet for hours, I still couldn&#39;t figure out how to do. (One program that might have been used didn&#39;t work with the latest ICC profile version.) Given that almost all modern windowing systems allow the user to set system wide monitor color corrections, it was time for this code to go. You can still manually specify a monitor color correction inside Inkscape if you need to.</p>
<h2>Test Programs</h2>
<p>I spent quite a bit of time writing short test programs to get to know how the things have changed between Gtk3 and Gtk4. The maintainers of Gtk have provided a migration guide but given the huge number of changes made, there is not a lot of detail for any particular change. By writing short programs, it is easier to figure out what one needs to do to adapt to Gtk4. I wrote programs that tested:</p>
<ul>
<li>Monitor support.</li>
<li>Popup dialogs.</li>
<li>Event signal handling.</li>
<li>DropDown widgets (replacement for ComboBox).</li>
<li>Access to input devices.</li>
</ul>
<p>These programs are publicly available at my GitLab site: https://gitlab.com/Tavmjong/gtk_sandbox</p>
<h2>Items Worked On:</h2>
<ul>
<li>Gtk::ButtonBox removal.</li>
<li>Gtk::Main removal.</li>
<li>Gtk::Seat grab removal.</li>
<li>Gtk::Box child properties removal.</li>
<li>Gtk::Monitor test program.</li>
<li>Gtk Color Management refactoring.</li>
<li>Gtk Popup Menus instead of Gtk::Menus.</li>
<li>Sigc signal API changes.</li>
<li>GtkDropDown and GtkGrid use.</li>
<li>Device Manager Input Dialog.</li>
</ul>
<h2>Commits to Inkscape&#39;s Gitlab repository:</h2>
<p>&nbsp;</p>
<ul>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5366</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5360</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5350</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5402</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5421</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5367</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5427</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5436</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5437</li>
<li>https://gitlab.com/inkscape/inkscape/-/merge_requests/5443<br />
&nbsp;</li>
</ul>
<p>&nbsp;</p>
</description><pubDate>Mon, 03 Jul 2023 08:04:51 +0000</pubDate><guid>https://inkscape.org/*membership/blog/june-gtk4-migration/</guid></item><item><title>May - AI Extension 2023
</title><link>https://inkscape.org/*membership/blog/may-ai-extension-2023/</link><description><p>To allow the import of Adobe Illustrator files into Inkscape, we develop a Python extension. This post outlines the progress in the 3rd month of the project, May 2023. Work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>. To read more about the progress in April, <a href="https://inkscape.org/*membership/blog/april-ai-extension-2023/">read the last blog post</a>.</p>
<hr />
<p>Nicco Kunzmann</p>
<p>Nicco made a short <a href="https://diode.zone/w/oXr7M2W3L3E6YvXS6peyjL">video on the progress</a>, using the Inkscape 1.3 alpha release.</p>
<p>Since we created a structure for a new and faster parser in April, a big part of may has been used to port existing features. However, we made some progress on parsing colors. At the current state, rectangles and paths can be imported and the page (viewbox) is correctly positioned and sized.</p>
<p>Here is an outline of Nicco&#39;s work:</p>
<ul>
<li>Creating more tests for the parser. In total, we run over 2000 small test cases.</li>
<li>Path were migrated from pyparsing to the new structure. These are properly closed, receive a stroke and a fill.</li>
<li>Objects like paths are parsed first. Then the object structure that represents the AI document is used to create the SVG file. Adobe illustrator uses several coordinate systems and thus the coordinates need to be transformed accordingly.</li>
<li>Unit information (cm, mm, pixels, ...) is read from the ai files but not yet used in the SVG files.</li>
<li>Paths now receive styles - fill and stroke. We can be quite sure that we know all the color representations (RGB, CMYK, gray, ...) that Adobe Illustrator uses.</li>
<li>Rectangles are created. Some of them can be represented as a &lt;rect&gt; in SVG, some others will be paths with Fillet/Chamfer LPE.</li>
</ul>
</description><pubDate>Sat, 03 Jun 2023 16:03:46 +0000</pubDate><guid>https://inkscape.org/*membership/blog/may-ai-extension-2023/</guid></item><item><title>May - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/may-bug-accelerator-2023/</link><description><p><img alt="" height="108" src="/media.inkscape.org/media/news/uploads/rocket_bug_180.png" style="margin: 10px; float: left;" width="134" />Welcome to the final blog post for the Bug Accelerator 2023 program. We hope to document the work that we have done for the Inkscape project in these blog entries, please subscribe to the RSS feed if you would like to see the future entries. For a breakdown of the issues which are being fixed for the release, please see <a href="https://gitlab.com/groups/inkscape/-/milestones/11">this gitlab page</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Martin Owens</h2>
<ul>
<li>A strange bug to start with, creating a new gradient would suddenly lock up after a tiny mouse movement. Signal handling was to blame. <a href="https://gitlab.com/inkscape/inkscape/-/issues/4239">#4239</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5276">!5276</a></li>
<li>The new shape builder needed a warning to tell users when it needed you to selected shapes, instead of doing nothing. <a href="https://gitlab.com/inkscape/inkscape/-/issues/4088">#4088</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5186">!5186</a></li>
<li>A strange one here, only in non-english locales would the blur dialog stop working. Commas were to blame. <a href="https://gitlab.com/inkscape/inkscape/-/issues/4272">#4272</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5284">!5284</a></li>
<li>Bad graphics in the windows installed confused many people who were asked to test the release, fixed with these special graphics for developer releases only <a href="https://gitlab.com/inkscape/inkscape/-/issues/3513">#3513</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5286">!5286</a></li>
<li>Gradients in PDF files often failed to appear correctly, and confused stroke and fill. All fixed. <a href="https://gitlab.com/inkscape/inkscape/-/issues/4134">#4134</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5291">!5291</a></li>
<li>The new glyph drawing functionality was using the same font engine for everything, this was incorrect. <a href="https://gitlab.com/inkscape/inkscape/-/issues/3886">#3886</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5293">!5293</a></li>
<li>When added a cache, it&#39;s sometimes worth asking if the keys are unique. Turns out this wasn&#39;t true for color profiles, causing bad colors on import <a href="https://gitlab.com/inkscape/inkscape/-/issues/3931">#3931</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5298">!5298</a></li>
<li>Text can be used as a clipping path in many documents, but ours was broken on import. Not any more! <a href="https://gitlab.com/inkscape/inkscape/-/issues/2791">#2791</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5298">!5298</a></li>
<li>Applying text styles before the text existed is fine for solid colors, but as soon as you have a gradient, this breaks. Moving the style creation to the end fixes this. <a href="https://gitlab.com/inkscape/inkscape/-/issues/1744">#1744</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5298">!5298</a></li>
<li>Gradients can have more than two color stops, but our imported gradients didn&#39;t always agree and would break. Fixed. <a href="https://gitlab.com/inkscape/inkscape/-/issues/845">#845</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5298">!5298</a></li>
<li>Text glyphs are very tricky to sort out, we had some remaining issues with rendering on import. <a href="https://gitlab.com/inkscape/inkscape/-/issues/2952">#2952</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5298">!5298</a></li>
<li>A pretty bad problem with sections of the user interface being completely empty. This was a Gtk issue, but we ask for a new size calculation to refresh everything and fix this <a href="https://gitlab.com/inkscape/inkscape/-/issues/2373">#2373</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5307">!5307</a></li>
<li>This is a similar issue for layers dialog internally, but this time it was the contents of a list, not the outer widget that was empty. Still fixed though. <a href="https://gitlab.com/inkscape/inkscape/-/issues/3785">#3785</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5307">!5307</a></li>
<li>When using the export dialog and selecting the file type in the popup file selector, it was just ignoring your selection and insisting on the one selected in the export dialog itself. Confirm that the user&#39;s choice is ALWAYS correct. <a href="https://gitlab.com/inkscape/inkscape/-/issues/3490">#3490</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5308">!5308</a></li>
</ul>
<p>A total of 45 hours were invoiced, but a further 15 more hours were used to complete this work which went over the contract terms and so are not billed. No cost to the project for this overrun is incurred.</p>
</description><pubDate>Thu, 01 Jun 2023 18:24:28 +0000</pubDate><guid>https://inkscape.org/*membership/blog/may-bug-accelerator-2023/</guid></item><item><title>April - AI Extension 2023
</title><link>https://inkscape.org/*membership/blog/april-ai-extension-2023/</link><description><p>To allow the import of Adobe Illustrator files into Inkscape, we develop a Python extension. This post outlines the progress in the 2nd month of the project, April 2023. Work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>. To read more about the progress in March, <a href="https://inkscape.org/*membership/blog/march-ai-extension-2023/">read the last blog post</a>.</p>
<hr />
<p>Initially, we used pyparsing to parse the Adobe Illustrator files. Pyparsing delivers a lot of flexibility at the cost of performance. Adobe Illustrator files however do not need features like backtracking or fine-grained matching to parse them. This is why we opted to create a new parser from scratch for the file format: It is faster and tailored to the specifics of the Adobe Illustrator File Format. A lot of the code that has been written already can be reused though the migration to the new parser: Extraction of the plain text, embedding the extension into Inkscape, tests and examples.</p>
<h2>Nicco Kunzmann</h2>
<p>Nicco Kunzmann&#39;s work is done within a contract with the SFC. This section highlights the work done in the month of April. Since there was the Hackfest in March, a lot of progress was made in March. In April, the development slowed down a bit. Here is a summary of the work done:</p>
<ul>
<li>Work with pyparsing and tests to create SVG Rectangles. Rectangles are specified in the .ai files as Live Shapes. See <a href="https://gitlab.com/inkscape/extras/extension-ai/-/issues/27">Issue 27</a>.</li>
<li>For the faster parser:
<ul>
<li>Outline of the architecture for the parser. Requirements:
<ul>
<li>Fast lookup (line start and line end) with only a few function calls.</li>
<li>Consistent interface but different parsers for different sections of the .ai file. (headers, Live Shapes, Text Specification)</li>
<li>Flexible composition of elements of the grammar.</li>
<li>Lazy parsing of content only if needed.</li>
<li>The specification of the grammar should be created once only and never again regardless of how many .ai documents are processed.</li>
<li>Modularization must be possible to structure the code.</li>
</ul>
</li>
</ul>
</li>
<li>The parser implementation was done with the architectural concerns mentioned above, polymorphy and test-driven development.
<ul>
<li>An example implementation was the migration of parsing the <a href="https://gitlab.com/inkscape/extras/extension-ai/-/blob/c7a56108c2cbd6da7fd5e2a9cbb5ae0b5b8ea7b6/inkai/parser/color.py">colors</a> (specified and reverse-engineered ones) from pyparsing to the new, lazy parser.</li>
<li>Layers were migrated. That they can be recursive (layer and sub-layer) will be part of May&#39;s work.</li>
<li>One of the test files runs through all the example .ai files and records how far we progressed in our implementation:
<ul>
<li>Can the file be extracted? 100%</li>
<li>Can the file be parsed into the new lazy object structure? 100%</li>
<li>Are there any lines we do not understand? 0% - All files contain unknown lines.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>To summarize</strong>: After month 2, we have a parser architecture tailored to the .ai files for fast parsing. The progress can be tracked. Sections and elements of the AI files can be flexibly and lazily parsed and documented. This is a solid base to extend the code base in May: We can expect to convert some .ai files to SVG soon.</p>
</description><pubDate>Sat, 06 May 2023 21:29:55 +0000</pubDate><guid>https://inkscape.org/*membership/blog/april-ai-extension-2023/</guid></item><item><title>April - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/april-bug-accelerator-2023/</link><description><p><img alt="" height="108" src="/media.inkscape.org/media/news/uploads/rocket_bug_180.png" style="margin: 10px; float: left;" width="134" />Welcome to another blog post for the Bug Accelerator 2023 program. We hope to document the work that we have done for the Inkscape project in these blog entries, please subscribe to the RSS feed if you would like to see the future entries. For a breakdown of the issues which are being fixed for the release, please see <a href="https://gitlab.com/groups/inkscape/-/milestones/11">this gitlab page</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Martin Owens</h2>
<ul>
<li>The XML dialog wasn&#39;t working if you undocked it, this was caused by a very aggressive clean up that thought floating a dialog meant destroying it <a href="https://gitlab.com/inkscape/inkscape/-/issues/4187">#4187</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5220">!5220</a></li>
<li>Crash when applying a simplify operation to a power-stroke, an internal calculation that wasn&#39;t being careful enough <a href="https://gitlab.com/inkscape/inkscape/-/issues/4200">#4200</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5227">!5227</a></li>
<li>The select-invert actions had been accidentally removed during a previous refactoring, putting them back was the cure, plus some cleanup <a href="https://gitlab.com/inkscape/inkscape/-/issues/3586">#3586</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5228">!5228</a></li>
<li>Dialogs need to know when the objects you have on the canvas have changed, for some reason we weren&#39;t properly monitoring this <a href="https://gitlab.com/inkscape/inkscape/-/issues/3525">#3525</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5231">!5231</a></li>
<li>There was a lot of problems with the grids, firstly the settings has to be fixed <a href="https://gitlab.com/inkscape/inkscape/-/issues/4223">#4223</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5233">!5233</a></li>
<li>Next issues with the undo and ordering the grid changes <a href="https://gitlab.com/inkscape/inkscape/-/issues/4145">#4145</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5235">!5235</a></li>
<li>Finally a more full refactoring to remove the possibility of errors happening and fixing a bunch already known <a href="https://gitlab.com/inkscape/inkscape/-/issues/1383">#1383</a> <a href="https://gitlab.com/inkscape/inkscape/-/issues/1244">#1244</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5234">!5234</a></li>
<li>Non-default keyboards can become stale if programmers don&#39;t keep them up to date, so we add a CI checker to tell the programmer off if they don&#39;t, plus fix all the existing issues that the checker was able to find <a href="https://gitlab.com/inkscape/inkscape/-/issues/2912">#2912</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5242">!5242</a></li>
<li>Grouping objects together shouldn&#39;t change the order drastically, but if you can&#39;t tell which came first half way through replacing them, you get this problem. Which is now fixed by not deleting things half way through checking them <a href="https://gitlab.com/inkscape/inkscape/-/issues/4228">#4228</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5243">!5243</a></li>
<li>Bad extension preferences names meant users couldn&#39;t find settings for any of their extensions, we want to make sure the names we use are consistent, even if in the code we use different ones <a href="https://gitlab.com/inkscape/inkscape/-/issues/3346">#3346</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5244">!5244</a></li>
<li>Previous extension action status should be disabled until it&#39;s enabled. There&#39;s a bit more work to make actions more reflective of their actual state <a href="https://gitlab.com/inkscape/inkscape/-/issues/3232">#3232</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5245">!5245</a></li>
<li>The grids were still having issues with scale spacing and origin units in grids for display which we had to revisit and repair <a href="https://gitlab.com/inkscape/inkscape/-/issues/4019">#4019</a> #786 <a href="https://gitlab.com/inkscape/inkscape/-/issues/4230">#4230</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5246">!5246</a></li>
<li>And even that wasn&#39;t enough, as the grids snapping scale was also broken and needed repairs <a href="https://gitlab.com/inkscape/inkscape/-/issues/4241">#4241</a> <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5251">!5251</a></li>
<li>Various merge request assistance was needed for all the other developers who have been volunteering to fix issues for this Inkscape release</li>
</ul>
<p>A total of 39.5 hours were used to complete this work over four weeks.</p>
<h2>Rafael</h2>
<p>Rafael has decided to discontinue doing active work in the accelerator program. He continues to contribute to Inkscape as a volunteer though. See <a href="https://lists.inkscape.org/hyperkitty/list/[email protected]/thread/HOO3Y7MGUEBP75TGFFNLJQTGG3PAOIQR/">developer meeting notes for April 27th</a> on the <a href="https://lists.inkscape.org/postorius/lists/inkscape-devel.lists.inkscape.org/">Inkscape developer mailing list</a> archive.</p>
</description><pubDate>Mon, 01 May 2023 16:28:40 +0000</pubDate><guid>https://inkscape.org/*membership/blog/april-bug-accelerator-2023/</guid></item><item><title>March - AI Extension 2023
</title><link>https://inkscape.org/*membership/blog/march-ai-extension-2023/</link><description><p>For the first time, the Inkscape project has hired an external contractor to develop a feature for Inkscape. This is a huge step for us as a project, and your donations made that happen! This particular feature was selected to be import of the Illustrator file format, and it&#39;s developed as a python extension to also make it useful for other free software projects.</p>
<p>This post outlines the progress in the first month of the project, March 2023. Work is carried out inside the git repository <a href="https://gitlab.com/inkscape/extras/extension-ai/">extension-ai</a>.</p>
<h2>Inkscape already seems to support .ai files. What do we need a new importer for?</h2>
<p>Modern (after 2000) AI files are actually PDF files - so they can be displayed with any PDF viewer. And when Inkscape opens an .ai file, it just calls the PDF importer. PDF is a lossy format - a lot of the information that is contained in any file exported to PDF is lost, just like taking a photo of a three-dimensional scene.</p>
<p>This information which can&#39;t be represented in the PDF - like text layouting metadata, path effects, filters, mesh gradient arrangements, layers and much more - is embedded as compressed datastream inside the PDF file, which is the <em>actual </em>AI file. After completion of this project, we want to be able to discard the PDF data and have a high-fidelity import of AI files, solely based on this embedded datastream - and this is the work that we have contracted out.</p>
<p>As a starting point, the Inkscape team had prepared the the extraction of the plain text behind the compressed datastream. The compression algorithm was changed a few times, and we needed to adapt to that.</p>
<h2>Nicco Kunzmann</h2>
<p>Nicco Kunzmann&#39;s work is done within a contract with the SFC.</p>
<ul>
<li>Adding pytest fixtures and tox tests for
<ul>
<li>REUSE - licensing compliance</li>
<li>parser, SVG conversion and command line use for Python versions 3.7+</li>
</ul>
</li>
<li>Implement most important sections of the grammar according to the AI Spec in pyparsing</li>
<li>Convert paths, layers and groups to SVG</li>
<li>Create a parser for the hierarchical data structure that was introduced (unspecified), used e.g. for document metadata and SVG filters</li>
<li>Create an architecture to split SVG construction from pyparsing grammar construction (cleaner code)</li>
<li>Refactoring the pyparsing parser for speed.</li>
<li>Building tools to reverse-engineer the grammar:
<ul>
<li>Extraction of elements inside the files (text, whole document)</li>
<li>Parsing sub-elements of the grammar at specific places</li>
<li>Test cases to match elements</li>
</ul>
</li>
<li>Benchmark pyparsing to make decisions about fast implementation</li>
<li>Benchmark the hierarchical data structure parser implementations using pyparsing and a simple python parser to make decisions on how to approach further parser implementations</li>
<li>Document deviations and additions to the 1998 AI Specification</li>
<li>Create tests cases that run on every .ai file to check the progress in conversion to SVG</li>
</ul>
<p><strong>To summarize</strong>: after the first month, we are able to open an AI file with a simple path such as Inkscape&#39;s logo: <a href="https://diode.zone/c/inkai">screen cast</a>. We have learned a lot about parsing performance and have a robust unit testing framework, which should be able to accommodate all following features.</p>
<p>&nbsp;</p>
</description><pubDate>Wed, 05 Apr 2023 17:23:54 +0000</pubDate><guid>https://inkscape.org/*membership/blog/march-ai-extension-2023/</guid></item><item><title>March - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/march-bug-accelerator-2023/</link><description><p><img alt="" height="108" src="/media.inkscape.org/media/news/uploads/rocket_bug_180.png" style="margin: 10px; float: left;" width="134" />Welcome to another blog post for the Bug Accelerator 2023 program. We hope to document the work that we have done for the Inkscape project in these blog entries, please subscribe to the RSS feed if you would like to see the future entries. For a breakdown of the issues which are being fixed for the release, please see <a href="https://gitlab.com/groups/inkscape/-/milestones/11">this gitlab page</a>.</p>
<p>The first full month of the program that also happened at the same time as the hackfest in Germany, the end of the month was focused on issues preventing the alpha release:</p>
<h2>&nbsp;</h2>
<h2>Martin Owens</h2>
<ul>
<li>Fix a crash in the Layer and Object&#39;s dialog caused by bad XML updated on undo in issue <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5195">#4164</a>. This is a specialised part of our XML management involving merging trees. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5195">!5195</a></li>
<li>Remove object setter from desktop style manager fixing a infinite freeze reported in issue <a href="https://gitlab.com/inkscape/inkscape/-/issues/4164">#4164</a>. Which was actually dangling code not used any more. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5196">!5196</a></li>
<li>Fix rebase document root attributes when cloning in issue <a href="https://gitlab.com/inkscape/inkscape/-/issues/4164">4164</a>, this caused extensions to be unable to edit core parts of the SVG. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5194">!5194</a></li>
<li>Disable the Escape key disabling the startup screen. This was a UX bug caused by previous concern about the startup screen getting in the way in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4176">#4176</a>. But it turned out to be a real boolean polarity bug too. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5193">!5193</a></li>
<li>Recently we provide some checks to allow Inkscape to not merge different versions but this break some extensions in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4163">#4163</a>, excluding self calling fixed the issues. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5177">!5177</a></li>
<li>Fixed a caching issue in the symbols dialog that caused icons to be reused for symbols they didn&#39;t belong to. Some of these reuses were comical juxtapositions seen in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4156">#4156</a>. Using the document id plus symbol id fixes this. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5174">!5174</a></li>
<li>This refactoring of the page movement code fixed three issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/3844">#3844</a> <a href="https://gitlab.com/inkscape/inkscape/-/issues/4020">#4020</a> and <a href="https://gitlab.com/inkscape/inkscape/-/issues/3621">#3621</a>, we wanted to move to using the existing move code which accounted for clones and other exotic object types. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5170">!5170</a></li>
<li>Refactoring the PDF, PS and ESP outputs to fix their mishandling of page margins and bleeds fixing <a href="https://gitlab.com/inkscape/inkscape/-/issues/4143">#4143</a> and also fixing a few other issues with command line consistency and add better ways to warn users about options being moved and where to find them. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5143">!5143</a></li>
<li>Make sure we don&#39;t have a broken undo if using the new shape builder tool reported in <a href="https://gitlab.com/inkscape/inkscape/-/issues/3906">#3906</a>, we used to depend on the undo system but this was incorrect. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5142">!5142</a></li>
<li>Fix crashes in clones when deleting or undoing in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4137">#4137</a>, the order of operations was important for this fix. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5141">!5141</a></li>
<li>Investigate missing tooltips in recent files couldn&#39;t be solved because Gtk doesn&#39;t allow us any way to recover the functionality. Though a plan was put together for what this fix could look like instead in <a href="https://gitlab.com/inkscape/inkscape/-/issues/3546">#3546</a>.</li>
<li>Some pretty big issues with the export dialog&#39;s pop-up based status, causing Inkscape to steal focus from any other task the user was doing in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4000">#4000</a>. This resulted in a redesigned progress bar interface removing the pop-ups entirely. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5140">!5140</a></li>
<li>A couple of issues with the export dialog crashing in and were also fixed. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5209">!5209</a>.</li>
<li>More merge requests were reviewed with a focus on bugs that blocked the alpha release.</li>
</ul>
<p>A total of 42.5 hours were used to complete this work over four weeks.</p>
<h2>Rafael</h2>
<ul>
<li>Fix <span><code class="code-colors inline">infinite</code></span> document update loop caused by filter bounding box calculations in issues <a href="https://gitlab.com/inkscape/inkscape/-/issues/3797">#3797</a> and <a href="https://gitlab.com/inkscape/inkscape/-/issues/3833">#3833</a>. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5198">!5198</a></li>
<li>Fix an undo crash when deleting flowed text reported in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4166">#4166</a>, this lead to more investigation into the inherited tree calling &#39;release&#39;. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5189">!5189</a></li>
<li>Allow values with commas in object-set-attribute to fix <a href="https://gitlab.com/inkscape/inkscape/-/issues/3685">#3685</a>. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5156">!5156</a></li>
<li>Re-add Paste to the context menu when right-clicking on nothing from issue <a href="https://gitlab.com/inkscape/inkscape/-/issues/4150">#4150</a>. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5155">!5155</a></li>
</ul>
</description><pubDate>Sat, 01 Apr 2023 05:00:00 +0000</pubDate><guid>https://inkscape.org/*membership/blog/march-bug-accelerator-2023/</guid></item><item><title>Inkscape signs new FSA with SFC
</title><link>https://inkscape.org/*membership/blog/inkscape-signs-new-fsa-sfc/</link><description><h2>Demystifying Membership &ndash; A Contributor&#39;s (updated) Guide to the Inkscape Project</h2>
<p>On March 15, 2023, Inkscape&#39;s new <a href="https://inkscape.org/*leadership-committee/charter/">Fiscal Sponsorship Agreement</a> (FSA) was published to the inkscape.org website.</p>
<p>It&#39;s a big step forward for Inkscape&#39;s contributor community, but not everyone may know what it all means yet. So, we (the Vectors team, working on marketing and outreach) asked the people who should know, the members of Inkscape&#39;s Project Leadership Committee (PLC).</p>
<p>&nbsp;</p>
<p><em><strong>Vectors:</strong></em> <strong>Hi! First of all, let&#39;s get the acronyms out of the way: what do FSA, PLC and SFC mean and how do they relate to the project?</strong></p>
<p><em><strong>PLC:</strong></em> Hi! The SFC is short for the <a href="https://sfconservancy.org/">Software Freedom Conservancy</a>, They are a US based 501c3 charity focused on software freedom and ethical technology; they act as the fiscal sponsor and legal home for the Inkscape project, since the project is not a legal entity. The SFC helps us hire people, pay for conferences, stickers, t-shirts, contracts and other things we might need like the trademark registration and infrastructure services.</p>
<p>The PLC is the term for the Inkscape Project Leadership Committee. It&rsquo;s a kind of &#39;board of directors&#39; (but not an actual board!) that oversees the project&#39;s organisation and coordinates with the Conservancy on behalf of the project.</p>
<p>The FSA is the Fiscal Sponsorship Agreement, the legal document which defines the relationship between the Inkscape project, the Project Leadership Committee and the Software Conservancy.</p>
<p>It defines governance of the project, the fiscal controls policy, contains a commitment to remaining free software and to further the goals and missions of both Software Freedom Conservancy and the Inkscape project.</p>
<p><br />
<strong><em>Vectors: </em>Okay, now we understand what they are, can you tell us <em>why</em> the FSA was changed?</strong></p>
<p><em><strong>PLC:</strong></em> The FSA has evolved over time and the latest version moves the project from representing a project of programmers to representing a project of contributors. It does this by widening participation in the election process for the Leadership Committee by specifying a more complete list of people who participate in the project.</p>
<p>This used to be defined as people who held copyright in the code via the AUTHORS&rsquo; list. This was too restrictive, so the new FSA only covers how the membership elects committee members. It doesn&#39;t cover how membership is gained and managed.</p>
<p>In order to define memberships, the project adopted a non-legal policy document which <a href="https://inkscape.org/gallery/item/29445/plc-policy-membership-4.pdf">can be found here</a>. This is an internal policy document which defines the rules about how people get onto the membership list.</p>
<p><br />
<em><strong>Vectors:</strong></em> <strong>Were there any other updates to the FSA?</strong></p>
<p><em><strong>PLC:</strong></em> Some other changes were made, such as removing a previous PLC member&#39;s address and cleaning up some of the language to standardise it with other projects.</p>
<p>&nbsp;</p>
<p><em><strong>Vectors:</strong></em> <strong>Can you tell us a little about the process of updating the FSA?</strong></p>
<p><em><strong>PLC:</strong></em> The FSA was updated by conducting a number of meetings with the FSC, PLC members and various people from the community who were existing members and those who were contributing a lot, but not able to be members yet. The consultation process lasted a couple of months and resulted in a first draft of the needed changes to the FSA. People also worked on the membership policy to support the new FSA. Further changes were needed by both the PLC, including internal discussions, and the SFC, which had their own list of things to adjust (changing the address for the project, general updates to the FSA language and reviewing the membership change).</p>
<p>&nbsp;</p>
<p><em><strong>Vectors:</strong></em> <strong>What do the changes to the FSA mean for contributors?</strong></p>
<p><em><strong>PLC:</strong></em> The changes should allow the membership of the project to expand from being just programmers who hold copyright in the codebase itself to being anyone who has contributed to the project in a way that is materially agreeable to other members.</p>
<p>The technical changes also allows for people to apply for membership and invite people to become members directly on the website, in addition to approving others to become members. Everything is recorded for transparency and copied into GitLab repositories for safekeeping.</p>
<p><br />
<em><strong>Vectors:</strong></em> <strong>What requirements do people need to meet to be/become a member? Do memberships expire?</strong></p>
<p><em><strong>PLC:</strong> </em>We wanted to give the project the greatest amount of flexibility to decide for itself what counted as a contribution.</p>
<p>For the developer team, the existing policy of two commits into the code base was deemed sufficient. Other teams can set their own policies for when they will approve members who contribute through them. The bare bones requirement is for three other existing members to approve their membership request. Members from the related team would be expected to recognise each other&#39;s contributions and approve as needed.</p>
<p>Approving people who you don&#39;t know or haven&#39;t worked with is strongly discouraged and could end up with you having your own membership revoked (see 2. below), so don&#39;t do that!</p>
<p>Memberships cannot expire, but it is possible to be removed by a vote of the PLC. The three reasons for membership removal are as follows:</p>
<ol>
<li>A code of conduct violation which can&#39;t be resolved</li>
<li>Approving non-contributors to the membership list</li>
<li>Not being or having been a contributor in the first place</li>
</ol>
<p>These are safety valves to make sure that abuse can be dealt with in a structured way. The intention is that no one would ever need to be removed or expired, but this sets out how that would happen. That said, you can leave if you want. Removing your membership from the team will remove your membership of Inkscape too.</p>
<p><br />
<em><strong>Vectors:</strong></em> <strong>Is there anything that contributors need to do now, to become an official member?</strong></p>
<p><em><strong>PLC:</strong></em> A contributor to the project should go to the Inkscape website, navigate to the membership team page and click on the &quot;Request Membership&quot; button on the right side.</p>
<p>They will need a website account in order to do this. A contributor may also be invited by another member that knows the email address they used to register on the website. Other members will then be able to approve of them joining. Once enough people have approved, the contributor will be added to the members&rsquo; list automatically and can vote in future leadership elections.</p>
<p><em><strong>Vectors:</strong></em> <strong>Thanks for answering our questions!</strong></p>
<p>&nbsp;</p>
<p>If you&rsquo;re interested in joining the community as a member, <a href="https://inkscape.org/gallery/item/29445/plc-policy-membership-4.pdf">learn more here</a>.</p>
<p>If you are a contributor and you wish to become a member, to gain voting rights, <a href="/*membership/">head here</a>. Search for your name in the list, and if it is not there yet, request your project membership. If you already are a member, please help review any pending membership requests - and don&#39;t forget to also check out <a href="/user/teams/">the other teams</a>! If you are a member, but do not have access to the user account that is linked from the membership list, please contact website administrators <a href="https://chat.inkscape.org/channel/team_website">in the website chat channel</a>.</p>
<p>&nbsp;</p>
</description><pubDate>Mon, 27 Mar 2023 18:00:42 +0000</pubDate><guid>https://inkscape.org/*membership/blog/inkscape-signs-new-fsa-sfc/</guid></item><item><title>February - Bug Accelerator 2023
</title><link>https://inkscape.org/*membership/blog/february-bug-accelerator-2023/</link><description><p><img alt="" height="108" src="/media.inkscape.org/media/news/uploads/rocket_bug_180.png" style="margin: 10px; float: left;" width="134" />Welcome to this blog entry about the Bug Accelerator 2023 program. We hope to document the work that we have done for the Inkscape project in these blog entries, please subscribe to the rss feed if you would like to see the future entries. For a breakdown of the issues which are being fixed for the release, please see <a href="https://gitlab.com/groups/inkscape/-/milestones/11">this gitlab page</a>.</p>
<p>We start off February as the first month of the project mid way through, with only a week and half left in the month so this is going to be a short update:</p>
<h2>Martin Owens</h2>
<ul>
<li>Fixing the marker issues started with report <a href="https://gitlab.com/inkscape/inkscape/-/issues/3363">#3363</a> but ended up with a much more substantial refactoring. Centralising the code which decides the orientation of the marker and it&#39;s context colors. There is more work that could be done to improve markers, but this refactoring fixes lots of issues in various parts of inkscape which need to render markers to various outputs such as <a href="https://gitlab.com/inkscape/inkscape/-/issues/3964">#3964</a> and <a href="https://gitlab.com/inkscape/inkscape/-/issues/1973">#1973</a>. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5092">!5092</a></li>
<li>A related issue in <a href="https://gitlab.com/inkscape/inkscape/-/issues/3744">#3744</a> with markers which turned out to be a problem in Firefox and not fixable in Inkscape.</li>
<li>An issue with the paste in place feature in <a href="https://gitlab.com/inkscape/inkscape/-/issues/3527">#3527</a> required deciding when an element should be pasted on top of or inside of, if the selected element was a layer. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5102">!5102</a></li>
<li>An issue with rendering fonts on windows, using pango and font-manger in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4071">#4071</a> is still undecided. Though a fix was made to limit Inkscape to certain versions of pango in an effort to fix it.</li>
<li>an issue in the how the xml parser worked specially for the namedview element caused a series of problems in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4092">#4092</a> and <a href="http://gitlab.com/inkscape/inkscape/-/issues/4052">#4052</a> which were all fixed in <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5100">!5100</a> the specific issue with desk colors was also given attention, so these colors were not guessed at run time, but defined by the selected theme.</li>
<li>A crash in a bad svg which contained a near zero sized arc in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4110">#4110</a> was fixed by catching the thrown errors and dealing with the rendering issues. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5097">!5097</a></li>
<li>A crash when closing the export dialog in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4120">#4120</a> was fixed by keeping the previews clean and not refreshing once closing. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5118">!5118</a></li>
<li>An old text bug involving Inkscape 0.92 and lower produced files in <a href="https://gitlab.com/inkscape/inkscape/-/issues/2754">#2754</a> blank lines would disappear or appear in the wrong places. Fortunately the fix was a combination of undoing a previous fix and applying a more subtle css style based inhereince rule to account for the previous version&#39;s bad rendering. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5119">!5119</a></li>
<li>Finally we had some resource problems in <a href="https://gitlab.com/inkscape/inkscape/-/issues/4122">#4122</a> with the export dialog. If it was open, large files with many pages would take a long time to render. Fixing this required unpicking some of the over-zealous preview updating as well as putting the rendering into an idle process so the rest of the GUI could at least load. More work is needed to make Inkscape&#39;s drawing processes thread safe to really fix this issue properly though. <a href="https://gitlab.com/inkscape/inkscape/-/merge_requests/5122">!5122</a></li>
<li>Various merge requests and issues were tested, and reviewed in order to help move fixes from other developers in.</li>
</ul>
<p>A total of 33 hours were used to complete this work over two weeks.</p>
<h2>Rafael</h2>
<p>Rafael has not started yet and will be starting in March.</p>
</description><pubDate>Wed, 01 Mar 2023 03:51:14 +0000</pubDate><guid>https://inkscape.org/*membership/blog/february-bug-accelerator-2023/</guid></item></channel></rss>