summary refs log tree commit diff
path: root/src/components/post_editor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/post_editor.rs')
-rw-r--r--src/components/post_editor.rs24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/components/post_editor.rs b/src/components/post_editor.rs
index 863e515..d08685a 100644
--- a/src/components/post_editor.rs
+++ b/src/components/post_editor.rs
@@ -88,10 +88,12 @@ impl Post {
 pub(crate) struct PostEditor<E> {
     #[no_eq] smart_summary_busy_guard: Option<gtk::gio::ApplicationBusyGuard>,
     sending: bool,
+    #[do_not_track] #[allow(dead_code)] spell_checker: spelling::Checker,
+    #[do_not_track] spelling_adapter: spelling::TextBufferAdapter,
 
     #[do_not_track] name_buffer: gtk::EntryBuffer,
     #[do_not_track] summary_buffer: gtk::EntryBuffer,
-    #[do_not_track] content_buffer: gtk::TextBuffer,
+    #[do_not_track] content_buffer: sourceview5::Buffer,
 
     #[do_not_track] pending_tag_buffer: gtk::EntryBuffer,
     #[do_not_track] tags: relm4::factory::FactoryVecDeque<TagPill>,
@@ -241,6 +243,9 @@ impl<E: std::error::Error + std::fmt::Debug + Send + 'static> Component for Post
                             #[name = "content_textarea"]
                             gtk::TextView {
                                 set_buffer: Some(&model.content_buffer),
+                                set_extra_menu: Some(&model.spelling_adapter.menu_model()),
+                                insert_action_group: ("spelling", Some(&model.spelling_adapter)),
+
                                 set_hexpand: true,
                                 #[iterate]
                                 add_css_class: &["frame", "view"],
@@ -340,15 +345,25 @@ impl<E: std::error::Error + std::fmt::Debug + Send + 'static> Component for Post
         #[cfg(feature = "smart-summary")]
         let (http, init) = init;
 
+        let spell_checker = spelling::Checker::default();
+        let content_buffer = Default::default();
+
         let mut model = Self {
             smart_summary_busy_guard: None,
             sending: false,
 
+            spelling_adapter: spelling::TextBufferAdapter::new(
+                &content_buffer,
+                &spell_checker
+            ),
+            spell_checker,
+
             name_buffer: gtk::EntryBuffer::default(),
             summary_buffer: gtk::EntryBuffer::default(),
-            content_buffer: gtk::TextBuffer::default(),
-            pending_tag_buffer: gtk::EntryBuffer::default(),
+            content_buffer,
 
+
+            pending_tag_buffer: gtk::EntryBuffer::default(),
             tags: FactoryVecDeque::builder()
                 .launch({
                     let listbox = gtk::Box::default();
@@ -383,10 +398,11 @@ impl<E: std::error::Error + std::fmt::Debug + Send + 'static> Component for Post
         let visibility_model = adw::EnumListModel::new(Visibility::static_type());
 
         let widgets = view_output!();
-
         #[cfg(feature = "smart-summary")]
         widgets.summary_field.append(model.smart_summary.widget());
 
+        model.spelling_adapter.set_enabled(true);
+
         widgets.visibility_selector.set_expression(Some(
             gtk::ClosureExpression::new::<String>(
                 [] as [gtk::Expression; 0],