diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs index f95a40a..244c09f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,9 @@ use relm4::{gtk, prelude::{AsyncComponent, AsyncComponentController, AsyncCompon pub mod components { pub(crate) mod smart_summary; - pub(crate) use smart_summary::{SmartSummaryButton, Output as SmartSummaryOutput}; + pub(crate) use smart_summary::{ + SmartSummaryButton, Output as SmartSummaryOutput, Input as SmartSummaryInput + }; } mod widgets; pub mod secrets; @@ -36,6 +38,14 @@ pub struct PostComposerModel { #[do_not_track] smart_summary: AsyncController<components::SmartSummaryButton>, } +impl PostComposerModel { + fn busy_changed(&self) -> bool { + self.changed(Self::submit_busy_guard() | Self::smart_summary_busy_guard()) + } + fn busy(&self) -> bool { + self.submit_busy_guard.is_some() || self.smart_summary_busy_guard.is_some() + } +} #[derive(Debug)] #[allow(private_interfaces)] @@ -72,8 +82,8 @@ impl AsyncComponent for PostComposerModel { send_button = gtk::Button { set_label: "Post", connect_clicked => Self::Input::Submit, - #[track = "model.changed(Self::submit_busy_guard())"] - set_sensitive: model.submit_busy_guard.is_none(), + #[track = "model.busy_changed()"] + set_sensitive: !model.busy(), }, bar = adw::HeaderBar::new() { @@ -128,8 +138,8 @@ impl AsyncComponent for PostComposerModel { gtk::Entry { set_hexpand: true, set_buffer: &model.summary_buffer, - #[track = "model.changed(Self::smart_summary_busy_guard() | Self::submit_busy_guard())"] - set_sensitive: model.smart_summary_busy_guard.is_none() && model.submit_busy_guard.is_none(), + #[track = "model.busy_changed()"] + set_sensitive: !model.busy(), }, model.smart_summary.widget(), @@ -264,7 +274,7 @@ impl AsyncComponent for PostComposerModel { micropub: Arc::new(init), smart_summary: components::SmartSummaryButton::builder() - .launch(content_buffer) + .launch(()) .forward(sender.input_sender(), PostComposerInput::SmartSummary), tracker: Default::default() @@ -335,7 +345,15 @@ impl AsyncComponent for PostComposerModel { self.set_smart_summary_busy_guard( Some(relm4::main_adw_application().mark_busy()) ); - self.summary_buffer.set_text(""); + if self.smart_summary.sender().send(components::SmartSummaryInput::Text( + self.content_buffer.text( + &self.content_buffer.start_iter(), + &self.content_buffer.end_iter(), + false + ).into() + )).is_ok() { + self.summary_buffer.set_text(""); + } }, PostComposerInput::SmartSummary(components::SmartSummaryOutput::Chunk(text)) => { self.summary_buffer.insert_text(self.summary_buffer.length(), text); |