Sign in to any Nextcloud server (also private ones in a subfolder, with
their own port or a self-signed certificate) through the browser with
Login Flow v2; the app gets an app password of its own, which
"Disconnect" revokes again.
A background thread syncs the storage folder with the folder ink-notes
on the server every 30 seconds and shortly after saving, three-way
against the state after the last pass: one-sided changes are copied,
manifests and library.json are merged, a page changed on both sides is
kept twice (the server's version as conflict copy, which disk_watch
turns into a page), empty pages give way, deletions go into the trash
on both sides and lose against changes. Changes to the open notebook
wait while it has unsaved changes. Folder ETags spare listing unchanged
notebooks; the pass stops instead of deleting when the storage folder
or the server folder is missing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Pen vs. finger (#44): the patched winit hands Android pointers with
tool type stylus/eraser to the app separately (take_pen_samples, with
hover and button state) instead of as touch events. src/pen.rs turns
them, like octotablet's events on the desktop, into one PenInput
stream, so pen buttons, the eraser end and palm rejection work the
same everywhere. Hover exit right before touch-down does not count as
leaving; a pen without hover leaves 150 ms after lifting.
- Soft keyboard: shown via AndroidApp::show_soft_input when a text field
gets focus, hidden when it loses it. The patched winit now fills
KeyEvent::text, so typed characters reach egui.
- Exports (PDF, PNG, SVG) are written to the app folder and copied to
Download/ink-notes through the MediaStore (Android 10+, via JNI).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
printpdf 0.7 pinned lopdf 0.31; newer printpdf versions are a complete
rewrite. The export now uses src/pdf_writer.rs, a small writer on top of
lopdf 0.46 with the subset of the printpdf API the export used: pages with
layers (optional content groups), paths, embedded TrueType fonts (Type0,
Identity-H, ToUnicode), images and bookmarks. Bookmark titles are written
as UTF-16BE directly, so the post-processing step for them is gone.
pdf_merge uses lopdf 0.46 as well.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shared groundwork:
- paths.rs: folders for data, settings and downloads per system (Linux XDG
unchanged, Windows %APPDATA%/%LOCALAPPDATA%, Android app folder)
- Linux-only parts behind cfg: Wayland on-screen keyboard (osk/wayland.rs),
display backend and app id, the vendored winit touch extensions
- run_with(event_loop) so that other entry points can start the app
Windows (#48):
- cross-compiled with MinGW into a portable ink-notes_<version>_x86_64.exe
(system DLLs only), no console window in release builds
- file picker: user folders and drives; held notebook locks are detected
(ERROR_LOCK_VIOLATION)
- updater: replaces the running .exe via rename, active at the next start
- octotablet panicking without the Tablet PC components no longer crashes
the app
- release: .exe built in CI and part of the signed checksums
- all library tests pass under wine
Android (#42):
- android_main entry point, winit with android-native-activity,
android_logger; octotablet and arboard left out there
- cargo check and the cdylib build for aarch64-linux-android pass; the window
surface does not follow the activity lifecycle yet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The import (menu entry and drag & drop) now also accepts .rnote files
from Rnote 0.5.10 on, including the transformation and document config
layouts that changed in 0.13 and 0.15. Taken over: brush strokes with
their pressure curve, shapes as outlines, texts, bitmap images and SVG
images, which are rasterized with resvg (Rnote stores imported PDF
pages as SVG). Fixed-size and continuous documents keep their pages;
infinite ones become an endless notebook.
The parts shared with the Xournal++ import moved to src/import.rs.
resvg and its dependencies were added to the Flatpak cargo sources.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The import menu entry (formerly "Import PDF") and drag & drop now also
accept .xopp and .xoj files. Each Xournal page becomes a page of a new
notebook: strokes with pen pressure, highlighters, texts, embedded
images, lined/squared/dotted paper, image backgrounds and PDF
backgrounds (looked up at the stored path and next to the file). All
layers are flattened in order; LaTeX formulas are skipped and counted
in the status message.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
winit 0.29 draws the title bar itself on Wayland but only handles the
mouse there. A vendored copy of winit 0.29.15 (vendor/winit, used via
[patch.crates-io]) passes touches on the decorations to the frame like a
left click, so close, minimize and maximize work with a finger and
dragging the title bar moves the window.
CI no longer sets a global -D warnings, which would also apply to the
vendored crate; clippy still runs with -D warnings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GNOME blendet die Bildschirmtastatur erst ein, wenn ein bereits aktives
Textfeld zwp_text_input_v3.enable erneut meldet (wie GTK beim Antippen).
winit meldet enable nur einmal. Ein eigenes text-input-Objekt auf
derselben Wayland-Verbindung schickt das zweite enable, wenn ein Textfeld
den Fokus bekommt oder erneut angetippt wird.
- Zeichen der Bildschirmtastatur kommen als IME-Text ohne Vorschau; egui
0.27 fügte davon nur das erste ein. Sie werden jetzt als normaler Text
übergeben.
- Die Rücktaste löscht über delete_surrounding_text; dafür meldet das
eigene Objekt einen Platzhalter-Umgebungstext und übersetzt das Löschen
in Tastendrücke.
- Ein Fingertipp ging verloren, wenn GNOME beim Antippen den Mauszeiger
ausblendet (CursorLeft bei aufliegendem Finger); das Ereignis erreicht
egui in dem Fall nicht mehr.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>