# Ann: SWI-Prolog 10.1.17

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-10-1-17/9850>\
**Category:** Releases\
**Created:** [October 4, 2026, 2:54pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-10-1-17/9850 "2026-10-04T14:54:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [October 4, 2026, 2:54pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-10-1-17/9850/1 "2026-10-04T14:54:03Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 10.1.17 is ready for download. This version is mostly about  
the GUI, which now supports switching between light and dark themes while  
running and follows the desktop settings. Highlights:

**Core**

- Loading a .qlf file now notices changes to included, consulted and  
dependency files rather than only the main source file. This notably  
affects aggregates such as pce.qlf. Also fixes a memory and atom leak  
in ‘$qlf\_module’/2.
- Incremental subsumptive tabling raised a tabling dependency error when  
re-evaluating the general table and did not record dependencies for calls  
that reuse an existing table.
- The flags `color_term` and `hyperlink_term` are no longer saved in a  
saved state, so a state determines them from the terminal it runs on.

**CLP(Q,R)**

- Faster Fourier-Motzkin elimination in dump/3 and projection.

**XPCE (GUI)**

- Themes. The colours of xpce are now _theme colours_ that follow the  
active theme without restarting. Highlights:

- The profiler GUI shows a call graph of the current predicate (using  
graphviz) and allows filtering the predicates as you type.

- @display now evaluates to the display of the last event, and frames  
survive removing the last display, e.g., a MacBook in clamshell mode  
whose external monitor goes to sleep.

- Tabs give clear feedback on the active tab, also in dark themes.

- Fixed dropping files on the console and PceEmacs using SDL on X11.

- Ported to older MacOS versions (10.15 - 12): fixed crash creating  
the menu bar and pasting from other applications.

- Several crash and bug fixes, many reported by Mike Elston.

# SWI-Prolog Changelog since version 10.1.16

- DOC: UI themes: theme colours, switching themes and the Settings/Theme  
menu Co-Authored-By: Claude Opus 5.5 [noreply@anthropic.com](mailto:noreply@anthropic.com)

- ENHANCED: dark theme: lighter scroll bar trough Co-Authored-By:  
Claude Opus 5.5 [noreply@anthropic.com](mailto:noreply@anthropic.com)

- ENHANCED: theme files: switch console colours with the xpce theme  
The console and online help colours of library(theme/light) and  
library(theme/dark) now only apply while their theme is active, so  
the Prolog console follows selecting a theme in xpce. Without xpce,  
a loaded theme is active as before. The dark theme defines a complete  
dark palette for the basic xpce colours, which is used if the desktop  
is light.

- ENHANCED: dark theme: only define theme colours for xpce The remaining  
class variable settings and the debugger port styles are replaced by  
values for the theme colours of the development tools. The dark theme  
no longer changes xpce class variables, so loading it has no effect  
on xpce until it is applied and switching back to light restores  
all colours. The debugger port colours are dark backgrounds, such  
that the syntax colours remain readable.

- ENHANCED: dark theme: define xpce’s ui\_\* and ansi\_\* theme colours  
Replaces the class variable settings for the basic xpce classes  
by values for the ui\_\* and ansi\_\* theme colours, so these follow  
switching between light and dark. If the system colours are dark,  
the basic window colours are the system colours. Text selection  
and search highlights now use dark backgrounds, such that the syntax  
colours remain readable.

- ENHANCED: dark theme: define the PceEmacs syntax colours as theme  
colours The prolog\_colour:style/2 hook is replaced by pce\_theme:colour/3  
facts for the syntax\_\* theme colours, so switching between light  
and dark no longer requires restarting PceEmacs. Adds dark values  
for the syntax classes that were added after the dark theme was  
written: head(test,_), rational(_), known\_flag\_name(_), macro(_)  
and domain\_error(_). Drops the unused table\_option(_) style.

- ENHANCED: dark theme: leave basic xpce colours to dark system colours  
on all platforms The dark theme now tests sys\_window\_background  
rather than the Windows specific win\_window. This makes windows,  
dialogs and menus follow switching between light and dark while xpce  
is running on Windows, MacOS, KDE and GNOME.

- FIXED: incremental subsumptive tabling raised a tabling dependency error  
Using `:- table p/2 as (subsumptive,incremental)`, re-evaluating the  
general table after an update of the underlying incremental predicate  
raised `Tabling dependency error`. Also, calls that reused an existing  
(variant or more general) table did not record an IDG dependency,  
so incremental tables depending on them were not updated.

- FIXED: ‘$qlf\_module’/2 leaked memory and atoms on every call qlfInfo()  
never popped the XR table or the path translation pushed for the module  
info. The XR table owns the atoms it loads, so qlfModuleInfo() must not  
unregister them; it did so for the module name, class and super module,  
which kept the counts balanced only because the table was never popped.

- FIXED: loading a .qlf file did not notice changed consulted, included  
or dependency files ‘$qlf\_out\_of\_date’/3 only checked the main source  
file, so editing a member of an aggregate such as pce.qlf or emacs.qlf  
kept loading the old code until the next build. It now checks all  
sources recorded in the .qlf file, reading them in the same open as  
the compatibility check. A file that is both incompatible and out  
of date is reported as incompatible.

- ENHANCED: dark theme: keep the system window colours if they are  
dark On Windows using a contrast theme such as Night sky, the xpce  
defaults derive from the system colours. Overruling the window and  
dialog colours made the menus black on grey.

- FIXED: compile\_aux\_clauses/1: attribute predicates to the _owner_  
of an included file.

- ENHANCED: profile/1: handle interrupts while collecting data.

- PORT: macOS fat .pkg installer refused to install on Intel Macs The  
installer’s hostArchitectures was set from CMAKE\_SYSTEM\_PROCESSOR,  
i.e., the build host, so the universal package built on Apple Silicon  
only accepted arm64. Use x86\_64,arm64 for universal builds.

- ENHANCED: derive `color_term` and `hyperlink_term` from the terminal  
we run on qsave\_program/2 saved both flags, and as library(ansi\_term)  
creates them using keep(true), a saved state kept the values of the  
process that built it. A state built without a terminal, e.g., by  
make(1) writing to a pipe, never used colours. Both flags are no longer  
saved, so the library computes their defaults when the state starts.

## Package clpqr

- ENHANCED: CLP(Q,R): prefilter/2 and the occurrences of the variable  
eliminated Two more walks over the whole class that Fourier-Motzkin  
elimination did per variable:

- ENHANCED: CLP(Q,R): Fourier-Motzkin elimination in dump/3 and  
projection Two costs that grew with the size of a class rather than  
with the projection:

## Package plunit

- FIXED: make/0 after enabling optimise: unknown procedure ‘unit test’/4  
If a test unit was loaded and the file is reloaded while the tests  
are not loaded, e.g., because the `optimise` flag is now set, the  
unit stayed registered while its clauses were wiped by the reload.  
Running the tests on make/0 then raised an existence error. Reported by  
Mike Elston.

## Package xpce

- FIXED: macOS x86\_64 link: undefined \_\_\_isPlatformVersionAtLeast  
@available() below a macOS 11 deployment target calls into clang’s  
compiler-rt, which is not linked when GCC links the library. Use a  
respondsToSelector: test instead.

- DOC: Fixed EXTENDING.md Markdown and updated some of the content.

- DOC: Updated XPCE UserGuide frontpage

- DOC: describe precisely when themes use the system colours Only  
the roles, the ui\_ colours that have a sys\_, follow the  
system colours. Document how a theme is matched against the desktop  
and that a role a theme does not define remains the system colour.

- MODIFIED: text selection uses a theme colour derived from the desktop  
The editor, terminal and parbox show the selection using the background  
ui\_text\_selection\_background on all platforms. This used to be  
yellow, except on Windows, which used the system highlight. It now  
derives from the new system colour sys\_text\_selection\_background:  
selectedTextBackgroundColor on MacOS and a tint of the accent colour  
on the window background elsewhere. Selected text keeps its colour.

- ENHANCED: profiler: the browser selection follows the current node  
Making a node current from the details or the call graph selects it  
in the browser. If the filter hides it, nothing is selected, and it  
is selected again when the filter shows it.

- ENHANCED: xdot-\>load explains why graphviz could not draw the graph  
If the graphviz program is not installed or fails, the figure shows  
why instead of the graph, and keeps the text in xdot\<-problem.

- FIXED: frames and @display survive removing the last display SDL may  
report the removal of every display, e.g., a MacBook in clamshell  
mode whose external monitor goes to sleep. The last display is now  
kept as a parking place for its frames, so @display no longer fails,  
and the frames move to a display that is attached again. Frames of  
a removed display move to the display SDL reports for their window,  
and removed displays are never returned by \<-primary or \<-current if  
there is a live display.

- FIXED: colour\<-hue and colour-\>initialise using HSV were inaccurate The  
RGB/HSV conversion approximated the hue sextants by 0.17, 0.33, etc.,  
so blue had hue 241.2 instead of 240. Now use the exact conversion.

- MODIFIED: theme\_colour\<-value renamed to theme\_colour\<-derived\_from  
The instance variable `value` hid colour\<-value, the value of the  
HSV model, so a theme colour returned its source colour name rather  
than a number. This broke e.g. the HSV Colours demo, which uses the  
display foreground. Reported by Mike Elston.

- FIXED: crash redrawing a slider after the colour grey50 was freed  
The colours that C code keeps in global variables (BLACK\_COLOUR,  
GREY50\_COLOUR, …) were not locked, so they could be garbage collected  
when user code used and released the same named colour, e.g., the  
Constraints demo destroying a text coloured grey50. Now lock them,  
as well as the 3D grey of ws\_3d\_grey(). Reported by Mike Elston.

- MODIFIED: @display is the function ?(@display\_manager, current) @display  
used to name the display that was primary at startup, which went stale  
or disappeared when monitors were hotplugged. It now evaluates on  
each use to the display of the last event or, if there was none, the  
primary display. Application-wide state moved to @display\_manager:  
shared inspect handlers, -\>busy\_cursor for all displays, \<-frames of  
all displays and the armed object of library(pce\_arm).

- FIXED: MacOS dark mode: label of a disabled button was invisible  
disabledControlTextColor and controlColor are both white at 25%,  
so composed over the dialog background sys\_inactive equalled  
sys\_button\_background. sys\_inactive is now composed over the dialog  
or the button background, whichever remains most visible on both.

- ENHANCED: MacOS: distinguish dialogs from content windows Since MacOS  
26, windowBackgroundColor equals textBackgroundColor, so xpce dialogs  
were indistinguishable from content windows. If both are the same,  
sys\_dialog\_background is now secondarySystemFillColor composed over  
the window background (#ebebeb light, #303030 dark), about the sidebar  
colour used on GNOME. The translucent sys\_\* colours are composed  
over the dialog background.

- ENHANCED: icon\_button: symbolic SVG icons follow the theme An SVG  
icon that draws in `currentColor` is drawn in the colour of the class  
variable icon\_button.symbolic\_colour, by default the text colour of  
dialogs, and drawn again when the theme changes. The close and new  
tab icons are now symbolic, so they are visible in dark themes.

- ENHANCED: tab: clear feedback for the tab on top, also in dark themes  
The hidden tabs darkened their background by 15%, which is hardly  
visible on a dark background. Their background now moves a little  
towards the text colour and their labels are dimmed, which works  
for light and dark themes alike. The tab on top gets a line in the  
accent colour on top of its label, as many current applications do.  
See the class variables tab.indicator\_colour and tab.indicator\_width.  
Adds colour\<-mix to move a colour towards another colour.

- ENHANCED: kangaroo demo: coloured kangaroos with a smoother hop,  
generated on the fly The kangaroos come in four colours with a light  
belly and a dark outline, so they show on light and dark backgrounds.  
A hop has 12 frames: crouch, push off, fly with trailing legs and  
reach for the ground. The frames compensate the constant step of the  
demo, so the feet stay on the ground while crouching and all forward  
motion happens in the air. The demo generates the frames as SVG,  
loads them from a text\_buffer and shares them between kangaroos of  
the same colour. This removes the kangaroo\_\*.svg files.

- ADDED: display\_manager-\>colours\_changed notifies frames and  
graphicals; dark theme fixes -\>colours\_changed, which runs when  
the theme changes, first sends -\>colours\_changed to each frame and  
graphical whose class defines it. This allows applications to update  
colours that do not follow the theme by themselves, such as images  
drawn using image-\>draw\_in. PceDraw uses this to repaint its icons  
and the profiler to draw its call graph again.

- FIXED: PceDraw: changing an attribute of a prototype icon called  
the undefined -\>repaint\_proto Co-Authored-By: Claude Opus 5.5  
[noreply@anthropic.com](mailto:noreply@anthropic.com)

- ENHANCED: GNOME: use the libadwaita sidebar colour for the dialog  
background The libadwaita window background is almost white,  
so xpce dialogs were indistinguishable from content windows.  
sys\_dialog\_background is now the sidebar background (#ebebed light,  
#2e2e32 dark), which libadwaita uses for panels next to the content.  
The button, separator, etc. colours are derived from it.

- DOC: manual scope classification for theme\_colour and the colour changes  
Adds class theme\_colour, display\_manager -\>system\_colours\_changed,  
-\>colours\_changed and \<-\>system\_colours\_message,  
colour.dark\_hilite\_factor, and the missing colour \<-fade and  
colour.fade\_factor.

- DOC: reference manual: class theme\_colour, system colours and themes  
Adds class theme\_colour, display\_manager -\>system\_colours\_changed,  
-\>colours\_changed and \<-\>system\_colours\_message, the globals  
@colour\_names, @theme\_colours and @theme\_colour\_defaults, and  
colour.dark\_hilite\_factor. Updates the defaults of display and  
terminal\_image that are now theme colours and the description of  
display.theme.

- DOC: userguide section on themes and theme colours Describes selecting  
a theme, the theme colours and their naming, how themes replace the  
system colours if they do not match the desktop, writing a theme,  
declaring theme colours of an application and colours chosen by  
the user. Also fixes the captions of the system colour tables,  
which stopped pdflatex.

- FIXED: Epilog new window (Shift-Ctrl-I) raised an error for a terminal  
with a profile colour The new window copies the background of the  
terminal, which is a colour object. Anonymous object references  
are blobs rather than @/1 terms, so this was taken for a colour  
specification. Use is\_object\_reference/1.

- ENHANCED: Epilog profile and set\_epilog/1 colours adapt to the theme  
The background(Colour) option of a profile, the new foreground(Colour)  
option and the colours of set\_epilog/1 are theme colours. A single  
colour is adapted to the active theme, e.g., a light yellow  
background becomes dark olive in the dark theme. A list such as  
[light=lightgoldenrodyellow, dark=‘#33301e’] gives a colour per theme.

- ADDED: adaptive\_colour/3: theme colours from user colours that  
adapt to the theme adaptive\_colour(Name, Spec, Reference) defines a  
theme colour from a colour chosen by the user. Spec is a colour or  
a list Theme=Colour. A theme without a colour of its own uses the  
light colour if it is as dark or as light as Reference in that theme,  
and otherwise mirrors its lightness, keeping its hue.

- FIXED: \<-hilite of a dark colour was almost white With the default  
factor, colour\<-hilite moves the colour 90% towards white. On a dark  
background this made, e.g., the preview of menu items almost white,  
so the white text was unreadable. Dark colours now use the class  
variable colour.dark\_hilite\_factor, default 0.2.

- ADDED: select a theme from the IDE Settings menu, also against the  
desktop Settings/Theme selects “Follow the desktop” or one of the  
available themes for this session. Each system colour sys\_  
now has a theme colour ui\_ and xpce only uses these. If the  
brightness of the theme does not match the desktop, e.g., a dark theme  
on a light desktop, the theme replaces the system colours by its own.  
library(pce\_theme) defines these for the light theme. On Windows,  
buttons and scroll bars no longer use the win\_\* colours, so they  
follow the theme as well.

- FIXED: display\_manager-\>colours\_changed did not redraw windows inside  
tabs Windows nested in other devices, such as the tabs of a tab\_stack,  
were not redrawn, so they kept their old colours after switching themes.  
Walk all devices of each frame using an agenda.

- ENHANCED: development tools use theme colours The graphical debugger,  
profiler, debug monitor, cross referencer, PceEmacs bookmarks and  
the help viewer declare their colours using the new theme\_colours/1  
directive of library(pce\_theme) or use the basic ui\_\* window colours,  
so they follow switching themes. The debugger port colours are the  
debug\_port\_\* theme colours. check\_theme/1 loads the libraries that  
declare theme colours.

- ENHANCED: xpce class variable defaults use theme colours xpce  
defines the theme colours ui\_\* for the basic user interface elements  
and ansi\_\* for the terminal colours, with their light values in  
@theme\_colour\_defaults. The class variable defaults of windows,  
dialogs, editors, terminals, list browsers, menus, text items, the  
text cursor, scroll bars and the display refer to these, so they  
follow switching themes while xpce is running. The light values are  
unchanged, except that list\_browser and text selections on Unix and  
MacOS now use the system selection colours on all platforms.

- ENHANCED: PceEmacs syntax highlighting uses theme colours The colours  
of the PceEmacs syntax styles now refer to the theme colour of their  
class, e.g., syntax\_goal\_built\_in for goal(built\_in,\_), so they follow  
switching themes while the editor is open. The classes are those  
of syntax\_colour/2, including the classes added by language modes.  
library(pce\_theme) now initialises itself when it is loaded, which  
fixes loading it before library(pce).

- ADDED: class theme\_colour: colours whose value follows the theme  
theme\_colour(Name, Value) is a colour whose value is the name of  
another colour, possibly another theme colour or a system colour.  
The RGB value is computed on first use and reset for all theme  
colours if a value changes or the system colours are reloaded, so  
theme colours may refer to each other in any order. Theme colours are  
locked and never returned when looking up a colour from its RGB values.  
library(pce\_theme) now uses this class. This replaces colour-\>access  
and colour-\>rgba.

- ADDED: library(pce\_theme): semantic colours and themes that  
switch at runtime A semantic colour is a read/write, locked  
colour object whose name describes its role. Libraries declare  
semantic colours with their value in the light theme using  
pce\_theme:semantic\_colour/3. The PceEmacs syntax colours are derived  
from def\_style/2 in library(prolog\_colour), e.g., goal(built\_in,\_)  
becomes syntax\_goal\_built\_in. A theme maps names to values using  
pce\_theme:colour/3. apply\_theme/1 switches themes in place and the  
theme follows the system light/dark setting unless the user fixed it.  
check\_theme/1 reports missing, unknown, duplicate and invalid entries  
of a theme.

- ENHANCED: colour-\>access to distinguish read-only and read/write colours  
Colours are read-only by default and only colours with access `both’  
accept -\>rgba. A read/write colour is never returned when looking up  
a colour from its RGB values. Read-only colours, including colours  
created with a name and RGB values, are again entered in this reverse  
table as before.

- ADDED: colour-\>rgba and display\_manager\<-system\_colours\_message  
for theme colours colour-\>rgba changes the value of a  
colour in place. After a change of the system colours,  
display\_manager-\>system\_colours\_changed sends \<-system\_colours\_message,  
so the application can update its own colours, and redraws all windows.  
display\_manager-\>colours\_changed redraws all windows. These are the  
basis for switching between light and dark themes while xpce is running.

- ENHANCED: Windows: sys\_\* system colours follow dark mode and the accent  
colour Windows dark mode does not change GetSysColor(). If applications  
use dark mode and no contrast theme is active, the sys\_\* colours now  
use a Windows 11 dark palette with the user’s accent colour for the  
selection. The system colours are also reloaded when the user selects  
another contrast theme or accent colour, which SDL does not report.

- ADDED: reload the system colours when the desktop settings change  
display\_manager-\>system\_colours\_changed reloads the sys\_\* and platform  
system colours, updates the named colour objects in place and redraws  
all windows. It is sent when the user switches between light and  
dark mode and, on MacOS, also when the accent or highlight colour or  
the contrast changes.

- ADDED: sys\_\* system colours follow GNOME’s style and accent colour Under  
GNOME, the sys\_\* colours are taken from a built-in libadwaita palette.  
The XDG Desktop Portal tells us whether to use the dark style, high  
contrast and the accent colour (GNOME 47+). The portal is read using  
GIO, which is optional.

- ADDED: sys\_\* system colours follow the KDE colour scheme When running  
under KDE, the colours of the scheme in kdeglobals are available as  
kde\_ _(e.g., kde\_view\_background\_normal) and define the  
sys_\* colours, so xpce follows light and dark KDE schemes.

- ADDED: portable sys\_\* system colours and MacOS mac\_\* colours The  
colour names sys\_window\_background, sys\_selection\_background, etc.  
are defined on all platforms and follow the desktop settings on Windows  
and MacOS. On MacOS, the AppKit named colours are available as mac\__.  
xpce’s defaults now use the sys\__ names, so on MacOS the GUI follows  
light/dark mode and the accent colour.

- ENHANCED: profiler GUI: make the flat profile as wide as its predicates  
When loading a profile, the column with the flat profile is made as  
wide as the longest predicate and a time, up to `max_width` percent  
of the profiler.

- ADDED: profiler GUI: filter the predicates as you type A filter\_item  
above the flat profile shows only the predicates whose label matches.  
The details and the call graph still reach predicates the filter hides.

- ADDED: library(pce\_filter\_item): filter as you type Class filter\_item  
calls its message with a regex or @nil as the text changes. Used by  
the cross-referencer and the navigator, whose filters did not react  
to the clear button of the text item.

- FIXED: text\_image -\>tab\_stops did not lay out the text again Lines laid  
out before the tab stops changed kept the old stops, so a browser that  
sets its tab stops when it is resized showed its columns misaligned.  
Also check the type of the last tab stop.

- ADDED: profiler GUI: call graph of the current predicate The right  
of the profiler holds the details and a kcachegrind-style call  
graph as tabs. The graph, laid out by graphviz using library(xdot),  
shows the callers above and the callees below the current predicate,  
marked by a star. Boxes are tinted by their time and arrows are as  
thick as the time that flows along them. Clicking a box makes it  
the current predicate.

- ENHANCED: pane\_stack \<-window also finds windows in a nested  
tabbed\_window Co-Authored-By: Claude Opus 5.5 [noreply@anthropic.com](mailto:noreply@anthropic.com)

- ENHANCED: xdot\_window: \<-natural\_zoom defaults to a class variable  
This allows subclasses and the Defaults file to set the preferred  
zoom for -\>fit.

- FIXED: xdot: tooltips showed `\n` rather than a line break Graphviz  
passes the escapes of its escString type through to the tooltip.  
Translate `\n`, `\l`, `\r` and `\\`. Also, the tooltip was used as  
a format string, which garbled a tooltip holding a `%`.

- ENHANCED: Windows: report a dark system theme for dark system colours  
Contrast themes such as Night sky have a dark window colour but do  
not set dark mode. @display\<-system\_theme now also returns dark if  
the luminance of win\_window is low.

- FIXED: Windows: make xpce follow the system colours, e.g., contrast  
themes Contrast themes such as Night sky change the system colours  
without setting dark mode. Dialogs took their background from  
win\_btnface but kept a black foreground, making menus unreadable.  
The display, dialogs, button elevations, editors, list browsers,  
text margins and the terminal now use the matching win\_\* colours.  
Added win\_menubar and win\_menuhilight.

- MODIFIED: tracer: the terminal button opens a terminal below the  
debugger The IDE no longer has -\>open\_interactor. The tracer’s button  
(and its method, now -\>terminal) asks `prolog_ide ->new_terminal`  
for a low pane below the debugger, for which -\>new\_terminal accepts  
a side, the pane to put it beside and the share of the room it takes.

- FIXED: SDL/X11: dropping files did nothing with SDL \< 3.4.4 if the  
source offers text before text/uri-list SDL before 3.4.4 on X11 uses  
the first type the drag source offers. If a file manager lists text  
before text/uri-list, the files arrive as drop\_text events holding a  
file name or file:// URI. For these SDL versions, treat a drop\_text  
whose lines are all existing files as dropped files.

- MODIFIED: pce\<-window\_system\_version is 10000_Major+100_Minor+Patch  
This is consistent with pce\<-version: number and allows testing for  
a specific SDL release. pce\<-window\_system\_revision is removed.  
The banner and pce-\>info now print the full SDL version.

- FIXED: SDL/X11: dropping files on the console or PceEmacs did nothing  
Using X11, SDL reports XdndLeave, which is sent before the drop, as  
drop\_complete. The files follow as a separate drop\_begin, drop\_file,  
drop\_complete sequence without a position. We lost the target window  
at the first drop\_complete and sent the files to the frame. Keep the  
window and its last drop position until the next drop\_position.

- PORT: macOS 10.15: paste from other applications pasted nothing SDL3  
asks the pasteboard for text/plain;charset=utf-8, which macOS 10.15  
does not map to the type other applications provide (SDL issue #13737).  
If that yields “”, ask for public.utf8-plain-text directly.

- FIXED: SDL: deliver a file drop to the window that showed the drop hint  
SDL gives drop\_file, drop\_text and drop\_complete no position of their  
own; they reuse the last drop\_position, which a drop\_complete resets to  
(0,0). Route them to the window that received the last drop\_position  
instead of looking the window up by position, so dropping files on  
PceEmacs no longer sometimes does nothing. When a drag moves to another  
window of the same frame, e.g. from PceEmacs to a terminal, send the  
old window a drop\_complete without files, so it removes its drop hint.

- FIXED: tab\_frame\<-members, compatible with frame\<-members  
@prolog\_ide\<-current\_epilog asked the tab of the current event for  
its members, raising a warning and falling back to the last used  
terminal when compiling from PceEmacs (C-c C-m, C-c C-b).

- PORT: macOS \<= 12: crash creating the native menu bar (take two)  
-setWindowsMenu: indexes into the Window menu it is given and asserts  
if the menu is empty. Fill it with the standard items (Minimize,  
Zoom, Bring All to Front) before registering it.

- PORT: macOS 10.15: crash creating the native menu bar -setWindowsMenu:  
asserts the menu is part of the main menu on older macOS versions.  
Add the Window item before registering it.
