fix auth indicator update on identity apply

This commit is contained in:
yggverse 2025-01-28 15:49:35 +02:00
parent 4203b91e84
commit 6501738737
3 changed files with 19 additions and 14 deletions

View file

@ -91,15 +91,21 @@ impl Item {
}); });
action.ident.connect_activate({ action.ident.connect_activate({
let client = client.clone();
let page = page.clone(); let page = page.clone();
let parent = tab_view.clone().upcast::<gtk::Widget>(); let parent = tab_view.clone().upcast::<gtk::Widget>();
let profile = profile.clone(); let profile = profile.clone();
let window_action = window_action.clone();
move || { move || {
if let Some(uri) = page.navigation.uri() { if let Some(request) = page.navigation.uri() {
let scheme = uri.scheme(); if ["gemini", "titan"].contains(&request.scheme().as_str()) {
if scheme == "gemini" || scheme == "titan" { return identity::default(&profile, &request, {
return identity::default(&window_action, &profile, &uri) let client = client.clone();
let page = page.clone();
move || {
page.navigation.update(); // update indicators immediately
client.handle(&page.navigation.request(), false);
} // on apply
})
.present(Some(&parent)); .present(Some(&parent));
} }
} }

View file

@ -4,13 +4,13 @@ mod unsupported;
use default::Default; use default::Default;
use unsupported::Unsupported; use unsupported::Unsupported;
use super::{Profile, WindowAction}; use super::Profile;
use gtk::glib::Uri; use gtk::glib::Uri;
use std::rc::Rc; use std::rc::Rc;
/// Create new identity widget for Gemini protocol match given URI /// Create new identity widget for Gemini protocol match given URI
pub fn default(window_action: &Rc<WindowAction>, profile: &Rc<Profile>, request: &Uri) -> Default { pub fn default(profile: &Rc<Profile>, request: &Uri, on_apply: impl Fn() + 'static) -> Default {
Default::build(window_action, profile, request) Default::build(profile, request, on_apply)
} }
/// Create new identity widget for unknown request /// Create new identity widget for unknown request

View file

@ -1,7 +1,7 @@
mod widget; mod widget;
use widget::{form::list::item::value::Value, Widget}; use widget::{form::list::item::value::Value, Widget};
use super::{Profile, WindowAction}; use super::Profile;
use gtk::{glib::Uri, prelude::IsA}; use gtk::{glib::Uri, prelude::IsA};
use std::rc::Rc; use std::rc::Rc;
@ -14,7 +14,7 @@ impl Default {
// Construct // Construct
/// Create new `Self` for given `Profile` /// Create new `Self` for given `Profile`
pub fn build(window_action: &Rc<WindowAction>, profile: &Rc<Profile>, request: &Uri) -> Self { pub fn build(profile: &Rc<Profile>, request: &Uri, on_apply: impl Fn() + 'static) -> Self {
// Init widget // Init widget
let widget = Rc::new(Widget::build(profile, request)); let widget = Rc::new(Widget::build(profile, request));
@ -23,7 +23,6 @@ impl Default {
let profile = profile.clone(); let profile = profile.clone();
let request = request.clone(); let request = request.clone();
let widget = widget.clone(); let widget = widget.clone();
let window_action = window_action.clone();
move |response| { move |response| {
// Get option match user choice // Get option match user choice
let option = match response { let option = match response {
@ -64,8 +63,8 @@ impl Default {
} }
} }
// Apply changes // Run callback function
window_action.reload.activate(); on_apply()
} }
}); });