commit 44edffc59679af89a9e7e8bb1db6236e5f7ec94a
parent 6596e89e2903b56e942ed45a6c979ae0aa2c61de
Author: William Casarin <jb55@jb55.com>
Date: Fri, 11 Jul 2025 15:36:56 -0700
android/input: add copy/paste context to post input
Fixes: https://github.com/damus-io/notedeck/issues/942
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
5 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/crates/notedeck/src/note/mod.rs b/crates/notedeck/src/note/mod.rs
@@ -23,6 +23,7 @@ pub struct NoteContext<'d> {
pub pool: &'d mut RelayPool,
pub job_pool: &'d mut JobPool,
pub unknown_ids: &'d mut UnknownIds,
+ pub clipboard: &'d mut egui_winit::clipboard::Clipboard,
pub current_account_has_wallet: bool,
}
diff --git a/crates/notedeck_columns/src/nav.rs b/crates/notedeck_columns/src/nav.rs
@@ -432,6 +432,7 @@ fn render_nav_body(
pool: ctx.pool,
job_pool: ctx.job_pool,
unknown_ids: ctx.unknown_ids,
+ clipboard: ctx.clipboard,
current_account_has_wallet: get_current_wallet(ctx.accounts, ctx.global_wallet).is_some(),
};
match top {
@@ -604,7 +605,7 @@ fn render_nav_body(
&(&ctx.accounts.get_selected_account().key).into(),
&mut app.jobs,
)
- .show(ui, ctx.clipboard)
+ .show(ui)
.map(RenderNavAction::NoteAction)
}
Route::NewDeck => {
diff --git a/crates/notedeck_columns/src/ui/note/post.rs b/crates/notedeck_columns/src/ui/note/post.rs
@@ -14,12 +14,13 @@ use egui::{
};
use enostr::{FilledKeypair, FullKeypair, KeypairUnowned, NoteId, Pubkey, RelayPool};
use nostrdb::{Ndb, Transaction};
-use notedeck_ui::app_images;
-use notedeck_ui::blur::PixelDimensions;
-use notedeck_ui::images::{get_render_state, RenderState};
-use notedeck_ui::jobs::JobsCache;
use notedeck_ui::{
+ app_images,
+ blur::PixelDimensions,
+ context_menu::{input_context, PasteBehavior},
gif::{handle_repaint, retrieve_latest_texture},
+ images::{get_render_state, RenderState},
+ jobs::JobsCache,
note::render_note_preview,
NoteOptions, ProfilePic,
};
@@ -186,6 +187,13 @@ impl<'a, 'd> PostView<'a, 'd> {
let out = textedit.show(ui);
+ input_context(
+ &out.response,
+ self.note_context.clipboard,
+ &mut self.draft.buffer.text_buffer,
+ PasteBehavior::Append,
+ );
+
if updated_layout {
self.draft.buffer.selected_mention = false;
}
@@ -792,6 +800,7 @@ mod preview {
job_pool: app.job_pool,
unknown_ids: app.unknown_ids,
current_account_has_wallet: false,
+ clipboard: app.clipboard,
};
PostView::new(
diff --git a/crates/notedeck_columns/src/ui/search/mod.rs b/crates/notedeck_columns/src/ui/search/mod.rs
@@ -52,22 +52,18 @@ impl<'a, 'd> SearchView<'a, 'd> {
}
}
- pub fn show(&mut self, ui: &mut egui::Ui, clipboard: &mut Clipboard) -> Option<NoteAction> {
- padding(8.0, ui, |ui| self.show_impl(ui, clipboard)).inner
+ pub fn show(&mut self, ui: &mut egui::Ui) -> Option<NoteAction> {
+ padding(8.0, ui, |ui| self.show_impl(ui)).inner
}
- pub fn show_impl(
- &mut self,
- ui: &mut egui::Ui,
- clipboard: &mut Clipboard,
- ) -> Option<NoteAction> {
+ pub fn show_impl(&mut self, ui: &mut egui::Ui) -> Option<NoteAction> {
ui.spacing_mut().item_spacing = egui::vec2(0.0, 12.0);
let search_resp = search_box(
&mut self.query.string,
self.query.focus_state.clone(),
ui,
- clipboard,
+ self.note_context.clipboard,
);
search_resp.process(self.query);
diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs
@@ -217,6 +217,7 @@ impl<'a> DaveUi<'a> {
pool: ctx.pool,
job_pool: ctx.job_pool,
unknown_ids: ctx.unknown_ids,
+ clipboard: ctx.clipboard,
current_account_has_wallet: false,
};