Repository navigation
v0.22.0
Added
cargo-teksilo
cargo teksilo initsays when an app does not ask Windows for a larger
main-thread stack, and prints thebuild.rsthat does. Windows gives the
main thread 1 MiB, against 8 MiB on Linux and macOS, and a large app's debug
build can overflow it while building its first window. The app guide's
Adding Teksilo has the same snippet.
Settings
AppPaths::runtime_dir()andAppPaths::create_runtime_dir(): a short,
per-user directory for an application's sockets and lock files. It is
$XDG_RUNTIME_DIR/<app>on Linux and the macOS per-user temporary
directory (under/var/folders/) with the bundle id on macOS; Windows has
none. A Unix socket's path holds 104 bytes on macOS, which the data
directory under Application Support can leave too little of.
create_runtime_dirmakes it private to the user and refuses a symbolic
link, a file, or a directory another user owns.
Widgets
- Shift+Enter in
RichTextEditorbreaks the line inside a paragraph,
list item or quotation, for verse, a letter or song lyrics, as in
LibreOffice, Word and Qt. It used to start a new paragraph, as Enter does.
RichTextEditor::insert_line_breakandEditorHandle::insert_line_break
insert one from a menu row. In a table cell and a code block Shift+Enter
still does what Enter does. Copied or dragged to another program, the break
is a new line. A host that claims Enter inon_key_preview, such as a chat
composer, now gets a line break from Shift+Enter instead of a paragraph.
Needs text-document 1.14 and text-typeset 2.1.
Changed
Widgets
EditCommandKindhas a new variant,InsertLineBreak, so amatch
over it needs an arm for it.
Settings
- On macOS, settings and data now live in
~/Library/Application Support,
and are moved there.AppPaths::newgave the Linux directories on macOS
(~/.config/<app>and~/.local/share/<app>), where its documentation
promised Application Support. They are now
~/Library/Application Support/<bundle id>/configand.../data, the
bundle id being<qualifier>.<organization in lower case>.<Application>.
The first start moves an application's existing settings and data there,
once; from another volume it copies them and leaves the originals. Linux
and Windows are unchanged.
Fixed
Core
- A click outside an in-window modal reaches the control beneath again.
Since 0.21.0 a click outside a modal presented from the page (from the
window's root, for instance) closed the modal and went nowhere, so the user
had to click twice. It closes the modal and reaches the control under the
pointer, as in 0.20.0; a click on the control that opened the modal still
only closes it.
App
- Releasing Alt no longer puts a window into menu-bar mode when the Alt
press happened elsewhere. After Alt+F4 closed a window, or Alt+Tab
brought one forward, the window that took the focus read the release of
Alt as a bare Alt tap and moved the keyboard focus to its menu bar, so the
next key typed went nowhere. On Windows, Alt+Tab away from a window did the
same to the window left behind. A tap now counts only when the window saw
both the press and the release of Alt, with no other key between. - Alt+F4, or a window's close button, with an in-window modal open closes
the modal, not the window. The window's close guard ran over the open
modal ("Save changes before closing?" over a settings dialog). A close the
user asks for now does what Escape would in the modal, as Alt+F4 closes a
dialog window and not the window behind it; a modal Escape cannot close
stays, and nothing closes. The next request reaches the window, and the
Alt of that Alt+F4 does not put its menu bar in keyboard mode.
ctx.close_window()and a quit still ask the window's guard. - A restored window comes back on its own monitor, and inside the
screen. A window saved on a second monitor came back centred on the
primary one, and a restored window could hang under the taskbar or past
the edge of a smaller screen: its saved size was checked against the
primary monitor's whole area, title bar not counted. It now comes back on
the monitor it was on, moved into that monitor's work area (the screen
less the taskbar, the Dock and the menu bar, the panels) and shrunk to fit
if it must be, title bar included. Wayland still places windows itself.
Widgets
-
A custom title bar stays live under an in-window modal. The modal's
scrim covered it: while a dialog was open in the window, the window could
not be moved, minimised or maximised, and its close button did nothing.
It now drags by its title bar, a double click maximises it, its buttons
andWindowFrameedges work, and the close button closes the modal as
Escape would, whateverTitleBar::close_actionit was given. What the app
put in the title bar stays behind the modal. -
Typing in a text field no longer takes the Snap layouts from a custom
title bar on Windows. A key, an edit command or an accessibility request
in aTextInputField,RichTextEditororCodeEditormounted the
window-wide layer that holds the touch selection handles, with no handle
to show, and it stayed for the editor's life. A custom title bar counted
it as covering its caption, so on Windows the whole bar answered as client
area: no Snap layouts, and the caption buttons and drag worked only through
the app. An embeddedWebViewhid under it too. The layer now mounts only
once a finger raises a handle, and the title bar and aWebViewcount it,
and any overlay that lets presses through, only where its handles are: the
empty layer a finger leaves behind no longer hides aWebVieweither. -
In
RichTextEditor, a key pressed in the same frame as typing comes
after the typing. Typed characters wait for the next frame, and Enter,
Backspace, the arrows, an edit command such as Ctrl+Z, a paste (by key,
from the context menu or from the application) and a format command acted
before them: typing "ab" and pressing Enter quickly
gave a new paragraph holding "ab". Fast typing, automation and remote
desktops could hit it. -
Text from another program keeps its paragraphs and line breaks in
RichTextEditor. Text dropped from another program, and text an
assistive technology writes (dictation, a braille display), went into one
paragraph with its newlines inside it. Each paragraph break (\n,\r\n,
U+2029) now starts a paragraph, as in a paste, and a line break (U+2028, or
the vertical tab Word writes for one) is a line break inside the
paragraph, in a paste too. A typed U+2029 starts a paragraph. -
A single-line field keeps out a line or paragraph separator (U+2028,
U+2029) typed or pasted from another program, as it keeps out a\n.
text-typeset 2.1 breaks the line at either, so the field showed two lines.
Applies toTextInput,PasswordField,SpinBoxand everything else
built onTextInputField.
Platform
- A window with a menu of its own keeps the Window and Help menus on
macOS. Its bar showed only its own menus, so a window minimised while it
was in front came back only from the Dock. A window's menu that declares
no Window or Help menu now shows the application menu's. - macOS no longer merges an application's windows into tabs by default.
The Window menu loses the tab rows (Show Previous Tab, Merge All Windows
and the rest).TeksiloAppBuilder::window_tabbing(true)turns tabbing back
on. - A menu titled like the standard Window or Help menu shows once in the
macOS menu bar. A model with its own Window menu, for the in-window bar,
andStandardMenu::window()showed two Window menus on macOS. The own
menu's rows now go into the standard one, below Zoom; the in-window bar is
unchanged. - A custom-chrome window has the size it asks for on Windows, and no longer
grows on every launch. A window withDecorationsMode::CustomChrome
opened larger than its configured size by the Windows frame (16 x 39 px at
100 %), and its minimum and maximum sizes and a size set through
WindowState::size()were off by the same amount. With saved window
state, the larger size was saved and grew again at each launch. A size
already saved that way is kept, not shrunk back.
Security
Cargo.lockmoves rustls, rustls-webpki, webpki-roots,
webpki-root-certs, ctutils, crypto-bigint, zstd, zstd-safe and zstd-sys
past their RustSec advisories, which matters to the binaries installed
withcargo install --locked(cargo-teksilo,
teksilo-automation-mcp). Thezipadvisories remain:zip6 and 8 come
from text-document's EPUB and DOCX exporters.
Full Changelog: v0.21.0...v0.22.0