mirror of
				https://github.com/johrpan/musicus.git
				synced 2025-10-26 19:57:25 +01:00 
			
		
		
		
	Simplify new navigator window
This commit is contained in:
		
							parent
							
								
									23d260687c
								
							
						
					
					
						commit
						59ea1b9d95
					
				
					 3 changed files with 33 additions and 11 deletions
				
			
		|  | @ -59,10 +59,8 @@ impl Preferences { | ||||||
|                         if let Some(path) = file.get_path() { |                         if let Some(path) = file.get_path() { | ||||||
|                             this.music_library_path_row.set_subtitle(Some(path.to_str().unwrap())); |                             this.music_library_path_row.set_subtitle(Some(path.to_str().unwrap())); | ||||||
| 
 | 
 | ||||||
|                             let context = glib::MainContext::default(); |                             spawn!(@clone this, async move { | ||||||
|                             let backend = this.backend.clone(); |                                 this.backend.set_music_library_path(path).await.unwrap(); | ||||||
|                             context.spawn_local(async move { |  | ||||||
|                                 backend.set_music_library_path(path).await.unwrap(); |  | ||||||
|                             }); |                             }); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  | @ -87,13 +85,10 @@ impl Preferences { | ||||||
|         login_button.connect_clicked(clone!(@strong this => move |_| { |         login_button.connect_clicked(clone!(@strong this => move |_| { | ||||||
|             let window = NavigatorWindow::new(this.backend.clone()); |             let window = NavigatorWindow::new(this.backend.clone()); | ||||||
|             window.set_transient_for(&this.window); |             window.set_transient_for(&this.window); | ||||||
|             window.show(); |  | ||||||
| 
 | 
 | ||||||
|             let context = glib::MainContext::default(); |             spawn!(@clone this, async move { | ||||||
|             let clone = this.clone(); |                 if let Some(data) = replace!(window.navigator, LoginDialog).await { | ||||||
|             context.spawn_local(async move { |                     this.login_row.set_subtitle(Some(&data.username)); | ||||||
|                 if let Some(data) = window.navigator.replace::<_, _, LoginDialog>(()).await { |  | ||||||
|                     clone.login_row.set_subtitle(Some(&data.username)); |  | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|         })); |         })); | ||||||
|  |  | ||||||
|  | @ -23,6 +23,31 @@ macro_rules! push { | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /// Simplification for replacing the current navigator screen.
 | ||||||
|  | ///
 | ||||||
|  | /// This macro can be invoked in two forms.
 | ||||||
|  | ///
 | ||||||
|  | /// 1. To replace with screens without an input value:
 | ||||||
|  | ///
 | ||||||
|  | /// ```
 | ||||||
|  | /// let result = replace!(navigator, ScreenType).await;
 | ||||||
|  | /// ```
 | ||||||
|  | ///
 | ||||||
|  | /// 2. To replace with screens with an input value:
 | ||||||
|  | ///
 | ||||||
|  | /// ```
 | ||||||
|  | /// let result = replace!(navigator, ScreenType, input).await;
 | ||||||
|  | /// ```
 | ||||||
|  | #[macro_export] | ||||||
|  | macro_rules! replace { | ||||||
|  |     ($navigator:expr, $screen:ty) => { | ||||||
|  |         $navigator.replace::<_, _, $screen>(()) | ||||||
|  |     }; | ||||||
|  |     ($navigator:expr, $screen:ty, $input:ident) => { | ||||||
|  |         $navigator.replace::<_, _, $screen>($input) | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// Spawn a future on the GLib MainContext.
 | /// Spawn a future on the GLib MainContext.
 | ||||||
| ///
 | ///
 | ||||||
| /// This can be invoked in the following forms:
 | /// This can be invoked in the following forms:
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ pub struct NavigatorWindow { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl NavigatorWindow { | impl NavigatorWindow { | ||||||
|     /// Create a new navigator window.
 |     /// Create a new navigator window and show it.
 | ||||||
|     pub fn new(backend: Rc<Backend>) -> Rc<Self> { |     pub fn new(backend: Rc<Backend>) -> Rc<Self> { | ||||||
|         let window = libadwaita::Window::new(); |         let window = libadwaita::Window::new(); | ||||||
|         window.set_default_size(600, 424); |         window.set_default_size(600, 424); | ||||||
|  | @ -25,6 +25,8 @@ impl NavigatorWindow { | ||||||
|             this.window.close(); |             this.window.close(); | ||||||
|         })); |         })); | ||||||
| 
 | 
 | ||||||
|  |         this.window.show(); | ||||||
|  | 
 | ||||||
|         this |         this | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Elias Projahn
						Elias Projahn