From e0e21b4926bf6f76e88d4aaf499ca2e8167cacec Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 18 Mar 2025 17:31:34 +0200 Subject: [PATCH] remove extra event listener loop --- .../window/tab/item/page/input/response.rs | 23 +++++++++---------- .../tab/item/page/input/response/form.rs | 11 +++------ 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/app/browser/window/tab/item/page/input/response.rs b/src/app/browser/window/tab/item/page/input/response.rs index 07d3168b..da154ae6 100644 --- a/src/app/browser/window/tab/item/page/input/response.rs +++ b/src/app/browser/window/tab/item/page/input/response.rs @@ -11,7 +11,7 @@ use gtk::{ Box, Label, Orientation, TextView, gio::SimpleAction, glib::{Uri, UriHideFlags, uuid_string_random}, - prelude::{ActionExt, BoxExt, DisplayExt, WidgetExt}, + prelude::{ActionExt, BoxExt, DisplayExt, TextBufferExt, TextViewExt, WidgetExt}, }; use std::rc::Rc; @@ -38,12 +38,11 @@ impl Response for Box { size_limit: Option, ) -> Self { // Init local actions - let action_update = SimpleAction::new(&uuid_string_random(), None); let action_send = SimpleAction::new(&uuid_string_random(), None); // Init components let control = Rc::new(Control::build(action_send.clone())); - let form = TextView::form(action_update.clone()); + let text_view = TextView::form(); let title = Label::title(title); // Init main widget @@ -57,21 +56,21 @@ impl Response for Box { .build(); g_box.append(&title); - g_box.append(&form); + g_box.append(&text_view); g_box.append(&control.g_box); // Init events - action_update.connect_activate({ + text_view.buffer().connect_changed({ let base = base.clone(); let control = control.clone(); - let form = form.clone(); - move |_, _| { + let text_view = text_view.clone(); + move |_| { control.update( - form.text().is_empty(), + text_view.text().is_empty(), size_limit.map(|limit| { limit as isize - ((base.to_string_partial(UriHideFlags::QUERY).len() - + Uri::escape_string(&form.text(), None, false).len()) + + Uri::escape_string(&text_view.text(), None, false).len()) as isize) }), ) @@ -79,20 +78,20 @@ impl Response for Box { }); action_send.connect_activate({ - let form = form.clone(); + let text_view = text_view.clone(); move |_, _| { item_action.load.activate( Some(&format!( "{}?{}", base.to_string_partial(UriHideFlags::QUERY), - Uri::escape_string(&form.text(), None, false), + Uri::escape_string(&text_view.text(), None, false), )), false, ) } }); - form.add_controller({ + text_view.add_controller({ const SHORTCUT: &str = "Return"; // @TODO optional /*control diff --git a/src/app/browser/window/tab/item/page/input/response/form.rs b/src/app/browser/window/tab/item/page/input/response/form.rs index 1a0e1c0e..378174f9 100644 --- a/src/app/browser/window/tab/item/page/input/response/form.rs +++ b/src/app/browser/window/tab/item/page/input/response/form.rs @@ -1,8 +1,7 @@ use gtk::{ TextView, WrapMode, - gio::SimpleAction, glib::GString, - prelude::{ActionExt, TextBufferExt, TextViewExt, WidgetExt}, + prelude::{TextBufferExt, TextViewExt, WidgetExt}, }; use libspelling::{Checker, TextBufferAdapter}; use sourceview::Buffer; @@ -10,7 +9,7 @@ use sourceview::Buffer; const MARGIN: i32 = 8; pub trait Form { - fn form(action_update: SimpleAction) -> Self; + fn form() -> Self; fn text(&self) -> GString; } @@ -18,7 +17,7 @@ impl Form for TextView { // Constructors /// Build new `Self` - fn form(action_update: SimpleAction) -> Self { + fn form() -> Self { // Init [SourceView](https://gitlab.gnome.org/GNOME/gtksourceview) type buffer let buffer = Buffer::builder().build(); @@ -44,10 +43,6 @@ impl Form for TextView { text_view.set_size_request(-1, 38); // @TODO [#635](https://gitlab.gnome.org/GNOME/pygobject/-/issues/635) // Init events - text_view.buffer().connect_changed(move |_| { - action_update.activate(None); - }); - text_view.connect_realize(|this| { this.grab_focus(); });