From 5ea5d2f6f151b5964be4fbdde1b53a83dfdc0cf9 Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval R Date: Fri, 16 Oct 2020 00:18:06 +0200 Subject: [PATCH 1/4] search: Add spinner when loading Fixes !448 --- data/gtk/search.ui | 21 ++++++++++++++++++++- src/discover/pages/search.rs | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/data/gtk/search.ui b/data/gtk/search.ui index e19aaf52..19b6b2df 100644 --- a/data/gtk/search.ui +++ b/data/gtk/search.ui @@ -64,8 +64,27 @@ False vertical - + + True + vertical + 80 + + + True + 20 + 20 + True + False + center + center + True + + + + + + > diff --git a/src/discover/pages/search.rs b/src/discover/pages/search.rs index 3f593080..4a8dcb87 100644 --- a/src/discover/pages/search.rs +++ b/src/discover/pages/search.rs @@ -72,11 +72,14 @@ impl Search { glib::source::source_remove(id) } + get_widget!(&self.builder, gtk::Box, spinner); + spinner.set_visible(true); // Start new timeout let id = self.timeout_id.clone(); let client = self.client.clone(); let flowbox = self.flowbox.clone(); let sender = self.sender.clone(); + let spinner = spinner.clone(); let id = glib::source::timeout_add_seconds_local(1, move || { *id.borrow_mut() = None; @@ -86,8 +89,10 @@ impl Search { let flowbox = flowbox.clone(); let request = request.clone(); let sender = sender.clone(); + let spinner = spinner.clone(); let fut = client.send_station_request(request).map(move |stations| match stations { Ok(s) => { + spinner.set_visible(false); flowbox.clear(); flowbox.add_stations(s); } -- GitLab From 827635cf8102db665283bf7e96c1dcf5b96ffabd Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval R Date: Fri, 16 Oct 2020 00:41:10 +0200 Subject: [PATCH 2/4] HACK: Center the wheel Also increase its size to be comparable with the stations --- data/gtk/search.ui | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/gtk/search.ui b/data/gtk/search.ui index 19b6b2df..5a0bce49 100644 --- a/data/gtk/search.ui +++ b/data/gtk/search.ui @@ -65,14 +65,14 @@ vertical - True vertical - 80 + 60 + 15 True - 20 - 20 + 40 + 40 True False center -- GitLab From fa032a85395751dc8f05c30e5e09ba2c6873aa8c Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval R Date: Sat, 17 Oct 2020 00:40:13 +0200 Subject: [PATCH 3/4] Use GtkStack instead --- data/gtk/search.ui | 60 +++++++++++++++++------------------- src/discover/pages/search.rs | 14 ++++++--- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/data/gtk/search.ui b/data/gtk/search.ui index 5a0bce49..16ecbc9a 100644 --- a/data/gtk/search.ui +++ b/data/gtk/search.ui @@ -43,60 +43,58 @@ - + True - True - never + True + crossfade - + + 40 + 40 True False - none + True + + + spinner + + + + + True + True + never - + True False - 1600 - 12 + none - + True False - vertical + 1600 + 12 - + + True + False vertical - 60 - 15 - - True - 40 - 40 - True - False - center - center - True - + - - - > + + scrolledwindow + - - True - True - 1 - diff --git a/src/discover/pages/search.rs b/src/discover/pages/search.rs index 4a8dcb87..f6b144d5 100644 --- a/src/discover/pages/search.rs +++ b/src/discover/pages/search.rs @@ -47,6 +47,8 @@ impl Search { let client = Client::new(Url::parse(&settings_manager::get_string(Key::ApiServer)).unwrap()); get_widget!(builder, gtk::Box, results_box); + get_widget!(builder, gtk::Stack, stack); + stack.set_visible_child_name("scrolledwindow"); let flowbox = Rc::new(StationFlowBox::new(sender.clone())); results_box.add(&flowbox.widget); @@ -66,20 +68,21 @@ impl Search { } pub fn search_for(&self, request: StationRequest) { + get_widget!(&self.builder, gtk::Stack, stack); + stack.set_visible_child_name("spinner"); + // Reset previous timeout let id: Option = self.timeout_id.borrow_mut().take(); if let Some(id) = id { glib::source::source_remove(id) } - get_widget!(&self.builder, gtk::Box, spinner); - spinner.set_visible(true); // Start new timeout let id = self.timeout_id.clone(); let client = self.client.clone(); let flowbox = self.flowbox.clone(); let sender = self.sender.clone(); - let spinner = spinner.clone(); + let stack = stack.clone(); let id = glib::source::timeout_add_seconds_local(1, move || { *id.borrow_mut() = None; @@ -89,10 +92,11 @@ impl Search { let flowbox = flowbox.clone(); let request = request.clone(); let sender = sender.clone(); - let spinner = spinner.clone(); + let stack = stack.clone(); + let fut = client.send_station_request(request).map(move |stations| match stations { Ok(s) => { - spinner.set_visible(false); + stack.set_visible_child_name("scrolledwindow"); flowbox.clear(); flowbox.add_stations(s); } -- GitLab From fec650ff5a3cc6c3d5f6080a83c31b1d928a9707 Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval R Date: Sat, 17 Oct 2020 02:51:14 +0200 Subject: [PATCH 4/4] Remove unneeded properties --- data/gtk/search.ui | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data/gtk/search.ui b/data/gtk/search.ui index 16ecbc9a..a2132e7c 100644 --- a/data/gtk/search.ui +++ b/data/gtk/search.ui @@ -45,14 +45,13 @@ True - True + True crossfade 40 40 True - False True -- GitLab