diff --git a/data/icons/paper-plane-symbolic.svg b/data/icons/paper-plane-symbolic.svg
new file mode 100644
index 0000000..d62ac49
--- /dev/null
+++ b/data/icons/paper-plane-symbolic.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/data/resources/resources.gresource.xml b/data/resources/resources.gresource.xml
index 651be08..dff7bdd 100644
--- a/data/resources/resources.gresource.xml
+++ b/data/resources/resources.gresource.xml
@@ -10,5 +10,6 @@
../icons/dice3-symbolic.svg
+ ../icons/paper-plane-symbolic.svg
diff --git a/data/resources/ui/window.blp b/data/resources/ui/window.blp
index 2264e09..a0cd37d 100644
--- a/data/resources/ui/window.blp
+++ b/data/resources/ui/window.blp
@@ -132,8 +132,19 @@ template $NotifyWindow : Adw.ApplicationWindow {
margin-start: 8;
margin-end: 8;
Adw.Clamp {
- Entry entry {
- placeholder-text: "Message...";
+ Gtk.Box {
+ spacing: 8;
+ Entry entry {
+ placeholder-text: "Message...";
+ hexpand: true;
+ }
+ Gtk.Button send_btn {
+ styles [
+ "circular",
+ "suggested-action"
+ ]
+ icon-name: "paper-plane-symbolic";
+ }
}
}
}
diff --git a/src/widgets/add_subscription_dialog.rs b/src/widgets/add_subscription_dialog.rs
index 375bf8e..1bdfb67 100644
--- a/src/widgets/add_subscription_dialog.rs
+++ b/src/widgets/add_subscription_dialog.rs
@@ -126,6 +126,7 @@ impl AddSubscriptionDialog {
add_css_class: "suggested-action",
add_css_class: "pill",
set_halign: gtk::Align::Center,
+ set_sensitive: false,
connect_clicked[obj] => move |_| {
obj.emit_subscribe_request();
obj.close();
diff --git a/src/widgets/window.rs b/src/widgets/window.rs
index 8fbdd64..b042923 100644
--- a/src/widgets/window.rs
+++ b/src/widgets/window.rs
@@ -72,6 +72,8 @@ mod imp {
pub message_scroll: TemplateChild,
#[template_child]
pub banner: TemplateChild,
+ #[template_child]
+ pub send_btn: TemplateChild,
pub notifier: OnceCell,
pub conn: OnceCell,
pub settings: gio::Settings,
@@ -81,24 +83,25 @@ mod imp {
impl Default for NotifyWindow {
fn default() -> Self {
let this = Self {
- headerbar: TemplateChild::default(),
- message_list: TemplateChild::default(),
- entry: TemplateChild::default(),
- subscription_view: TemplateChild::default(),
- navigation_split_view: TemplateChild::default(),
- subscription_menu_btn: TemplateChild::default(),
- subscription_list: TemplateChild::default(),
- toast_overlay: TemplateChild::default(),
- stack: TemplateChild::default(),
- welcome_view: TemplateChild::default(),
- list_view: TemplateChild::default(),
- message_scroll: TemplateChild::default(),
- banner: TemplateChild::default(),
+ headerbar: Default::default(),
+ message_list: Default::default(),
+ entry: Default::default(),
+ subscription_view: Default::default(),
+ navigation_split_view: Default::default(),
+ subscription_menu_btn: Default::default(),
+ subscription_list: Default::default(),
+ toast_overlay: Default::default(),
+ stack: Default::default(),
+ welcome_view: Default::default(),
+ list_view: Default::default(),
+ message_scroll: Default::default(),
+ banner: Default::default(),
subscription_list_model: gio::ListStore::new::(),
settings: gio::Settings::new(APP_ID),
- notifier: OnceCell::new(),
- conn: OnceCell::new(),
- banner_binding: Cell::new(None),
+ notifier: Default::default(),
+ conn: Default::default(),
+ banner_binding: Default::default(),
+ send_btn: Default::default(),
};
this
@@ -139,7 +142,6 @@ mod imp {
this.show_subscription_info();
});
klass.install_action("win.clear-notifications", None, |this, _, _| {
- /*spawn_local(this.subscription().clear_notifications().map_err(this.near_toast_overlay().error_handler()));*/
this.selected_subscription().map(|sub| {
this.spawn_with_near_toast(sub.clear_notifications());
});
@@ -203,23 +205,27 @@ impl NotifyWindow {
// Load latest window state
obj.load_window_size();
obj.bind_message_list();
- obj.connect_entry_changed();
+ obj.connect_entry_and_send_btn();
obj.connect_items_changed();
obj.selected_subscription_changed(None);
obj.bind_flag_read();
obj
}
- fn connect_entry_changed(&self) {
+ fn connect_entry_and_send_btn(&self) {
let imp = self.imp();
let this = self.clone();
- imp.entry.connect_activate(move |entry| {
+ let entry = imp.entry.clone();
+ let publish = move || {
let p = this
.selected_subscription()
.unwrap()
.publish(entry.text().as_str());
entry.spawn_with_near_toast(async move { p.await });
- });
+ };
+ let publishc = publish.clone();
+ imp.entry.connect_activate(move |_| publishc());
+ imp.send_btn.connect_clicked(move |_| publish());
}
fn show_subscription_info(&self) {
let sub = SubscriptionInfoDialog::new(self.selected_subscription().unwrap());