there was a regression that caused error messages to not be displayed
any more when zapping.
Now when you click the zap button and the zap fails for some reason, the
zap button will be replaced with an X and hovering over the X displays
the error message
Signed-off-by: kernelkind <kernelkind@gmail.com>
- Added `SoftKeyboardContext` enum and support for calculating keyboard
insets from both virtual and platform sources
- Updated `AppContext` to provide `soft_keyboard_rect` for determining
visible keyboard area
- Adjusted UI rendering to shift content when input boxes intersect with
the soft keyboard, preventing overlap
- Modified `MainActivity` and Android manifest to use
`windowSoftInputMode="adjustResize"` and updated window inset handling
- Introduced helper functions (`include_input`, `input_rect`,
`clear_input_rect`) in `notedeck_ui` for tracking focused input boxes
- Fixed Android JNI keyboard height reporting to clamp negative values
Together, these changes allow the app to correctly detect and respond
to soft keyboard visibility on Android, ensuring input fields remain
accessible when typing.
Fixes: https://github.com/damus-io/notedeck/issues/946
Fixes: https://github.com/damus-io/notedeck/issues/1043
kernelkind (5):
TMP: use new egui-nav to fix scroll offset issues
add `scroll_offset` to `NoteAction::Note`
add `ThreadNote::set_scroll_offset`
set scroll offset when routing to thread
appease clippy
Introduces an `AnimationMode` enum with `Reactive`, `Continuous`, and
`NoAnimation` variants to allow fine-grained control over GIF playback
across the UI. This supports performance optimizations and accessibility
features, such as disabling animations when requested.
- Plumbs AnimationMode through image rendering paths
- Replaces hardcoded gif frame logic with reusable `process_gif_frame`
- Supports customizable FPS in Continuous mode
- Enables global animation opt-out via `NoteOptions::NoAnimations`
- Applies mode-specific logic in profile pictures, posts, media carousels, and viewer
Animation behavior by context
-----------------------------
- Profile pictures: Reactive (render only on interaction/activity)
- PostView: NoAnimation if disabled in NoteOptions, else Continuous (uncapped)
- Media carousels: NoAnimation or Continuous (capped at 24fps)
- Viewer/gallery: Always Continuous (full animation)
In the future, we can customize these by power settings.
Signed-off-by: William Casarin <jb55@jb55.com>
The "top vs bottom" client label setting was cluttering the UI and
codebase with toggles that added little value. This consolidates client
label handling into one option, removes unused CLI/settings knobs, and
makes NoteView’s API consistent and fluent. Result: fewer knobs, less
branching, and a clearer, more predictable UI.
Now client labels are only shown in one place: selected notes.
- Drop `--show-client` arg in notedeck and `--show-note-client=top|bottom`
args in notedeck_columns
- Remove `NotedeckOptions::ShowClient` and related CLI parsing
- Delete `ShowSourceClientOption` enum, settings UI, and
`SettingsAction::SetShowSourceClient`
- Collapse `NoteOptions::{ClientNameTop, ClientNameBottom}` into a single
`NoteOptions::ClientName`
- Add `NoteOptions::{Framed, UnreadIndicator}`
- Move “framed” and unread indicator into flags (no more ad‑hoc bools)
- Add new NoteView builder methods: `.client_name()`, `.frame()`,
`.unread_indicator()`, and `.selected_style()`
- CLI flags for showing client labels have been removed
- `ClientNameTop`/`ClientNameBottom` replaced with `ClientName`
- API using `framed` or `show_unread_indicator` booleans must now use
the new flag setters
Signed-off-by: William Casarin <jb55@jb55.com>